diff options
author | tb <> | 2022-12-01 14:32:06 +0000 |
---|---|---|
committer | tb <> | 2022-12-01 14:32:06 +0000 |
commit | 27a426a371fafd6a5de905f5335425a4f20844fb (patch) | |
tree | 279222236935c276f35e13c543ece5db52e43b26 /src | |
parent | 31bd65f66329da0883d7ff572fa5a574fcd1afa2 (diff) | |
download | openbsd-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.c | 98 |
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 | |||
81 | static 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 | |||
97 | static 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 | |||
110 | static int | ||
111 | test_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 | |||
135 | static int | ||
136 | test_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 | |||
159 | static int | ||
160 | test_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 | |||
79 | int | 174 | int |
80 | main(void) | 175 | main(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 | } |