BCPBEKey.java revision 2768c2948c0b1931bff087e43a8db8059c183b56
14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.symmetric.util; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport javax.crypto.interfaces.PBEKey; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport javax.crypto.spec.PBEKeySpec; 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 6e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.CipherParameters; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.PBEParametersGenerator; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.params.KeyParameter; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.params.ParametersWithIV; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class BCPBEKey 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam implements PBEKey 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam String algorithm; 16e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom ASN1ObjectIdentifier oid; 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int type; 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int digest; 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int keySize; 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int ivSize; 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam CipherParameters param; 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam PBEKeySpec pbeKeySpec; 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean tryWrong = false; 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param param 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public BCPBEKey( 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom String algorithm, 30e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom ASN1ObjectIdentifier oid, 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int type, 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int digest, 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int keySize, 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int ivSize, 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom PBEKeySpec pbeKeySpec, 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom CipherParameters param) 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.algorithm = algorithm; 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.oid = oid; 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.type = type; 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.digest = digest; 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.keySize = keySize; 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.ivSize = ivSize; 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.pbeKeySpec = pbeKeySpec; 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.param = param; 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String getAlgorithm() 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return algorithm; 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String getFormat() 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return "RAW"; 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public byte[] getEncoded() 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (param != null) 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam KeyParameter kParam; 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (param instanceof ParametersWithIV) 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam kParam = (KeyParameter)((ParametersWithIV)param).getParameters(); 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam kParam = (KeyParameter)param; 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return kParam.getKey(); 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (type == PBE.PKCS12) 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return PBEParametersGenerator.PKCS12PasswordToBytes(pbeKeySpec.getPassword()); 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 812768c2948c0b1931bff087e43a8db8059c183b56William Luh // BEGIN android-changed 822768c2948c0b1931bff087e43a8db8059c183b56William Luh else if (type == PBE.PBKDF2) 832768c2948c0b1931bff087e43a8db8059c183b56William Luh { 842768c2948c0b1931bff087e43a8db8059c183b56William Luh return PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(pbeKeySpec.getPassword()); 852768c2948c0b1931bff087e43a8db8059c183b56William Luh } 862768c2948c0b1931bff087e43a8db8059c183b56William Luh // END android-changed 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return PBEParametersGenerator.PKCS5PasswordToBytes(pbeKeySpec.getPassword()); 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int getType() 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return type; 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int getDigest() 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return digest; 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int getKeySize() 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return keySize; 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public int getIvSize() 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return ivSize; 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public CipherParameters getParam() 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return param; 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* (non-Javadoc) 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @see javax.crypto.interfaces.PBEKey#getPassword() 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public char[] getPassword() 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return pbeKeySpec.getPassword(); 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* (non-Javadoc) 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @see javax.crypto.interfaces.PBEKey#getSalt() 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public byte[] getSalt() 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return pbeKeySpec.getSalt(); 133b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* (non-Javadoc) 136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @see javax.crypto.interfaces.PBEKey#getIterationCount() 137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 138b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public int getIterationCount() 139b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return pbeKeySpec.getIterationCount(); 141b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 143e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom public ASN1ObjectIdentifier getOID() 144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 145b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return oid; 146b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void setTryWrongPKCS12Zero(boolean tryWrong) 149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.tryWrong = tryWrong; 151b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 152b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 153b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean shouldTryWrongPKCS12() 154b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tryWrong; 156b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 157b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 158