14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric.util; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.InvalidKeySpecException; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.KeySpec; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.SecretKey; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport javax.crypto.spec.PBEKeySpec; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.DERObjectIdentifier; 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.CipherParameters; 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class PBESecretKeyFactory 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends BaseSecretKeyFactory 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom implements PBE 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private boolean forCipher; 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private int scheme; 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private int digest; 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private int keySize; 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private int ivSize; 214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public PBESecretKeyFactory( 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom String algorithm, 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERObjectIdentifier oid, 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom boolean forCipher, 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int scheme, 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int digest, 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int keySize, 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int ivSize) 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super(algorithm, oid); 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.forCipher = forCipher; 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.scheme = scheme; 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.digest = digest; 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.keySize = keySize; 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.ivSize = ivSize; 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected SecretKey engineGenerateSecret( 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom KeySpec keySpec) 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws InvalidKeySpecException 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (keySpec instanceof PBEKeySpec) 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom PBEKeySpec pbeSpec = (PBEKeySpec)keySpec; 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom CipherParameters param; 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (pbeSpec.getSalt() == null) 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, null); 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (forCipher) 554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom param = PBE.Util.makePBEParameters(pbeSpec, scheme, digest, keySize, ivSize); 574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom param = PBE.Util.makePBEMacParameters(pbeSpec, scheme, digest, keySize); 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, param); 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidKeySpecException("Invalid KeySpec"); 674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 69