Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中带奇迹库的ECC加密_C_Algorithm_Encryption_Cryptography_Elliptic Curve - Fatal编程技术网

C语言中带奇迹库的ECC加密

C语言中带奇迹库的ECC加密,c,algorithm,encryption,cryptography,elliptic-curve,C,Algorithm,Encryption,Cryptography,Elliptic Curve,我想用C语言中的miracle库来模拟一些算法。这些算法是不同坐标系下的ECC加密。我有两个算法,应该给我相同的输出。但我不知道为什么我不能得到它。这是我想要模拟的算法: 我的模拟应该给我相同的代码输出: fp=fopen("common.ecs","rt"); fscanf(fp,"%d\n",&bits); mip->IOBASE=16; cinnum(n,fp); cinnum(a,fp); cinnum(b,fp); cinnum(r,fp); cinnum(x,fp)

我想用C语言中的miracle库来模拟一些算法。这些算法是不同坐标系下的ECC加密。我有两个算法,应该给我相同的输出。但我不知道为什么我不能得到它。这是我想要模拟的算法:

我的模拟应该给我相同的代码输出:

fp=fopen("common.ecs","rt");

fscanf(fp,"%d\n",&bits);
mip->IOBASE=16;
cinnum(n,fp);
cinnum(a,fp);
cinnum(b,fp);
cinnum(r,fp);
cinnum(x,fp);
cinnum(y,fp);
mip->IOBASE=16;

printf("modulus is %d bits in length\n",logb2(n));

window = 8  ;
nb = bits   ;

ebrick_init(&binst,x,y,a,b,n,window,nb);

printf("%d elliptic curve points have been precomputed and stored\n",(1<< window));
e = mirvar(2)   ;

printf("--------------------\n");
printf("naive method\n");
ecurve_init(a,b,n,MR_AFFINE);
g = epoint_init();
p = epoint_init();
q = epoint_init();
epoint_set(x,y,0,g);
ecurve_mult(e,g,q);
epoint_get(q,x_calc,y_calc);
cotnum(x_calc,stdout);
cotnum(y_calc,stdout);
printf("--------------------\n");
fp=fopen(“common.ecs”、“rt”);
fscanf(fp、%d\n、&bit);
mip->IOBASE=16;
cinnum(n,fp);
cinnum(a,fp);
cinnum(b,fp);
cinnum(r,fp);
cinnum(x,fp);
cinnum(y,fp);
mip->IOBASE=16;
printf(“模数长度为%d位,\n”,logb2(n));
窗口=8;
nb=位;
ebrick_init(&binst,x,y,a,b,n,window,nb);

printf(“%d个椭圆曲线点已预计算并存储”;(1您可以在FIPS的规范pdf上进行验证 common.ecs中的曲线是NISTP 192曲线


实际上,您已经猜到第一个参数是我们使用的素数模的位大小。第二行对应于十六进制表示的素数模p(它对应于素数2^192-2^64-1)。第三行是曲线Weierstrass方程中的系数A,它加速计算,使A=-3模p(参见示例)。第四行是曲线Weierstrass方程中的系数B,以十六进制表示。您可以看到第四行中的数字非常接近(以十六进制表示)对于p模的直线,它是曲线(点组)的顺序(有哈斯定理来解释这一点(你可以找到它))。第五条直线是曲线点组的点生成器的x坐标(十六进制)。第六条直线是y坐标(十六进制)曲线点组的点生成器。

此站点现在不允许我放图片。请耐心等待,直到我这样做:)从仿射到投影:(x,y)->(x,y,1)。从投影到仿射:(x,y,z)->(x/z^2,y/z^3),只要z!=0。@GregS我这样做了,但我的代码不起作用:(