public static EllipticCurveJsonWebKey generateJwk(ECParameterSpec spec, String provider, SecureRandom secureRandom) throws JoseException { EcKeyUtil keyUtil = new EcKeyUtil(provider, secureRandom); KeyPair keyPair = keyUtil.generateKeyPair(spec); PublicKey publicKey = keyPair.getPublic(); EllipticCurveJsonWebKey ecJwk = (EllipticCurveJsonWebKey) PublicJsonWebKey.Factory.newPublicJwk(publicKey); ecJwk.setPrivateKey(keyPair.getPrivate()); return ecJwk; } }
public KeyPair generateKeyPair(ECParameterSpec spec) throws JoseException { KeyPairGenerator keyGenerator = getKeyPairGenerator(); try { if (secureRandom == null) { keyGenerator.initialize(spec); } else { keyGenerator.initialize(spec, secureRandom); } return keyGenerator.generateKeyPair(); } catch (InvalidAlgorithmParameterException e) { throw new JoseException("Unable to create EC key pair with spec " + spec, e); } } }
@Override public boolean isAvailable() { EcKeyUtil ecKeyUtil = new EcKeyUtil(); return ecKeyUtil.isAvailable() && AlgorithmAvailability.isAvailable("KeyAgreement", getJavaAlgorithm()); } }
public EllipticCurveJsonWebKey(Map<String, Object> params, String jcaProvider) throws JoseException { super(params, jcaProvider); curveName = getString(params, CURVE_MEMBER_NAME, true); ECParameterSpec curve = EllipticCurves.getSpec(curveName); BigInteger x = getBigIntFromBase64UrlEncodedParam(params, X_MEMBER_NAME, true); BigInteger y = getBigIntFromBase64UrlEncodedParam(params, Y_MEMBER_NAME, true); EcKeyUtil keyUtil = new EcKeyUtil(jcaProvider, null); key = keyUtil.publicKey(x, y, curve); checkForBareKeyCertMismatch(); if (params.containsKey(PRIVATE_KEY_MEMBER_NAME)) { BigInteger d = getBigIntFromBase64UrlEncodedParam(params, PRIVATE_KEY_MEMBER_NAME, false); privateKey = keyUtil.privateKey(d, curve); } removeFromOtherParams(CURVE_MEMBER_NAME, X_MEMBER_NAME, Y_MEMBER_NAME, PRIVATE_KEY_MEMBER_NAME); }
public ECPrivateKey privateKey(BigInteger d, ECParameterSpec spec) throws JoseException { ECPrivateKeySpec ecPrivateKeySpec = new ECPrivateKeySpec(d, spec); try { PrivateKey privateKey = getKeyFactory().generatePrivate(ecPrivateKeySpec); return (ECPrivateKey) privateKey; } catch (InvalidKeySpecException e) { throw new JoseException("Invalid key spec: " + e, e); } }
public ECPublicKey publicKey(BigInteger x, BigInteger y, ECParameterSpec spec) throws JoseException { ECPoint w = new ECPoint(x, y); ECPublicKeySpec ecPublicKeySpec = new ECPublicKeySpec(w, spec); try { PublicKey publicKey = getKeyFactory().generatePublic(ecPublicKeySpec); return (ECPublicKey) publicKey; } catch (InvalidKeySpecException e) { throw new JoseException("Invalid key spec: " + e, e); } }