X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=test%2Ftest_speed.c;h=0d440ffafa52155e43b779878297d5adf5861af9;hp=e9672faab18867ac38dd8eadb9a65cb05dd5ec40;hb=2f454aad577ae53798935cc32438a2d3f02ba31f;hpb=49811736600a747ab4d69a2f8a85bab88686975e;ds=inline diff --git a/test/test_speed.c b/test/test_speed.c index e9672fa..0d440ff 100644 --- a/test/test_speed.c +++ b/test/test_speed.c @@ -347,6 +347,19 @@ 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, @@ -557,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) { @@ -572,7 +592,7 @@ test_speed_rsa_i32(void) } static void -test_speed_ec_inner(const char *name, +test_speed_ec_inner_1(const char *name, const br_ec_impl *impl, const br_ec_curve_def *cd) { unsigned char bx[80], U[160]; @@ -613,12 +633,119 @@ test_speed_ec_inner(const char *name, } } +static void +test_speed_ec_inner_2(const char *name, + const br_ec_impl *impl, const br_ec_curve_def *cd) +{ + unsigned char bx[80], U[160]; + uint32_t x[22], n[22]; + size_t nlen; + int i; + long num; + + nlen = cd->order_len; + br_i31_decode(n, cd->order, nlen); + memset(bx, 'T', sizeof bx); + br_i31_decode_reduce(x, bx, sizeof bx, n); + br_i31_encode(bx, nlen, x); + for (i = 0; i < 10; i ++) { + impl->mulgen(U, bx, nlen, cd->curve); + } + num = 10; + for (;;) { + clock_t begin, end; + double tt; + long k; + + begin = clock(); + for (k = num; k > 0; k --) { + impl->mulgen(U, bx, nlen, cd->curve); + } + end = clock(); + tt = (double)(end - begin) / CLOCKS_PER_SEC; + if (tt >= 2.0) { + printf("%-30s %8.2f mul/s\n", name, + (double)num / tt); + fflush(stdout); + break; + } + num <<= 1; + } +} + +static void +test_speed_ec_inner(const char *name, + const br_ec_impl *impl, const br_ec_curve_def *cd) +{ + char tmp[50]; + + test_speed_ec_inner_1(name, impl, cd); + sprintf(tmp, "%s (FP)", name); + test_speed_ec_inner_2(tmp, impl, cd); +} + +static void +test_speed_ec_p256_m15(void) +{ + test_speed_ec_inner("EC p256_m15", + &br_ec_p256_m15, &br_secp256r1); +} + +static void +test_speed_ec_p256_m31(void) +{ + test_speed_ec_inner("EC p256_m31", + &br_ec_p256_m31, &br_secp256r1); +} + +static void +test_speed_ec_prime_i15(void) +{ + test_speed_ec_inner("EC prime_i15 P-256", + &br_ec_prime_i15, &br_secp256r1); + test_speed_ec_inner("EC prime_i15 P-384", + &br_ec_prime_i15, &br_secp384r1); + test_speed_ec_inner("EC prime_i15 P-521", + &br_ec_prime_i15, &br_secp521r1); +} + static void test_speed_ec_prime_i31(void) { - test_speed_ec_inner("EC i31 P-256", &br_ec_prime_i31, &br_secp256r1); - test_speed_ec_inner("EC i31 P-384", &br_ec_prime_i31, &br_secp384r1); - test_speed_ec_inner("EC i31 P-521", &br_ec_prime_i31, &br_secp521r1); + test_speed_ec_inner("EC prime_i31 P-256", + &br_ec_prime_i31, &br_secp256r1); + test_speed_ec_inner("EC prime_i31 P-384", + &br_ec_prime_i31, &br_secp384r1); + test_speed_ec_inner("EC prime_i31 P-521", + &br_ec_prime_i31, &br_secp521r1); +} + +static void +test_speed_ec_c25519_i15(void) +{ + test_speed_ec_inner("EC c25519_i15", + &br_ec_c25519_i15, &br_curve25519); +} + +static void +test_speed_ec_c25519_i31(void) +{ + test_speed_ec_inner("EC c25519_i31", + &br_ec_c25519_i31, &br_curve25519); +} + +static void +test_speed_ec_c25519_m15(void) +{ + test_speed_ec_inner("EC c25519_m15", + &br_ec_c25519_m15, &br_curve25519); +} + +static void +test_speed_ec_c25519_m31(void) +{ + test_speed_ec_inner("EC c25519_m31", + &br_ec_c25519_m31, &br_curve25519); } static void @@ -706,6 +833,41 @@ test_speed_ecdsa_inner(const char *name, } } +static void +test_speed_ecdsa_p256_m15(void) +{ + test_speed_ecdsa_inner("ECDSA m15 P-256", + &br_ec_p256_m15, &br_secp256r1, + &br_ecdsa_i15_sign_asn1, + &br_ecdsa_i15_vrfy_asn1); +} + +static void +test_speed_ecdsa_p256_m31(void) +{ + test_speed_ecdsa_inner("ECDSA m31 P-256", + &br_ec_p256_m31, &br_secp256r1, + &br_ecdsa_i31_sign_asn1, + &br_ecdsa_i31_vrfy_asn1); +} + +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) { @@ -723,120 +885,6 @@ test_speed_ecdsa_i31(void) &br_ecdsa_i31_vrfy_asn1); } -#if 0 -/* obsolete */ -static void -test_speed_ec_prime_i31_inner(const char *name, - const unsigned char *bg, const br_ec_prime_i31_curve *cc) -{ - unsigned char bx[80], point[160]; - uint32_t x[BR_EC_I31_LEN]; - br_ec_prime_i31_jacobian P; - uint32_t xbl; - size_t plen; - int i; - long num; - - xbl = cc->p[0]; - xbl -= (xbl >> 5); - plen = (xbl + 7) >> 3; - memset(bx, 'T', sizeof bx); - br_i31_decode_reduce(x, bx, sizeof bx, cc->p); - br_i31_encode(bx, plen, x); - br_ec_prime_i31_decode(&P, bg, 1 + (plen << 1), cc); - for (i = 0; i < 10; i ++) { - br_ec_prime_i31_mul(&P, bx, plen, cc); - br_ec_prime_i31_encode(point, &P, cc); - } - num = 10; - for (;;) { - clock_t begin, end; - double tt; - long k; - - begin = clock(); - for (k = num; k > 0; k --) { - br_ec_prime_i31_mul(&P, bx, plen, cc); - br_ec_prime_i31_encode(point, &P, cc); - } - end = clock(); - tt = (double)(end - begin) / CLOCKS_PER_SEC; - if (tt >= 2.0) { - printf("%-30s %8.2f mul/s\n", name, - (double)num / tt); - fflush(stdout); - break; - } - num <<= 1; - } -} - -static void -test_speed_ec_prime_i31(void) -{ - test_speed_ec_prime_i31_inner("EC i31 P-256", - br_g_secp256r1, &br_ec_prime_i31_secp256r1); - test_speed_ec_prime_i31_inner("EC i31 P-384", - br_g_secp384r1, &br_ec_prime_i31_secp384r1); - test_speed_ec_prime_i31_inner("EC i31 P-521", - br_g_secp521r1, &br_ec_prime_i31_secp521r1); -} - -static void -test_speed_ec_prime_i32_inner(const char *name, - const unsigned char *bg, const br_ec_prime_i32_curve *cc) -{ - unsigned char bx[80], point[160]; - uint32_t x[BR_EC_I32_LEN]; - br_ec_prime_i32_jacobian P; - size_t plen; - int i; - long num; - - plen = (cc->p[0] + 7) >> 3; - memset(bx, 'T', sizeof bx); - br_i32_decode_reduce(x, bx, sizeof bx, cc->p); - br_i32_encode(bx, plen, x); - br_ec_prime_i32_decode(&P, bg, 1 + (plen << 1), cc); - for (i = 0; i < 10; i ++) { - br_ec_prime_i32_mul(&P, bx, plen, cc); - br_ec_prime_i32_encode(point, &P, cc); - } - num = 10; - for (;;) { - clock_t begin, end; - double tt; - long k; - - begin = clock(); - for (k = num; k > 0; k --) { - br_ec_prime_i32_mul(&P, bx, plen, cc); - br_ec_prime_i32_encode(point, &P, cc); - } - end = clock(); - tt = (double)(end - begin) / CLOCKS_PER_SEC; - if (tt >= 2.0) { - printf("%-30s %8.2f mul/s\n", name, - (double)num / tt); - fflush(stdout); - break; - } - num <<= 1; - } -} - -static void -test_speed_ec_prime_i32(void) -{ - test_speed_ec_prime_i32_inner("EC i32 P-256", - br_g_secp256r1, &br_ec_prime_i32_secp256r1); - test_speed_ec_prime_i32_inner("EC i32 P-384", - br_g_secp384r1, &br_ec_prime_i32_secp384r1); - test_speed_ec_prime_i32_inner("EC i32 P-521", - br_g_secp521r1, &br_ec_prime_i32_secp521r1); -} -#endif - static void test_speed_i31(void) { @@ -1127,10 +1175,23 @@ static const struct { STU(ghash_ctmul64), STU(poly1305_ctmul), + STU(poly1305_ctmul32), + STU(poly1305_i15), + STU(rsa_i15), STU(rsa_i31), STU(rsa_i32), + STU(ec_prime_i15), STU(ec_prime_i31), + STU(ec_p256_m15), + STU(ec_p256_m31), + STU(ec_c25519_i15), + STU(ec_c25519_i31), + STU(ec_c25519_m15), + STU(ec_c25519_m31), + STU(ecdsa_p256_m15), + STU(ecdsa_p256_m31), + STU(ecdsa_i15), STU(ecdsa_i31), STU(i31)