1package org.bouncycastle.asn1.pkcs;
2
3import java.math.BigInteger;
4
5import org.bouncycastle.asn1.ASN1Encodable;
6import org.bouncycastle.asn1.ASN1EncodableVector;
7import org.bouncycastle.asn1.ASN1OctetString;
8import org.bouncycastle.asn1.ASN1Sequence;
9import org.bouncycastle.asn1.DERInteger;
10import org.bouncycastle.asn1.DERObject;
11import org.bouncycastle.asn1.DEROctetString;
12import org.bouncycastle.asn1.DERSequence;
13
14public class PBEParameter
15    extends ASN1Encodable
16{
17    DERInteger      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 DERInteger(iterations);
30    }
31
32    public PBEParameter(
33        ASN1Sequence  seq)
34    {
35        salt = (ASN1OctetString)seq.getObjectAt(0);
36        iterations = (DERInteger)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 instanceof ASN1Sequence)
47        {
48            return new PBEParameter((ASN1Sequence)obj);
49        }
50
51        throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
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 DERObject toASN1Object()
65    {
66        ASN1EncodableVector  v = new ASN1EncodableVector();
67
68        v.add(salt);
69        v.add(iterations);
70
71        return new DERSequence(v);
72    }
73}