001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Set;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DLSequence;
012import org.apache.commons.ssl.org.bouncycastle.asn1.DLTaggedObject;
013
014public class SafeBag
015    extends ASN1Object
016{
017    private ASN1ObjectIdentifier bagId;
018    private ASN1Encodable bagValue;
019    private ASN1Set                     bagAttributes;
020
021    public SafeBag(
022        ASN1ObjectIdentifier oid,
023        ASN1Encodable obj)
024    {
025        this.bagId = oid;
026        this.bagValue = obj;
027        this.bagAttributes = null;
028    }
029
030    public SafeBag(
031        ASN1ObjectIdentifier oid,
032        ASN1Encodable obj,
033        ASN1Set                 bagAttributes)
034    {
035        this.bagId = oid;
036        this.bagValue = obj;
037        this.bagAttributes = bagAttributes;
038    }
039
040    public static SafeBag getInstance(
041        Object  obj)
042    {
043        if (obj instanceof SafeBag)
044        {
045            return (SafeBag)obj;
046        }
047
048        if (obj != null)
049        {
050            return new SafeBag(ASN1Sequence.getInstance(obj));
051        }
052
053        return null;
054    }
055
056    private SafeBag(
057        ASN1Sequence    seq)
058    {
059        this.bagId = (ASN1ObjectIdentifier)seq.getObjectAt(0);
060        this.bagValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject();
061        if (seq.size() == 3)
062        {
063            this.bagAttributes = (ASN1Set)seq.getObjectAt(2);
064        }
065    }
066
067    public ASN1ObjectIdentifier getBagId()
068    {
069        return bagId;
070    }
071
072    public ASN1Encodable getBagValue()
073    {
074        return bagValue;
075    }
076
077    public ASN1Set getBagAttributes()
078    {
079        return bagAttributes;
080    }
081
082    public ASN1Primitive toASN1Primitive()
083    {
084        ASN1EncodableVector v = new ASN1EncodableVector();
085
086        v.add(bagId);
087        v.add(new DLTaggedObject(true, 0, bagValue));
088
089        if (bagAttributes != null)
090        {
091            v.add(bagAttributes);
092        }
093
094        return new DLSequence(v);
095    }
096}