Commit 8927c278 authored by Felix Laurie von Massenbach's avatar Felix Laurie von Massenbach Committed by Ben Laurie
Browse files

Add a test to check we're really generating probable primes.

parent 9a3a9974
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -463,7 +463,7 @@ loop:
err:
	BN_CTX_end(ctx);
	bn_check_top(rnd);
	return(ret);
	return ret;
	}

static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1,
+38 −0
Original line number Diff line number Diff line
@@ -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 */
@@ -121,6 +123,7 @@ 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;

@@ -270,6 +273,10 @@ int main(int argc, char *argv[])
	if (!test_small_prime(out,ctx)) goto err;
	(void)BIO_flush(out);

	message(out,"Probable prime generation with coprimes");
	if (!test_probable_prime_coprime(out,ctx)) goto err;
	(void)BIO_flush(out);

#ifndef OPENSSL_NO_EC2M
	message(out,"BN_GF2m_add");
	if (!test_gf2m_add(out)) goto err;
@@ -1923,6 +1930,37 @@ err:
	return ret;
	}

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;
	}

int test_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_)
	{
	BIGNUM *a,*b,*c,*d;