-/* $OpenBSD: exptest.c,v 1.7 2018/11/08 22:20:25 jsing Exp $ */
+/* $OpenBSD: exptest.c,v 1.8 2021/11/18 15:17:31 tb Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* Test that r == 0 in test_exp_mod_zero(). Returns one on success,
* returns zero and prints debug output otherwise.
*/
-static int a_is_zero_mod_one(const char *method, const BIGNUM *r,
- const BIGNUM *a) {
+static int
+a_is_zero_mod_one(const char *method, const BIGNUM *r, const BIGNUM *a)
+{
if (!BN_is_zero(r)) {
fprintf(stderr, "%s failed:\n", method);
fprintf(stderr, "a ** 0 mod 1 = r (should be 0)\n");
/*
* test_exp_mod_zero tests that x**0 mod 1 == 0. It returns zero on success.
*/
-static int test_exp_mod_zero(void)
+static int
+test_exp_mod_zero(void)
{
- BIGNUM a, p, m;
- BIGNUM r;
+ BIGNUM *a = NULL, *p = NULL, *m = NULL, *r = NULL;
BN_ULONG one_word = 1;
- BN_CTX *ctx = BN_CTX_new();
+ BN_CTX *ctx;
int ret = 1, failed = 0;
- BN_init(&m);
- BN_one(&m);
+ if ((ctx = BN_CTX_new()) == NULL)
+ goto err;
+ if ((m = BN_new()) == NULL)
+ goto err;
+ BN_one(m);
- BN_init(&a);
- BN_one(&a);
+ if ((a = BN_new()) == NULL)
+ goto err;
+ BN_one(a);
- BN_init(&p);
- BN_zero(&p);
+ if ((p = BN_new()) == NULL)
+ goto err;
+ BN_zero(p);
- BN_init(&r);
+ if ((r = BN_new()) == NULL)
+ goto err;
- if (!BN_rand(&a, 1024, 0, 0))
+ if (!BN_rand(a, 1024, 0, 0))
goto err;
- if (!BN_mod_exp(&r, &a, &p, &m, ctx))
+ if (!BN_mod_exp(r, a, p, m, ctx))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp", r, a))
failed = 1;
- if (!BN_mod_exp_ct(&r, &a, &p, &m, ctx))
+ if (!BN_mod_exp_ct(r, a, p, m, ctx))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_ct", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_ct", r, a))
failed = 1;
- if (!BN_mod_exp_nonct(&r, &a, &p, &m, ctx))
+ if (!BN_mod_exp_nonct(r, a, p, m, ctx))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_nonct", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_nonct", r, a))
failed = 1;
- if (!BN_mod_exp_recp(&r, &a, &p, &m, ctx))
+ if (!BN_mod_exp_recp(r, a, p, m, ctx))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_recp", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_recp", r, a))
failed = 1;
- if (!BN_mod_exp_simple(&r, &a, &p, &m, ctx))
+ if (!BN_mod_exp_simple(r, a, p, m, ctx))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_simple", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_simple", r, a))
failed = 1;
- if (!BN_mod_exp_mont(&r, &a, &p, &m, ctx, NULL))
+ if (!BN_mod_exp_mont(r, a, p, m, ctx, NULL))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_mont", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_mont", r, a))
failed = 1;
- if (!BN_mod_exp_mont_ct(&r, &a, &p, &m, ctx, NULL))
+ if (!BN_mod_exp_mont_ct(r, a, p, m, ctx, NULL))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_mont_ct", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_mont_ct", r, a))
failed = 1;
- if (!BN_mod_exp_mont_nonct(&r, &a, &p, &m, ctx, NULL))
+ if (!BN_mod_exp_mont_nonct(r, a, p, m, ctx, NULL))
goto err;
- if (!a_is_zero_mod_one("BN_mod_exp_mont_nonct", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_mont_nonct", r, a))
failed = 1;
- if (!BN_mod_exp_mont_consttime(&r, &a, &p, &m, ctx, NULL)) {
+ if (!BN_mod_exp_mont_consttime(r, a, p, m, ctx, NULL)) {
goto err;
}
- if (!a_is_zero_mod_one("BN_mod_exp_mont_consttime", &r, &a))
+ if (!a_is_zero_mod_one("BN_mod_exp_mont_consttime", r, a))
failed = 1;
/*
* A different codepath exists for single word multiplication
* in non-constant-time only.
*/
- if (!BN_mod_exp_mont_word(&r, one_word, &p, &m, ctx, NULL))
+ if (!BN_mod_exp_mont_word(r, one_word, p, m, ctx, NULL))
goto err;
- if (!BN_is_zero(&r)) {
+ if (!BN_is_zero(r)) {
fprintf(stderr, "BN_mod_exp_mont_word failed:\n");
fprintf(stderr, "1 ** 0 mod 1 = r (should be 0)\n");
fprintf(stderr, "r = ");
- BN_print_fp(stderr, &r);
+ BN_print_fp(stderr, r);
fprintf(stderr, "\n");
return 0;
}
ret = failed;
err:
- BN_free(&r);
- BN_free(&a);
- BN_free(&p);
- BN_free(&m);
+ BN_free(r);
+ BN_free(a);
+ BN_free(p);
+ BN_free(m);
BN_CTX_free(ctx);
return ret;