summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2022-12-01 14:32:06 +0000
committertb <>2022-12-01 14:32:06 +0000
commit27a426a371fafd6a5de905f5335425a4f20844fb (patch)
tree279222236935c276f35e13c543ece5db52e43b26 /src
parent31bd65f66329da0883d7ff572fa5a574fcd1afa2 (diff)
downloadopenbsd-27a426a371fafd6a5de905f5335425a4f20844fb.tar.gz
openbsd-27a426a371fafd6a5de905f5335425a4f20844fb.tar.bz2
openbsd-27a426a371fafd6a5de905f5335425a4f20844fb.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/bn/general/bn_primes.c98
1 files changed, 97 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/bn/general/bn_primes.c b/src/regress/lib/libcrypto/bn/general/bn_primes.c
index cf13db6f8e..e637932ccc 100644
--- a/src/regress/lib/libcrypto/bn/general/bn_primes.c
+++ b/src/regress/lib/libcrypto/bn/general/bn_primes.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bn_primes.c,v 1.3 2022/12/01 13:49:12 tb Exp $ */ 1/* $OpenBSD: bn_primes.c,v 1.4 2022/12/01 14:32:06 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2022 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2022 Theo Buehler <tb@openbsd.org>
4 * 4 *
@@ -76,6 +76,101 @@ test_bn_is_prime_fasttest(int do_trial_division)
76 return failed; 76 return failed;
77} 77}
78 78
79#define BN_PRIME_FN_INIT(a) { .fn = a, .name = #a }
80
81static const struct test_dynamic_api {
82 BIGNUM *(*fn)(BIGNUM *);
83 const char *name;
84} dynamic_api_data[] = {
85 BN_PRIME_FN_INIT(BN_get_rfc2409_prime_1024),
86 BN_PRIME_FN_INIT(BN_get_rfc2409_prime_768),
87 BN_PRIME_FN_INIT(BN_get_rfc3526_prime_1536),
88 BN_PRIME_FN_INIT(BN_get_rfc3526_prime_2048),
89 BN_PRIME_FN_INIT(BN_get_rfc3526_prime_3072),
90 BN_PRIME_FN_INIT(BN_get_rfc3526_prime_4096),
91 BN_PRIME_FN_INIT(BN_get_rfc3526_prime_6144),
92 BN_PRIME_FN_INIT(BN_get_rfc3526_prime_8192),
93};
94
95#define N_DYNAMIC_TESTS (sizeof(dynamic_api_data) / sizeof(dynamic_api_data[0]))
96
97static const struct test_const_api {
98 const BIGNUM *(*fn)(void);
99 const char *name;
100} const_api_data[] = {
101 BN_PRIME_FN_INIT(BN_get0_nist_prime_192),
102 BN_PRIME_FN_INIT(BN_get0_nist_prime_224),
103 BN_PRIME_FN_INIT(BN_get0_nist_prime_256),
104 BN_PRIME_FN_INIT(BN_get0_nist_prime_384),
105 BN_PRIME_FN_INIT(BN_get0_nist_prime_521),
106};
107
108#define N_CONST_TESTS (sizeof(const_api_data) / sizeof(const_api_data[0]))
109
110static int
111test_prime_dynamic_api(const struct test_dynamic_api *tc)
112{
113 BIGNUM *prime;
114 int ret;
115 int failed = 1;
116
117 if ((prime = tc->fn(NULL)) == NULL) {
118 fprintf(stderr, "%s failed\n", tc->name);
119 goto err;
120 }
121
122 if ((ret = BN_is_prime_fasttest_ex(prime, 1, NULL, 1, NULL)) != 1) {
123 fprintf(stderr, "%s: %s want 1, got %d\n", tc->name,
124 "BN_is_prime_fasttest_ex", ret);
125 goto err;
126 }
127
128 failed = 0;
129
130 err:
131 BN_free(prime);
132 return failed;
133}
134
135static int
136test_prime_const_api(const struct test_const_api *tc)
137{
138 const BIGNUM *prime;
139 int ret;
140 int failed = 1;
141
142 if ((prime = tc->fn()) == NULL) {
143 fprintf(stderr, "%s failed\n", tc->name);
144 goto err;
145 }
146
147 if ((ret = BN_is_prime_fasttest_ex(prime, 1, NULL, 1, NULL)) != 1) {
148 fprintf(stderr, "%s: %s: want 1, got %d\n", tc->name,
149 "BN_is_prime_fasttest_ex", ret);
150 goto err;
151 }
152
153 failed = 0;
154
155 err:
156 return failed;
157}
158
159static int
160test_prime_constants(void)
161{
162 size_t i;
163 int failed = 0;
164
165 for (i = 0; i < N_DYNAMIC_TESTS; i++)
166 failed |= test_prime_dynamic_api(&dynamic_api_data[i]);
167
168 for (i = 0; i < N_CONST_TESTS; i++)
169 failed |= test_prime_const_api(&const_api_data[i]);
170
171 return failed;
172}
173
79int 174int
80main(void) 175main(void)
81{ 176{
@@ -83,6 +178,7 @@ main(void)
83 178
84 failed |= test_bn_is_prime_fasttest(0); 179 failed |= test_bn_is_prime_fasttest(0);
85 failed |= test_bn_is_prime_fasttest(1); 180 failed |= test_bn_is_prime_fasttest(1);
181 failed |= test_prime_constants();
86 182
87 return failed; 183 return failed;
88} 184}