1a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric; 2a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 3a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport java.io.IOException; 4a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport java.security.spec.AlgorithmParameterSpec; 5a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport java.security.spec.InvalidParameterSpecException; 6a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 7a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport javax.crypto.spec.PBEParameterSpec; 8a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 9a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.ASN1Encoding; 10a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 11a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCS12PBEParams; 12a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 13a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters; 14a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.util.AlgorithmProvider; 15a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 16a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrompublic class PBEPKCS12 17a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom{ 18a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom private PBEPKCS12() 19a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 20a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 21a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 22a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 23a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public static class AlgParams 24a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom extends BaseAlgorithmParameters 25a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 26a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom PKCS12PBEParams params; 27a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 28a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected byte[] engineGetEncoded() 29a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 30a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom try 31a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 32a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return params.getEncoded(ASN1Encoding.DER); 33a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 34a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom catch (IOException e) 35a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 36a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throw new RuntimeException("Oooops! " + e.toString()); 37a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 38a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 39a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 40a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected byte[] engineGetEncoded( 41a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom String format) 42a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 43a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (this.isASN1FormatString(format)) 44a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 45a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return engineGetEncoded(); 46a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 47a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 48a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return null; 49a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 50a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 51a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected AlgorithmParameterSpec localEngineGetParameterSpec( 52a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom Class paramSpec) 53a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throws InvalidParameterSpecException 54a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 55a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (paramSpec == PBEParameterSpec.class) 56a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 57a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return new PBEParameterSpec(params.getIV(), 58a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom params.getIterations().intValue()); 59a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 60a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 61a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throw new InvalidParameterSpecException("unknown parameter spec passed to PKCS12 PBE parameters object."); 62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected void engineInit( 65a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom AlgorithmParameterSpec paramSpec) 66a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throws InvalidParameterSpecException 67a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 68a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (!(paramSpec instanceof PBEParameterSpec)) 69a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 70a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throw new InvalidParameterSpecException("PBEParameterSpec required to initialise a PKCS12 PBE parameters algorithm parameters object"); 71a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 72a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 73a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom PBEParameterSpec pbeSpec = (PBEParameterSpec)paramSpec; 74a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 75a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom this.params = new PKCS12PBEParams(pbeSpec.getSalt(), 76a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom pbeSpec.getIterationCount()); 77a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 78a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 79a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected void engineInit( 80a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom byte[] params) 81a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throws IOException 82a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 83a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom this.params = PKCS12PBEParams.getInstance(ASN1Primitive.fromByteArray(params)); 84a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 85a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 86a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected void engineInit( 87a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom byte[] params, 88a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom String format) 89a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throws IOException 90a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 91a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (this.isASN1FormatString(format)) 92a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 93a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom engineInit(params); 94a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return; 95a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 96a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 97a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throw new IOException("Unknown parameters format in PKCS12 PBE parameters object"); 98a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 99a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 100a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom protected String engineToString() 101a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 102a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return "PKCS12 PBE Parameters"; 103a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 104a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 105a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 106a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public static class Mappings 107a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom extends AlgorithmProvider 108a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 109a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom private static final String PREFIX = PBEPKCS12.class.getName(); 110a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 111a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public Mappings() 112a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 113a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 114a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 115a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public void configure(ConfigurableProvider provider) 116a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 117a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom provider.addAlgorithm("AlgorithmParameters.PKCS12PBE", PREFIX + "$AlgParams"); 118a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 119a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 120a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom} 121