Only use fake rand once per operation. This stops the EC
authorDr. Stephen Henson <steve@openssl.org>
Wed, 6 Apr 2011 23:42:55 +0000 (23:42 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 6 Apr 2011 23:42:55 +0000 (23:42 +0000)
pairwise consistency test interfering with the test.

crypto/ecdsa/ecdsatest.c

index 7590f6f..c5b6ed2 100644 (file)
@@ -137,7 +137,7 @@ int restore_rand(void)
                return 1;
        }
 
-static int fbytes_counter = 0;
+static int fbytes_counter = 0, use_fake = 0;
 static const char *numbers[8] = {
        "651056770906015076056810763456358567190100156695615665659",
        "6140507067065001063065065565667405560006161556565665656654",
@@ -157,6 +157,11 @@ int fbytes(unsigned char *buf, int num)
        int     ret;
        BIGNUM  *tmp = NULL;
 
+       if (use_fake == 0)
+               return old_rand->bytes(buf, num);
+
+       use_fake = 0;
+
        if (fbytes_counter >= 8)
                return 0;
        tmp = BN_new();
@@ -199,11 +204,13 @@ int x9_62_test_internal(BIO *out, int nid, const char *r_in, const char *s_in)
        /* create the key */
        if ((key = EC_KEY_new_by_curve_name(nid)) == NULL)
                goto x962_int_err;
+       use_fake = 1;
        if (!EC_KEY_generate_key(key))
                goto x962_int_err;
        BIO_printf(out, ".");
        (void)BIO_flush(out);
        /* create the signature */
+       use_fake = 1;
        signature = ECDSA_do_sign(digest, 20, key);
        if (signature == NULL)
                goto x962_int_err;