summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java69
1 files changed, 24 insertions, 45 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java b/bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java
index 58c7871c..900c6c37 100644
--- a/bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java
+++ b/bcprov/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java
@@ -51,6 +51,7 @@ import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
// Android-removed: Unsupported algorithms
// import org.bouncycastle.crypto.params.X25519PrivateKeyParameters;
// import org.bouncycastle.crypto.params.X448PrivateKeyParameters;
+import org.bouncycastle.util.Arrays;
/**
* Factory for creating private key objects from PKCS8 PrivateKeyInfo objects.
@@ -149,7 +150,7 @@ public class PrivateKeyFactory
}
else if (algOID.equals(X9ObjectIdentifiers.id_ecPublicKey))
{
- X962Parameters params = new X962Parameters((ASN1Primitive)algId.getParameters());
+ X962Parameters params = X962Parameters.getInstance(algId.getParameters());
X9ECParameters x9;
ECDomainParameters dParams;
@@ -163,8 +164,7 @@ public class PrivateKeyFactory
{
x9 = ECNamedCurveTable.getByOID(oid);
}
- dParams = new ECNamedDomainParameters(
- oid, x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed());
+ dParams = new ECNamedDomainParameters(oid, x9);
}
else
{
@@ -208,7 +208,7 @@ public class PrivateKeyFactory
if (p instanceof ASN1Sequence && (ASN1Sequence.getInstance(p).size() == 2 || ASN1Sequence.getInstance(p).size() == 3))
{
- ECDomainParameters ecP = ECGOST3410NamedCurves.getByOID(gostParams.getPublicKeyParamSet());
+ X9ECParameters ecP = ECGOST3410NamedCurves.getByOIDX9(gostParams.getPublicKeyParamSet());
ecSpec = new ECGOST3410Parameters(
new ECNamedDomainParameters(
@@ -216,25 +216,25 @@ public class PrivateKeyFactory
gostParams.getPublicKeyParamSet(),
gostParams.getDigestParamSet(),
gostParams.getEncryptionParamSet());
- ASN1Encodable privKey = keyInfo.parsePrivateKey();
- if (privKey instanceof ASN1Integer)
+ ASN1OctetString privEnc = keyInfo.getPrivateKey();
+
+ if (privEnc.getOctets().length == 32 || privEnc.getOctets().length == 64)
{
- d = ASN1Integer.getInstance(privKey).getPositiveValue();
+ d = new BigInteger(1, Arrays.reverse(privEnc.getOctets()));
}
else
{
- byte[] encVal = ASN1OctetString.getInstance(privKey).getOctets();
- byte[] dVal = new byte[encVal.length];
-
- for (int i = 0; i != encVal.length; i++)
+ ASN1Encodable privKey = keyInfo.parsePrivateKey();
+ if (privKey instanceof ASN1Integer)
{
- dVal[i] = encVal[encVal.length - 1 - i];
+ d = ASN1Integer.getInstance(privKey).getPositiveValue();
+ }
+ else
+ {
+ byte[] dVal = Arrays.reverse(ASN1OctetString.getInstance(privKey).getOctets());
+ d = new BigInteger(1, dVal);
}
-
- d = new BigInteger(1, dVal);
}
-
-
}
else
{
@@ -244,27 +244,10 @@ public class PrivateKeyFactory
{
ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters());
X9ECParameters ecP = ECNamedCurveTable.getByOID(oid);
- if (ecP == null)
- {
- ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid);
- ecSpec = new ECGOST3410Parameters(new ECNamedDomainParameters(
- oid,
- gParam.getCurve(),
- gParam.getG(),
- gParam.getN(),
- gParam.getH(),
- gParam.getSeed()), gostParams.getPublicKeyParamSet(), gostParams.getDigestParamSet(), gostParams.getEncryptionParamSet());
- }
- else
- {
- ecSpec = new ECGOST3410Parameters(new ECNamedDomainParameters(
- oid,
- ecP.getCurve(),
- ecP.getG(),
- ecP.getN(),
- ecP.getH(),
- ecP.getSeed()), gostParams.getPublicKeyParamSet(), gostParams.getDigestParamSet(), gostParams.getEncryptionParamSet());
- }
+
+ ecSpec = new ECGOST3410Parameters(new ECNamedDomainParameters(oid, ecP),
+ gostParams.getPublicKeyParamSet(), gostParams.getDigestParamSet(),
+ gostParams.getEncryptionParamSet());
}
else if (params.isImplicitlyCA())
{
@@ -273,13 +256,9 @@ public class PrivateKeyFactory
else
{
X9ECParameters ecP = X9ECParameters.getInstance(params.getParameters());
- ecSpec = new ECGOST3410Parameters(new ECNamedDomainParameters(
- algOID,
- ecP.getCurve(),
- ecP.getG(),
- ecP.getN(),
- ecP.getH(),
- ecP.getSeed()), gostParams.getPublicKeyParamSet(), gostParams.getDigestParamSet(), gostParams.getEncryptionParamSet());
+ ecSpec = new ECGOST3410Parameters(new ECNamedDomainParameters(algOID, ecP),
+ gostParams.getPublicKeyParamSet(), gostParams.getDigestParamSet(),
+ gostParams.getEncryptionParamSet());
}
ASN1Encodable privKey = keyInfo.parsePrivateKey();
@@ -291,7 +270,7 @@ public class PrivateKeyFactory
}
else
{
- org.bouncycastle.asn1.sec.ECPrivateKey ec = org.bouncycastle.asn1.sec.ECPrivateKey.getInstance(privKey);
+ ECPrivateKey ec = ECPrivateKey.getInstance(privKey);
d = ec.getKey();
}