summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java47
1 files changed, 15 insertions, 32 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java
index e69942a2..815bcac0 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java
@@ -17,12 +17,10 @@ import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.DERBitString;
-import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x9.X962Parameters;
-import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
@@ -33,7 +31,6 @@ import org.bouncycastle.jcajce.provider.config.ProviderConfiguration;
import org.bouncycastle.jce.interfaces.ECPointEncoder;
import org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.jce.spec.ECNamedCurveSpec;
import org.bouncycastle.math.ec.ECCurve;
import org.bouncycastle.util.Strings;
@@ -181,7 +178,14 @@ public class BCECPrivateKey
this.ecSpec = EC5Util.convertSpec(ellipticCurve, spec);
}
- publicKey = getPublicKeyDetails(pubKey);
+ try
+ {
+ publicKey = getPublicKeyDetails(pubKey);
+ }
+ catch (Exception e)
+ {
+ publicKey = null; // not all curves are encodable
+ }
}
public BCECPrivateKey(
@@ -253,38 +257,16 @@ public class BCECPrivateKey
*/
public byte[] getEncoded()
{
- X962Parameters params;
- int orderBitLength;
+ X962Parameters params = ECUtils.getDomainParametersFromName(ecSpec, withCompression);
- if (ecSpec instanceof ECNamedCurveSpec)
- {
- ASN1ObjectIdentifier curveOid = ECUtil.getNamedCurveOid(((ECNamedCurveSpec)ecSpec).getName());
- if (curveOid == null) // guess it's the OID
- {
- curveOid = new ASN1ObjectIdentifier(((ECNamedCurveSpec)ecSpec).getName());
- }
-
- params = new X962Parameters(curveOid);
- orderBitLength = ECUtil.getOrderBitLength(ecSpec.getOrder(), this.getS());
- }
- else if (ecSpec == null)
+ int orderBitLength;
+ if (ecSpec == null)
{
- params = new X962Parameters(DERNull.INSTANCE);
- orderBitLength = ECUtil.getOrderBitLength(null, this.getS());
+ orderBitLength = ECUtil.getOrderBitLength(configuration, null, this.getS());
}
else
{
- ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve());
-
- X9ECParameters ecP = new X9ECParameters(
- curve,
- EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression),
- ecSpec.getOrder(),
- BigInteger.valueOf(ecSpec.getCofactor()),
- ecSpec.getCurve().getSeed());
-
- params = new X962Parameters(ecP);
- orderBitLength = ECUtil.getOrderBitLength(ecSpec.getOrder(), this.getS());
+ orderBitLength = ECUtil.getOrderBitLength(configuration, ecSpec.getOrder(), this.getS());
}
PrivateKeyInfo info;
@@ -420,9 +402,10 @@ public class BCECPrivateKey
byte[] enc = (byte[])in.readObject();
+ this.configuration = BouncyCastleProvider.CONFIGURATION;
+
populateFromPrivKeyInfo(PrivateKeyInfo.getInstance(ASN1Primitive.fromByteArray(enc)));
- this.configuration = BouncyCastleProvider.CONFIGURATION;
this.attrCarrier = new PKCS12BagAttributeCarrierImpl();
}