Added optimised implementation of P-256 that uses 32->64 multiplications (MUL31).
[BearSSL] / test / test_crypto.c
index 46c8fa2..53a5f13 100644 (file)
@@ -4918,6 +4918,13 @@ test_EC_p256_m15(void)
                (uint32_t)1 << BR_EC_secp256r1);
 }
 
+static void
+test_EC_p256_m31(void)
+{
+       test_EC_KAT("EC_p256_m31", &br_ec_p256_m31,
+               (uint32_t)1 << BR_EC_secp256r1);
+}
+
 const struct {
        const char *scalar;
        const char *u_in;
@@ -5004,12 +5011,24 @@ test_EC_c25519_i15(void)
        test_EC_c25519("EC_c25519_i15", &br_ec_c25519_i15);
 }
 
+static void
+test_EC_c25519_i31(void)
+{
+       test_EC_c25519("EC_c25519_i31", &br_ec_c25519_i31);
+}
+
 static void
 test_EC_c25519_m15(void)
 {
        test_EC_c25519("EC_c25519_m15", &br_ec_c25519_m15);
 }
 
+static void
+test_EC_c25519_m31(void)
+{
+       test_EC_c25519("EC_c25519_m31", &br_ec_c25519_m31);
+}
+
 static const unsigned char EC_P256_PUB_POINT[] = {
        0x04, 0x60, 0xFE, 0xD4, 0xBA, 0x25, 0x5A, 0x9D,
        0x31, 0xC9, 0x61, 0xEB, 0x74, 0xC6, 0x35, 0x6D,
@@ -5555,9 +5574,11 @@ static const struct {
        STU(EC_prime_i15),
        STU(EC_prime_i31),
        STU(EC_p256_m15),
-       /* STU(EC_prime_i32), */
+       STU(EC_p256_m31),
        STU(EC_c25519_i15),
+       STU(EC_c25519_i31),
        STU(EC_c25519_m15),
+       STU(EC_c25519_m31),
        STU(ECDSA_i15),
        STU(ECDSA_i31),
        { 0, 0 }