X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=test%2Ftest_speed.c;h=a82eec7143bfd5d081710c1b3fbe53d970284c30;hp=4304cd7cffe886f280ba996d6556327164a01ae2;hb=7fc1ef315f807170f63b0ad8255cf77314b50ca5;hpb=b42bd5972f935ffc32019acac6f8a07ae08ae9c2 diff --git a/test/test_speed.c b/test/test_speed.c index 4304cd7..a82eec7 100644 --- a/test/test_speed.c +++ b/test/test_speed.c @@ -287,6 +287,79 @@ test_speed_ghash_ctmul64(void) test_speed_ghash_inner("GHASH (ctmul64)", &br_ghash_ctmul64); } +static uint32_t +fake_chacha20(const void *key, const void *iv, + uint32_t cc, void *data, size_t len) +{ + (void)key; + (void)iv; + (void)data; + (void)len; + return cc + (uint32_t)((len + 63) >> 6); +} + +/* + * To speed-test Poly1305, we run it with a do-nothing stub instead of + * ChaCha20. + */ +static void +test_speed_poly1305_inner(char *name, br_poly1305_run pl) +{ + unsigned char buf[8192], key[32], iv[12], aad[13], tag[16]; + int i; + long num; + + memset(key, 'K', sizeof key); + memset(iv, 'I', sizeof iv); + memset(aad, 'A', sizeof aad); + memset(buf, 'T', sizeof buf); + for (i = 0; i < 10; i ++) { + pl(key, iv, buf, sizeof buf, + aad, sizeof aad, tag, &fake_chacha20, 0); + } + num = 10; + for (;;) { + clock_t begin, end; + double tt; + long k; + + begin = clock(); + for (k = num; k > 0; k --) { + pl(key, iv, buf, sizeof buf, + aad, sizeof aad, tag, &fake_chacha20, 0); + } + end = clock(); + tt = (double)(end - begin) / CLOCKS_PER_SEC; + if (tt >= 2.0) { + printf("%-30s %8.2f MB/s\n", name, + ((double)sizeof buf) * (double)num + / (tt * 1000000.0)); + fflush(stdout); + return; + } + num <<= 1; + } +} + +static void +test_speed_poly1305_ctmul(void) +{ + test_speed_poly1305_inner("Poly1305 (ctmul)", &br_poly1305_ctmul_run); +} + +static void +test_speed_poly1305_ctmul32(void) +{ + test_speed_poly1305_inner("Poly1305 (ctmul32)", + &br_poly1305_ctmul32_run); +} + +static void +test_speed_poly1305_i15(void) +{ + test_speed_poly1305_inner("Poly1305 (i15)", &br_poly1305_i15_run); +} + static const unsigned char RSA_N[] = { 0xE9, 0xF2, 0x4A, 0x2F, 0x96, 0xDF, 0x0A, 0x23, 0x01, 0x85, 0xF1, 0x2C, 0xB2, 0xA8, 0xEF, 0x23, @@ -497,6 +570,13 @@ test_speed_rsa_inner(char *name, } } +static void +test_speed_rsa_i15(void) +{ + test_speed_rsa_inner("RSA i15", + &br_rsa_i15_public, &br_rsa_i15_private); +} + static void test_speed_rsa_i31(void) { @@ -553,6 +633,21 @@ test_speed_ec_inner(const char *name, } } +static void +test_speed_ec_p256_i15(void) +{ + test_speed_ec_inner("EC i15/spec P-256", + &br_ec_p256_i15, &br_secp256r1); +} + +static void +test_speed_ec_prime_i15(void) +{ + test_speed_ec_inner("EC i15 P-256", &br_ec_prime_i15, &br_secp256r1); + test_speed_ec_inner("EC i15 P-384", &br_ec_prime_i15, &br_secp384r1); + test_speed_ec_inner("EC i15 P-521", &br_ec_prime_i15, &br_secp521r1); +} + static void test_speed_ec_prime_i31(void) { @@ -646,6 +741,23 @@ test_speed_ecdsa_inner(const char *name, } } +static void +test_speed_ecdsa_i15(void) +{ + test_speed_ecdsa_inner("ECDSA i15 P-256", + &br_ec_prime_i15, &br_secp256r1, + &br_ecdsa_i15_sign_asn1, + &br_ecdsa_i15_vrfy_asn1); + test_speed_ecdsa_inner("ECDSA i15 P-384", + &br_ec_prime_i15, &br_secp384r1, + &br_ecdsa_i15_sign_asn1, + &br_ecdsa_i15_vrfy_asn1); + test_speed_ecdsa_inner("ECDSA i15 P-521", + &br_ec_prime_i15, &br_secp521r1, + &br_ecdsa_i15_sign_asn1, + &br_ecdsa_i15_vrfy_asn1); +} + static void test_speed_ecdsa_i31(void) { @@ -1066,9 +1178,17 @@ static const struct { STU(ghash_ctmul32), STU(ghash_ctmul64), + STU(poly1305_ctmul), + STU(poly1305_ctmul32), + STU(poly1305_i15), + + STU(rsa_i15), STU(rsa_i31), STU(rsa_i32), + STU(ec_p256_i15), + STU(ec_prime_i15), STU(ec_prime_i31), + STU(ecdsa_i15), STU(ecdsa_i31), STU(i31)