153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giropackage org.bouncycastle.crypto.ec; 253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport java.math.BigInteger; 453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport java.util.Enumeration; 553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport java.util.Hashtable; 6bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giroimport java.util.Vector; 753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.asn1.sec.SECObjectIdentifiers; 1053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.asn1.x9.X9ECParameters; 1153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.asn1.x9.X9ECParametersHolder; 12bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giroimport org.bouncycastle.asn1.x9.X9ECPoint; 1353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.ECCurve; 1453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.ECPoint; 15c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// BEGIN android-removed 16c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.math.ec.custom.djb.Curve25519; 174a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecP128R1Curve; 184a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecP160K1Curve; 194a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecP160R1Curve; 204a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecP160R2Curve; 21c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// END android-removed 2253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP192K1Curve; 2353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP192R1Curve; 2453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP224K1Curve; 2553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP224R1Curve; 2653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP256K1Curve; 2753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP256R1Curve; 2853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP384R1Curve; 2953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.custom.sec.SecP521R1Curve; 304a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// BEGIN android-removed 314a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT113R1Curve; 324a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT113R2Curve; 334a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT131R1Curve; 344a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT131R2Curve; 354a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT163K1Curve; 364a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT163R1Curve; 374a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT163R2Curve; 384a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT193R1Curve; 394a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT193R2Curve; 404a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT233K1Curve; 414a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT233R1Curve; 424a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT239K1Curve; 434a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT283K1Curve; 444a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT283R1Curve; 454a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT409K1Curve; 464a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT409R1Curve; 474a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT571K1Curve; 484a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// import org.bouncycastle.math.ec.custom.sec.SecT571R1Curve; 494a2d5c40ffefaaa02c656a091f33fecdf8592607Sergio Giro// END android-removed 5053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.endo.GLVTypeBEndomorphism; 5153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.math.ec.endo.GLVTypeBParameters; 5253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.util.Strings; 5353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giroimport org.bouncycastle.util.encoders.Hex; 5453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 5553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giropublic class CustomNamedCurves 5653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro{ 5753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro private static ECCurve configureCurve(ECCurve curve) 5853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 5953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return curve; 6053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 6153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 6253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro private static ECCurve configureCurveGLV(ECCurve c, GLVTypeBParameters p) 6353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 6453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return c.configure().setEndomorphism(new GLVTypeBEndomorphism(c, p)).create(); 6553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 6653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 674936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // BEGIN Android-removed: Unsupported curves 684936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 694936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 704936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * curve25519 714936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 724936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder curve25519 = new X9ECParametersHolder() 734936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 744936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 754936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 764936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 774936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new Curve25519()); 784936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 794936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 804936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * NOTE: Curve25519 was specified in Montgomery form. Rewriting in Weierstrass form 814936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * involves substitution of variables, so the base-point x coordinate is 9 + (486662 / 3). 824936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 834936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * The Curve25519 paper doesn't say which of the two possible y values the base 844936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * point has. The choice here is guided by language in the Ed25519 paper. 854936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 864936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * (The other possible y value is 5F51E65E475F794B1FE122D388B72EB36DC2B28192839E4DD6163A5D81312C14) 874936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 884936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 894936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD245A" 904936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "20AE19A1B8A086B4E01EDD2C7748D14C923D4D7E6D7C61B229E9C5A27ECED3D9")); 914936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 924936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 934936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 944936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 954936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 964936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 974936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * secp128r1 984936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 994936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder secp128r1 = new X9ECParametersHolder() 1004936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1014936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 1024936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1034936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679"); 1044936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecP128R1Curve()); 1054936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 1064936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "161FF7528B899B2D0C28607CA52C5B86" 1074936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "CF5AC8395BAFEB13C02DA292DDED7A83")); 1084936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 1094936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 1104936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 1114936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 1124936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 1134936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * secp160k1 1144936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 1154936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder secp160k1 = new X9ECParametersHolder() 1164936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1174936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 1184936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1194936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 1204936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian GLVTypeBParameters glv = new GLVTypeBParameters( 1214936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("9ba48cba5ebcb9b6bd33b92830b2a2e0e192f10a", 16), 1224936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("c39c6c3b3a36d7701b9c71a1f5804ae5d0003f4", 16), 1234936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger[]{ 1244936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("9162fbe73984472a0a9e", 16), 1254936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("-96341f1138933bc2f505", 16) }, 1264936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger[]{ 1274936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("127971af8721782ecffa3", 16), 1284936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("9162fbe73984472a0a9e", 16) }, 1294936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("9162fbe73984472a0a9d0590", 16), 1304936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian new BigInteger("96341f1138933bc2f503fd44", 16), 1314936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 176); 1324936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurveGLV(new SecP160K1Curve(), glv); 1334936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 1344936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB" 1354936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "938CF935318FDCED6BC28286531733C3F03C4FEE")); 1364936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 1374936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 1384936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 1394936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 1404936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 1414936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * secp160r1 1424936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 1434936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder secp160r1 = new X9ECParametersHolder() 1444936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1454936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 1464936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1474936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345"); 1484936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecP160R1Curve()); 1494936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 1504936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "4A96B5688EF573284664698968C38BB913CBFC82" 1514936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "23A628553168947D59DCC912042351377AC5FB32")); 1524936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 1534936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 1544936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 1554936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 1564936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 1574936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * secp160r2 1584936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 1594936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder secp160r2 = new X9ECParametersHolder() 1604936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1614936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 1624936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 1634936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("B99B99B099B323E02709A4D696E6768756151751"); 1644936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecP160R2Curve()); 1654936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 1664936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "52DCB034293A117E1F4FF11B30F7199D3144CE6D" 1674936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E")); 1684936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 1694936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 1704936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 1714936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian */ 1724936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // END Android-removed: Unsupported curves 17353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 17453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 17553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp192k1 17653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 17753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp192k1 = new X9ECParametersHolder() 17853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 17953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 18053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 18153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = null; 18253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro GLVTypeBParameters glv = new GLVTypeBParameters( 18353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("bb85691939b869c1d087f601554b96b80cb4f55b35f433c2", 16), 18453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("3d84f26c12238d7b4f3d516613c1759033b1a5800175d0b1", 16), 18553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger[]{ 18653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("71169be7330b3038edb025f1", 16), 18753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("-b3fb3400dec5c4adceb8655c", 16) }, 18853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger[]{ 18953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("12511cfe811d0f4e6bc688b4d", 16), 19053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("71169be7330b3038edb025f1", 16) }, 19153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("71169be7330b3038edb025f1d0f9", 16), 19253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("b3fb3400dec5c4adceb8655d4c94", 16), 19353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 208); 19453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurveGLV(new SecP192K1Curve(), glv); 195bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 19653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D" 19753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D")); 19853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 19953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 20053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 20153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 20253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 20353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp192r1 20453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 20553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp192r1 = new X9ECParametersHolder() 20653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 20753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 20853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 20953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5"); 21053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurve(new SecP192R1Curve()); 211bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 21253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012" 21353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811")); 21453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 21553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 21653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 21753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 21853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 21953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp224k1 22053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 22153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp224k1 = new X9ECParametersHolder() 22253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 22353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 22453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 22553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = null; 22653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro GLVTypeBParameters glv = new GLVTypeBParameters( 22753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("fe0e87005b4e83761908c5131d552a850b3f58b749c37cf5b84d6768", 16), 22853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("60dcd2104c4cbc0be6eeefc2bdd610739ec34e317f9b33046c9e4788", 16), 22953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger[]{ 23053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("6b8cf07d4ca75c88957d9d670591", 16), 23153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("-b8adf1378a6eb73409fa6c9c637d", 16) }, 23253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger[]{ 23353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("1243ae1b4d71613bc9f780a03690e", 16), 23453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("6b8cf07d4ca75c88957d9d670591", 16) }, 23553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("6b8cf07d4ca75c88957d9d67059037a4", 16), 23653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("b8adf1378a6eb73409fa6c9c637ba7f5", 16), 23753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 240); 23853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurveGLV(new SecP224K1Curve(), glv); 239bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 24053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C" 24153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5")); 24253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 24353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 24453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 24553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 24653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 24753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp224r1 24853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 24953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp224r1 = new X9ECParametersHolder() 25053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 25153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 25253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 25353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); 25453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurve(new SecP224R1Curve()); 255bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 25653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" 25753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34")); 25853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 25953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 26053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 26153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 26253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 26353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp256k1 26453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 26553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp256k1 = new X9ECParametersHolder() 26653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 26753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 26853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 26953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = null; 27053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro GLVTypeBParameters glv = new GLVTypeBParameters( 27153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee", 16), 27253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72", 16), 27353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger[]{ 27453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("3086d221a7d46bcde86c90e49284eb15", 16), 27553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("-e4437ed6010e88286f547fa90abfe4c3", 16) }, 27653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger[]{ 27753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("114ca50f7a8e2f3f657c1108d9d44cfd8", 16), 27853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("3086d221a7d46bcde86c90e49284eb15", 16) }, 27953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("3086d221a7d46bcde86c90e49284eb153dab", 16), 28053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro new BigInteger("e4437ed6010e88286f547fa90abfe4c42212", 16), 28153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 272); 28253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurveGLV(new SecP256K1Curve(), glv); 283bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 28453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798" 28553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")); 28653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 28753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 28853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 28953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 29053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 29153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp256r1 29253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 29353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp256r1 = new X9ECParametersHolder() 29453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 29553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 29653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 29753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90"); 29853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurve(new SecP256R1Curve()); 299bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 30053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" 30153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5")); 30253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 30353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 30453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 30553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 30653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 30753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp384r1 30853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 30953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp384r1 = new X9ECParametersHolder() 31053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 31153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 31253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 31353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = Hex.decode("A335926AA319A27A1D00896A6773A4827ACDAC73"); 31453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurve(new SecP384R1Curve()); 315bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 31653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7" 31753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F")); 31853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 31953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 32053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 32153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 32253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /* 32353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * secp521r1 32453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 32553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static X9ECParametersHolder secp521r1 = new X9ECParametersHolder() 32653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 32753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected X9ECParameters createParameters() 32853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 32953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro byte[] S = Hex.decode("D09E8800291CB85396CC6717393284AAA0DA64BA"); 33053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro ECCurve curve = configureCurve(new SecP521R1Curve()); 331bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 33253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66" 33353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro + "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650")); 33453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 33553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 33653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro }; 33753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 3384936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // BEGIN Android-removed: Unsupported curves 3394936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 3404936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 3414936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect113r1 3424936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 3434936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect113r1 = new X9ECParametersHolder() 3444936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3454936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 3464936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3474936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("10E723AB14D696E6768756151756FEBF8FCB49A9"); 3484936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT113R1Curve()); 3494936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 3504936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "009D73616F35F4AB1407D73562C10F" 3514936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "00A52830277958EE84D1315ED31886")); 3524936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 3534936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 3544936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 3554936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 3564936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 3574936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect113r2 3584936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 3594936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect113r2 = new X9ECParametersHolder() 3604936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3614936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 3624936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3634936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("10C0FB15760860DEF1EEF4D696E676875615175D"); 3644936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT113R2Curve()); 3654936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 3664936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01A57A6A7B26CA5EF52FCDB8164797" 3674936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "00B3ADC94ED1FE674C06E695BABA1D")); 3684936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 3694936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 3704936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 3714936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 3724936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 3734936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect131r1 3744936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 3754936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect131r1 = new X9ECParametersHolder() 3764936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3774936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 3784936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3794936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("4D696E676875615175985BD3ADBADA21B43A97E2"); 3804936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT131R1Curve()); 3814936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 3824936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0081BAF91FDF9833C40F9C181343638399" 3834936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "078C6E7EA38C001F73C8134B1B4EF9E150")); 3844936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 3854936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 3864936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 3874936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 3884936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 3894936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect131r2 3904936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 3914936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect131r2 = new X9ECParametersHolder() 3924936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3934936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 3944936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 3954936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("985BD3ADBAD4D696E676875615175A21B43A97E3"); 3964936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT131R2Curve()); 3974936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 3984936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0356DCD8F2F95031AD652D23951BB366A8" 3994936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0648F06D867940A5366D9E265DE9EB240F")); 4004936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4014936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4024936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4034936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 4044936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 4054936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect163k1 4064936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 4074936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect163k1 = new X9ECParametersHolder() 4084936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4094936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 4104936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4114936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 4124936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT163K1Curve()); 4134936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 4144936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8" 4154936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0289070FB05D38FF58321F2E800536D538CCDAA3D9")); 4164936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4174936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4184936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4194936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 4204936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 4214936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect163r1 4224936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 4234936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect163r1 = new X9ECParametersHolder() 4244936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4254936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 4264936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4274936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("24B7B137C8A14D696E6768756151756FD0DA2E5C"); 4284936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT163R1Curve()); 4294936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 4304936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0369979697AB43897789566789567F787A7876A654" 4314936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "00435EDB42EFAFB2989D51FEFCE3C80988F41FF883")); 4324936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4334936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4344936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4354936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 4364936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 4374936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect163r2 4384936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 4394936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect163r2 = new X9ECParametersHolder() 4404936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4414936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 4424936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4434936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("85E25BFE5C86226CDB12016F7553F9D0E693A268"); 4444936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT163R2Curve()); 4454936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 4464936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "03F0EBA16286A2D57EA0991168D4994637E8343E36" 4474936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1")); 4484936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4494936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4504936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4514936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 4524936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 4534936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect193r1 4544936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 4554936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect193r1 = new X9ECParametersHolder() 4564936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4574936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 4584936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4594936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("103FAEC74D696E676875615175777FC5B191EF30"); 4604936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT193R1Curve()); 4614936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 4624936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1" 4634936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05")); 4644936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4654936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4664936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4674936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 4684936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 4694936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect193r2 4704936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 4714936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect193r2 = new X9ECParametersHolder() 4724936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4734936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 4744936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4754936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("10B7B4D696E676875615175137C8A16FD0DA2211"); 4764936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT193R2Curve()); 4774936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 4784936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F" 4794936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C")); 4804936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4814936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4824936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4834936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 4844936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 4854936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect233k1 4864936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 4874936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect233k1 = new X9ECParametersHolder() 4884936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4894936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 4904936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 4914936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 4924936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT233K1Curve()); 4934936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 4944936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126" 4954936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3")); 4964936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 4974936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 4984936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 4994936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5004936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5014936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect233r1 5024936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5034936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect233r1 = new X9ECParametersHolder() 5044936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5054936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 5064936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5074936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("74D59FF07F6B413D0EA14B344B20A2DB049B50C3"); 5084936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT233R1Curve()); 5094936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 5104936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B" 5114936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052")); 5124936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 5134936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 5144936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 5154936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5164936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5174936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect239k1 5184936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5194936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect239k1 = new X9ECParametersHolder() 5204936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5214936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 5224936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5234936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 5244936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT239K1Curve()); 5254936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 5264936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC" 5274936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA")); 5284936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 5294936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 5304936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 5314936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5324936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5334936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect283k1 5344936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5354936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect283k1 = new X9ECParametersHolder() 5364936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5374936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 5384936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5394936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 5404936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT283K1Curve()); 5414936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 5424936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836" 5434936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259")); 5444936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 5454936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 5464936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 5474936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5484936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5494936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect283r1 5504936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5514936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect283r1 = new X9ECParametersHolder() 5524936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5534936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 5544936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5554936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("77E2B07370EB0F832A6DD5B62DFC88CD06BB84BE"); 5564936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT283R1Curve()); 5574936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 5584936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053" 5594936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4")); 5604936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 5614936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 5624936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 5634936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5644936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5654936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect409k1 5664936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5674936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect409k1 = new X9ECParametersHolder() 5684936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5694936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 5704936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5714936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 5724936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT409K1Curve()); 5734936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 5744936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746" 5754936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B")); 5764936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 5774936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 5784936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 5794936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5804936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5814936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect409r1 5824936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5834936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect409r1 = new X9ECParametersHolder() 5844936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5854936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 5864936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 5874936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("4099B5A457F9D69F79213D094C4BCD4D4262210B"); 5884936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT409R1Curve()); 5894936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 5904936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7" 5914936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706")); 5924936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 5934936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 5944936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 5954936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 5964936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 5974936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect571k1 5984936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 5994936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect571k1 = new X9ECParametersHolder() 6004936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 6014936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 6024936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 6034936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = null; 6044936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT571K1Curve()); 6054936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 6064936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972" 6074936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3")); 6084936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 6094936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 6104936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 6114936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 6124936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 6134936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * sect571r1 6144936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian * 6154936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian static X9ECParametersHolder sect571r1 = new X9ECParametersHolder() 6164936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 6174936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian protected X9ECParameters createParameters() 6184936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian { 6194936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian byte[] S = Hex.decode("2AA058F73A0E33AB486B0F610410C53A7F132310"); 6204936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian ECCurve curve = configureCurve(new SecT571R1Curve()); 6214936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian X9ECPoint G = new X9ECPoint(curve, Hex.decode("04" 6224936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19" 6234936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian + "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B")); 6244936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 6254936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian } 6264936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian }; 6274936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian */ 6284936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // END Android-removed: Unsupported curves 629bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro 630bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro 63153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static final Hashtable nameToCurve = new Hashtable(); 63253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static final Hashtable nameToOID = new Hashtable(); 63353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static final Hashtable oidToCurve = new Hashtable(); 63453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static final Hashtable oidToName = new Hashtable(); 635bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro static final Vector names = new Vector(); 63653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 63753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static void defineCurve(String name, X9ECParametersHolder holder) 63853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 639bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro names.addElement(name); 640bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro name = Strings.toLowerCase(name); 64153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro nameToCurve.put(name, holder); 64253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 64353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 64453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static void defineCurveWithOID(String name, ASN1ObjectIdentifier oid, X9ECParametersHolder holder) 64553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 646bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro names.addElement(name); 64753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro oidToName.put(oid, name); 64853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro oidToCurve.put(oid, holder); 649bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro name = Strings.toLowerCase(name); 650bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro nameToOID.put(name, oid); 651bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro nameToCurve.put(name, holder); 65253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 65353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 654bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro static void defineCurveAlias(String name, ASN1ObjectIdentifier oid) 65553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 656bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro Object curve = oidToCurve.get(oid); 657bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro if (curve == null) 658bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro { 659bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro throw new IllegalStateException(); 660bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro } 661bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro 662bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro name = Strings.toLowerCase(name); 663bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro nameToOID.put(name, oid); 664bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro nameToCurve.put(name, curve); 66553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 66653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 66753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro static 66853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 6694936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // BEGIN Android-removed: Unsupported curves 6704936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 6714936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurve("curve25519", curve25519); 67253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 673bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro// defineCurveWithOID("secp112r1", SECObjectIdentifiers.secp112r1, secp112r1); 674bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro// defineCurveWithOID("secp112r2", SECObjectIdentifiers.secp112r2, secp112r2); 6754936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("secp128r1", SECObjectIdentifiers.secp128r1, secp128r1); 676bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro// defineCurveWithOID("secp128r2", SECObjectIdentifiers.secp128r2, secp128r2); 6774936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("secp160k1", SECObjectIdentifiers.secp160k1, secp160k1); 6784936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("secp160r1", SECObjectIdentifiers.secp160r1, secp160r1); 6794936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("secp160r2", SECObjectIdentifiers.secp160r2, secp160r2); 6804936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian */ 6814936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // END Android-removed: Unsupported curves 68253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp192k1", SECObjectIdentifiers.secp192k1, secp192k1); 68353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp192r1", SECObjectIdentifiers.secp192r1, secp192r1); 68453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp224k1", SECObjectIdentifiers.secp224k1, secp224k1); 68553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp224r1", SECObjectIdentifiers.secp224r1, secp224r1); 68653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp256k1", SECObjectIdentifiers.secp256k1, secp256k1); 68753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp256r1", SECObjectIdentifiers.secp256r1, secp256r1); 68853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp384r1", SECObjectIdentifiers.secp384r1, secp384r1); 68953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveWithOID("secp521r1", SECObjectIdentifiers.secp521r1, secp521r1); 69053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 6914936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // BEGIN Android-removed: Unsupported curves 6924936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian /* 6934936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect113r1", SECObjectIdentifiers.sect113r1, sect113r1); 6944936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect113r2", SECObjectIdentifiers.sect113r2, sect113r2); 6954936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect131r1", SECObjectIdentifiers.sect131r1, sect131r1); 6964936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect131r2", SECObjectIdentifiers.sect131r2, sect131r2); 6974936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect163k1", SECObjectIdentifiers.sect163k1, sect163k1); 6984936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect163r1", SECObjectIdentifiers.sect163r1, sect163r1); 6994936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect163r2", SECObjectIdentifiers.sect163r2, sect163r2); 7004936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect193r1", SECObjectIdentifiers.sect193r1, sect193r1); 7014936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect193r2", SECObjectIdentifiers.sect193r2, sect193r2); 7024936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect233k1", SECObjectIdentifiers.sect233k1, sect233k1); 7034936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect233r1", SECObjectIdentifiers.sect233r1, sect233r1); 7044936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect239k1", SECObjectIdentifiers.sect239k1, sect239k1); 7054936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect283k1", SECObjectIdentifiers.sect283k1, sect283k1); 7064936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect283r1", SECObjectIdentifiers.sect283r1, sect283r1); 7074936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect409k1", SECObjectIdentifiers.sect409k1, sect409k1); 7084936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect409r1", SECObjectIdentifiers.sect409r1, sect409r1); 7094936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect571k1", SECObjectIdentifiers.sect571k1, sect571k1); 7104936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveWithOID("sect571r1", SECObjectIdentifiers.sect571r1, sect571r1); 7114936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 7124936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("B-163", SECObjectIdentifiers.sect163r2); 7134936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("B-233", SECObjectIdentifiers.sect233r1); 7144936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("B-283", SECObjectIdentifiers.sect283r1); 7154936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("B-409", SECObjectIdentifiers.sect409r1); 7164936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("B-571", SECObjectIdentifiers.sect571r1); 7174936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian 7184936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("K-163", SECObjectIdentifiers.sect163k1); 7194936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("K-233", SECObjectIdentifiers.sect233k1); 7204936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("K-283", SECObjectIdentifiers.sect283k1); 7214936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("K-409", SECObjectIdentifiers.sect409k1); 7224936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian defineCurveAlias("K-571", SECObjectIdentifiers.sect571k1); 7234936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian */ 7244936950820c68699a4ace55a2a8e5f7f677a913dAdam Vartanian // END Android-removed: Unsupported curves 725bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro 72653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveAlias("P-192", SECObjectIdentifiers.secp192r1); 72753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveAlias("P-224", SECObjectIdentifiers.secp224r1); 72853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveAlias("P-256", SECObjectIdentifiers.secp256r1); 72953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveAlias("P-384", SECObjectIdentifiers.secp384r1); 73053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro defineCurveAlias("P-521", SECObjectIdentifiers.secp521r1); 73153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 73253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 73353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro public static X9ECParameters getByName(String name) 73453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 73553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro X9ECParametersHolder holder = (X9ECParametersHolder)nameToCurve.get(Strings.toLowerCase(name)); 73653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return holder == null ? null : holder.getParameters(); 73753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 73853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 73953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /** 74053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * return the X9ECParameters object for the named curve represented by the passed in object 74153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * identifier. Null if the curve isn't present. 74253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * 74353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * @param oid 74453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * an object identifier representing a named curve, if present. 74553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 74653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro public static X9ECParameters getByOID(ASN1ObjectIdentifier oid) 74753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 74853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro X9ECParametersHolder holder = (X9ECParametersHolder)oidToCurve.get(oid); 74953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return holder == null ? null : holder.getParameters(); 75053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 75153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 75253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /** 75353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * return the object identifier signified by the passed in name. Null if there is no object 75453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * identifier associated with name. 75553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * 75653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * @return the object identifier associated with name, if present. 75753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 75853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro public static ASN1ObjectIdentifier getOID(String name) 75953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 76053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return (ASN1ObjectIdentifier)nameToOID.get(Strings.toLowerCase(name)); 76153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 76253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 76353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /** 76453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * return the named curve name represented by the given object identifier. 76553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 76653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro public static String getName(ASN1ObjectIdentifier oid) 76753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 76853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return (String)oidToName.get(oid); 76953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 77053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 77153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro /** 77253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * returns an enumeration containing the name strings for curves contained in this structure. 77353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro */ 77453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro public static Enumeration getNames() 77553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro { 776bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro return names.elements(); 77753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro } 77853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro} 779