X-Git-Url: https://bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=test%2Ftest_speed.c;h=f7c7b0bbbb50b04b5a430ddad799ea4a9bdc72d6;hp=43d062a1984e3c205f4c7e71c2cdbcb626bbc2bc;hb=966078b3373a273f8417ede42ecab32a414dc109;hpb=491a45337de8dc0a4c100abf33f5c0e187a08afd diff --git a/test/test_speed.c b/test/test_speed.c index 43d062a..f7c7b0b 100644 --- a/test/test_speed.c +++ b/test/test_speed.c @@ -518,16 +518,96 @@ SPEED_EAX(AES, aes, 128, small) SPEED_EAX(AES, aes, 128, ct) SPEED_EAX(AES, aes, 128, ct64) SPEED_EAX(AES, aes, 128, x86ni) +SPEED_EAX(AES, aes, 128, pwr8) SPEED_EAX(AES, aes, 192, big) SPEED_EAX(AES, aes, 192, small) SPEED_EAX(AES, aes, 192, ct) SPEED_EAX(AES, aes, 192, ct64) SPEED_EAX(AES, aes, 192, x86ni) +SPEED_EAX(AES, aes, 192, pwr8) SPEED_EAX(AES, aes, 256, big) SPEED_EAX(AES, aes, 256, small) SPEED_EAX(AES, aes, 256, ct) SPEED_EAX(AES, aes, 256, ct64) SPEED_EAX(AES, aes, 256, x86ni) +SPEED_EAX(AES, aes, 256, pwr8) + +static void +test_speed_shake_inner(int security_level) +{ + unsigned char buf[8192]; + br_shake_context sc; + int i; + long num; + + memset(buf, 'D', sizeof buf); + br_shake_init(&sc, security_level); + for (i = 0; i < 10; i ++) { + br_shake_inject(&sc, buf, sizeof buf); + } + num = 10; + for (;;) { + clock_t begin, end; + double tt; + long k; + + begin = clock(); + for (k = num; k > 0; k --) { + br_shake_inject(&sc, buf, sizeof buf); + } + end = clock(); + tt = (double)(end - begin) / CLOCKS_PER_SEC; + if (tt >= 2.0) { + printf("SHAKE%-3d (inject) %8.2f MB/s\n", + security_level, + ((double)sizeof buf) * (double)num + / (tt * 1000000.0)); + fflush(stdout); + break; + } + num <<= 1; + } + + br_shake_flip(&sc); + for (i = 0; i < 10; i ++) { + br_shake_produce(&sc, buf, sizeof buf); + } + + num = 10; + for (;;) { + clock_t begin, end; + double tt; + long k; + + begin = clock(); + for (k = num; k > 0; k --) { + br_shake_produce(&sc, buf, sizeof buf); + } + end = clock(); + tt = (double)(end - begin) / CLOCKS_PER_SEC; + if (tt >= 2.0) { + printf("SHAKE%-3d (produce) %8.2f MB/s\n", + security_level, + ((double)sizeof buf) * (double)num + / (tt * 1000000.0)); + fflush(stdout); + break; + } + num <<= 1; + } +} + +static void +test_speed_shake128(void) +{ + test_speed_shake_inner(128); +} + +static void +test_speed_shake256(void) +{ + test_speed_shake_inner(256); +} static const unsigned char RSA_N[] = { 0xE9, 0xF2, 0x4A, 0x2F, 0x96, 0xDF, 0x0A, 0x23, @@ -684,7 +764,11 @@ test_speed_rsa_inner(char *name, unsigned char tmp[sizeof RSA_N]; int i; long num; + /* br_hmac_drbg_context rng; + */ + br_aesctr_drbg_context rng; + const br_block_ctr_class *ictr; memset(tmp, 'R', sizeof tmp); tmp[0] = 0; @@ -744,7 +828,21 @@ test_speed_rsa_inner(char *name, fflush(stdout); return; } + /* br_hmac_drbg_init(&rng, &br_sha256_vtable, "RSA keygen seed", 15); + */ + ictr = br_aes_x86ni_ctr_get_vtable(); + if (ictr == NULL) { + ictr = br_aes_pwr8_ctr_get_vtable(); + if (ictr == NULL) { +#if BR_64 + ictr = &br_aes_ct64_ctr_vtable; +#else + ictr = &br_aes_ct_ctr_vtable; +#endif + } + } + br_aesctr_drbg_init(&rng, ictr, "RSA keygen seed", 15); num = 10; for (;;) { @@ -1138,7 +1236,7 @@ test_speed_i31(void) }; unsigned char tmp[60 + sizeof bp]; - uint32_t p[10], x[10], y[10], z[10], p0i; + uint32_t p[10], x[10], y[10], z[10], uu[30], p0i; int i; long num; @@ -1220,6 +1318,30 @@ test_speed_i31(void) } num <<= 1; } + + for (i = 0; i < 10; i ++) { + br_i31_moddiv(x, y, p, p0i, uu); + } + num = 10; + for (;;) { + clock_t begin, end; + double tt; + long k; + + begin = clock(); + for (k = num; k > 0; k --) { + br_i31_moddiv(x, y, p, p0i, uu); + } + end = clock(); + tt = (double)(end - begin) / CLOCKS_PER_SEC; + if (tt >= 2.0) { + printf("%-30s %8.2f ops/s\n", "i31 moddiv", + (double)num / tt); + fflush(stdout); + break; + } + num <<= 1; + } } #if 0 @@ -1459,6 +1581,12 @@ static const struct { STU(eax_aes128_x86ni), STU(eax_aes192_x86ni), STU(eax_aes256_x86ni), + STU(eax_aes128_pwr8), + STU(eax_aes192_pwr8), + STU(eax_aes256_pwr8), + + STU(shake128), + STU(shake256), STU(rsa_i15), STU(rsa_i31),