Refine search
@Override public String getAlgorithm() { return this.getKey().getAlgorithm(); }
@Override public byte[] getEncoded() { return this.getKey().getEncoded(); }
return (T) new ECPublicKeySpec(ecKey.getW(), ecKey.getParams()); } else if (key instanceof PublicKey && ECPublicKeySpec.class.isAssignableFrom(keySpec)) { final byte[] encoded = key.getEncoded(); return (T) new ECPublicKeySpec(ecKey.getW(), ecKey.getParams()); } else if (key instanceof ECPrivateKey && ECPrivateKeySpec.class.isAssignableFrom(keySpec)) { ECPrivateKey ecKey = (ECPrivateKey) key; return (T) new ECPrivateKeySpec(ecKey.getS(), ecKey.getParams()); } else if (key instanceof PrivateKey && ECPrivateKeySpec.class.isAssignableFrom(keySpec)) { final byte[] encoded = key.getEncoded(); return (T) new ECPrivateKeySpec(ecKey.getS(), ecKey.getParams()); } else if (key instanceof PrivateKey && PKCS8EncodedKeySpec.class.isAssignableFrom(keySpec)) {
public void init(int key_size) throws Exception { String name=null; if(key_size==256) name="secp256r1"; else if(key_size==384) name="secp384r1"; else if(key_size==521) name="secp521r1"; else throw new JSchException("unsupported key size: "+key_size); for(int i = 0; i<1000; i++) { KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecsp = new ECGenParameterSpec(name); kpg.initialize(ecsp); KeyPair kp = kpg.genKeyPair(); prvKey = (ECPrivateKey)kp.getPrivate(); pubKey = (ECPublicKey)kp.getPublic(); params=pubKey.getParams(); d=((ECPrivateKey)prvKey).getS().toByteArray(); ECPoint w = pubKey.getW(); r = w.getAffineX().toByteArray(); s = w.getAffineY().toByteArray(); if(r.length!=s.length) continue; if(key_size==256 && r.length==32) break; if(key_size==384 && r.length==48) break; if(key_size==521 && r.length==66) break; } if(d.length<r.length){ d=insert0(d); } } public byte[] getD(){return d;}
public BCECPrivateKey( ECPrivateKey key, ProviderConfiguration configuration) { this.d = key.getS(); this.algorithm = key.getAlgorithm(); this.ecSpec = key.getParams(); this.configuration = configuration; }
/** * Checks that the public key's params is the same as the private key's params, and the public key * is a valid point on the private key's curve. * * @since 1.1.0 */ public static void validatePublicKey(ECPublicKey publicKey, ECPrivateKey privateKey) throws GeneralSecurityException { validatePublicKeySpec(publicKey, privateKey); checkPointOnCurve(publicKey.getW(), privateKey.getParams().getCurve()); }
@Override public BigInteger getS() { return this.getKey().getS(); }
AlgorithmParameterSpec spec = k.getParams(); SigType type; if (spec.equals(SigType.ECDSA_SHA256_P256.getParams()))
if (k.getParams() != null) return new java.security.spec.ECPublicKeySpec(k.getW(), k.getParams()); if (k.getParams() != null) return new java.security.spec.ECPrivateKeySpec(k.getS(), k.getParams()); return new java.security.spec.ECPrivateKeySpec(k.getS(), EC5Util.convertSpec(EC5Util.convertCurve(implicitSpec.getCurve(), implicitSpec.getSeed()), implicitSpec)); if (k.getParams() != null) return new com.bugvm.bouncycastle.jce.spec.ECPrivateKeySpec(k.getS(), EC5Util.convertSpec(k.getParams(), false)); return new com.bugvm.bouncycastle.jce.spec.ECPrivateKeySpec(k.getS(), implicitSpec);
public void init(int key_size) throws Exception { String name=null; if(key_size==256) name="secp256r1"; else if(key_size==384) name="secp384r1"; else if(key_size==521) name="secp521r1"; else throw new JSchException("unsupported key size: "+key_size); for(int i = 0; i<1000; i++) { KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecsp = new ECGenParameterSpec(name); kpg.initialize(ecsp); KeyPair kp = kpg.genKeyPair(); prvKey = (ECPrivateKey)kp.getPrivate(); pubKey = (ECPublicKey)kp.getPublic(); params=pubKey.getParams(); d=((ECPrivateKey)prvKey).getS().toByteArray(); ECPoint w = pubKey.getW(); r = w.getAffineX().toByteArray(); s = w.getAffineY().toByteArray(); if(r.length!=s.length) continue; if(key_size==256 && r.length==32) break; if(key_size==384 && r.length==48) break; if(key_size==521 && r.length==66) break; } if(d.length<r.length){ d=insert0(d); } } public byte[] getD(){return d;}
public BCECPrivateKey( ECPrivateKey key, ProviderConfiguration configuration) { this.d = key.getS(); this.algorithm = key.getAlgorithm(); this.ecSpec = key.getParams(); this.configuration = configuration; }
private void checkPointIsOnCurve(ECPublicKey ephemeralPublicKey, ECPrivateKey privateKey) throws JoseException { // to prevent 'Invalid Curve Attack': for NIST curves, check whether public key is on the private key's curve. // from https://www.cs.bris.ac.uk/Research/CryptographySecurity/RWC/2017/nguyen.quan.pdf // there appear to be similar checks in the JVM starting with 1.8.0_51 but // doing it here explicitly seems prudent // (y^2) mod p = (x^3 + ax + b) mod p // thanks to Antonio Sanso for guidance on how to do this check ECParameterSpec ecParameterSpec = privateKey.getParams(); EllipticCurve curve = ecParameterSpec.getCurve(); ECPoint point = ephemeralPublicKey.getW(); BigInteger x = point.getAffineX(); BigInteger y = point.getAffineY(); BigInteger a = curve.getA(); BigInteger b = curve.getB(); BigInteger p = ((ECFieldFp) curve.getField()).getP(); BigInteger leftSide = (y.pow(2)).mod(p); BigInteger rightSide = (x.pow(3).add(a.multiply(x)).add(b)).mod(p); boolean onCurve = leftSide.equals(rightSide); if (!onCurve) { throw new JoseException(HeaderParameterNames.EPHEMERAL_PUBLIC_KEY + " is invalid for " + EllipticCurves.getName(curve)); } }
public static SigningPrivateKey fromJavaKey(ECPrivateKey pk, SigType type) throws GeneralSecurityException { BigInteger s = pk.getS(); int len = type.getPrivkeyLen(); byte[] bs = rectify(s, len); return new SigningPrivateKey(type, bs); }
static OpenSSLKey wrapPlatformKey(ECPrivateKey ecPrivateKey) throws InvalidKeyException { OpenSSLECGroupContext group; try { group = OpenSSLECGroupContext.getInstance(ecPrivateKey.getParams()); } catch (InvalidAlgorithmParameterException e) { throw new InvalidKeyException("Unknown group parameters", e); } return wrapPlatformKey(ecPrivateKey, group); }
if (k.getParams() != null) return new java.security.spec.ECPublicKeySpec(k.getW(), k.getParams()); if (k.getParams() != null) return new java.security.spec.ECPrivateKeySpec(k.getS(), k.getParams()); return new java.security.spec.ECPrivateKeySpec(k.getS(), EC5Util.convertSpec(EC5Util.convertCurve(implicitSpec.getCurve(), implicitSpec.getSeed()), implicitSpec)); if (k.getParams() != null) return new org.ripple.bouncycastle.jce.spec.ECPrivateKeySpec(k.getS(), EC5Util.convertSpec(k.getParams(), false)); return new org.ripple.bouncycastle.jce.spec.ECPrivateKeySpec(k.getS(), implicitSpec);