Home | History | Annotate | Download | only in provider
      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      */
     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