1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.pkcs;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence;
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Set;
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject;
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.DLSequence;
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.DLTaggedObject;
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class SafeBag
154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1ObjectIdentifier bagId;
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1Encodable bagValue;
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1Set                     bagAttributes;
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public SafeBag(
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid,
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Encodable obj)
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.bagId = oid;
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.bagValue = obj;
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.bagAttributes = null;
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public SafeBag(
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid,
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Encodable obj,
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Set                 bagAttributes)
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.bagId = oid;
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.bagValue = obj;
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.bagAttributes = bagAttributes;
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static SafeBag getInstance(
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        Object  obj)
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (obj instanceof SafeBag)
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return (SafeBag)obj;
464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (obj != null)
494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return new SafeBag(ASN1Sequence.getInstance(obj));
514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return null;
544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private SafeBag(
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Sequence    seq)
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        this.bagId = (ASN1ObjectIdentifier)seq.getObjectAt(0);
604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        this.bagValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject();
61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (seq.size() == 3)
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            this.bagAttributes = (ASN1Set)seq.getObjectAt(2);
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1ObjectIdentifier getBagId()
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return bagId;
70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Encodable getBagValue()
73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return bagValue;
75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public ASN1Set getBagAttributes()
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return bagAttributes;
80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1EncodableVector v = new ASN1EncodableVector();
85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        v.add(bagId);
874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        v.add(new DLTaggedObject(true, 0, bagValue));
88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (bagAttributes != null)
90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            v.add(bagAttributes);
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return new DLSequence(v);
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
97