Some cleanups (removed unused files, split i15 code into per-function files).
[BearSSL] / test / test_crypto.c
index ddba9ac..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;
@@ -4935,13 +4942,13 @@ const struct {
 static void
 test_EC_c25519(const char *name, const br_ec_impl *iec)
 {
+       unsigned char bu[32], bk[32], br[32];
        size_t v;
+       int i;
 
        printf("Test %s: ", name);
        fflush(stdout);
        for (v = 0; C25519_KAT[v].scalar; v ++) {
-               unsigned char bu[32], bk[32], br[32];
-
                hextobin(bk, C25519_KAT[v].scalar);
                hextobin(bu, C25519_KAT[v].u_in);
                hextobin(br, C25519_KAT[v].u_out);
@@ -4956,6 +4963,44 @@ test_EC_c25519(const char *name, const br_ec_impl *iec)
                printf(".");
                fflush(stdout);
        }
+       printf(" ");
+       fflush(stdout);
+
+       memset(bu, 0, sizeof bu);
+       bu[0] = 0x09;
+       memcpy(bk, bu, sizeof bu);
+       for (i = 1; i <= 1000; i ++) {
+               if (!iec->mul(bu, sizeof bu, bk, sizeof bk, BR_EC_curve25519)) {
+                       fprintf(stderr, "Curve25519 multiplication failed"
+                               " (iter=%d)\n", i);
+                       exit(EXIT_FAILURE);
+               }
+               for (v = 0; v < sizeof bu; v ++) {
+                       unsigned t;
+
+                       t = bu[v];
+                       bu[v] = bk[v];
+                       bk[v] = t;
+               }
+               if (i == 1 || i == 1000) {
+                       const char *sref;
+
+                       sref = (i == 1)
+                               ? "422C8E7A6227D7BCA1350B3E2BB7279F7897B87BB6854B783C60E80311AE3079"
+                               : "684CF59BA83309552800EF566F2F4D3C1C3887C49360E3875F2EB94D99532C51";
+                       hextobin(br, sref);
+                       if (memcmp(bk, br, sizeof bk) != 0) {
+                               fprintf(stderr,
+                                       "Curve25519 failed KAT (iter=%d)\n", i);
+                               exit(EXIT_FAILURE);
+                       }
+               }
+               if (i % 100 == 0) {
+                       printf(".");
+                       fflush(stdout);
+               }
+       }
+
        printf(" done.\n");
        fflush(stdout);
 }
@@ -4966,6 +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,
@@ -5511,8 +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 }