001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
002
003import java.math.BigInteger;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString;
012import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
013
014public class PBEParameter
015    extends ASN1Object
016{
017    ASN1Integer      iterations;
018    ASN1OctetString salt;
019
020    public PBEParameter(
021        byte[]      salt,
022        int         iterations)
023    {
024        if (salt.length != 8)
025        {
026            throw new IllegalArgumentException("salt length must be 8");
027        }
028        this.salt = new DEROctetString(salt);
029        this.iterations = new ASN1Integer(iterations);
030    }
031
032    private PBEParameter(
033        ASN1Sequence  seq)
034    {
035        salt = (ASN1OctetString)seq.getObjectAt(0);
036        iterations = (ASN1Integer)seq.getObjectAt(1);
037    }
038
039    public static PBEParameter getInstance(
040        Object  obj)
041    {
042        if (obj instanceof PBEParameter)
043        {
044            return (PBEParameter)obj;
045        }
046        else if (obj != null)
047        {
048            return new PBEParameter(ASN1Sequence.getInstance(obj));
049        }
050
051        return null;
052    }
053
054    public BigInteger getIterationCount()
055    {
056        return iterations.getValue();
057    }
058
059    public byte[] getSalt()
060    {
061        return salt.getOctets();
062    }
063
064    public ASN1Primitive toASN1Primitive()
065    {
066        ASN1EncodableVector  v = new ASN1EncodableVector();
067
068        v.add(salt);
069        v.add(iterations);
070
071        return new DERSequence(v);
072    }
073}