From: tb Date: Thu, 1 Dec 2022 14:32:06 +0000 (+0000) Subject: Test prime constants exposed in public BN API X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=6669d576ee3822d163b17f4e6208325edfa2dde2;p=openbsd Test prime constants exposed in public BN API Run the prime constants exposed in BN_get0_nist_prime_*() and BN_get_rfc3526_prime_*() through Ballie-PSW. --- diff --git a/regress/lib/libcrypto/bn/general/bn_primes.c b/regress/lib/libcrypto/bn/general/bn_primes.c index cf13db6f8e1..e637932cccc 100644 --- a/regress/lib/libcrypto/bn/general/bn_primes.c +++ b/regress/lib/libcrypto/bn/general/bn_primes.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bn_primes.c,v 1.3 2022/12/01 13:49:12 tb Exp $ */ +/* $OpenBSD: bn_primes.c,v 1.4 2022/12/01 14:32:06 tb Exp $ */ /* * Copyright (c) 2022 Theo Buehler * @@ -76,6 +76,101 @@ test_bn_is_prime_fasttest(int do_trial_division) return failed; } +#define BN_PRIME_FN_INIT(a) { .fn = a, .name = #a } + +static const struct test_dynamic_api { + BIGNUM *(*fn)(BIGNUM *); + const char *name; +} dynamic_api_data[] = { + BN_PRIME_FN_INIT(BN_get_rfc2409_prime_1024), + BN_PRIME_FN_INIT(BN_get_rfc2409_prime_768), + BN_PRIME_FN_INIT(BN_get_rfc3526_prime_1536), + BN_PRIME_FN_INIT(BN_get_rfc3526_prime_2048), + BN_PRIME_FN_INIT(BN_get_rfc3526_prime_3072), + BN_PRIME_FN_INIT(BN_get_rfc3526_prime_4096), + BN_PRIME_FN_INIT(BN_get_rfc3526_prime_6144), + BN_PRIME_FN_INIT(BN_get_rfc3526_prime_8192), +}; + +#define N_DYNAMIC_TESTS (sizeof(dynamic_api_data) / sizeof(dynamic_api_data[0])) + +static const struct test_const_api { + const BIGNUM *(*fn)(void); + const char *name; +} const_api_data[] = { + BN_PRIME_FN_INIT(BN_get0_nist_prime_192), + BN_PRIME_FN_INIT(BN_get0_nist_prime_224), + BN_PRIME_FN_INIT(BN_get0_nist_prime_256), + BN_PRIME_FN_INIT(BN_get0_nist_prime_384), + BN_PRIME_FN_INIT(BN_get0_nist_prime_521), +}; + +#define N_CONST_TESTS (sizeof(const_api_data) / sizeof(const_api_data[0])) + +static int +test_prime_dynamic_api(const struct test_dynamic_api *tc) +{ + BIGNUM *prime; + int ret; + int failed = 1; + + if ((prime = tc->fn(NULL)) == NULL) { + fprintf(stderr, "%s failed\n", tc->name); + goto err; + } + + if ((ret = BN_is_prime_fasttest_ex(prime, 1, NULL, 1, NULL)) != 1) { + fprintf(stderr, "%s: %s want 1, got %d\n", tc->name, + "BN_is_prime_fasttest_ex", ret); + goto err; + } + + failed = 0; + + err: + BN_free(prime); + return failed; +} + +static int +test_prime_const_api(const struct test_const_api *tc) +{ + const BIGNUM *prime; + int ret; + int failed = 1; + + if ((prime = tc->fn()) == NULL) { + fprintf(stderr, "%s failed\n", tc->name); + goto err; + } + + if ((ret = BN_is_prime_fasttest_ex(prime, 1, NULL, 1, NULL)) != 1) { + fprintf(stderr, "%s: %s: want 1, got %d\n", tc->name, + "BN_is_prime_fasttest_ex", ret); + goto err; + } + + failed = 0; + + err: + return failed; +} + +static int +test_prime_constants(void) +{ + size_t i; + int failed = 0; + + for (i = 0; i < N_DYNAMIC_TESTS; i++) + failed |= test_prime_dynamic_api(&dynamic_api_data[i]); + + for (i = 0; i < N_CONST_TESTS; i++) + failed |= test_prime_const_api(&const_api_data[i]); + + return failed; +} + int main(void) { @@ -83,6 +178,7 @@ main(void) failed |= test_bn_is_prime_fasttest(0); failed |= test_bn_is_prime_fasttest(1); + failed |= test_prime_constants(); return failed; }