Example usage for org.bouncycastle.openssl PEMParser readObject

List of usage examples for org.bouncycastle.openssl PEMParser readObject

Introduction

In this page you can find the example usage for org.bouncycastle.openssl PEMParser readObject.

Prototype

public Object readObject() throws IOException 

Source Link

Document

Read the next PEM object attempting to interpret the header and create a higher level object from the content.

Usage

From source file:net.etfbl.cryptodigitalcertificate.tool.util.CryptoPEMExtractor.java

public KeyPair loadKeyPair(String filePath) throws FileNotFoundException, IOException {
    PEMParser reader = new PEMParser(new InputStreamReader(new FileInputStream(filePath)));
    Object keyObject = reader.readObject();
    reader.close();//from  w ww .  jav a 2  s .  c  om
    PEMKeyPair pemPair = (PEMKeyPair) keyObject;
    KeyPair pair = new JcaPEMKeyConverter().getKeyPair(pemPair);
    return pair;
}

From source file:net.etfbl.cryptodigitalcertificate.tool.util.CryptoPEMExtractor.java

public KeyPair loadKeyPair(InputStream stream) throws FileNotFoundException, IOException {
    PEMParser reader = new PEMParser(new InputStreamReader(stream));
    Object keyObject = reader.readObject();
    reader.close();/*from ww w.  j ava 2s.  c om*/
    PEMKeyPair pemPair = (PEMKeyPair) keyObject;
    KeyPair pair = new JcaPEMKeyConverter().getKeyPair(pemPair);
    return pair;
}

From source file:net.jsign.PrivateKeyUtils.java

License:Apache License

private static PrivateKey readPrivateKeyPEM(File file, String password)
        throws IOException, GeneralSecurityException, OperatorCreationException, PKCSException {
    try (FileReader reader = new FileReader(file)) {
        PEMParser parser = new PEMParser(reader);
        Object object = parser.readObject();

        if (object == null) {
            throw new IllegalArgumentException("No key found in " + file);
        }//www  .  ja  va  2  s . c o  m

        BouncyCastleProvider provider = new BouncyCastleProvider();
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(provider);

        if (object instanceof PEMEncryptedKeyPair) {
            // PKCS1 encrypted key
            PEMDecryptorProvider decryptionProvider = new JcePEMDecryptorProviderBuilder().setProvider(provider)
                    .build(password.toCharArray());
            PEMKeyPair keypair = ((PEMEncryptedKeyPair) object).decryptKeyPair(decryptionProvider);
            return converter.getPrivateKey(keypair.getPrivateKeyInfo());

        } else if (object instanceof PKCS8EncryptedPrivateKeyInfo) {
            // PKCS8 encrypted key
            InputDecryptorProvider decryptionProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder()
                    .setProvider(provider).build(password.toCharArray());
            PrivateKeyInfo info = ((PKCS8EncryptedPrivateKeyInfo) object)
                    .decryptPrivateKeyInfo(decryptionProvider);
            return converter.getPrivateKey(info);

        } else if (object instanceof PEMKeyPair) {
            // PKCS1 unencrypted key
            return converter.getKeyPair((PEMKeyPair) object).getPrivate();

        } else if (object instanceof PrivateKeyInfo) {
            // PKCS8 unencrypted key
            return converter.getPrivateKey((PrivateKeyInfo) object);

        } else {
            throw new UnsupportedOperationException(
                    "Unsupported PEM object: " + object.getClass().getSimpleName());
        }
    }
}

From source file:net.sf.portecle.crypto.KeyStoreUtil.java

License:Open Source License

/**
 * Load keystore entries from PEM reader into a new PKCS #12 keystore. The reader is not closed.
 * /*w  ww . j a  va  2s.  com*/
 * @param reader reader to read entries from
 * @param pwFinder object to get passwords from on demand
 * @return new PKCS #12 keystore containing read entries, possibly empty
 * @throws CryptoException Problem encountered creating the keystore
 * @throws IOException An I/O error occurred
 */
