| package org.bouncycastle.pkcs.bc; |
| |
| import java.io.InputStream; |
| |
| import org.bouncycastle.asn1.pkcs.PKCS12PBEParams; |
| import org.bouncycastle.asn1.x509.AlgorithmIdentifier; |
| import org.bouncycastle.crypto.CipherParameters; |
| import org.bouncycastle.crypto.ExtendedDigest; |
| import org.bouncycastle.crypto.digests.SHA1Digest; |
| import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator; |
| import org.bouncycastle.crypto.io.CipherInputStream; |
| import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; |
| import org.bouncycastle.operator.GenericKey; |
| import org.bouncycastle.operator.InputDecryptor; |
| import org.bouncycastle.operator.InputDecryptorProvider; |
| |
| public class BcPKCS12PBEInputDecryptorProviderBuilder |
| { |
| private ExtendedDigest digest; |
| |
| public BcPKCS12PBEInputDecryptorProviderBuilder() |
| { |
| this(new SHA1Digest()); |
| } |
| |
| public BcPKCS12PBEInputDecryptorProviderBuilder(ExtendedDigest digest) |
| { |
| this.digest = digest; |
| } |
| |
| public InputDecryptorProvider build(final char[] password) |
| { |
| return new InputDecryptorProvider() |
| { |
| public InputDecryptor get(final AlgorithmIdentifier algorithmIdentifier) |
| { |
| final PaddedBufferedBlockCipher engine = PKCS12PBEUtils.getEngine(algorithmIdentifier.getAlgorithm()); |
| |
| PKCS12PBEParams pbeParams = PKCS12PBEParams.getInstance(algorithmIdentifier.getParameters()); |
| |
| CipherParameters params = PKCS12PBEUtils.createCipherParameters(algorithmIdentifier.getAlgorithm(), digest, engine.getBlockSize(), pbeParams, password); |
| |
| engine.init(false, params); |
| |
| return new InputDecryptor() |
| { |
| public AlgorithmIdentifier getAlgorithmIdentifier() |
| { |
| return algorithmIdentifier; |
| } |
| |
| public InputStream getInputStream(InputStream input) |
| { |
| return new CipherInputStream(input, engine); |
| } |
| |
| public GenericKey getKey() |
| { |
| return new GenericKey(PKCS12ParametersGenerator.PKCS12PasswordToBytes(password)); |
| } |
| }; |
| } |
| }; |
| |
| } |
| } |