Fix WIN32 build by disabling bn* calls.
[openssl.git] / crypto / bn / bntest.c
index 8bc6d462e733ef389434ac4779f21a08a62f5f0c..6e18a6936317bc87049e4b27c6291b1f19b45c97 100644 (file)
@@ -87,6 +87,8 @@
 #include <openssl/x509.h>
 #include <openssl/err.h>
 
+#include "../crypto/bn/bn_lcl.h"
+
 const int num0 = 100; /* number of tests */
 const int num1 = 50;  /* additional tests for some functions */
 const int num2 = 5;   /* number of tests for slow functions */
@@ -120,6 +122,8 @@ int test_gf2m_mod_sqrt(BIO *bp,BN_CTX *ctx);
 int test_gf2m_mod_solve_quad(BIO *bp,BN_CTX *ctx);
 int test_kron(BIO *bp,BN_CTX *ctx);
 int test_sqrt(BIO *bp,BN_CTX *ctx);
+int test_small_prime(BIO *bp,BN_CTX *ctx);
+int test_probable_prime_coprime(BIO *bp,BN_CTX *ctx);
 int rand_neg(void);
 static int results=0;
 
@@ -264,6 +268,19 @@ int main(int argc, char *argv[])
        message(out,"BN_mod_sqrt");
        if (!test_sqrt(out,ctx)) goto err;
        (void)BIO_flush(out);
+
+       message(out,"Small prime generation");
+       if (!test_small_prime(out,ctx)) goto err;
+       (void)BIO_flush(out);
+
+#ifdef OPENSSL_SYS_WIN32
+       message(out,"Probable prime generation with coprimes disabled");
+#else
+       message(out,"Probable prime generation with coprimes");
+       if (!test_probable_prime_coprime(out,ctx)) goto err;
+#endif
+       (void)BIO_flush(out);
+
 #ifndef OPENSSL_NO_EC2M
        message(out,"BN_GF2m_add");
        if (!test_gf2m_add(out)) goto err;
@@ -1020,7 +1037,6 @@ int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx)
 int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx)
        {
        BIGNUM *a,*p,*m,*d,*e;
-       int i;
 
        BN_MONT_CTX *mont;
 
@@ -1896,6 +1912,59 @@ int test_sqrt(BIO *bp, BN_CTX *ctx)
        return ret;
        }
 
+int test_small_prime(BIO *bp,BN_CTX *ctx)
+       {
+       static const int bits = 10;
+       int ret = 0;
+       BIGNUM r;
+
+       BN_init(&r);
+       if (!BN_generate_prime_ex(&r, bits, 0, NULL, NULL, NULL))
+               goto err;
+       if (BN_num_bits(&r) != bits)
+               {
+               BIO_printf(bp, "Expected %d bit prime, got %d bit number\n", bits, BN_num_bits(&r));
+               goto err;
+               }
+
+       ret = 1;
+
+err:
+       BN_clear(&r);
+       return ret;
+       }
+#ifndef OPENSSL_SYS_WIN32
+int test_probable_prime_coprime(BIO *bp, BN_CTX *ctx)
+       {
+       int i, j, ret = 0;
+       BIGNUM r;
+       BN_ULONG primes[5] = { 2, 3, 5, 7, 11 };
+
+       BN_init(&r);
+       
+       for (i = 0; i < 1000; i++)
+               {
+               if (!bn_probable_prime_dh_coprime(&r, 1024, ctx)) goto err;
+               
+               for (j = 0; j < 5; j++)
+                       {
+                       if (BN_mod_word(&r, primes[j]) == 0)
+                               {
+                               BIO_printf(bp, "Number generated is not coprime to %ld:\n", primes[j]);
+                               BN_print_fp(stdout, &r);
+                               BIO_printf(bp, "\n");
+                               goto err;
+                               }
+                       }
+               }
+
+       ret = 1;
+
+err:
+       BN_clear(&r);
+       return ret;
+       }
+#endif
 int test_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_)
        {
        BIGNUM *a,*b,*c,*d;