001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
002
003import java.math.BigInteger;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
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.BERSequence;
011
012/**
013 * the infamous Pfx from PKCS12
014 */
015public class Pfx
016    extends ASN1Object
017    implements PKCSObjectIdentifiers
018{
019    private ContentInfo             contentInfo;
020    private MacData                 macData = null;
021
022    private Pfx(
023        ASN1Sequence   seq)
024    {
025        BigInteger  version = ((ASN1Integer)seq.getObjectAt(0)).getValue();
026        if (version.intValue() != 3)
027        {
028            throw new IllegalArgumentException("wrong version for PFX PDU");
029        }
030
031        contentInfo = ContentInfo.getInstance(seq.getObjectAt(1));
032
033        if (seq.size() == 3)
034        {
035            macData = MacData.getInstance(seq.getObjectAt(2));
036        }
037    }
038
039    public static Pfx getInstance(
040        Object  obj)
041    {
042        if (obj instanceof Pfx)
043        {
044            return (Pfx)obj;
045        }
046
047        if (obj != null)
048        {
049            return new Pfx(ASN1Sequence.getInstance(obj));
050        }
051
052        return null;
053    }
054
055    public Pfx(
056        ContentInfo     contentInfo,
057        MacData         macData)
058    {
059        this.contentInfo = contentInfo;
060        this.macData = macData;
061    }
062
063    public ContentInfo getAuthSafe()
064    {
065        return contentInfo;
066    }
067
068    public MacData getMacData()
069    {
070        return macData;
071    }
072
073    public ASN1Primitive toASN1Primitive()
074    {
075        ASN1EncodableVector v = new ASN1EncodableVector();
076
077        v.add(new ASN1Integer(3));
078        v.add(contentInfo);
079
080        if (macData != null)
081        {
082            v.add(macData);
083        }
084
085        return new BERSequence(v);
086    }
087}