Commit 98486a93 authored by Ulf Möller's avatar Ulf Möller
Browse files

improved bignum test as in 0.9.7.

We need this to find out if the bignum failures on Irix and Alpha are
caused by new 0.9.7 code or just aren't triggered in the 0.9.6 test suite.
parent 4910cbf6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@

 Changes between 0.9.6 and 0.9.6a  [xx XXX 2001]

  *) Use better test patterns in bntest.
     [Ulf Möller]

  *) Initialise "ex_data" member of RSA/DSA/DH structures prior to calling
     the method-specific "init()" handler. Also clean up ex_data after
     calling the method-specific "finish()" handler. Previously, this was
+2 −0
Original line number Diff line number Diff line
@@ -468,6 +468,8 @@ BN_ULONG bn_sub_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int num);
# define bn_dump(a,b)
#endif

int BN_bntest_rand(BIGNUM *rnd, int bits, int top,int bottom);

/* BEGIN ERROR CODES */
/* The following lines are auto generated by the script mkerr.pl. Any changes
 * made after this point may be overwritten when the script is next run.
+28 −0
Original line number Diff line number Diff line
@@ -100,6 +100,27 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
			goto err;
		}

#if 1
	if (pseudorand == 2)
		{
		/* generate patterns that are more likely to trigger BN
		   library bugs */
		int i;
		unsigned char c;

		for (i = 0; i < bytes; i++)
			{
			RAND_pseudo_bytes(&c, 1);
			if (c >= 128 && i > 0)
				buf[i] = buf[i-1];
			else if (c < 42)
				buf[i] = 0;
			else if (c < 84)
				buf[i] = 255;
			}
		}
#endif

	if (top != -1)
		{
		if (top)
@@ -143,6 +164,13 @@ int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom)
	return bnrand(1, rnd, bits, top, bottom);
	}

#if 1
int     BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom)
	{
	return bnrand(2, rnd, bits, top, bottom);
	}
#endif

