1package org.bouncycastle.jce.provider; 2 3import javax.crypto.interfaces.PBEKey; 4import javax.crypto.spec.PBEKeySpec; 5 6import org.bouncycastle.asn1.DERObjectIdentifier; 7import org.bouncycastle.crypto.CipherParameters; 8import org.bouncycastle.crypto.PBEParametersGenerator; 9import org.bouncycastle.crypto.params.KeyParameter; 10import org.bouncycastle.crypto.params.ParametersWithIV; 11 12public class JCEPBEKey 13 implements PBEKey 14{ 15 String algorithm; 16 DERObjectIdentifier oid; 17 int type; 18 int digest; 19 int keySize; 20 int ivSize; 21 CipherParameters param; 22 PBEKeySpec pbeKeySpec; 23 boolean tryWrong = false; 24 25 /** 26 * @param param 27 */ 28 public JCEPBEKey( 29 String algorithm, 30 DERObjectIdentifier oid, 31 int type, 32 int digest, 33 int keySize, 34 int ivSize, 35 PBEKeySpec pbeKeySpec, 36 CipherParameters param) 37 { 38 this.algorithm = algorithm; 39 this.oid = oid; 40 this.type = type; 41 this.digest = digest; 42 this.keySize = keySize; 43 this.ivSize = ivSize; 44 this.pbeKeySpec = pbeKeySpec; 45 this.param = param; 46 } 47 48 public String getAlgorithm() 49 { 50 return algorithm; 51 } 52 53 public String getFormat() 54 { 55 return "RAW"; 56 } 57 58 public byte[] getEncoded() 59 { 60 if (param != null) 61 { 62 KeyParameter kParam; 63 64 if (param instanceof ParametersWithIV) 65 { 66 kParam = (KeyParameter)((ParametersWithIV)param).getParameters(); 67 } 68 else 69 { 70 kParam = (KeyParameter)param; 71 } 72 73 return kParam.getKey(); 74 } 75 else 76 { 77 if (type == PBE.PKCS12) 78 { 79 return PBEParametersGenerator.PKCS12PasswordToBytes(pbeKeySpec.getPassword()); 80 } 81 else 82 { 83 return PBEParametersGenerator.PKCS5PasswordToBytes(pbeKeySpec.getPassword()); 84 } 85 } 86 } 87 88 int getType() 89 { 90 return type; 91 } 92 93 int getDigest() 94 { 95 return digest; 96 } 97 98 int getKeySize() 99 { 100 return keySize; 101 } 102 103 int getIvSize() 104 { 105 return ivSize; 106 } 107 108 CipherParameters getParam() 109 { 110 return param; 111 } 112 113 /* (non-Javadoc) 114 * @see javax.crypto.interfaces.PBEKey#getPassword() 115 */ 116 public char[] getPassword() 117 { 118 return pbeKeySpec.getPassword(); 119 } 120 121 /* (non-Javadoc) 122 * @see javax.crypto.interfaces.PBEKey#getSalt() 123 */ 124 public byte[] getSalt() 125 { 126 return pbeKeySpec.getSalt(); 127 } 128 129 /* (non-Javadoc) 130 * @see javax.crypto.interfaces.PBEKey#getIterationCount() 131 */ 132 public int getIterationCount() 133 { 134 return pbeKeySpec.getIterationCount(); 135 } 136 137 public DERObjectIdentifier getOID() 138 { 139 return oid; 140 } 141 142 void setTryWrongPKCS12Zero(boolean tryWrong) 143 { 144 this.tryWrong = tryWrong; 145 } 146 147 boolean shouldTryWrongPKCS12() 148 { 149 return tryWrong; 150 } 151} 152