⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bntest.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 3 页
字号:
	BN_free(&e);	BN_CTX_free(ctx);	return(1);	}int test_sqr(BIO *bp, BN_CTX *ctx)	{	BIGNUM a,c,d,e;	int i;	BN_init(&a);	BN_init(&c);	BN_init(&d);	BN_init(&e);	for (i=0; i<num0; i++)		{		BN_bntest_rand(&a,40+i*10,0,0);		a.neg=rand_neg();		BN_sqr(&c,&a,ctx);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,&a);				BIO_puts(bp," * ");				BN_print(bp,&a);				BIO_puts(bp," - ");				}			BN_print(bp,&c);			BIO_puts(bp,"\n");			}		BN_div(&d,&e,&c,&a,ctx);		BN_sub(&d,&d,&a);		if(!BN_is_zero(&d) || !BN_is_zero(&e))		    {		    fprintf(stderr,"Square test failed!\n");		    return 0;		    }		}	BN_free(&a);	BN_free(&c);	BN_free(&d);	BN_free(&e);	return(1);	}int test_mont(BIO *bp, BN_CTX *ctx)	{	BIGNUM a,b,c,d,A,B;	BIGNUM n;	int i;	BN_MONT_CTX *mont;	BN_init(&a);	BN_init(&b);	BN_init(&c);	BN_init(&d);	BN_init(&A);	BN_init(&B);	BN_init(&n);	mont=BN_MONT_CTX_new();	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_bntest_rand(&n,bits,0,1);		BN_MONT_CTX_set(mont,&n,ctx);		BN_nnmod(&a,&a,&n,ctx);		BN_nnmod(&b,&b,&n,ctx);		BN_to_montgomery(&A,&a,mont,ctx);		BN_to_montgomery(&B,&b,mont,ctx);		BN_mod_mul_montgomery(&c,&A,&B,mont,ctx);/**/		BN_from_montgomery(&A,&c,mont,ctx);/**/		if (bp != NULL)			{			if (!results)				{#ifdef undeffprintf(stderr,"%d * %d %% %d\n",BN_num_bits(&a),BN_num_bits(&b),BN_num_bits(mont->N));#endif				BN_print(bp,&a);				BIO_puts(bp," * ");				BN_print(bp,&b);				BIO_puts(bp," % ");				BN_print(bp,&(mont->N));				BIO_puts(bp," - ");				}			BN_print(bp,&A);			BIO_puts(bp,"\n");			}		BN_mod_mul(&d,&a,&b,&n,ctx);		BN_sub(&d,&d,&A);		if(!BN_is_zero(&d))		    {		    fprintf(stderr,"Montgomery multiplication test failed!\n");		    return 0;		    }		}	BN_MONT_CTX_free(mont);	BN_free(&a);	BN_free(&b);	BN_free(&c);	BN_free(&d);	BN_free(&A);	BN_free(&B);	BN_free(&n);	return(1);	}int test_mod(BIO *bp, BN_CTX *ctx)	{	BIGNUM *a,*b,*c,*d,*e;	int i;	a=BN_new();	b=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	BN_bntest_rand(a,1024,0,0); /**/	for (i=0; i<num0; i++)		{		BN_bntest_rand(b,450+i*10,0,0); /**/		a->neg=rand_neg();		b->neg=rand_neg();		BN_mod(c,a,b,ctx);/**/		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," % ");				BN_print(bp,b);				BIO_puts(bp," - ");				}			BN_print(bp,c);			BIO_puts(bp,"\n");			}		BN_div(d,e,a,b,ctx);		BN_sub(e,e,c);		if(!BN_is_zero(e))		    {		    fprintf(stderr,"Modulo test failed!\n");		    return 0;		    }		}	BN_free(a);	BN_free(b);	BN_free(c);	BN_free(d);	BN_free(e);	return(1);	}int test_mod_mul(BIO *bp, BN_CTX *ctx)	{	BIGNUM *a,*b,*c,*d,*e;	int i,j;	a=BN_new();	b=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	for (j=0; j<3; j++) {	BN_bntest_rand(c,1024,0,0); /**/	for (i=0; i<num0; i++)		{		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 (!BN_mod_mul(e,a,b,c,ctx))			{			unsigned long l;			while ((l=ERR_get_error()))				fprintf(stderr,"ERROR:%s\n",					ERR_error_string(l,NULL));			EXIT(1);			}		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," * ");				BN_print(bp,b);				BIO_puts(bp," % ");				BN_print(bp,c);				if ((a->neg ^ b->neg) && !BN_is_zero(e))					{					/* If  (a*b) % c  is negative,  c  must be added					 * in order to obtain the normalized remainder					 * (new with OpenSSL 0.9.7, previous versions of					 * BN_mod_mul could generate negative results)					 */					BIO_puts(bp," + ");					BN_print(bp,c);					}				BIO_puts(bp," - ");				}			BN_print(bp,e);			BIO_puts(bp,"\n");			}		BN_mul(d,a,b,ctx);		BN_sub(d,d,e);		BN_div(a,b,d,c,ctx);		if(!BN_is_zero(b))		    {		    fprintf(stderr,"Modulo multiply test failed!\n");		    ERR_print_errors_fp(stderr);		    return 0;		    }		}	}	BN_free(a);	BN_free(b);	BN_free(c);	BN_free(d);	BN_free(e);	return(1);	}int test_mod_exp(BIO *bp, BN_CTX *ctx)	{	BIGNUM *a,*b,*c,*d,*e;	int i;	a=BN_new();	b=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	BN_bntest_rand(c,30,0,1); /* must be odd for montgomery */	for (i=0; i<num2; i++)		{		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);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," ^ ");				BN_print(bp,b);				BIO_puts(bp," % ");				BN_print(bp,c);				BIO_puts(bp," - ");				}			BN_print(bp,d);			BIO_puts(bp,"\n");			}		BN_exp(e,a,b,ctx);		BN_sub(e,e,d);		BN_div(a,b,e,c,ctx);		if(!BN_is_zero(b))		    {		    fprintf(stderr,"Modulo exponentiation test failed!\n");		    return 0;		    }		}	BN_free(a);	BN_free(b);	BN_free(c);	BN_free(d);	BN_free(e);	return(1);	}int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx)	{	BIGNUM *a,*b,*c,*d,*e;	int i;	a=BN_new();	b=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	BN_bntest_rand(c,30,0,1); /* must be odd for montgomery */	for (i=0; i<num2; i++)		{		BN_bntest_rand(a,20+i*5,0,0); /**/		BN_bntest_rand(b,2+i,0,0); /**/		if (!BN_mod_exp_mont_consttime(d,a,b,c,ctx,NULL))			return(00);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," ^ ");				BN_print(bp,b);				BIO_puts(bp," % ");				BN_print(bp,c);				BIO_puts(bp," - ");				}			BN_print(bp,d);			BIO_puts(bp,"\n");			}		BN_exp(e,a,b,ctx);		BN_sub(e,e,d);		BN_div(a,b,e,c,ctx);		if(!BN_is_zero(b))		    {		    fprintf(stderr,"Modulo exponentiation test failed!\n");		    return 0;		    }		}	BN_free(a);	BN_free(b);	BN_free(c);	BN_free(d);	BN_free(e);	return(1);	}int test_exp(BIO *bp, BN_CTX *ctx)	{	BIGNUM *a,*b,*d,*e,*one;	int i;	a=BN_new();	b=BN_new();	d=BN_new();	e=BN_new();	one=BN_new();	BN_one(one);	for (i=0; i<num2; i++)		{		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);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," ^ ");				BN_print(bp,b);				BIO_puts(bp," - ");				}			BN_print(bp,d);			BIO_puts(bp,"\n");			}		BN_one(e);		for( ; !BN_is_zero(b) ; BN_sub(b,b,one))		    BN_mul(e,e,a,ctx);		BN_sub(e,e,d);		if(!BN_is_zero(e))		    {		    fprintf(stderr,"Exponentiation test failed!\n");		    return 0;		    }		}	BN_free(a);	BN_free(b);	BN_free(d);	BN_free(e);	BN_free(one);	return(1);	}int test_gf2m_add(BIO *bp)	{	BIGNUM a,b,c;	int i, ret = 0;	BN_init(&a);	BN_init(&b);	BN_init(&c);	for (i=0; i<num0; i++)		{		BN_rand(&a,512,0,0);		BN_copy(&b, BN_value_one());		a.neg=rand_neg();		b.neg=rand_neg();		BN_GF2m_add(&c,&a,&b);#if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */		if (bp != NULL)			{			if (!results)				{				BN_print(bp,&a);				BIO_puts(bp," ^ ");				BN_print(bp,&b);				BIO_puts(bp," = ");				}			BN_print(bp,&c);			BIO_puts(bp,"\n");			}#endif		/* Test that two added values have the correct parity. */		if((BN_is_odd(&a) && BN_is_odd(&c)) || (!BN_is_odd(&a) && !BN_is_odd(&c)))			{		    fprintf(stderr,"GF(2^m) addition test (a) failed!\n");			goto err;			}		BN_GF2m_add(&c,&c,&c);		/* Test that c + c = 0. */		if(!BN_is_zero(&c))		    {		    fprintf(stderr,"GF(2^m) addition test (b) failed!\n");			goto err;		    }		}	ret = 1;  err:	BN_free(&a);	BN_free(&b);	BN_free(&c);	return ret;	}int test_gf2m_mod(BIO *bp)	{	BIGNUM *a,*b[2],*c,*d,*e;	int i, j, ret = 0;	unsigned int p0[] = {163,7,6,3,0};	unsigned int p1[] = {193,15,0};	a=BN_new();	b[0]=BN_new();	b[1]=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	BN_GF2m_arr2poly(p0, b[0]);	BN_GF2m_arr2poly(p1, b[1]);	for (i=0; i<num0; i++)		{		BN_bntest_rand(a, 1024, 0, 0);		for (j=0; j < 2; j++)			{			BN_GF2m_mod(c, a, b[j]);#if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */			if (bp != NULL)				{				if (!results)					{					BN_print(bp,a);					BIO_puts(bp," % ");					BN_print(bp,b[j]);					BIO_puts(bp," - ");					BN_print(bp,c);					BIO_puts(bp,"\n");					}				}#endif			BN_GF2m_add(d, a, c);			BN_GF2m_mod(e, d, b[j]);			/* Test that a + (a mod p) mod p == 0. */			if(!BN_is_zero(e))				{				fprintf(stderr,"GF(2^m) modulo test failed!\n");				goto err;				}			}		}	ret = 1;  err:	BN_free(a);	BN_free(b[0]);	BN_free(b[1]);	BN_free(c);	BN_free(d);	BN_free(e);	return ret;	}int test_gf2m_mod_mul(BIO *bp,BN_CTX *ctx)	{	BIGNUM *a,*b[2],*c,*d,*e,*f,*g,*h;	int i, j, ret = 0;	unsigned int p0[] = {163,7,6,3,0};	unsigned int p1[] = {193,15,0};	a=BN_new();	b[0]=BN_new();	b[1]=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	f=BN_new();	g=BN_new();	h=BN_new();	BN_GF2m_arr2poly(p0, b[0]);	BN_GF2m_arr2poly(p1, b[1]);	for (i=0; i<num0; i++)		{		BN_bntest_rand(a, 1024, 0, 0);		BN_bntest_rand(c, 1024, 0, 0);		BN_bntest_rand(d, 1024, 0, 0);		for (j=0; j < 2; j++)			{			BN_GF2m_mod_mul(e, a, c, b[j], ctx);#if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */			if (bp != NULL)				{				if (!results)					{					BN_print(bp,a);					BIO_puts(bp," * ");					BN_print(bp,c);					BIO_puts(bp," % ");					BN_print(bp,b[j]);					BIO_puts(bp," - ");					BN_print(bp,e);					BIO_puts(bp,"\n");					}				}#endif			BN_GF2m_add(f, a, d);			BN_GF2m_mod_mul(g, f, c, b[j], ctx);			BN_GF2m_mod_mul(h, d, c, b[j], ctx);			BN_GF2m_add(f, e, g);			BN_GF2m_add(f, f, h);			/* Test that (a+d)*c = a*c + d*c. */			if(!BN_is_zero(f))				{				fprintf(stderr,"GF(2^m) modular multiplication test failed!\n");				goto err;				}			}		}	ret = 1;  err:	BN_free(a);	BN_free(b[0]);	BN_free(b[1]);	BN_free(c);	BN_free(d);	BN_free(e);	BN_free(f);	BN_free(g);	BN_free(h);	return ret;	}int test_gf2m_mod_sqr(BIO *bp,BN_CTX *ctx)	{	BIGNUM *a,*b[2],*c,*d;	int i, j, ret = 0;	unsigned int p0[] = {163,7,6,3,0};	unsigned int p1[] = {193,15,0};	a=BN_new();	b[0]=BN_new();	b[1]=BN_new();	c=BN_new();	d=BN_new();	BN_GF2m_arr2poly(p0, b[0]);	BN_GF2m_arr2poly(p1, b[1]);	for (i=0; i<num0; i++)		{		BN_bntest_rand(a, 1024, 0, 0);		for (j=0; j < 2; j++)			{			BN_GF2m_mod_sqr(c, a, b[j], ctx);			BN_copy(d, a);			BN_GF2m_mod_mul(d, a, d, b[j], ctx);#if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */			if (bp != NULL)				{				if (!results)					{					BN_print(bp,a);					BIO_puts(bp," ^ 2 % ");					BN_print(bp,b[j]);					BIO_puts(bp, " = ");					BN_print(bp,c);					BIO_puts(bp,"; a * a = ");					BN_print(bp,d);					BIO_puts(bp,"\n");					}				}#endif			BN_GF2m_add(d, c, d);			/* Test that a*a = a^2. */			if(!BN_is_zero(d))				{				fprintf(stderr,"GF(2^m) modular squaring test failed!\n");				goto err;				}			}		}	ret = 1;  err:	BN_free(a);	BN_free(b[0]);	BN_free(b[1]);	BN_free(c);	BN_free(d);	return ret;	}int test_gf2m_mod_inv(BIO *bp,BN_CTX *ctx)	{	BIGNUM *a,*b[2],*c,*d;	int i, j, ret = 0;	unsigned int p0[] = {163,7,6,3,0};	unsigned int p1[] = {193,15,0};	a=BN_new();	b[0]=BN_new();	b[1]=BN_new();	c=BN_new();	d=BN_new();	BN_GF2m_arr2poly(p0, b[0]);	BN_GF2m_arr2poly(p1, b[1]);	for (i=0; i<num0; i++)		{		BN_bntest_rand(a, 512, 0, 0); 		for (j=0; j < 2; j++)			{			BN_GF2m_mod_inv(c, a, b[j], ctx);			BN_GF2m_mod_mul(d, a, c, b[j], ctx);#if 0 /* make test uses ouput in bc but bc can't handle GF(2^m) arithmetic */			if (bp != NULL)				{				if (!results)					{					BN_print(bp,a);					BIO_puts(bp, " * ");					BN_print(bp,c);					BIO_puts(bp," - 1 % ");					BN_print(bp,b[j]);					BIO_puts(bp,"\n");					}				}#endif			/* Test that ((1/a)*a) = 1. */			if(!BN_is_one(d))				{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -