diff options
author | Shane Lontis <shane.lontis@oracle.com> | 2018-07-05 09:28:51 +1000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2019-03-12 12:00:52 +0000 |
commit | 8240d5fa6535fb20e24fbe7eadbb3d6452a8d305 (patch) | |
tree | 3e785e20a83324c8dab559a5e3da6d533bb82f33 /test/bn_internal_test.c | |
parent | d1229190bfbb19439589557e4d65f9bccab09b2d (diff) |
FIPS 186-4 RSA Generation & Validation
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6652)
Diffstat (limited to 'test/bn_internal_test.c')
-rw-r--r-- | test/bn_internal_test.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/test/bn_internal_test.c b/test/bn_internal_test.c new file mode 100644 index 0000000000..eabeaf8b9f --- /dev/null +++ b/test/bn_internal_test.c @@ -0,0 +1,103 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ +#include <assert.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <ctype.h> + +#include <openssl/bn.h> +#include <openssl/crypto.h> +#include <openssl/err.h> +#include <openssl/rand.h> +#include "internal/nelem.h" +#include "internal/numbers.h" +#include "testutil.h" +#include "bn_prime.h" +#include "internal/bn_int.h" + +static BN_CTX *ctx; + +static int test_is_prime_enhanced(void) +{ + int ret; + int status = 0; + BIGNUM *bn = NULL; + + ret = TEST_ptr(bn = BN_new()) + /* test passing a prime returns the correct status */ + && TEST_true(BN_set_word(bn, 11)) + /* return extra parameters related to composite */ + && TEST_true(bn_miller_rabin_is_prime(bn, 10, ctx, NULL, 1, &status)) + && TEST_int_eq(status, BN_PRIMETEST_PROBABLY_PRIME); + BN_free(bn); + return ret; +} + +static int composites[] = { + 9, 21, 77, 81, 265 +}; + +static int test_is_composite_enhanced(int id) +{ + int ret; + int status = 0; + BIGNUM *bn = NULL; + + ret = TEST_ptr(bn = BN_new()) + /* negative tests for different composite numbers */ + && TEST_true(BN_set_word(bn, composites[id])) + && TEST_true(bn_miller_rabin_is_prime(bn, 10, ctx, NULL, 1, &status)) + && TEST_int_ne(status, BN_PRIMETEST_PROBABLY_PRIME); + + BN_free(bn); + return ret; +} + +/* Test that multiplying all the small primes from 3 to 751 equals a constant. + * This test is mainly used to test that both 32 and 64 bit are correct. + */ +static int test_bn_small_factors(void) +{ + int ret = 0, i; + BIGNUM *b = NULL; + + if (!(TEST_ptr(b = BN_new()) && TEST_true(BN_set_word(b, 3)))) + goto err; + + for (i = 1; i < NUMPRIMES; i++) { + prime_t p = primes[i]; + if (p > 3 && p <= 751) + BN_mul_word(b, p); + if (p > 751) + break; + } + ret = TEST_BN_eq(bn_get0_small_factors(), b); +err: + BN_free(b); + return ret; +} + +int setup_tests(void) +{ + if (!TEST_ptr(ctx = BN_CTX_new())) + return 0; + + ADD_TEST(test_is_prime_enhanced); + ADD_ALL_TESTS(test_is_composite_enhanced, (int)OSSL_NELEM(composites)); + ADD_TEST(test_bn_small_factors); + + return 1; +} + +void cleanup_tests(void) +{ + BN_CTX_free(ctx); +} + |