ecinitialize.java

来自「实现了椭圆曲线的初始化」· Java 代码 · 共 109 行

JAVA
109
字号
import java.math.*;
public class ECInitialize
{
	
    BigInteger p=new BigInteger("BDB6F4FE3E8B1D9E0DA8C0D46F4C318CEFE4AFE3B6B8551F",16);
    BigInteger a;
    BigInteger b;
    //BigInteger gx;
    public ECInitialize()
    {
    	GenRanBigNum grbn=new GenRanBigNum();
    	BigInteger a=grbn.setBigNum(p);
    	BigInteger b=grbn.setRanNum(p);
    	this.a=a;
    	this.b=b;
    }
    public void setAB()//这个方法在生成椭圆曲线时,要保证只用一次
    {
    	GenRanBigNum grbn=new GenRanBigNum();
		BigInteger a=grbn.setRanNum(p);
		BigInteger b=grbn.setRanNum(p);
		this.a=a;
		this.b=b;
    }
    
	public EllipticCurve setEllipticCurve()//生成椭圆曲线
	{
	    ECFieldFp field=new ECFieldFp(p);
    	if(!this.judge())
    	{
    		this.setEllipticCurve();
    	}
    	    
    	EllipticCurve ec=new EllipticCurve(field,a,b);
    	return ec;
	
    }	
	public boolean judge()throws NullPointerException
    {
    	BigInteger a=this.a;
    	BigInteger b=this.b;
    	boolean flag=false;
    	try
    	{
    		BigInteger v1=BigInteger.valueOf(4).multiply(a.multiply(a.multiply(a)));
   	    	BigInteger v2=BigInteger.valueOf(27).multiply(b.multiply(b));
  	    	boolean bool=v1.add(v2).equals(BigInteger.valueOf(0));
  	    	if(bool)
  	    	{
  	  	   		flag=bool; 
  	  		} 	
  	    	else
  	    	{
  	     		flag=true;
  	    	} 	
    	}
    	catch(NullPointerException err)
    	{
    	}
  	    return flag;
    }
    
    
    public BigInteger setBigSeed()
	{
		GenRanBigNum grbn=new GenRanBigNum();
		BigInteger s=grbn.setRanNum(p);
		return s;
	}
	
	public BigInteger getA()
	{
		GenRanBigNum grbn=new GenRanBigNum();
		BigInteger a=grbn.setRanNum(p);
		return a;
	}
	
	public BigInteger getB()
	{
		BigInteger b=this.b;
		return b;
	}
	
	public BigInteger getP()
	{
		BigInteger p=this.p;
		return p;
	}
	
	public static void main(String args[])throws NullPointerException
	{
        
        ECInitialize eci=new ECInitialize();
        System.out.println("a="+eci.getA());
        System.out.println("b="+eci.getB());
        System.out.println("seed="+eci.setBigSeed());
        System.out.println("judge="+eci.judge());
        System.out.println("p="+eci.getP());
        //以下计算非常耗时
        /*String para="";
        para=eci.getA().toString();
        ECParameters ecp1=new ECParameters(para);
        System.out.println(ecp1.a);
        ECParameters ecp2=new ECParameters();
        System.out.println(ecp2.a);
        */
	}

}

⌨️ 快捷键说明

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