PBKDF2Params.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
1package org.bouncycastle.asn1.pkcs;
2
3import java.math.BigInteger;
4import java.util.Enumeration;
5
6import org.bouncycastle.asn1.ASN1EncodableVector;
7import org.bouncycastle.asn1.ASN1Integer;
8import org.bouncycastle.asn1.ASN1Object;
9import org.bouncycastle.asn1.ASN1OctetString;
10import org.bouncycastle.asn1.ASN1Primitive;
11import org.bouncycastle.asn1.ASN1Sequence;
12import org.bouncycastle.asn1.DEROctetString;
13import org.bouncycastle.asn1.DERSequence;
14
15public class PBKDF2Params
16    extends ASN1Object
17{
18    private ASN1OctetString octStr;
19    private ASN1Integer      iterationCount;
20    private ASN1Integer      keyLength;
21
22    public static PBKDF2Params getInstance(
23        Object  obj)
24    {
25        if (obj instanceof PBKDF2Params)
26        {
27            return (PBKDF2Params)obj;
28        }
29
30        if (obj != null)
31        {
32            return new PBKDF2Params(ASN1Sequence.getInstance(obj));
33        }
34
35        return null;
36    }
37
38    public PBKDF2Params(
39        byte[]  salt,
40        int     iterationCount)
41    {
42        this.octStr = new DEROctetString(salt);
43        this.iterationCount = new ASN1Integer(iterationCount);
44    }
45
46    public PBKDF2Params(
47        byte[]  salt,
48        int     iterationCount,
49        int     keyLength)
50    {
51        this(salt, iterationCount);
52
53        this.keyLength = new ASN1Integer(keyLength);
54    }
55
56    private PBKDF2Params(
57        ASN1Sequence  seq)
58    {
59        Enumeration e = seq.getObjects();
60
61        octStr = (ASN1OctetString)e.nextElement();
62        iterationCount = (ASN1Integer)e.nextElement();
63
64        if (e.hasMoreElements())
65        {
66            keyLength = (ASN1Integer)e.nextElement();
67        }
68        else
69        {
70            keyLength = null;
71        }
72    }
73
74    public byte[] getSalt()
75    {
76        return octStr.getOctets();
77    }
78
79    public BigInteger getIterationCount()
80    {
81        return iterationCount.getValue();
82    }
83
84    public BigInteger getKeyLength()
85    {
86        if (keyLength != null)
87        {
88            return keyLength.getValue();
89        }
90
91        return null;
92    }
93
94    public ASN1Primitive toASN1Primitive()
95    {
96        ASN1EncodableVector  v = new ASN1EncodableVector();
97
98        v.add(octStr);
99        v.add(iterationCount);
100
101        if (keyLength != null)
102        {
103            v.add(keyLength);
104        }
105
106        return new DERSequence(v);
107    }
108}
109