#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 */
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;
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;
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;