diff options
| author | tb <> | 2022-12-01 14:32:06 +0000 |
|---|---|---|
| committer | tb <> | 2022-12-01 14:32:06 +0000 |
| commit | b3099be65478dbe499d880dba3d16a6981a27ed4 (patch) | |
| tree | 279222236935c276f35e13c543ece5db52e43b26 /src | |
| parent | 062c760601bb62e9109b798f0ba0396a3d813018 (diff) | |
| download | openbsd-b3099be65478dbe499d880dba3d16a6981a27ed4.tar.gz openbsd-b3099be65478dbe499d880dba3d16a6981a27ed4.tar.bz2 openbsd-b3099be65478dbe499d880dba3d16a6981a27ed4.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 | } |
