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

📄 bntest.c

📁 一个用于点对点传输加密的工具包源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		    }		}	BN_free(&a);	BN_free(&b);	BN_free(&c);	BN_free(&d);	BN_free(&e);	BN_CTX_free(&ctx);	return(1);	}int test_sqr(BIO *bp, BN_CTX *ctx)	{	BIGNUM a,c,d,e;	int i;	int j;	BN_init(&a);	BN_init(&c);	BN_init(&d);	BN_init(&e);	for (i=0; i<num0; i++)		{		BN_rand(&a,40+i*10,0,0);		a.neg=rand_neg();		if (bp == NULL)			for (j=0; j<100; j++)				BN_sqr(&c,&a,ctx);		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;	int j;	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_rand(&a,100,0,0); /**/	BN_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_MONT_CTX_set(mont,&n,ctx);		BN_to_montgomery(&A,&a,mont,ctx);		BN_to_montgomery(&B,&b,mont,ctx);		if (bp == NULL)			for (j=0; j<100; j++)				BN_mod_mul_montgomery(&c,&A,&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;	int j;	a=BN_new();	b=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	BN_rand(a,1024,0,0); /**/	for (i=0; i<num0; i++)		{		BN_rand(b,450+i*10,0,0); /**/		a->neg=rand_neg();		b->neg=rand_neg();		if (bp == NULL)			for (j=0; j<100; j++)				BN_mod(c,a,b,ctx);/**/		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;	a=BN_new();	b=BN_new();	c=BN_new();	d=BN_new();	e=BN_new();	BN_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); /**/		a->neg=rand_neg();		b->neg=rand_neg();	/*	if (bp == NULL)			for (j=0; j<100; j++)				BN_mod_mul(d,a,b,c,ctx);*/ /**/		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);				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");		    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_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); /**/		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_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_rand(a,20+i*5,0,0); /**/		BN_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_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_)	{	BIGNUM *a,*b,*c,*d;	int i;	b=BN_new();	c=BN_new();	d=BN_new();	BN_one(c);	if(a_)	    a=a_;	else	    {	    a=BN_new();	    BN_rand(a,200,0,0); /**/	    a->neg=rand_neg();	    }	for (i=0; i<num0; i++)		{		BN_lshift(b,a,i+1);		BN_add(c,c,c);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," * ");				BN_print(bp,c);				BIO_puts(bp," - ");				}			BN_print(bp,b);			BIO_puts(bp,"\n");			}		BN_mul(d,a,c,ctx);		BN_sub(d,d,b);		if(!BN_is_zero(d))		    {		    fprintf(stderr,"Left shift test failed!\n");		    fprintf(stderr,"a=");		    BN_print_fp(stderr,a);		    fprintf(stderr,"\nb=");		    BN_print_fp(stderr,b);		    fprintf(stderr,"\nc=");		    BN_print_fp(stderr,c);		    fprintf(stderr,"\nd=");		    BN_print_fp(stderr,d);		    fprintf(stderr,"\n");		    return 0;		    }		}	BN_free(a);	BN_free(b);	BN_free(c);	BN_free(d);	return(1);	}int test_lshift1(BIO *bp)	{	BIGNUM *a,*b,*c;	int i;	a=BN_new();	b=BN_new();	c=BN_new();	BN_rand(a,200,0,0); /**/	a->neg=rand_neg();	for (i=0; i<num0; i++)		{		BN_lshift1(b,a);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," * 2");				BIO_puts(bp," - ");				}			BN_print(bp,b);			BIO_puts(bp,"\n");			}		BN_add(c,a,a);		BN_sub(a,b,c);		if(!BN_is_zero(a))		    {		    fprintf(stderr,"Left shift one test failed!\n");		    return 0;		    }				BN_copy(a,b);		}	BN_free(a);	BN_free(b);	BN_free(c);	return(1);	}int test_rshift(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_one(c);	BN_rand(a,200,0,0); /**/	a->neg=rand_neg();	for (i=0; i<num0; i++)		{		BN_rshift(b,a,i+1);		BN_add(c,c,c);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," / ");				BN_print(bp,c);				BIO_puts(bp," - ");				}			BN_print(bp,b);			BIO_puts(bp,"\n");			}		BN_div(d,e,a,c,ctx);		BN_sub(d,d,b);		if(!BN_is_zero(d))		    {		    fprintf(stderr,"Right shift test failed!\n");		    return 0;		    }		}	BN_free(a);	BN_free(b);	BN_free(c);	BN_free(d);	BN_free(e);	return(1);	}int test_rshift1(BIO *bp)	{	BIGNUM *a,*b,*c;	int i;	a=BN_new();	b=BN_new();	c=BN_new();	BN_rand(a,200,0,0); /**/	a->neg=rand_neg();	for (i=0; i<num0; i++)		{		BN_rshift1(b,a);		if (bp != NULL)			{			if (!results)				{				BN_print(bp,a);				BIO_puts(bp," / 2");				BIO_puts(bp," - ");				}			BN_print(bp,b);			BIO_puts(bp,"\n");			}		BN_sub(c,a,b);		BN_sub(c,c,b);		if(!BN_is_zero(c) && !BN_is_one(c))		    {		    fprintf(stderr,"Right shift one test failed!\n");		    return 0;		    }		BN_copy(a,b);		}	BN_free(a);	BN_free(b);	BN_free(c);	return(1);	}int rand_neg(void)	{	static unsigned int neg=0;	static int sign[8]={0,0,0,1,1,0,1,1};	return(sign[(neg++)%8]);	}

⌨️ 快捷键说明

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