001package org.apache.commons.ssl.org.bouncycastle.asn1.cryptopro;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
010
011public class GOST3410PublicKeyAlgParameters
012    extends ASN1Object
013{
014    private ASN1ObjectIdentifier  publicKeyParamSet;
015    private ASN1ObjectIdentifier  digestParamSet;
016    private ASN1ObjectIdentifier  encryptionParamSet;
017    
018    public static GOST3410PublicKeyAlgParameters getInstance(
019        ASN1TaggedObject obj,
020        boolean          explicit)
021    {
022        return getInstance(ASN1Sequence.getInstance(obj, explicit));
023    }
024
025    public static GOST3410PublicKeyAlgParameters getInstance(
026        Object obj)
027    {
028        if (obj instanceof GOST3410PublicKeyAlgParameters)
029        {
030            return (GOST3410PublicKeyAlgParameters)obj;
031        }
032
033        if(obj != null)
034        {
035            return new GOST3410PublicKeyAlgParameters(ASN1Sequence.getInstance(obj));
036        }
037
038        return null;
039    }
040    
041    public GOST3410PublicKeyAlgParameters(
042        ASN1ObjectIdentifier  publicKeyParamSet,
043        ASN1ObjectIdentifier  digestParamSet)
044    {
045        this.publicKeyParamSet = publicKeyParamSet;
046        this.digestParamSet = digestParamSet;
047        this.encryptionParamSet = null;
048    }
049
050    public GOST3410PublicKeyAlgParameters(
051        ASN1ObjectIdentifier  publicKeyParamSet,
052        ASN1ObjectIdentifier  digestParamSet,
053        ASN1ObjectIdentifier  encryptionParamSet)
054    {
055        this.publicKeyParamSet = publicKeyParamSet;
056        this.digestParamSet = digestParamSet;
057        this.encryptionParamSet = encryptionParamSet;
058    }
059
060    /**
061     * @deprecated use getInstance()
062     */
063    public GOST3410PublicKeyAlgParameters(
064        ASN1Sequence  seq)
065    {
066        this.publicKeyParamSet = (ASN1ObjectIdentifier)seq.getObjectAt(0);
067        this.digestParamSet = (ASN1ObjectIdentifier)seq.getObjectAt(1);
068        
069        if (seq.size() > 2)
070        {
071            this.encryptionParamSet = (ASN1ObjectIdentifier)seq.getObjectAt(2);
072        }
073    }
074
075    public ASN1ObjectIdentifier getPublicKeyParamSet()
076    {
077        return publicKeyParamSet;
078    }
079
080    public ASN1ObjectIdentifier getDigestParamSet()
081    {
082        return digestParamSet;
083    }
084
085    public ASN1ObjectIdentifier getEncryptionParamSet()
086    {
087        return encryptionParamSet;
088    }
089
090    public ASN1Primitive toASN1Primitive()
091    {
092        ASN1EncodableVector  v = new ASN1EncodableVector();
093
094        v.add(publicKeyParamSet);
095        v.add(digestParamSet);
096        
097        if (encryptionParamSet != null)
098        {
099            v.add(encryptionParamSet);
100        }
101
102        return new DERSequence(v);
103    }
104}