18212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompackage org.bouncycastle.jce.spec; 28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 38212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.math.ec.ECCurve; 48212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.math.ec.ECPoint; 58212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 68212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.math.BigInteger; 78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.spec.AlgorithmParameterSpec; 88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom/** 108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * basic domain parameters for an Elliptic Curve public or private key. 118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic class ECParameterSpec 138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom implements AlgorithmParameterSpec 148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom private ECCurve curve; 168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom private byte[] seed; 178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom private ECPoint G; 188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom private BigInteger n; 198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom private BigInteger h; 208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public ECParameterSpec( 228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECCurve curve, 238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECPoint G, 248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger n) 258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.curve = curve; 278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.G = G; 288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.n = n; 298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.h = BigInteger.valueOf(1); 308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.seed = null; 318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public ECParameterSpec( 348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECCurve curve, 358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECPoint G, 368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger n, 378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger h) 388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.curve = curve; 408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.G = G; 418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.n = n; 428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.h = h; 438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.seed = null; 448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public ECParameterSpec( 478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECCurve curve, 488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECPoint G, 498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger n, 508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom BigInteger h, 518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom byte[] seed) 528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 538212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.curve = curve; 548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.G = G; 558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.n = n; 568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.h = h; 578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom this.seed = seed; 588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 598212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 608212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 618212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * return the curve along which the base point lies. 628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @return the curve 638212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public ECCurve getCurve() 658212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 668212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return curve; 678212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 688212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * return the base point we are using for these domain parameters. 718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @return the base point. 728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public ECPoint getG() 748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 758212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return G; 768212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 798212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * return the order N of G 808212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @return the order 818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 828212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public BigInteger getN() 838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 848212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return n; 858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 868212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 878212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 888212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * return the cofactor H to the order of G. 898212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @return the cofactor 908212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 918212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public BigInteger getH() 928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 938212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return h; 948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 958212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 968212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom /** 978212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * return the seed used to generate this curve (if available). 988212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * @return the random seed 998212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 1008212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public byte[] getSeed() 1018212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 1028212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return seed; 1038212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1048212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1058212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public boolean equals(Object o) 1068212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 1078212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (!(o instanceof ECParameterSpec)) 1088212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 1098212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return false; 1108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ECParameterSpec other = (ECParameterSpec)o; 1138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return this.getCurve().equals(other.getCurve()) && this.getG().equals(other.getG()); 1158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom public int hashCode() 1188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom { 1198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return this.getCurve().hashCode() ^ this.getG().hashCode(); 1208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 122