15faee297baafbc31667954a404d0451916ef5c59Brian Carlstrompackage org.bouncycastle.asn1.pkcs;
25faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
35faee297baafbc31667954a404d0451916ef5c59Brian Carlstromimport java.util.Enumeration;
45faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
55faee297baafbc31667954a404d0451916ef5c59Brian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
65faee297baafbc31667954a404d0451916ef5c59Brian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
95faee297baafbc31667954a404d0451916ef5c59Brian Carlstromimport org.bouncycastle.asn1.ASN1Sequence;
105faee297baafbc31667954a404d0451916ef5c59Brian Carlstromimport org.bouncycastle.asn1.DERSequence;
115faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
125faee297baafbc31667954a404d0451916ef5c59Brian Carlstrompublic class PBES2Parameters
134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
145faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    implements PKCSObjectIdentifiers
155faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom{
16a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    private KeyDerivationFunc func;
17a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    private EncryptionScheme scheme;
185faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static PBES2Parameters getInstance(
206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        Object  obj)
216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
22a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        if (obj instanceof PBES2Parameters)
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return (PBES2Parameters)obj;
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
26a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        if (obj != null)
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
28a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            return new PBES2Parameters(ASN1Sequence.getInstance(obj));
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
31a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        return null;
32a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
33a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
34a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    public PBES2Parameters(KeyDerivationFunc keyDevFunc, EncryptionScheme encScheme)
35a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
36a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        this.func = keyDevFunc;
37a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        this.scheme = encScheme;
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
40a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    private PBES2Parameters(
415faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        ASN1Sequence  obj)
425faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    {
435faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        Enumeration e = obj.getObjects();
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Sequence  funcSeq = ASN1Sequence.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive());
455faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
465faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        if (funcSeq.getObjectAt(0).equals(id_PBKDF2))
475faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        {
485faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom            func = new KeyDerivationFunc(id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1)));
495faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        }
505faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        else
515faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        {
52a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom            func = KeyDerivationFunc.getInstance(funcSeq);
535faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        }
545faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
55a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        scheme = EncryptionScheme.getInstance(e.nextElement());
565faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    }
575faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
585faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    public KeyDerivationFunc getKeyDerivationFunc()
595faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    {
605faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        return func;
615faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    }
625faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
635faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    public EncryptionScheme getEncryptionScheme()
645faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    {
655faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        return scheme;
665faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    }
675faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
695faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    {
705faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        ASN1EncodableVector  v = new ASN1EncodableVector();
715faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
725faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        v.add(func);
735faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        v.add(scheme);
745faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom
755faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom        return new DERSequence(v);
765faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom    }
775faee297baafbc31667954a404d0451916ef5c59Brian Carlstrom}
78