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

📄 addell.m

📁 matlab实现的椭圆曲线点加函数
💻 M
字号:
function p3 = addell(p1,p2,a,b,n);% This function add points on the elliptic curve%    y^2 = x^3 + ax +b mod n% The points are represented by% p1(1) = x1    p1(2) = y1% p2(1) = x2    p2(2) = y2if (any(p1==Inf)),   p3=p2;   return;end;if (any(p2==Inf)),   p3=p1;   return;end;x1=p1(1);x2=p2(1);y1=p1(2);y2=p2(2);z1=1;  % this will store the gcd incase the addition produced a factor of nif ( (x1==x2) & (y1==y2) & (y1==0)),  % an infinity case   p3(1)=inf; p3(2)=inf;   return;   end;   if ( (x1==x2) & (y1 ~= y2)),           % an infinity case   p3(1)=inf; p3(2)=inf;   return;   end;   if (all(p1==p2) & (gcd(y1,n)~=1) & (gcd(y1,n) ~=n)),   z1=gcd(y1,n);   p3=[];   disp(['Elliptic Curve addition produced a factor of n, factor = ',num2str(z1)]);   return;end;      if all(p1==p2),   temp=mod(2*y1,n);   if temp==0,      p3(1)=Inf;      p3(2)=Inf;      return;   end;   den=powermod(2*y1, -1, n);   num=mod(x1*x1,n);   num=mod(mod(3*num,n) + a,n);   m=mod(num*den,n);   temp=mod(m*m,n);   x3=mod(temp-x1-x2, n);   temp=x1-x3;   y3=mod(m*temp,n);   y3=mod(y3-y1,n);else   % case p1 ~= p2   if (gcd(x2-x1,n) ~= 1),      z1=gcd(x2-x1,n);      p3=[];      disp(['Elliptic Curve addition produced a factor of n, factor= ',num2str(z1)]);      return;    end; % end if gcd   temp=mod(x2 - x1,n);   if (mod(n,temp)==0),   % Infinity case      p3(1)=Inf;      p3(2)=Inf;      return;   end;   den=powermod(temp,-1,n);   num=mod(y2-y1,n);   m=mod(num*den,n);   temp=mod(m*m,n);   x3=mod(temp-x1-x2, n);   temp=x1-x3;   y3=mod(m*temp,n);   y3=mod(y3-y1,n);end;p3(1)=x3;p3(2)=y3;

⌨️ 快捷键说明

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