/* random number r:  0 <= r < range */
int	BN_rand_range(BIGNUM *r, BIGNUM *range)
	{
+30 −32
Original line number Diff line number Diff line
@@ -120,9 +120,7 @@ int main(int argc, char *argv[])

	results = 0;

	RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_rand may fail, and we don't
	                                       * even check its return value
	                                       * (which we should) */
	RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime may fail */

	argc--;
	argv++;
@@ -251,10 +249,10 @@ int test_add(BIO *bp)
	BN_init(&b);
	BN_init(&c);

	BN_rand(&a,512,0,0);
	BN_bntest_rand(&a,512,0,0);
	for (i=0; i<num0; i++)
		{
		BN_rand(&b,450+i,0,0);
		BN_bntest_rand(&b,450+i,0,0);
		a.neg=rand_neg();
		b.neg=rand_neg();
		if (bp == NULL)
@@ -303,14 +301,14 @@ int test_sub(BIO *bp)
		{
		if (i < num1)
			{
			BN_rand(&a,512,0,0);
			BN_bntest_rand(&a,512,0,0);
			BN_copy(&b,&a);
			if (BN_set_bit(&a,i)==0) return(0);
			BN_add_word(&b,i);
			}
		else
			{
			BN_rand(&b,400+i-num1,0,0);
			BN_bntest_rand(&b,400+i-num1,0,0);
			a.neg=rand_neg();
			b.neg=rand_neg();
			}
@@ -360,13 +358,13 @@ int test_div(BIO *bp, BN_CTX *ctx)
		{
		if (i < num1)
			{
			BN_rand(&a,400,0,0);
			BN_bntest_rand(&a,400,0,0);
			BN_copy(&b,&a);
			BN_lshift(&a,&a,i);
			BN_add_word(&a,i);
			}
		else
			BN_rand(&b,50+3*(i-num1),0,0);
			BN_bntest_rand(&b,50+3*(i-num1),0,0);
		a.neg=rand_neg();
		b.neg=rand_neg();
		if (bp == NULL)
@@ -430,13 +428,13 @@ int test_div_recp(BIO *bp, BN_CTX *ctx)
		{
		if (i < num1)
			{
			BN_rand(&a,400,0,0);
			BN_bntest_rand(&a,400,0,0);
			BN_copy(&b,&a);
			BN_lshift(&a,&a,i);
			BN_add_word(&a,i);
			}
		else
			BN_rand(&b,50+3*(i-num1),0,0);
			BN_bntest_rand(&b,50+3*(i-num1),0,0);
		a.neg=rand_neg();
		b.neg=rand_neg();
		BN_RECP_CTX_set(&recp,&b,ctx);
@@ -507,11 +505,11 @@ int test_mul(BIO *bp)
		{
		if (i <= num1)
			{
			BN_rand(&a,100,0,0);
			BN_rand(&b,100,0,0);
			BN_bntest_rand(&a,100,0,0);
			BN_bntest_rand(&b,100,0,0);
			}
		else
			BN_rand(&b,i-num1,0,0);
			BN_bntest_rand(&b,i-num1,0,0);
		a.neg=rand_neg();
		b.neg=rand_neg();
		if (bp == NULL)
@@ -560,7 +558,7 @@ int test_sqr(BIO *bp, BN_CTX *ctx)

	for (i=0; i<num0; i++)
		{
		BN_rand(&a,40+i*10,0,0);
		BN_bntest_rand(&a,40+i*10,0,0);
		a.neg=rand_neg();
		if (bp == NULL)
			for (j=0; j<100; j++)
@@ -611,15 +609,15 @@ int test_mont(BIO *bp, BN_CTX *ctx)

	mont=BN_MONT_CTX_new();

	BN_rand(&a,100,0,0); /**/
	BN_rand(&b,100,0,0); /**/
	BN_bntest_rand(&a,100,0,0); /**/
	BN_bntest_rand(&b,100,0,0); /**/
	for (i=0; i<num2; i++)
		{
		int bits = (200*(i+1))/num2;

		if (bits == 0)
			continue;
		BN_rand(&n,bits,0,1);
		BN_bntest_rand(&n,bits,0,1);
		BN_MONT_CTX_set(mont,&n,ctx);

		BN_to_montgomery(&A,&a,mont,ctx);
@@ -681,10 +679,10 @@ int test_mod(BIO *bp, BN_CTX *ctx)
	d=BN_new();
	e=BN_new();

	BN_rand(a,1024,0,0); /**/
	BN_bntest_rand(a,1024,0,0); /**/
	for (i=0; i<num0; i++)
		{
		BN_rand(b,450+i*10,0,0); /**/
		BN_bntest_rand(b,450+i*10,0,0); /**/
		a->neg=rand_neg();
		b->neg=rand_neg();
		if (bp == NULL)
@@ -730,11 +728,11 @@ int test_mod_mul(BIO *bp, BN_CTX *ctx)
	d=BN_new();
	e=BN_new();

	BN_rand(c,1024,0,0); /**/
	BN_bntest_rand(c,1024,0,0); /**/
	for (i=0; i<num0; i++)
		{
		BN_rand(a,475+i*10,0,0); /**/
		BN_rand(b,425+i*11,0,0); /**/
		BN_bntest_rand(a,475+i*10,0,0); /**/
		BN_bntest_rand(b,425+i*11,0,0); /**/
		a->neg=rand_neg();
		b->neg=rand_neg();
	/*	if (bp == NULL)
@@ -792,11 +790,11 @@ int test_mod_exp(BIO *bp, BN_CTX *ctx)
	d=BN_new();
	e=BN_new();

	BN_rand(c,30,0,1); /* must be odd for montgomery */
	BN_bntest_rand(c,30,0,1); /* must be odd for montgomery */
	for (i=0; i<num2; i++)
		{
		BN_rand(a,20+i*5,0,0); /**/
		BN_rand(b,2+i,0,0); /**/
		BN_bntest_rand(a,20+i*5,0,0); /**/
		BN_bntest_rand(b,2+i,0,0); /**/

		if (!BN_mod_exp(d,a,b,c,ctx))
			return(00);
@@ -846,8 +844,8 @@ int test_exp(BIO *bp, BN_CTX *ctx)

	for (i=0; i<num2; i++)
		{
		BN_rand(a,20+i*5,0,0); /**/
		BN_rand(b,2+i,0,0); /**/
		BN_bntest_rand(a,20+i*5,0,0); /**/
		BN_bntest_rand(b,2+i,0,0); /**/

		if (!BN_exp(d,a,b,ctx))
			return(00);
@@ -897,7 +895,7 @@ int test_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_)
	else
	    {
	    a=BN_new();
	    BN_rand(a,200,0,0); /**/
	    BN_bntest_rand(a,200,0,0); /**/
	    a->neg=rand_neg();
	    }
	for (i=0; i<num0; i++)
@@ -949,7 +947,7 @@ int test_lshift1(BIO *bp)
	b=BN_new();
	c=BN_new();

	BN_rand(a,200,0,0); /**/
	BN_bntest_rand(a,200,0,0); /**/
	a->neg=rand_neg();
	for (i=0; i<num0; i++)
		{
@@ -993,7 +991,7 @@ int test_rshift(BIO *bp,BN_CTX *ctx)
	e=BN_new();
	BN_one(c);

	BN_rand(a,200,0,0); /**/
	BN_bntest_rand(a,200,0,0); /**/
	a->neg=rand_neg();
	for (i=0; i<num0; i++)
		{
@@ -1036,7 +1034,7 @@ int test_rshift1(BIO *bp)
	b=BN_new();
	c=BN_new();

	BN_rand(a,200,0,0); /**/
	BN_bntest_rand(a,200,0,0); /**/
	a->neg=rand_neg();
	for (i=0; i<num0; i++)
		{