public static KeyStore loadEntries(PEMParser reader, PasswordFinder pwFinder)
        throws CertificateException, CryptoException, IOException {
    LinkedHashSet<KeyPair> keyPairs = new LinkedHashSet<>();
    LinkedHashSet<Certificate> certs = new LinkedHashSet<>();
    KeyStore keyStore = createKeyStore(KeyStoreType.PKCS12);

    CertificateFactory cf = CertificateFactory.getInstance(X509CertUtil.X509_CERT_TYPE);
    JcaPEMKeyConverter keyConverter = new JcaPEMKeyConverter();

    Object obj;
    while ((obj = reader.readObject()) != null) {
        if (obj instanceof PEMEncryptedKeyPair) {
            PEMDecryptorProvider decryptor = new JcePEMDecryptorProviderBuilder().build(pwFinder.getPassword());
            obj = ((PEMEncryptedKeyPair) obj).decryptKeyPair(decryptor);
        }
        if (obj instanceof PEMKeyPair) {
            keyPairs.add(keyConverter.getKeyPair((PEMKeyPair) obj));
        } else if (obj instanceof X509CertificateHolder) {
            ByteArrayInputStream bais = new ByteArrayInputStream(((X509CertificateHolder) obj).getEncoded());
            certs.add(cf.generateCertificate(bais));
        }
    }

    // Add key pairs
    for (KeyPair keyPair : keyPairs) {
        Certificate keyPairCert = null;
        for (Iterator<Certificate> it = certs.iterator(); it.hasNext();) {
            Certificate cert = it.next();
            if (cert.getPublicKey().equals(keyPair.getPublic())) {
                keyPairCert = cert;
                it.remove();
                break;
            }
        }

        if (keyPairCert != null) {
            String alias = "keypair";
            if (keyPairCert instanceof X509Certificate) {
                alias = X509CertUtil.getCertificateAlias((X509Certificate) keyPairCert);
            }

            KeyStore.PrivateKeyEntry entry = new KeyStore.PrivateKeyEntry(keyPair.getPrivate(),
                    new Certificate[] { keyPairCert });
            KeyStore.PasswordProtection prot = new KeyStore.PasswordProtection(DUMMY_PASSWORD);

            try {
                alias = findUnusedAlias(keyStore, alias);
                keyStore.setEntry(alias, entry, prot);
            } catch (KeyStoreException e) {
                throw new CryptoException(e);
            }
        }
    }

    // Add remaining certificates as trusted certificate entries
    for (Certificate cert : certs) {
        String alias = "certificate";
        if (cert instanceof X509Certificate) {
            alias = X509CertUtil.getCertificateAlias((X509Certificate) cert);
        }

        KeyStore.TrustedCertificateEntry entry = new KeyStore.TrustedCertificateEntry(cert);
        try {
            keyStore.setEntry(alias, entry, null);
        } catch (KeyStoreException e) {
            throw new CryptoException(e);
        }
    }

    return keyStore;
}

From source file:net.sf.sahi.ssl.SSLHelper.java

License:Apache License

private Object readWithPemParser(String source) throws IOException {
    PEMParser parser = new PEMParser(new FileReader(source));
    return parser.readObject();
}

From source file:org.apache.brooklyn.util.core.crypto.SecureKeys.java

License:Apache License

/** reads RSA or DSA / pem style private key files (viz {@link #toPem(KeyPair)}), extracting also the public key if possible
 * @throws IllegalStateException on errors, in particular {@link PassphraseProblem} if that is the problem */
public static KeyPair readPem(InputStream input, final String passphrase) {
    // TODO cache is only for fallback "reader" strategy (2015-01); delete when Parser confirmed working
    byte[] cache = Streams.readFully(input);
    input = new ByteArrayInputStream(cache);

    try {//from  w  w  w  .  jav  a 2 s . c  o m
        PEMParser pemParser = new PEMParser(new InputStreamReader(input));

        Object object = pemParser.readObject();
        pemParser.close();

        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
        KeyPair kp = null;
        if (object == null) {
            throw new IllegalStateException("PEM parsing failed: missing or invalid data");
        } else if (object instanceof PEMEncryptedKeyPair) {
            if (passphrase == null)
                throw new PassphraseProblem("passphrase required");
            try {
                PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder()
                        .build(passphrase.toCharArray());
                kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
            } catch (Exception e) {
                Exceptions.propagateIfFatal(e);
                throw new PassphraseProblem("wrong passphrase", e);
            }
        } else if (object instanceof PEMKeyPair) {
            kp = converter.getKeyPair((PEMKeyPair) object);
        } else if (object instanceof PrivateKeyInfo) {
            PrivateKey privKey = converter.getPrivateKey((PrivateKeyInfo) object);
            kp = new KeyPair(null, privKey);
        } else {
            throw new IllegalStateException("PEM parser support missing for: " + object);
        }

        return kp;

    } catch (Exception e) {
        Exceptions.propagateIfFatal(e);

        // older code relied on PEMReader, now deprecated
        // replaced with above based on http://stackoverflow.com/questions/14919048/bouncy-castle-pemreader-pemparser
        // passes the same tests (Jan 2015) but leaving the old code as a fallback for the time being 

        input = new ByteArrayInputStream(cache);
        try {
            Security.addProvider(new BouncyCastleProvider());
            @SuppressWarnings("deprecation")
            org.bouncycastle.openssl.PEMReader pr = new org.bouncycastle.openssl.PEMReader(
                    new InputStreamReader(input), new PasswordFinder() {
                        public char[] getPassword() {
                            return passphrase != null ? passphrase.toCharArray() : new char[0];
                        }
                    });
            @SuppressWarnings("deprecation")
            KeyPair result = (KeyPair) pr.readObject();
            pr.close();
            if (result == null)
                throw Exceptions.propagate(e);

            log.warn("PEMParser failed when deprecated PEMReader succeeded, with " + result + "; had: " + e);

            return result;

        } catch (Exception e2) {
            Exceptions.propagateIfFatal(e2);
            throw Exceptions.propagate(e);
        }
    }
}

