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 } 81a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom else if (type == PBE.PKCS5S2_UTF8) 822768c2948c0b1931bff087e43a8db8059c183b56William Luh { 832768c2948c0b1931bff087e43a8db8059c183b56William Luh return PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(pbeKeySpec.getPassword()); 842768c2948c0b1931bff087e43a8db8059c183b56William Luh } 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return PBEParametersGenerator.PKCS5PasswordToBytes(pbeKeySpec.getPassword()); 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int getType() 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return type; 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int getDigest() 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return digest; 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int getKeySize() 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return keySize; 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public int getIvSize() 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return ivSize; 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public CipherParameters getParam() 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return param; 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* (non-Javadoc) 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @see javax.crypto.interfaces.PBEKey#getPassword() 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public char[] getPassword() 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return pbeKeySpec.getPassword(); 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* (non-Javadoc) 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @see javax.crypto.interfaces.PBEKey#getSalt() 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public byte[] getSalt() 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return pbeKeySpec.getSalt(); 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 133b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* (non-Javadoc) 134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @see javax.crypto.interfaces.PBEKey#getIterationCount() 135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public int getIterationCount() 137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 138b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return pbeKeySpec.getIterationCount(); 139b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 141e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom public ASN1ObjectIdentifier getOID() 142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return oid; 144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 145b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void setTryWrongPKCS12Zero(boolean tryWrong) 147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 148b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.tryWrong = tryWrong; 149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 151b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean shouldTryWrongPKCS12() 152b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 153b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tryWrong; 154b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 156