summaryrefslogtreecommitdiffstats
path: root/test/bn_internal_test.c
diff options
context:
space:
mode:
authorShane Lontis <shane.lontis@oracle.com>2018-07-05 09:28:51 +1000
committerMatt Caswell <matt@openssl.org>2019-03-12 12:00:52 +0000
commit8240d5fa6535fb20e24fbe7eadbb3d6452a8d305 (patch)
tree3e785e20a83324c8dab559a5e3da6d533bb82f33 /test/bn_internal_test.c
parentd1229190bfbb19439589557e4d65f9bccab09b2d (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.c103
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);
+}
+