Skip to content

Commit 0b65526

Browse files
committed
Fix 'key spec not recognized' exception with ECDSA keys
1 parent dabe43d commit 0b65526

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/main/java/net/schmizz/sshj/common/ECDSAVariationsAdapter.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
import com.hierynomus.sshj.secg.SecgUtils;
1919
import org.bouncycastle.asn1.nist.NISTNamedCurves;
2020
import org.bouncycastle.asn1.x9.X9ECParameters;
21-
import org.bouncycastle.jce.spec.ECParameterSpec;
22-
import org.bouncycastle.jce.spec.ECPublicKeySpec;
23-
import org.bouncycastle.math.ec.ECPoint;
21+
import org.bouncycastle.jce.spec.ECNamedCurveSpec;
2422
import org.slf4j.Logger;
2523
import org.slf4j.LoggerFactory;
2624

@@ -31,6 +29,8 @@
3129
import java.security.PublicKey;
3230
import java.security.interfaces.ECKey;
3331
import java.security.interfaces.ECPublicKey;
32+
import java.security.spec.ECPoint;
33+
import java.security.spec.ECPublicKeySpec;
3434
import java.util.Arrays;
3535
import java.util.HashMap;
3636
import java.util.Map;
@@ -81,13 +81,14 @@ static PublicKey readPubKeyFromBuffer(Buffer<?> buf, String variation) throws Ge
8181
BigInteger bigX = new BigInteger(1, x);
8282
BigInteger bigY = new BigInteger(1, y);
8383

84-
X9ECParameters ecParams = NISTNamedCurves.getByName(NIST_CURVES_NAMES.get(variation));
85-
ECPoint pPublicPoint = ecParams.getCurve().createPoint(bigX, bigY);
86-
ECParameterSpec spec = new ECParameterSpec(ecParams.getCurve(), ecParams.getG(), ecParams.getN());
87-
ECPublicKeySpec publicSpec = new ECPublicKeySpec(pPublicPoint, spec);
84+
String name = NIST_CURVES_NAMES.get(variation);
85+
X9ECParameters ecParams = NISTNamedCurves.getByName(name);
86+
ECNamedCurveSpec ecCurveSpec = new ECNamedCurveSpec(name, ecParams.getCurve(), ecParams.getG(), ecParams.getN());
87+
ECPoint p = new ECPoint(bigX, bigY);
88+
ECPublicKeySpec publicKeySpec = new java.security.spec.ECPublicKeySpec(p, ecCurveSpec);
8889

8990
KeyFactory keyFactory = KeyFactory.getInstance("ECDSA");
90-
return keyFactory.generatePublic(publicSpec);
91+
return keyFactory.generatePublic(publicKeySpec);
9192
} catch (Exception ex) {
9293
throw new GeneralSecurityException(ex);
9394
}

0 commit comments

Comments
 (0)