Search in sources :

Example 6 with ECMultiplier

use of org.bouncycastle.math.ec.ECMultiplier in project athenz by yahoo.

the class Crypto method extractPublicKey.

public static PublicKey extractPublicKey(PrivateKey privateKey) throws CryptoException {
    // we only support RSA and ECDSA private keys
    PublicKey publicKey;
    switch(privateKey.getAlgorithm()) {
        case RSA:
            try {
                KeyFactory kf = KeyFactory.getInstance(getRSAAlgo(), getKeyFactoryProvider());
                RSAPrivateCrtKey rsaCrtKey = (RSAPrivateCrtKey) privateKey;
                RSAPublicKeySpec keySpec = new RSAPublicKeySpec(rsaCrtKey.getModulus(), rsaCrtKey.getPublicExponent());
                publicKey = kf.generatePublic(keySpec);
            } catch (NoSuchProviderException ex) {
                LOG.error("extractPublicKey: RSA - Caught NoSuchProviderException exception: {}", ex.getMessage());
                throw new CryptoException(ex);
            } catch (NoSuchAlgorithmException ex) {
                LOG.error("extractPublicKey: RSA - Caught NoSuchAlgorithmException exception: {}", ex.getMessage());
                throw new CryptoException(ex);
            // /CLOVER:OFF
            } catch (InvalidKeySpecException ex) {
                LOG.error("extractPublicKey: RSA - Caught InvalidKeySpecException exception: {}", ex.getMessage());
                throw new CryptoException(ex);
            }
            // /CLOVER:ON
            break;
        case ECDSA:
            try {
                KeyFactory kf = KeyFactory.getInstance(getECDSAAlgo(), getKeyFactoryProvider());
                BCECPrivateKey ecPrivKey = (BCECPrivateKey) privateKey;
                ECMultiplier ecMultiplier = new FixedPointCombMultiplier();
                ECParameterSpec ecParamSpec = ecPrivKey.getParameters();
                ECPoint ecPointQ = ecMultiplier.multiply(ecParamSpec.getG(), ecPrivKey.getD());
                ECPublicKeySpec keySpec = new ECPublicKeySpec(ecPointQ, ecParamSpec);
                publicKey = kf.generatePublic(keySpec);
            } catch (NoSuchProviderException ex) {
                LOG.error("extractPublicKey: ECDSA - Caught NoSuchProviderException exception: {}", ex.getMessage());
                throw new CryptoException(ex);
            } catch (NoSuchAlgorithmException ex) {
                LOG.error("extractPublicKey: ECDSA - Caught NoSuchAlgorithmException exception: {}", ex.getMessage());
                throw new CryptoException(ex);
            // /CLOVER:OFF
            } catch (InvalidKeySpecException ex) {
                LOG.error("extractPublicKey: ECDSA - Caught InvalidKeySpecException exception: {}", ex.getMessage());
                throw new CryptoException(ex);
            }
            // /CLOVER:ON
            break;
        default:
            String msg = "Unsupported Key Algorithm: " + privateKey.getAlgorithm();
            LOG.error("extractPublicKey: {}", msg);
            throw new CryptoException(msg);
    }
    return publicKey;
}
Also used : RSAPrivateCrtKey(java.security.interfaces.RSAPrivateCrtKey) BCECPublicKey(org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey) ECMultiplier(org.bouncycastle.math.ec.ECMultiplier) RSAPublicKeySpec(java.security.spec.RSAPublicKeySpec) ECPoint(org.bouncycastle.math.ec.ECPoint) ECPublicKeySpec(org.bouncycastle.jce.spec.ECPublicKeySpec) BCECPrivateKey(org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey) FixedPointCombMultiplier(org.bouncycastle.math.ec.FixedPointCombMultiplier) ECParameterSpec(org.bouncycastle.jce.spec.ECParameterSpec) InvalidKeySpecException(java.security.spec.InvalidKeySpecException)

Aggregations

ECMultiplier (org.bouncycastle.math.ec.ECMultiplier)6 ECPoint (org.bouncycastle.math.ec.ECPoint)6 BigInteger (java.math.BigInteger)5 ECPrivateKeyParameters (org.bouncycastle.crypto.params.ECPrivateKeyParameters)5 IOException (java.io.IOException)2 CryptoException (org.bouncycastle.crypto.CryptoException)2 ECDomainParameters (org.bouncycastle.crypto.params.ECDomainParameters)2 FixedPointCombMultiplier (org.bouncycastle.math.ec.FixedPointCombMultiplier)2 RSAPrivateCrtKey (java.security.interfaces.RSAPrivateCrtKey)1 InvalidKeySpecException (java.security.spec.InvalidKeySpecException)1 RSAPublicKeySpec (java.security.spec.RSAPublicKeySpec)1 ASN1EncodableVector (org.bouncycastle.asn1.ASN1EncodableVector)1 ASN1Integer (org.bouncycastle.asn1.ASN1Integer)1 DERSequence (org.bouncycastle.asn1.DERSequence)1 BCECPrivateKey (org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey)1 BCECPublicKey (org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey)1 ECParameterSpec (org.bouncycastle.jce.spec.ECParameterSpec)1 ECPublicKeySpec (org.bouncycastle.jce.spec.ECPublicKeySpec)1