1 package org.bouncycastle.jce.provider; 2 3 import javax.crypto.interfaces.PBEKey; 4 import javax.crypto.spec.PBEKeySpec; 5 6 import org.bouncycastle.asn1.DERObjectIdentifier; 7 import org.bouncycastle.crypto.CipherParameters; 8 import org.bouncycastle.crypto.PBEParametersGenerator; 9 import org.bouncycastle.crypto.params.KeyParameter; 10 import org.bouncycastle.crypto.params.ParametersWithIV; 11 12 public 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 */ JCEPBEKey( String algorithm, DERObjectIdentifier oid, int type, int digest, int keySize, int ivSize, PBEKeySpec pbeKeySpec, CipherParameters param)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 getAlgorithm()48 public String getAlgorithm() 49 { 50 return algorithm; 51 } 52 getFormat()53 public String getFormat() 54 { 55 return "RAW"; 56 } 57 getEncoded()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 getType()88 int getType() 89 { 90 return type; 91 } 92 getDigest()93 int getDigest() 94 { 95 return digest; 96 } 97 getKeySize()98 int getKeySize() 99 { 100 return keySize; 101 } 102 getIvSize()103 int getIvSize() 104 { 105 return ivSize; 106 } 107 getParam()108 CipherParameters getParam() 109 { 110 return param; 111 } 112 113 /* (non-Javadoc) 114 * @see javax.crypto.interfaces.PBEKey#getPassword() 115 */ getPassword()116 public char[] getPassword() 117 { 118 return pbeKeySpec.getPassword(); 119 } 120 121 /* (non-Javadoc) 122 * @see javax.crypto.interfaces.PBEKey#getSalt() 123 */ getSalt()124 public byte[] getSalt() 125 { 126 return pbeKeySpec.getSalt(); 127 } 128 129 /* (non-Javadoc) 130 * @see javax.crypto.interfaces.PBEKey#getIterationCount() 131 */ getIterationCount()132 public int getIterationCount() 133 { 134 return pbeKeySpec.getIterationCount(); 135 } 136 getOID()137 public DERObjectIdentifier getOID() 138 { 139 return oid; 140 } 141 setTryWrongPKCS12Zero(boolean tryWrong)142 void setTryWrongPKCS12Zero(boolean tryWrong) 143 { 144 this.tryWrong = tryWrong; 145 } 146 shouldTryWrongPKCS12()147 boolean shouldTryWrongPKCS12() 148 { 149 return tryWrong; 150 } 151 } 152