diff options
Diffstat (limited to 'regress/lib')
-rw-r--r-- | regress/lib/libcrypto/bn/general/bntest.c | 819 |
1 files changed, 426 insertions, 393 deletions
diff --git a/regress/lib/libcrypto/bn/general/bntest.c b/regress/lib/libcrypto/bn/general/bntest.c index 89186dd582c..5faa653022a 100644 --- a/regress/lib/libcrypto/bn/general/bntest.c +++ b/regress/lib/libcrypto/bn/general/bntest.c @@ -136,6 +136,17 @@ static unsigned char lst[] = "\xC6\x4F\x43\x04\x2A\xEA\xCA\x6E\x58\x36\x80\x5B\xE8\xC9" "\x9B\x04\x5D\x48\x36\xC2\xFD\x16\xC9\x64\xF0"; +#define PRINT_ERROR printf("Error in %s [%s:%d]\n", __func__, __FILE__, \ + __LINE__) + +#define CHECK_GOTO(a) do { \ + if (!(a)) { \ + PRINT_ERROR; \ + rc = 0; \ + goto err; \ + } \ +} while (0) + static void message(BIO *out, char *m) { @@ -369,32 +380,33 @@ test_add(BIO *bp) BN_init(&b); BN_init(&c); - BN_bntest_rand(&a, 512, 0, 0); + CHECK_GOTO(BN_bntest_rand(&a, 512, 0, 0)); for (i = 0; i < num0; i++) { - BN_bntest_rand(&b, 450 + i, 0, 0); + CHECK_GOTO(BN_bntest_rand(&b, 450 + i, 0, 0)); a.neg = rand_neg(); b.neg = rand_neg(); - BN_add(&c, &a, &b); + CHECK_GOTO(BN_add(&c, &a, &b)); if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " + "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &c); + CHECK_GOTO(BN_print(bp, &c)); BIO_puts(bp, "\n"); } a.neg = !a.neg; b.neg = !b.neg; - BN_add(&c, &c, &b); - BN_add(&c, &c, &a); + CHECK_GOTO(BN_add(&c, &c, &b)); + CHECK_GOTO(BN_add(&c, &c, &a)); if (!BN_is_zero(&c)) { fprintf(stderr, "Add test failed!\n"); rc = 0; break; } } +err: BN_free(&a); BN_free(&b); BN_free(&c); @@ -414,37 +426,38 @@ test_sub(BIO *bp) for (i = 0; i < num0 + num1; i++) { if (i < num1) { - BN_bntest_rand(&a, 512, 0, 0); - BN_copy(&b, &a); + CHECK_GOTO(BN_bntest_rand(&a, 512, 0, 0)); + CHECK_GOTO(BN_copy(&b, &a)); if (BN_set_bit(&a, i) == 0) { rc = 0; break; } - BN_add_word(&b, i); + CHECK_GOTO(BN_add_word(&b, i)); } else { - BN_bntest_rand(&b, 400 + i - num1, 0, 0); + CHECK_GOTO(BN_bntest_rand(&b, 400 + i - num1, 0, 0)); a.neg = rand_neg(); b.neg = rand_neg(); } - BN_sub(&c, &a, &b); + CHECK_GOTO(BN_sub(&c, &a, &b)); if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " - "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &c); + CHECK_GOTO(BN_print(bp, &c)); BIO_puts(bp, "\n"); } - BN_add(&c, &c, &b); - BN_sub(&c, &c, &a); + CHECK_GOTO(BN_add(&c, &c, &b)); + CHECK_GOTO(BN_sub(&c, &c, &a)); if (!BN_is_zero(&c)) { fprintf(stderr, "Subtract test failed!\n"); rc = 0; break; } } +err: BN_free(&a); BN_free(&b); BN_free(&c); @@ -464,8 +477,8 @@ test_div(BIO *bp, BN_CTX *ctx) BN_init(&d); BN_init(&e); - BN_one(&a); - BN_zero(&b); + CHECK_GOTO(BN_one(&a)); + CHECK_GOTO(BN_zero(&b)); if (BN_div(&d, &c, &a, &b, ctx)) { fprintf(stderr, "Division by zero succeeded!\n"); @@ -474,43 +487,44 @@ test_div(BIO *bp, BN_CTX *ctx) for (i = 0; i < num0 + num1; i++) { if (i < num1) { - BN_bntest_rand(&a, 400, 0, 0); - BN_copy(&b, &a); - BN_lshift(&a, &a, i); - BN_add_word(&a, i); + CHECK_GOTO(BN_bntest_rand(&a, 400, 0, 0)); + CHECK_GOTO(BN_copy(&b, &a)); + CHECK_GOTO(BN_lshift(&a, &a, i)); + CHECK_GOTO(BN_add_word(&a, i)); } else - BN_bntest_rand(&b, 50 + 3 * (i - num1), 0, 0); + CHECK_GOTO(BN_bntest_rand(&b, 50 + 3 * (i - num1), 0, 0)); a.neg = rand_neg(); b.neg = rand_neg(); - BN_div(&d, &c, &a, &b, ctx); + CHECK_GOTO(BN_div(&d, &c, &a, &b, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " / "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &d); + CHECK_GOTO(BN_print(bp, &d)); BIO_puts(bp, "\n"); if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " % "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &c); + CHECK_GOTO(BN_print(bp, &c)); BIO_puts(bp, "\n"); } - BN_mul(&e, &d, &b, ctx); - BN_add(&d, &e, &c); - BN_sub(&d, &d, &a); + CHECK_GOTO(BN_mul(&e, &d, &b, ctx)); + CHECK_GOTO(BN_add(&d, &e, &c)); + CHECK_GOTO(BN_sub(&d, &d, &a)); if (!BN_is_zero(&d)) { fprintf(stderr, "Division test failed!\n"); rc = 0; break; } } +err: BN_free(&a); BN_free(&b); BN_free(&c); @@ -578,16 +592,16 @@ test_div_word(BIO *bp) if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " / "); print_word(bp, s); BIO_puts(bp, " - "); } - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, "\n"); if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " % "); print_word(bp, s); BIO_puts(bp, " - "); @@ -595,15 +609,16 @@ test_div_word(BIO *bp) print_word(bp, r); BIO_puts(bp, "\n"); } - BN_mul_word(&b, s); - BN_add_word(&b, r); - BN_sub(&b, &a, &b); + CHECK_GOTO(BN_mul_word(&b, s)); + CHECK_GOTO(BN_add_word(&b, r)); + CHECK_GOTO(BN_sub(&b, &a, &b)); if (!BN_is_zero(&b)) { fprintf(stderr, "Division (word) test failed!\n"); rc = 0; break; } } +err: BN_free(&a); BN_free(&b); return (rc); @@ -626,49 +641,50 @@ test_div_recp(BIO *bp, BN_CTX *ctx) for (i = 0; i < num0 + num1; i++) { if (i < num1) { - BN_bntest_rand(&a, 400, 0, 0); - BN_copy(&b, &a); - BN_lshift(&a, &a, i); - BN_add_word(&a, i); + CHECK_GOTO(BN_bntest_rand(&a, 400, 0, 0)); + CHECK_GOTO(BN_copy(&b, &a)); + CHECK_GOTO(BN_lshift(&a, &a, i)); + CHECK_GOTO(BN_add_word(&a, i)); } else - BN_bntest_rand(&b, 50 + 3 * (i - num1), 0, 0); + CHECK_GOTO(BN_bntest_rand(&b, 50 + 3 * (i - num1), 0, 0)); a.neg = rand_neg(); b.neg = rand_neg(); - BN_RECP_CTX_set(&recp, &b, ctx); - BN_div_recp(&d, &c, &a, &recp, ctx); + CHECK_GOTO(BN_RECP_CTX_set(&recp, &b, ctx)); + CHECK_GOTO(BN_div_recp(&d, &c, &a, &recp, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " / "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &d); + CHECK_GOTO(BN_print(bp, &d)); BIO_puts(bp, "\n"); if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " % "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &c); + CHECK_GOTO(BN_print(bp, &c)); BIO_puts(bp, "\n"); } - BN_mul(&e, &d, &b, ctx); - BN_add(&d, &e, &c); - BN_sub(&d, &d, &a); + CHECK_GOTO(BN_mul(&e, &d, &b, ctx)); + CHECK_GOTO(BN_add(&d, &e, &c)); + CHECK_GOTO(BN_sub(&d, &d, &a)); if (!BN_is_zero(&d)) { fprintf(stderr, "Reciprocal division test failed!\n"); fprintf(stderr, "a="); - BN_print_fp(stderr, &a); + CHECK_GOTO(BN_print_fp(stderr, &a)); fprintf(stderr, "\nb="); - BN_print_fp(stderr, &b); + CHECK_GOTO(BN_print_fp(stderr, &b)); fprintf(stderr, "\n"); rc = 0; break; } } +err: BN_free(&a); BN_free(&b); BN_free(&c); @@ -698,31 +714,32 @@ test_mul(BIO *bp) for (i = 0; i < num0 + num1; i++) { if (i <= num1) { - BN_bntest_rand(&a, 100, 0, 0); - BN_bntest_rand(&b, 100, 0, 0); + CHECK_GOTO(BN_bntest_rand(&a, 100, 0, 0)); + CHECK_GOTO(BN_bntest_rand(&b, 100, 0, 0)); } else - BN_bntest_rand(&b, i - num1, 0, 0); + CHECK_GOTO(BN_bntest_rand(&b, i - num1, 0, 0)); a.neg = rand_neg(); b.neg = rand_neg(); - BN_mul(&c, &a, &b, ctx); + CHECK_GOTO(BN_mul(&c, &a, &b, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " * "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " - "); } - BN_print(bp, &c); + CHECK_GOTO(BN_print(bp, &c)); BIO_puts(bp, "\n"); } - BN_div(&d, &e, &c, &a, ctx); - BN_sub(&d, &d, &b); + CHECK_GOTO(BN_div(&d, &e, &c, &a, ctx)); + CHECK_GOTO(BN_sub(&d, &d, &b)); if (!BN_is_zero(&d) || !BN_is_zero(&e)) { fprintf(stderr, "Multiplication test failed!\n"); rc = 0; break; } } +err: BN_free(&a); BN_free(&b); BN_free(&c); @@ -736,7 +753,7 @@ int test_sqr(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *c, *d, *e; - int i, ret = 0; + int i, rc = 0; a = BN_new(); c = BN_new(); @@ -744,21 +761,21 @@ test_sqr(BIO *bp, BN_CTX *ctx) e = BN_new(); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 40 + i * 10, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 40 + i * 10, 0, 0)); a->neg = rand_neg(); - BN_sqr(c, a, ctx); + CHECK_GOTO(BN_sqr(c, a, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " - "); } - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, "\n"); } - BN_div(d, e, c, a, ctx); - BN_sub(d, d, a); + CHECK_GOTO(BN_div(d, e, c, a, ctx)); + CHECK_GOTO(BN_sub(d, d, a)); if (!BN_is_zero(d) || !BN_is_zero(e)) { fprintf(stderr, "Square test failed!\n"); goto err; @@ -771,18 +788,18 @@ test_sqr(BIO *bp, BN_CTX *ctx) fprintf(stderr, "BN_hex2bn failed\n"); goto err; } - BN_sqr(c, a, ctx); + CHECK_GOTO(BN_sqr(c, a, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " - "); } - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, "\n"); } - BN_mul(d, a, a, ctx); + CHECK_GOTO(BN_mul(d, a, a, ctx)); if (BN_cmp(c, d)) { fprintf(stderr, "Square test failed: BN_sqr and BN_mul produce " @@ -796,30 +813,30 @@ test_sqr(BIO *bp, BN_CTX *ctx) fprintf(stderr, "BN_hex2bn failed\n"); goto err; } - BN_sqr(c, a, ctx); + CHECK_GOTO(BN_sqr(c, a, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " - "); } - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, "\n"); } - BN_mul(d, a, a, ctx); + CHECK_GOTO(BN_mul(d, a, a, ctx)); if (BN_cmp(c, d)) { fprintf(stderr, "Square test failed: BN_sqr and BN_mul produce " "different results!\n"); goto err; } - ret = 1; + rc = 1; err: BN_free(a); BN_free(c); BN_free(d); BN_free(e); - return ret; + return rc; } int @@ -843,56 +860,57 @@ test_mont(BIO *bp, BN_CTX *ctx) BN_init(&B); BN_init(&n); - BN_zero(&n); + CHECK_GOTO(BN_zero(&n)); if (BN_MONT_CTX_set(mont, &n, ctx)) { fprintf(stderr, "BN_MONT_CTX_set succeeded for zero modulus!\n"); return (0); } - BN_set_word(&n, 16); + CHECK_GOTO(BN_set_word(&n, 16)); if (BN_MONT_CTX_set(mont, &n, ctx)) { fprintf(stderr, "BN_MONT_CTX_set succeeded for even modulus!\n"); return (0); } - BN_bntest_rand(&a, 100, 0, 0); - BN_bntest_rand(&b, 100, 0, 0); + CHECK_GOTO(BN_bntest_rand(&a, 100, 0, 0)); + CHECK_GOTO(BN_bntest_rand(&b, 100, 0, 0)); for (i = 0; i < num2; i++) { int bits = (200 * (i + 1)) / num2; if (bits == 0) continue; - BN_bntest_rand(&n, bits, 0, 1); - (void)BN_MONT_CTX_set(mont, &n, ctx); + CHECK_GOTO(BN_bntest_rand(&n, bits, 0, 1)); + CHECK_GOTO(BN_MONT_CTX_set(mont, &n, ctx)); - BN_nnmod(&a, &a, &n, ctx); - BN_nnmod(&b, &b, &n, ctx); + CHECK_GOTO(BN_nnmod(&a, &a, &n, ctx)); + CHECK_GOTO(BN_nnmod(&b, &b, &n, ctx)); - BN_to_montgomery(&A, &a, mont, ctx); - BN_to_montgomery(&B, &b, mont, ctx); + CHECK_GOTO(BN_to_montgomery(&A, &a, mont, ctx)); + CHECK_GOTO(BN_to_montgomery(&B, &b, mont, ctx)); - BN_mod_mul_montgomery(&c, &A, &B, mont, ctx); - BN_from_montgomery(&A, &c, mont, ctx); + CHECK_GOTO(BN_mod_mul_montgomery(&c, &A, &B, mont, ctx)); + CHECK_GOTO(BN_from_montgomery(&A, &c, mont, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " * "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " % "); - BN_print(bp, &(mont->N)); + CHECK_GOTO(BN_print(bp, &(mont->N))); BIO_puts(bp, " - "); } - BN_print(bp, &A); + CHECK_GOTO(BN_print(bp, &A)); BIO_puts(bp, "\n"); } - BN_mod_mul(&d, &a, &b, &n, ctx); - BN_sub(&d, &d, &A); + CHECK_GOTO(BN_mod_mul(&d, &a, &b, &n, ctx)); + CHECK_GOTO(BN_sub(&d, &d, &A)); if (!BN_is_zero(&d)) { fprintf(stderr, "Montgomery multiplication test failed!\n"); rc = 0; break; } } +err: BN_MONT_CTX_free(mont); BN_free(&a); BN_free(&b); @@ -917,30 +935,31 @@ test_mod(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); - BN_bntest_rand(a, 1024, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 1024, 0, 0)); for (i = 0; i < num0; i++) { - BN_bntest_rand(b, 450 + i * 10, 0, 0); + CHECK_GOTO(BN_bntest_rand(b, 450 + i * 10, 0, 0)); a->neg = rand_neg(); b->neg = rand_neg(); - BN_mod(c, a, b, ctx); + CHECK_GOTO(BN_mod(c, a, b, ctx)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " % "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " - "); } - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, "\n"); } - BN_div(d, e, a, b, ctx); - BN_sub(e, e, c); + CHECK_GOTO(BN_div(d, e, a, b, ctx)); + CHECK_GOTO(BN_sub(e, e, c)); if (!BN_is_zero(e)) { fprintf(stderr, "Modulo test failed!\n"); rc = 0; break; } } +err: BN_free(a); BN_free(b); BN_free(c); @@ -962,19 +981,19 @@ test_mod_mul(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); - BN_one(a); - BN_one(b); - BN_zero(c); + CHECK_GOTO(BN_one(a)); + CHECK_GOTO(BN_one(b)); + CHECK_GOTO(BN_zero(c)); if (BN_mod_mul(e, a, b, c, ctx)) { fprintf(stderr, "BN_mod_mul with zero modulus succeeded!\n"); return (0); } for (j = 0; j < 3; j++) { - BN_bntest_rand(c, 1024, 0, 0); + CHECK_GOTO(BN_bntest_rand(c, 1024, 0, 0)); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 475 + i * 10, 0, 0); - BN_bntest_rand(b, 425 + i * 11, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 475 + i * 10, 0, 0)); + CHECK_GOTO(BN_bntest_rand(b, 425 + i * 11, 0, 0)); a->neg = rand_neg(); b->neg = rand_neg(); if (!BN_mod_mul(e, a, b, c, ctx)) { @@ -987,11 +1006,11 @@ test_mod_mul(BIO *bp, BN_CTX *ctx) } if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " % "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); if ((a->neg ^ b->neg) && !BN_is_zero(e)) { /* If (a*b) % c is negative, c must be added * in order to obtain the normalized remainder @@ -999,25 +1018,25 @@ test_mod_mul(BIO *bp, BN_CTX *ctx) * BN_mod_mul could generate negative results) */ BIO_puts(bp, " + "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); } BIO_puts(bp, " - "); } - BN_print(bp, e); + CHECK_GOTO(BN_print(bp, e)); BIO_puts(bp, "\n"); } - BN_mul(d, a, b, ctx); - BN_sub(d, d, e); - BN_div(a, b, d, c, ctx); + CHECK_GOTO(BN_mul(d, a, b, ctx)); + CHECK_GOTO(BN_sub(d, d, e)); + CHECK_GOTO(BN_div(a, b, d, c, ctx)); if (!BN_is_zero(b)) { fprintf(stderr, "Modulo multiply test failed!\n"); ERR_print_errors_fp(stderr); rc = 0; - goto done; + goto err; } } } -done: +err: BN_free(a); BN_free(b); BN_free(c); @@ -1039,9 +1058,9 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); - BN_one(a); - BN_one(b); - BN_zero(c); + CHECK_GOTO(BN_one(a)); + CHECK_GOTO(BN_one(b)); + CHECK_GOTO(BN_zero(c)); if (BN_mod_exp(d, a, b, c, ctx)) { fprintf(stderr, "BN_mod_exp with zero modulus succeeded!\n"); return (0); @@ -1055,10 +1074,10 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) return (0); } - BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */ + CHECK_GOTO(BN_bntest_rand(c, 30, 0, 1)); /* must be odd for montgomery */ for (i = 0; i < num2; i++) { - BN_bntest_rand(a, 20 + i * 5, 0, 0); - BN_bntest_rand(b, 2 + i, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 20 + i * 5, 0, 0)); + CHECK_GOTO(BN_bntest_rand(b, 2 + i, 0, 0)); if (!BN_mod_exp(d, a, b, c, ctx)) { rc = 0; @@ -1067,19 +1086,19 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " % "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - "); } - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, "\n"); } - BN_exp(e, a, b, ctx); - BN_sub(e, e, d); - BN_div(a, b, e, c, ctx); + CHECK_GOTO(BN_exp(e, a, b, ctx)); + CHECK_GOTO(BN_sub(e, e, d)); + CHECK_GOTO(BN_div(a, b, e, c, ctx)); if (!BN_is_zero(b)) { fprintf(stderr, "Modulo exponentiation test failed!\n"); rc = 0; @@ -1087,10 +1106,10 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) } } - BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */ + CHECK_GOTO(BN_bntest_rand(c, 30, 0, 1)); /* must be odd for montgomery */ for (i = 0; i < num2; i++) { - BN_bntest_rand(a, 20 + i * 5, 0, 0); - BN_bntest_rand(b, 2 + i, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 20 + i * 5, 0, 0)); + CHECK_GOTO(BN_bntest_rand(b, 2 + i, 0, 0)); if (!BN_mod_exp_ct(d, a, b, c, ctx)) { rc = 0; @@ -1099,19 +1118,19 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " % "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - "); } - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, "\n"); } - BN_exp(e, a, b, ctx); - BN_sub(e, e, d); - BN_div(a, b, e, c, ctx); + CHECK_GOTO(BN_exp(e, a, b, ctx)); + CHECK_GOTO(BN_sub(e, e, d)); + CHECK_GOTO(BN_div(a, b, e, c, ctx)); if (!BN_is_zero(b)) { fprintf(stderr, "Modulo exponentiation test failed!\n"); rc = 0; @@ -1119,10 +1138,10 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) } } - BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */ + CHECK_GOTO(BN_bntest_rand(c, 30, 0, 1)); /* must be odd for montgomery */ for (i = 0; i < num2; i++) { - BN_bntest_rand(a, 20 + i * 5, 0, 0); - BN_bntest_rand(b, 2 + i, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 20 + i * 5, 0, 0)); + CHECK_GOTO(BN_bntest_rand(b, 2 + i, 0, 0)); if (!BN_mod_exp_nonct(d, a, b, c, ctx)) { rc = 0; @@ -1131,25 +1150,26 @@ test_mod_exp(BIO *bp, BN_CTX *ctx) if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " % "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - "); } - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, "\n"); } - BN_exp(e, a, b, ctx); - BN_sub(e, e, d); - BN_div(a, b, e, c, ctx); + CHECK_GOTO(BN_exp(e, a, b, ctx)); + CHECK_GOTO(BN_sub(e, e, d)); + CHECK_GOTO(BN_div(a, b, e, c, ctx)); if (!BN_is_zero(b)) { fprintf(stderr, "Modulo exponentiation test failed!\n"); rc = 0; break; } } +err: BN_free(a); BN_free(b); BN_free(c); @@ -1171,9 +1191,9 @@ test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); - BN_one(a); - BN_one(b); - BN_zero(c); + CHECK_GOTO(BN_one(a)); + CHECK_GOTO(BN_one(b)); + CHECK_GOTO(BN_zero(c)); if (BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) { fprintf(stderr, "BN_mod_exp_mont_consttime with zero modulus " "succeeded\n"); @@ -1181,7 +1201,7 @@ test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx) goto err; } - BN_set_word(c, 16); + CHECK_GOTO(BN_set_word(c, 16)); if (BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) { fprintf(stderr, "BN_mod_exp_mont_consttime with even modulus " "succeeded\n"); @@ -1189,10 +1209,10 @@ test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx) goto err; } - BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */ + CHECK_GOTO(BN_bntest_rand(c, 30, 0, 1)); /* must be odd for montgomery */ for (i = 0; i < num2; i++) { - BN_bntest_rand(a, 20 + i * 5, 0, 0); - BN_bntest_rand(b, 2 + i, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 20 + i * 5, 0, 0)); + CHECK_GOTO(BN_bntest_rand(b, 2 + i, 0, 0)); if (!BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) { rc = 0; @@ -1201,19 +1221,19 @@ test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx) if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " % "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - "); } - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, "\n"); } - BN_exp(e, a, b, ctx); - BN_sub(e, e, d); - BN_div(a, b, e, c, ctx); + CHECK_GOTO(BN_exp(e, a, b, ctx)); + CHECK_GOTO(BN_sub(e, e, d)); + CHECK_GOTO(BN_div(a, b, e, c, ctx)); if (!BN_is_zero(b)) { fprintf(stderr, "Modulo exponentiation test failed!\n"); rc = 0; @@ -1237,7 +1257,7 @@ int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *p, *m, *d, *e, *b, *n, *c; - int rc = 1; + int len, rc = 1; BN_MONT_CTX *mont; a = BN_new(); @@ -1249,12 +1269,12 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) n = BN_new(); c = BN_new(); - mont = BN_MONT_CTX_new(); + CHECK_GOTO(mont = BN_MONT_CTX_new()); - BN_bntest_rand(m, 1024, 0, 1); /* must be odd for montgomery */ + CHECK_GOTO(BN_bntest_rand(m, 1024, 0, 1)); /* must be odd for montgomery */ /* Zero exponent */ - BN_bntest_rand(a, 1024, 0, 0); - BN_zero(p); + CHECK_GOTO(BN_bntest_rand(a, 1024, 0, 0)); + CHECK_GOTO(BN_zero(p)); if (!BN_mod_exp_mont_consttime(d, a, p, m, ctx, NULL)) { rc = 0; goto err; @@ -1265,24 +1285,27 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) goto err; } /* Regression test for carry bug in mulx4x_mont */ - BN_hex2bn(&a, + len = BN_hex2bn(&a, "7878787878787878787878787878787878787878787878787878787878787878" "7878787878787878787878787878787878787878787878787878787878787878" "7878787878787878787878787878787878787878787878787878787878787878" "7878787878787878787878787878787878787878787878787878787878787878"); - BN_hex2bn(&b, + CHECK_GOTO(len); + len = BN_hex2bn(&b, "095D72C08C097BA488C5E439C655A192EAFB6380073D8C2664668EDDB4060744" "E16E57FB4EDB9AE10A0CEFCDC28A894F689A128379DB279D48A2E20849D68593" "9B7803BCF46CEBF5C533FB0DD35B080593DE5472E3FE5DB951B8BFF9B4CB8F03" "9CC638A5EE8CDD703719F8000E6A9F63BEED5F2FCD52FF293EA05A251BB4AB81"); - BN_hex2bn(&n, + CHECK_GOTO(len); + len = BN_hex2bn(&n, "D78AF684E71DB0C39CFF4E64FB9DB567132CB9C50CC98009FEB820B26F2DED9B" "91B9B5E2B83AE0AE4EB4E0523CA726BFBE969B89FD754F674CE99118C3F2D1C5" "D81FDC7C54E02B60262B241D53C040E99E45826ECA37A804668E690E1AFC1CA4" "2C9A15D84D4954425F0B7642FC0BD9D7B24E2618D2DCC9B729D944BADACFDDAF"); - BN_MONT_CTX_set(mont, n, ctx); - BN_mod_mul_montgomery(c, a, b, mont, ctx); - BN_mod_mul_montgomery(d, b, a, mont, ctx); + CHECK_GOTO(len); + CHECK_GOTO(BN_MONT_CTX_set(mont, n, ctx)); + CHECK_GOTO(BN_mod_mul_montgomery(c, a, b, mont, ctx)); + CHECK_GOTO(BN_mod_mul_montgomery(d, b, a, mont, ctx)); if (BN_cmp(c, d)) { fprintf(stderr, "Montgomery multiplication test failed:" " a*b != b*a.\n"); @@ -1290,7 +1313,7 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) goto err; } /* Regression test for carry bug in sqr[x]8x_mont */ - BN_hex2bn(&n, + len = BN_hex2bn(&n, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" @@ -1307,7 +1330,8 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) "0000000000000000000000000000000000000000000000000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF"); - BN_hex2bn(&a, + CHECK_GOTO(len); + len = BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" @@ -1324,10 +1348,12 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) "0000000000000000000000000000000000000000000000000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000"); - b = BN_dup(a); - BN_MONT_CTX_set(mont, n, ctx); - BN_mod_mul_montgomery(c, a, a, mont, ctx); - BN_mod_mul_montgomery(d, a, b, mont, ctx); + CHECK_GOTO(len); + BN_free(b); + CHECK_GOTO(b = BN_dup(a)); + CHECK_GOTO(BN_MONT_CTX_set(mont, n, ctx)); + CHECK_GOTO(BN_mod_mul_montgomery(c, a, a, mont, ctx)); + CHECK_GOTO(BN_mod_mul_montgomery(d, a, b, mont, ctx)); if (BN_cmp(c, d)) { fprintf(stderr, "Montgomery multiplication test failed:" " a**2 != a*a.\n"); @@ -1335,8 +1361,8 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) goto err; } /* Zero input */ - BN_bntest_rand(p, 1024, 0, 0); - BN_zero(a); + CHECK_GOTO(BN_bntest_rand(p, 1024, 0, 0)); + CHECK_GOTO(BN_zero(a)); if (!BN_mod_exp_mont_consttime(d, a, p, m, ctx, NULL)) { rc = 0; goto err; @@ -1351,8 +1377,8 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) * than the modulus m, in order to test the const time precomputation * scattering/gathering. */ - BN_one(a); - BN_MONT_CTX_set(mont, m, ctx); + CHECK_GOTO(BN_one(a)); + CHECK_GOTO(BN_MONT_CTX_set(mont, m, ctx)); if (!BN_from_montgomery(e, a, mont, ctx)) { rc = 0; goto err; @@ -1371,7 +1397,7 @@ test_mod_exp_mont5(BIO *bp, BN_CTX *ctx) goto err; } /* Finally, some regular test vectors. */ - BN_bntest_rand(e, 1024, 0, 0); + CHECK_GOTO(BN_bntest_rand(e, 1024, 0, 0)); if (!BN_mod_exp_mont_consttime(d, e, p, m, ctx, NULL)) { rc = 0; goto err; @@ -1409,11 +1435,11 @@ test_exp(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); one = BN_new(); - BN_one(one); + CHECK_GOTO(BN_one(one)); for (i = 0; i < num2; i++) { - BN_bntest_rand(a, 20 + i * 5, 0, 0); - BN_bntest_rand(b, 2 + i, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 20 + i * 5, 0, 0)); + CHECK_GOTO(BN_bntest_rand(b, 2 + i, 0, 0)); if (BN_exp(d, a, b, ctx) <= 0) { rc = 0; @@ -1422,24 +1448,25 @@ test_exp(BIO *bp, BN_CTX *ctx) if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ "); - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, " - "); } - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, "\n"); } - BN_one(e); + CHECK_GOTO(BN_one(e)); for (; !BN_is_zero(b); BN_sub(b, b, one)) - BN_mul(e, e, a, ctx); - BN_sub(e, e, d); + CHECK_GOTO(BN_mul(e, e, a, ctx)); + CHECK_GOTO(BN_sub(e, e, d)); if (!BN_is_zero(e)) { fprintf(stderr, "Exponentiation test failed!\n"); rc = 0; break; } } +err: BN_free(a); BN_free(b); BN_free(d); @@ -1453,27 +1480,27 @@ int test_gf2m_add(BIO *bp) { BIGNUM a, b, c; - int i, ret = 0; + int i, rc = 0; BN_init(&a); BN_init(&b); BN_init(&c); for (i = 0; i < num0; i++) { - BN_rand(&a, 512, 0, 0); - BN_copy(&b, BN_value_one()); + CHECK_GOTO(BN_rand(&a, 512, 0, 0)); + CHECK_GOTO(BN_copy(&b, BN_value_one())); a.neg = rand_neg(); b.neg = rand_neg(); - BN_GF2m_add(&c, &a, &b); + CHECK_GOTO(BN_GF2m_add(&c, &a, &b)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, &a); + CHECK_GOTO(BN_print(bp, &a)); BIO_puts(bp, " ^ "); - BN_print(bp, &b); + CHECK_GOTO(BN_print(bp, &b)); BIO_puts(bp, " = "); } - BN_print(bp, &c); + CHECK_GOTO(BN_print(bp, &c)); BIO_puts(bp, "\n"); } #endif @@ -1483,26 +1510,26 @@ test_gf2m_add(BIO *bp) fprintf(stderr, "GF(2^m) addition test (a) failed!\n"); goto err; } - BN_GF2m_add(&c, &c, &c); + CHECK_GOTO(BN_GF2m_add(&c, &c, &c)); /* Test that c + c = 0. */ if (!BN_is_zero(&c)) { fprintf(stderr, "GF(2^m) addition test (b) failed!\n"); goto err; } } - ret = 1; + rc = 1; err: BN_free(&a); BN_free(&b); BN_free(&c); - return ret; + return rc; } int test_gf2m_mod(BIO *bp) { BIGNUM *a, *b[2], *c, *d, *e; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1513,27 +1540,27 @@ test_gf2m_mod(BIO *bp) d = BN_new(); e = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 1024, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 1024, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod(c, a, b[j]); + CHECK_GOTO(BN_GF2m_mod(c, a, b[j])); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, " - "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, "\n"); } } #endif - BN_GF2m_add(d, a, c); - BN_GF2m_mod(e, d, b[j]); + CHECK_GOTO(BN_GF2m_add(d, a, c)); + CHECK_GOTO(BN_GF2m_mod(e, d, b[j])); /* Test that a + (a mod p) mod p == 0. */ if (!BN_is_zero(e)) { fprintf(stderr, "GF(2^m) modulo test failed!\n"); @@ -1541,7 +1568,7 @@ test_gf2m_mod(BIO *bp) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); @@ -1549,14 +1576,14 @@ err: BN_free(c); BN_free(d); BN_free(e); - return ret; + return rc; } int test_gf2m_mod_mul(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d, *e, *f, *g, *h; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1570,34 +1597,34 @@ test_gf2m_mod_mul(BIO *bp, BN_CTX *ctx) g = BN_new(); h = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 1024, 0, 0); - BN_bntest_rand(c, 1024, 0, 0); - BN_bntest_rand(d, 1024, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 1024, 0, 0)); + CHECK_GOTO(BN_bntest_rand(c, 1024, 0, 0)); + CHECK_GOTO(BN_bntest_rand(d, 1024, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod_mul(e, a, c, b[j], ctx); + CHECK_GOTO(BN_GF2m_mod_mul(e, a, c, b[j], ctx)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, " - "); - BN_print(bp, e); + CHECK_GOTO(BN_print(bp, e)); BIO_puts(bp, "\n"); } } #endif - BN_GF2m_add(f, a, d); - BN_GF2m_mod_mul(g, f, c, b[j], ctx); - BN_GF2m_mod_mul(h, d, c, b[j], ctx); - BN_GF2m_add(f, e, g); - BN_GF2m_add(f, f, h); + CHECK_GOTO(BN_GF2m_add(f, a, d)); + CHECK_GOTO(BN_GF2m_mod_mul(g, f, c, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_mul(h, d, c, b[j], ctx)); + CHECK_GOTO(BN_GF2m_add(f, e, g)); + CHECK_GOTO(BN_GF2m_add(f, f, h)); /* Test that (a+d)*c = a*c + d*c. */ if (!BN_is_zero(f)) { fprintf(stderr, "GF(2^m) modular multiplication test failed!\n"); @@ -1605,7 +1632,7 @@ test_gf2m_mod_mul(BIO *bp, BN_CTX *ctx) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); @@ -1616,14 +1643,14 @@ err: BN_free(f); BN_free(g); BN_free(h); - return ret; + return rc; } int test_gf2m_mod_sqr(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1633,30 +1660,30 @@ test_gf2m_mod_sqr(BIO *bp, BN_CTX *ctx) c = BN_new(); d = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 1024, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 1024, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod_sqr(c, a, b[j], ctx); - BN_copy(d, a); - BN_GF2m_mod_mul(d, a, d, b[j], ctx); + CHECK_GOTO(BN_GF2m_mod_sqr(c, a, b[j], ctx)); + CHECK_GOTO(BN_copy(d, a)); + CHECK_GOTO(BN_GF2m_mod_mul(d, a, d, b[j], ctx)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ 2 % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, " = "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, "; a * a = "); - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, "\n"); } } #endif - BN_GF2m_add(d, c, d); + CHECK_GOTO(BN_GF2m_add(d, c, d)); /* Test that a*a = a^2. */ if (!BN_is_zero(d)) { fprintf(stderr, "GF(2^m) modular squaring test failed!\n"); @@ -1664,21 +1691,21 @@ test_gf2m_mod_sqr(BIO *bp, BN_CTX *ctx) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); BN_free(b[1]); BN_free(c); BN_free(d); - return ret; + return rc; } int test_gf2m_mod_inv(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1688,22 +1715,22 @@ test_gf2m_mod_inv(BIO *bp, BN_CTX *ctx) c = BN_new(); d = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 512, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 512, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod_inv(c, a, b[j], ctx); - BN_GF2m_mod_mul(d, a, c, b[j], ctx); + CHECK_GOTO(BN_GF2m_mod_inv(c, a, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_mul(d, a, c, b[j], ctx)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - 1 % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, "\n"); } } @@ -1715,21 +1742,21 @@ test_gf2m_mod_inv(BIO *bp, BN_CTX *ctx) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); BN_free(b[1]); BN_free(c); BN_free(d); - return ret; + return rc; } int test_gf2m_mod_div(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d, *e, *f; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1741,26 +1768,26 @@ test_gf2m_mod_div(BIO *bp, BN_CTX *ctx) e = BN_new(); f = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 512, 0, 0); - BN_bntest_rand(c, 512, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 512, 0, 0)); + CHECK_GOTO(BN_bntest_rand(c, 512, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod_div(d, a, c, b[j], ctx); - BN_GF2m_mod_mul(e, d, c, b[j], ctx); - BN_GF2m_mod_div(f, a, e, b[j], ctx); + CHECK_GOTO(BN_GF2m_mod_div(d, a, c, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_mul(e, d, c, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_div(f, a, e, b[j], ctx)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " = "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " * "); - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, " % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, "\n"); } } @@ -1772,7 +1799,7 @@ test_gf2m_mod_div(BIO *bp, BN_CTX *ctx) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); @@ -1781,14 +1808,14 @@ err: BN_free(d); BN_free(e); BN_free(f); - return ret; + return rc; } int test_gf2m_mod_exp(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d, *e, *f; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1800,38 +1827,38 @@ test_gf2m_mod_exp(BIO *bp, BN_CTX *ctx) e = BN_new(); f = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 512, 0, 0); - BN_bntest_rand(c, 512, 0, 0); - BN_bntest_rand(d, 512, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 512, 0, 0)); + CHECK_GOTO(BN_bntest_rand(c, 512, 0, 0)); + CHECK_GOTO(BN_bntest_rand(d, 512, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod_exp(e, a, c, b[j], ctx); - BN_GF2m_mod_exp(f, a, d, b[j], ctx); - BN_GF2m_mod_mul(e, e, f, b[j], ctx); - BN_add(f, c, d); - BN_GF2m_mod_exp(f, a, f, b[j], ctx); + CHECK_GOTO(BN_GF2m_mod_exp(e, a, c, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_exp(f, a, d, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_mul(e, e, f, b[j], ctx)); + CHECK_GOTO(BN_add(f, c, d)); + CHECK_GOTO(BN_GF2m_mod_exp(f, a, f, b[j], ctx)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " ^ ("); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " + "); - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, ") = "); - BN_print(bp, e); + CHECK_GOTO(BN_print(bp, e)); BIO_puts(bp, "; - "); - BN_print(bp, f); + CHECK_GOTO(BN_print(bp, f)); BIO_puts(bp, " % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, "\n"); } } #endif - BN_GF2m_add(f, e, f); + CHECK_GOTO(BN_GF2m_add(f, e, f)); /* Test that a^(c+d)=a^c*a^d. */ if (!BN_is_zero(f)) { fprintf(stderr, "GF(2^m) modular exponentiation test failed!\n"); @@ -1839,7 +1866,7 @@ test_gf2m_mod_exp(BIO *bp, BN_CTX *ctx) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); @@ -1848,14 +1875,14 @@ err: BN_free(d); BN_free(e); BN_free(f); - return ret; + return rc; } int test_gf2m_mod_sqrt(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d, *e, *f; - int i, j, ret = 0; + int i, j, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1867,26 +1894,26 @@ test_gf2m_mod_sqrt(BIO *bp, BN_CTX *ctx) e = BN_new(); f = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 512, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 512, 0, 0)); for (j = 0; j < 2; j++) { - BN_GF2m_mod(c, a, b[j]); - BN_GF2m_mod_sqrt(d, a, b[j], ctx); - BN_GF2m_mod_sqr(e, d, b[j], ctx); + CHECK_GOTO(BN_GF2m_mod(c, a, b[j])); + CHECK_GOTO(BN_GF2m_mod_sqrt(d, a, b[j], ctx)); + CHECK_GOTO(BN_GF2m_mod_sqr(e, d, b[j], ctx)); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, d); + CHECK_GOTO(BN_print(bp, d)); BIO_puts(bp, " ^ 2 - "); - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, "\n"); } } #endif - BN_GF2m_add(f, c, e); + CHECK_GOTO(BN_GF2m_add(f, c, e)); /* Test that d^2 = a, where d = sqrt(a). */ if (!BN_is_zero(f)) { fprintf(stderr, "GF(2^m) modular square root test failed!\n"); @@ -1894,7 +1921,7 @@ test_gf2m_mod_sqrt(BIO *bp, BN_CTX *ctx) } } } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); @@ -1903,14 +1930,14 @@ err: BN_free(d); BN_free(e); BN_free(f); - return ret; + return rc; } int test_gf2m_mod_solve_quad(BIO *bp, BN_CTX *ctx) { BIGNUM *a, *b[2], *c, *d, *e; - int i, j, s = 0, t, ret = 0; + int i, j, s = 0, t, rc = 0; int p0[] = { 163, 7, 6, 3, 0, -1 }; int p1[] = { 193, 15, 0, -1 }; @@ -1921,31 +1948,31 @@ test_gf2m_mod_solve_quad(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); - BN_GF2m_arr2poly(p0, b[0]); - BN_GF2m_arr2poly(p1, b[1]); + CHECK_GOTO(BN_GF2m_arr2poly(p0, b[0])); + CHECK_GOTO(BN_GF2m_arr2poly(p1, b[1])); for (i = 0; i < num0; i++) { - BN_bntest_rand(a, 512, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 512, 0, 0)); for (j = 0; j < 2; j++) { t = BN_GF2m_mod_solve_quad(c, a, b[j], ctx); if (t) { s++; - BN_GF2m_mod_sqr(d, c, b[j], ctx); - BN_GF2m_add(d, c, d); - BN_GF2m_mod(e, a, b[j]); + CHECK_GOTO(BN_GF2m_mod_sqr(d, c, b[j], ctx)); + CHECK_GOTO(BN_GF2m_add(d, c, d)); + CHECK_GOTO(BN_GF2m_mod(e, a, b[j])); #if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */ if (bp != NULL) { if (!results) { - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " is root of z^2 + z = "); - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, "\n"); } } #endif - BN_GF2m_add(e, e, d); + CHECK_GOTO(BN_GF2m_add(e, e, d)); /* Test that solution of quadratic c satisfies c^2 + c = a. */ if (!BN_is_zero(e)) { fprintf(stderr, "GF(2^m) modular solve quadratic test failed!\n"); @@ -1957,9 +1984,9 @@ test_gf2m_mod_solve_quad(BIO *bp, BN_CTX *ctx) if (bp != NULL) { if (!results) { BIO_puts(bp, "There are no roots of z^2 + z = "); - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " % "); - BN_print(bp, b[j]); + CHECK_GOTO(BN_print(bp, b[j])); BIO_puts(bp, "\n"); } } @@ -1972,7 +1999,7 @@ test_gf2m_mod_solve_quad(BIO *bp, BN_CTX *ctx) fprintf(stderr, "this is very unlikely and probably indicates an error.\n"); goto err; } - ret = 1; + rc = 1; err: BN_free(a); BN_free(b[0]); @@ -1980,7 +2007,7 @@ err: BN_free(c); BN_free(d); BN_free(e); - return ret; + return rc; } #endif static int @@ -2008,7 +2035,7 @@ test_kron(BIO *bp, BN_CTX *ctx) BIGNUM *a, *b, *r, *t; int i; int legendre, kronecker; - int ret = 0; + int rc = 0; a = BN_new(); b = BN_new(); @@ -2077,9 +2104,9 @@ test_kron(BIO *bp, BN_CTX *ctx) if (legendre != kronecker) { fprintf(stderr, "legendre != kronecker; a = "); - BN_print_fp(stderr, a); + CHECK_GOTO(BN_print_fp(stderr, a)); fprintf(stderr, ", b = "); - BN_print_fp(stderr, b); + CHECK_GOTO(BN_print_fp(stderr, b)); fprintf(stderr, "\n"); goto err; } @@ -2090,13 +2117,13 @@ test_kron(BIO *bp, BN_CTX *ctx) putc('\n', stderr); fflush(stderr); - ret = 1; + rc = 1; err: BN_free(a); BN_free(b); BN_free(r); BN_free(t); - return ret; + return rc; } int @@ -2105,7 +2132,7 @@ test_sqrt(BIO *bp, BN_CTX *ctx) BN_GENCB cb; BIGNUM *a, *p, *r; int i, j; - int ret = 0; + int rc = 0; a = BN_new(); p = BN_new(); @@ -2166,11 +2193,11 @@ test_sqrt(BIO *bp, BN_CTX *ctx) if (BN_cmp(a, r) != 0) { fprintf(stderr, "BN_mod_sqrt failed: a = "); - BN_print_fp(stderr, a); + CHECK_GOTO(BN_print_fp(stderr, a)); fprintf(stderr, ", r = "); - BN_print_fp(stderr, r); + CHECK_GOTO(BN_print_fp(stderr, r)); fprintf(stderr, ", p = "); - BN_print_fp(stderr, p); + CHECK_GOTO(BN_print_fp(stderr, p)); fprintf(stderr, "\n"); goto err; } @@ -2182,63 +2209,64 @@ test_sqrt(BIO *bp, BN_CTX *ctx) putc('\n', stderr); fflush(stderr); } - ret = 1; + rc = 1; err: BN_free(a); BN_free(p); BN_free(r); - return ret; + return rc; } int test_lshift(BIO *bp, BN_CTX *ctx, BIGNUM *a_) { - BIGNUM *a, *b, *c, *d; + BIGNUM *a = NULL, *b, *c, *d; int i; int rc = 1; b = BN_new(); c = BN_new(); d = BN_new(); - BN_one(c); + CHECK_GOTO(BN_one(c)); if (a_) a = a_; else { a = BN_new(); - BN_bntest_rand(a, 200, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 200, 0, 0)); a->neg = rand_neg(); } for (i = 0; i < num0; i++) { - (void)BN_lshift(b, a, i + 1); - BN_add(c, c, c); + CHECK_GOTO(BN_lshift(b, a, i + 1)); + CHECK_GOTO(BN_add(c, c, c)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - "); } - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, "\n"); } - BN_mul(d, a, c, ctx); - BN_sub(d, d, b); + CHECK_GOTO(BN_mul(d, a, c, ctx)); + CHECK_GOTO(BN_sub(d, d, b)); if (!BN_is_zero(d)) { fprintf(stderr, "Left shift test failed!\n"); fprintf(stderr, "a="); - BN_print_fp(stderr, a); + CHECK_GOTO(BN_print_fp(stderr, a)); fprintf(stderr, "\nb="); - BN_print_fp(stderr, b); + CHECK_GOTO(BN_print_fp(stderr, b)); fprintf(stderr, "\nc="); - BN_print_fp(stderr, c); + CHECK_GOTO(BN_print_fp(stderr, c)); fprintf(stderr, "\nd="); - BN_print_fp(stderr, d); + CHECK_GOTO(BN_print_fp(stderr, d)); fprintf(stderr, "\n"); rc = 0; break; } } +err: BN_free(a); BN_free(b); BN_free(c); @@ -2257,29 +2285,30 @@ test_lshift1(BIO *bp) b = BN_new(); c = BN_new(); - BN_bntest_rand(a, 200, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 200, 0, 0)); a->neg = rand_neg(); for (i = 0; i < num0; i++) { - (void)BN_lshift1(b, a); + CHECK_GOTO(BN_lshift1(b, a)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " * 2"); BIO_puts(bp, " - "); } - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, "\n"); } - BN_add(c, a, a); - BN_sub(a, b, c); + CHECK_GOTO(BN_add(c, a, a)); + CHECK_GOTO(BN_sub(a, b, c)); if (!BN_is_zero(a)) { fprintf(stderr, "Left shift one test failed!\n"); rc = 0; break; } - BN_copy(a, b); + CHECK_GOTO(BN_copy(a, b)); } +err: BN_free(a); BN_free(b); BN_free(c); @@ -2298,31 +2327,32 @@ test_rshift(BIO *bp, BN_CTX *ctx) c = BN_new(); d = BN_new(); e = BN_new(); - BN_one(c); + CHECK_GOTO(BN_one(c)); - BN_bntest_rand(a, 200, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 200, 0, 0)); a->neg = rand_neg(); for (i = 0; i < num0; i++) { - (void)BN_rshift(b, a, i + 1); - BN_add(c, c, c); + CHECK_GOTO(BN_rshift(b, a, i + 1)); + CHECK_GOTO(BN_add(c, c, c)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " / "); - BN_print(bp, c); + CHECK_GOTO(BN_print(bp, c)); BIO_puts(bp, " - "); } - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, "\n"); } - BN_div(d, e, a, c, ctx); - BN_sub(d, d, b); + CHECK_GOTO(BN_div(d, e, a, c, ctx)); + CHECK_GOTO(BN_sub(d, d, b)); if (!BN_is_zero(d)) { fprintf(stderr, "Right shift test failed!\n"); rc = 0; break; } } +err: BN_free(a); BN_free(b); BN_free(c); @@ -2342,28 +2372,29 @@ test_rshift1(BIO *bp) b = BN_new(); c = BN_new(); - BN_bntest_rand(a, 200, 0, 0); + CHECK_GOTO(BN_bntest_rand(a, 200, 0, 0)); a->neg = rand_neg(); for (i = 0; i < num0; i++) { - (void)BN_rshift1(b, a); + CHECK_GOTO(BN_rshift1(b, a)); if (bp != NULL) { if (!results) { - BN_print(bp, a); + CHECK_GOTO(BN_print(bp, a)); BIO_puts(bp, " / 2"); BIO_puts(bp, " - "); } - BN_print(bp, b); + CHECK_GOTO(BN_print(bp, b)); BIO_puts(bp, "\n"); } - BN_sub(c, a, b); - BN_sub(c, c, b); + CHECK_GOTO(BN_sub(c, a, b)); + CHECK_GOTO(BN_sub(c, c, b)); if (!BN_is_zero(c) && !BN_abs_is_word(c, 1)) { fprintf(stderr, "Right shift one test failed!\n"); rc = 0; break; } - BN_copy(a, b); + CHECK_GOTO(BN_copy(a, b)); } +err: BN_free(a); BN_free(b); BN_free(c); @@ -2382,17 +2413,17 @@ rand_neg(void) int test_mod_exp_sizes(BIO *bp, BN_CTX *ctx) { - BN_MONT_CTX *mont_ctx; + BN_MONT_CTX *mont_ctx = NULL; BIGNUM *p, *x, *y, *r, *r2; int size; - int ok = 0; + int rc = 0; BN_CTX_start(ctx); - p = BN_CTX_get(ctx); - x = BN_CTX_get(ctx); - y = BN_CTX_get(ctx); - r = BN_CTX_get(ctx); - r2 = BN_CTX_get(ctx); + CHECK_GOTO(p = BN_CTX_get(ctx)); + CHECK_GOTO(x = BN_CTX_get(ctx)); + CHECK_GOTO(y = BN_CTX_get(ctx)); + CHECK_GOTO(r = BN_CTX_get(ctx)); + CHECK_GOTO(r2 = BN_CTX_get(ctx)); mont_ctx = BN_MONT_CTX_new(); if (r2 == NULL || mont_ctx == NULL) @@ -2410,8 +2441,10 @@ test_mod_exp_sizes(BIO *bp, BN_CTX *ctx) goto err; if (BN_cmp(r, r2) != 0) { - char *r_str = BN_bn2hex(r); - char *r2_str = BN_bn2hex(r2); + char *r_str = NULL; + char *r2_str = NULL; + CHECK_GOTO(r_str = BN_bn2hex(r)); + CHECK_GOTO(r2_str = BN_bn2hex(r2)); printf("Incorrect answer at size %d: %s vs %s\n", size, r_str, r2_str); @@ -2421,10 +2454,10 @@ test_mod_exp_sizes(BIO *bp, BN_CTX *ctx) } } - ok = 1; + rc = 1; err: BN_MONT_CTX_free(mont_ctx); BN_CTX_end(ctx); - return ok; + return rc; } |