1package org.bouncycastle.jcajce.provider.asymmetric.ec; 2 3import java.math.BigInteger; 4import java.security.InvalidKeyException; 5import java.security.PublicKey; 6import java.security.spec.ECGenParameterSpec; 7import java.security.spec.ECParameterSpec; 8 9import org.bouncycastle.asn1.ASN1ObjectIdentifier; 10import org.bouncycastle.asn1.DERNull; 11import org.bouncycastle.asn1.x9.X962Parameters; 12import org.bouncycastle.asn1.x9.X9ECParameters; 13import org.bouncycastle.crypto.params.AsymmetricKeyParameter; 14import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util; 15import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil; 16import org.bouncycastle.jce.spec.ECNamedCurveSpec; 17import org.bouncycastle.math.ec.ECCurve; 18 19class ECUtils 20{ 21 static AsymmetricKeyParameter generatePublicKeyParameter( 22 PublicKey key) 23 throws InvalidKeyException 24 { 25 return (key instanceof BCECPublicKey) ? ((BCECPublicKey)key).engineGetKeyParameters() : ECUtil.generatePublicKeyParameter(key); 26 } 27 28 static X9ECParameters getDomainParametersFromGenSpec(ECGenParameterSpec genSpec) 29 { 30 return getDomainParametersFromName(genSpec.getName()); 31 } 32 33 static X9ECParameters getDomainParametersFromName(String curveName) 34 { 35 X9ECParameters domainParameters; 36 try 37 { 38 if (curveName.charAt(0) >= '0' && curveName.charAt(0) <= '2') 39 { 40 ASN1ObjectIdentifier oidID = new ASN1ObjectIdentifier(curveName); 41 domainParameters = ECUtil.getNamedCurveByOid(oidID); 42 } 43 else 44 { 45 if (curveName.indexOf(' ') > 0) 46 { 47 curveName = curveName.substring(curveName.indexOf(' ') + 1); 48 domainParameters = ECUtil.getNamedCurveByName(curveName); 49 } 50 else 51 { 52 domainParameters = ECUtil.getNamedCurveByName(curveName); 53 } 54 } 55 } 56 catch (IllegalArgumentException ex) 57 { 58 domainParameters = ECUtil.getNamedCurveByName(curveName); 59 } 60 return domainParameters; 61 } 62 63 static X962Parameters getDomainParametersFromName(ECParameterSpec ecSpec, boolean withCompression) 64 { 65 X962Parameters params; 66 67 if (ecSpec instanceof ECNamedCurveSpec) 68 { 69 ASN1ObjectIdentifier curveOid = ECUtil.getNamedCurveOid(((ECNamedCurveSpec)ecSpec).getName()); 70 if (curveOid == null) 71 { 72 curveOid = new ASN1ObjectIdentifier(((ECNamedCurveSpec)ecSpec).getName()); 73 } 74 params = new X962Parameters(curveOid); 75 } 76 else if (ecSpec == null) 77 { 78 params = new X962Parameters(DERNull.INSTANCE); 79 } 80 else 81 { 82 ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve()); 83 84 X9ECParameters ecP = new X9ECParameters( 85 curve, 86 EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression), 87 ecSpec.getOrder(), 88 BigInteger.valueOf(ecSpec.getCofactor()), 89 ecSpec.getCurve().getSeed()); 90 91 params = new X962Parameters(ecP); 92 } 93 94 return params; 95 } 96} 97