From source file:org.apache.camel.component.ssh.FileKeyPairProvider.java

License:Apache License

public KeyPair[] loadKeys() {
    if (!SecurityUtils.isBouncyCastleRegistered()) {
        throw new IllegalStateException("BouncyCastle must be registered as a JCE provider");
    }/*from  ww w .j a va2 s  .co m*/
    List<KeyPair> keys = new ArrayList<KeyPair>();
    for (int i = 0; i < files.length; i++) {
        try {
            PEMParser r = new PEMParser(new InputStreamReader(new FileInputStream(files[i])));
            try {
                Object o = r.readObject();

                JcaPEMKeyConverter pemConverter = new JcaPEMKeyConverter();
                pemConverter.setProvider("BC");
                if (passwordFinder != null && o instanceof PEMEncryptedKeyPair) {
                    JcePEMDecryptorProviderBuilder decryptorBuilder = new JcePEMDecryptorProviderBuilder();
                    PEMDecryptorProvider pemDecryptor = decryptorBuilder.build(passwordFinder.getPassword());
                    o = pemConverter.getKeyPair(((PEMEncryptedKeyPair) o).decryptKeyPair(pemDecryptor));
                }

                if (o instanceof PEMKeyPair) {
                    o = pemConverter.getKeyPair((PEMKeyPair) o);
                    keys.add((KeyPair) o);
                } else if (o instanceof KeyPair) {
                    keys.add((KeyPair) o);
                }

            } finally {
                r.close();
            }
        } catch (Exception e) {
            log.warn("Unable to read key {}: {}", files[i], e);
        }
    }
    return keys.toArray(new KeyPair[keys.size()]);
}

From source file:org.apache.camel.component.ssh.ResourceHelperKeyPairProvider.java

License:Apache License

@Override
protected KeyPair[] loadKeys() {
    if (!SecurityUtils.isBouncyCastleRegistered()) {
        throw new IllegalStateException("BouncyCastle must be registered as a JCE provider");
    }//from   w w w .j a  va  2s.com

    final List<KeyPair> keys = new ArrayList<KeyPair>(this.resources.length);

    for (String resource : resources) {
        PEMParser r = null;
        InputStreamReader isr = null;
        InputStream is = null;
        try {
            is = ResourceHelper.resolveMandatoryResourceAsInputStream(classResolver, resource);
            isr = new InputStreamReader(is);
            r = new PEMParser(isr);

            Object o = r.readObject();

            JcaPEMKeyConverter pemConverter = new JcaPEMKeyConverter();
            pemConverter.setProvider("BC");
            if (passwordFinder != null && o instanceof PEMEncryptedKeyPair) {
                JcePEMDecryptorProviderBuilder decryptorBuilder = new JcePEMDecryptorProviderBuilder();
                PEMDecryptorProvider pemDecryptor = decryptorBuilder.build(passwordFinder.getPassword());
                o = pemConverter.getKeyPair(((PEMEncryptedKeyPair) o).decryptKeyPair(pemDecryptor));
            }

            if (o instanceof PEMKeyPair) {
                o = pemConverter.getKeyPair((PEMKeyPair) o);
                keys.add((KeyPair) o);
            } else if (o instanceof KeyPair) {
                keys.add((KeyPair) o);
            }

        } catch (Exception e) {
            log.warn("Unable to read key", e);
        } finally {
            IoUtils.closeQuietly(r, is, isr);
        }
    }

    return keys.toArray(new KeyPair[keys.size()]);
}

From source file:org.apache.cloudstack.utils.security.CertUtils.java

License:Apache License

public static X509Certificate pemToX509Certificate(final String pem) throws CertificateException, IOException {
    final PEMParser pemParser = new PEMParser(new StringReader(pem));
    return new JcaX509CertificateConverter().setProvider("BC")
            .getCertificate((X509CertificateHolder) pemParser.readObject());
}

From source file:org.apache.james.jmap.crypto.PublicKeyReader.java

License:Apache License

private Optional<PublicKey> publicKeyFrom(PEMParser reader) {
    try {/*from w  ww.j  a  va2  s.  c  o m*/
        Object readPEM = reader.readObject();
        if (readPEM instanceof SubjectPublicKeyInfo) {
            return Optional.of(new JcaPEMKeyConverter().getPublicKey((SubjectPublicKeyInfo) readPEM));
        }
        return Optional.empty();
    } catch (IOException e) {
        LOGGER.warn("Error when reading the PEM file", e);
        return Optional.empty();
    }
}