package org.bouncycastle.openssl.jcajce; import java.security.Provider; import org.bouncycastle.jcajce.DefaultJcaJceHelper; import org.bouncycastle.jcajce.JcaJceHelper; import org.bouncycastle.jcajce.NamedJcaJceHelper; import org.bouncycastle.jcajce.ProviderJcaJceHelper; import org.bouncycastle.openssl.PEMDecryptor; import org.bouncycastle.openssl.PEMDecryptorProvider; import org.bouncycastle.openssl.PEMException; import org.bouncycastle.openssl.PasswordException; public class JcePEMDecryptorProviderBuilder { private JcaJceHelper helper = new DefaultJcaJceHelper(); public JcePEMDecryptorProviderBuilder setProvider(Provider provider) { this.helper = new ProviderJcaJceHelper(provider); return this; } public JcePEMDecryptorProviderBuilder setProvider(String providerName) { this.helper = new NamedJcaJceHelper(providerName); return this; } public PEMDecryptorProvider build(final char[] password) { return new PEMDecryptorProvider() { public PEMDecryptor get(final String dekAlgName) { return new PEMDecryptor() { public byte[] decrypt(byte[] keyBytes, byte[] iv) throws PEMException { if (password == null) { throw new PasswordException("Password is null, but a password is required"); } return PEMUtilities.crypt(false, helper, keyBytes, password, dekAlgName, iv); } }; } }; } }