1package org.bouncycastle.asn1.pkcs;
2
3import java.math.BigInteger;
4
5import org.bouncycastle.asn1.ASN1EncodableVector;
6import org.bouncycastle.asn1.ASN1Integer;
7import org.bouncycastle.asn1.ASN1Object;
8import org.bouncycastle.asn1.ASN1OctetString;
9import org.bouncycastle.asn1.ASN1Primitive;
10import org.bouncycastle.asn1.ASN1Sequence;
11import org.bouncycastle.asn1.DEROctetString;
12import org.bouncycastle.asn1.DERSequence;
13
14public class PBEParameter
15    extends ASN1Object
16{
17    ASN1Integer      iterations;
18    ASN1OctetString salt;
19
20    public PBEParameter(
21        byte[]      salt,
22        int         iterations)
23    {
24        if (salt.length != 8)
25        {
26            throw new IllegalArgumentException("salt length must be 8");
27        }
28        this.salt = new DEROctetString(salt);
29        this.iterations = new ASN1Integer(iterations);
30    }
31
32    private PBEParameter(
33        ASN1Sequence  seq)
34    {
35        salt = (ASN1OctetString)seq.getObjectAt(0);
36        iterations = (ASN1Integer)seq.getObjectAt(1);
37    }
38
39    public static PBEParameter getInstance(
40        Object  obj)
41    {
42        if (obj instanceof PBEParameter)
43        {
44            return (PBEParameter)obj;
45        }
46        else if (obj != null)
47        {
48            return new PBEParameter(ASN1Sequence.getInstance(obj));
49        }
50
51        return null;
52    }
53
54    public BigInteger getIterationCount()
55    {
56        return iterations.getValue();
57    }
58
59    public byte[] getSalt()
60    {
61        return salt.getOctets();
62    }
63
64    public ASN1Primitive toASN1Primitive()
65    {
66        ASN1EncodableVector  v = new ASN1EncodableVector();
67
68        v.add(salt);
69        v.add(iterations);
70
71        return new DERSequence(v);
72    }
73}
74