1package org.bouncycastle.asn1.pkcs;
2
3import java.util.Enumeration;
4
5import org.bouncycastle.asn1.ASN1Encodable;
6import org.bouncycastle.asn1.ASN1EncodableVector;
7import org.bouncycastle.asn1.ASN1Object;
8import org.bouncycastle.asn1.ASN1Primitive;
9import org.bouncycastle.asn1.ASN1Sequence;
10import org.bouncycastle.asn1.DERSequence;
11
12public class PBES2Parameters
13    extends ASN1Object
14    implements PKCSObjectIdentifiers
15{
16    private KeyDerivationFunc   func;
17    private EncryptionScheme    scheme;
18
19    public static PBES2Parameters getInstance(
20        Object  obj)
21    {
22        if (obj== null || obj instanceof PBES2Parameters)
23        {
24            return (PBES2Parameters)obj;
25        }
26
27        if (obj instanceof ASN1Sequence)
28        {
29            return new PBES2Parameters((ASN1Sequence)obj);
30        }
31
32        throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
33    }
34
35    public PBES2Parameters(
36        ASN1Sequence  obj)
37    {
38        Enumeration e = obj.getObjects();
39        ASN1Sequence  funcSeq = ASN1Sequence.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive());
40
41        if (funcSeq.getObjectAt(0).equals(id_PBKDF2))
42        {
43            func = new KeyDerivationFunc(id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1)));
44        }
45        else
46        {
47            func = new KeyDerivationFunc(funcSeq);
48        }
49
50        scheme = (EncryptionScheme)EncryptionScheme.getInstance(e.nextElement());
51    }
52
53    public KeyDerivationFunc getKeyDerivationFunc()
54    {
55        return func;
56    }
57
58    public EncryptionScheme getEncryptionScheme()
59    {
60        return scheme;
61    }
62
63    public ASN1Primitive toASN1Primitive()
64    {
65        ASN1EncodableVector  v = new ASN1EncodableVector();
66
67        v.add(func);
68        v.add(scheme);
69
70        return new DERSequence(v);
71    }
72}
73