Skip to content

Commit cb0d210

Browse files
committed
Refactoring around ECPrivateKey
1 parent f4ba48a commit cb0d210

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

core/src/main/java/org/bouncycastle/crypto/util/OpenSSHPrivateKeyUtil.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414
import org.bouncycastle.asn1.pkcs.RSAPrivateKey;
1515
import org.bouncycastle.asn1.sec.ECPrivateKey;
1616
import org.bouncycastle.asn1.x9.ECNamedCurveTable;
17+
import org.bouncycastle.asn1.x9.X962Parameters;
1718
import org.bouncycastle.asn1.x9.X9ECParameters;
1819
import org.bouncycastle.crypto.CryptoServicesRegistrar;
20+
import org.bouncycastle.crypto.ec.CustomNamedCurves;
1921
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
2022
import org.bouncycastle.crypto.params.DSAParameters;
2123
import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
24+
import org.bouncycastle.crypto.params.ECDomainParameters;
2225
import org.bouncycastle.crypto.params.ECNamedDomainParameters;
2326
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
2427
import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters;
@@ -199,13 +202,29 @@ else if (sequence.size() == 4)
199202
&& sequence.getObjectAt(2) instanceof ASN1TaggedObject)
200203
{
201204
ECPrivateKey ecPrivateKey = ECPrivateKey.getInstance(sequence);
202-
ASN1ObjectIdentifier curveOID = ASN1ObjectIdentifier.getInstance(ecPrivateKey.getParametersObject());
203-
X9ECParameters x9Params = ECNamedCurveTable.getByOID(curveOID);
204-
result = new ECPrivateKeyParameters(
205-
ecPrivateKey.getKey(),
206-
new ECNamedDomainParameters(
207-
curveOID,
208-
x9Params));
205+
206+
X962Parameters parameters = X962Parameters.getInstance(
207+
ecPrivateKey.getParametersObject().toASN1Primitive());
208+
ECDomainParameters domainParams;
209+
if (parameters.isNamedCurve())
210+
{
211+
ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(parameters.getParameters());
212+
X9ECParameters x9 = CustomNamedCurves.getByOID(oid);
213+
if (x9 == null)
214+
{
215+
x9 = ECNamedCurveTable.getByOID(oid);
216+
}
217+
domainParams = new ECNamedDomainParameters(oid, x9);
218+
}
219+
else
220+
{
221+
X9ECParameters x9 = X9ECParameters.getInstance(parameters.getParameters());
222+
domainParams = new ECDomainParameters(x9);
223+
}
224+
225+
BigInteger d = ecPrivateKey.getKey();
226+
227+
result = new ECPrivateKeyParameters(d, domainParams);
209228
}
210229
}
211230
}

core/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -155,33 +155,29 @@ else if (algOID.equals(X9ObjectIdentifiers.id_dsa))
155155
}
156156
else if (algOID.equals(X9ObjectIdentifiers.id_ecPublicKey))
157157
{
158-
X962Parameters params = X962Parameters.getInstance(algId.getParameters());
158+
ECPrivateKey ecPrivateKey = ECPrivateKey.getInstance(keyInfo.parsePrivateKey());
159159

160-
X9ECParameters x9;
161-
ECDomainParameters dParams;
162-
163-
if (params.isNamedCurve())
160+
X962Parameters parameters = X962Parameters.getInstance(algId.getParameters().toASN1Primitive());
161+
ECDomainParameters domainParams;
162+
if (parameters.isNamedCurve())
164163
{
165-
ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)params.getParameters();
166-
167-
x9 = CustomNamedCurves.getByOID(oid);
164+
ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(parameters.getParameters());
165+
X9ECParameters x9 = CustomNamedCurves.getByOID(oid);
168166
if (x9 == null)
169167
{
170168
x9 = ECNamedCurveTable.getByOID(oid);
171169
}
172-
dParams = new ECNamedDomainParameters(oid, x9);
170+
domainParams = new ECNamedDomainParameters(oid, x9);
173171
}
174172
else
175173
{
176-
x9 = X9ECParameters.getInstance(params.getParameters());
177-
dParams = new ECDomainParameters(
178-
x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed());
174+
X9ECParameters x9 = X9ECParameters.getInstance(parameters.getParameters());
175+
domainParams = new ECDomainParameters(x9);
179176
}
180177

181-
ECPrivateKey ec = ECPrivateKey.getInstance(keyInfo.parsePrivateKey());
182-
BigInteger d = ec.getKey();
178+
BigInteger d = ecPrivateKey.getKey();
183179

184-
return new ECPrivateKeyParameters(d, dParams);
180+
return new ECPrivateKeyParameters(d, domainParams);
185181
}
186182
else if (algOID.equals(EdECObjectIdentifiers.id_X25519))
187183
{

0 commit comments

Comments
 (0)