001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
011
012public class PBES2Parameters
013    extends ASN1Object
014    implements PKCSObjectIdentifiers
015{
016    private KeyDerivationFunc func;
017    private EncryptionScheme scheme;
018
019    public static PBES2Parameters getInstance(
020        Object  obj)
021    {
022        if (obj instanceof PBES2Parameters)
023        {
024            return (PBES2Parameters)obj;
025        }
026        if (obj != null)
027        {
028            return new PBES2Parameters(ASN1Sequence.getInstance(obj));
029        }
030
031        return null;
032    }
033
034    public PBES2Parameters(KeyDerivationFunc keyDevFunc, EncryptionScheme encScheme)
035    {
036        this.func = keyDevFunc;
037        this.scheme = encScheme;
038    }
039
040    private PBES2Parameters(
041        ASN1Sequence  obj)
042    {
043        Enumeration e = obj.getObjects();
044        ASN1Sequence  funcSeq = ASN1Sequence.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive());
045
046        if (funcSeq.getObjectAt(0).equals(id_PBKDF2))
047        {
048            func = new KeyDerivationFunc(id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1)));
049        }
050        else
051        {
052            func = KeyDerivationFunc.getInstance(funcSeq);
053        }
054
055        scheme = EncryptionScheme.getInstance(e.nextElement());
056    }
057
058    public KeyDerivationFunc getKeyDerivationFunc()
059    {
060        return func;
061    }
062
063    public EncryptionScheme getEncryptionScheme()
064    {
065        return scheme;
066    }
067
068    public ASN1Primitive toASN1Primitive()
069    {
070        ASN1EncodableVector  v = new ASN1EncodableVector();
071
072        v.add(func);
073        v.add(scheme);
074
075        return new DERSequence(v);
076    }
077}