SafeBag.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.asn1.pkcs;
2
3import org.bouncycastle.asn1.ASN1Encodable;
4import org.bouncycastle.asn1.ASN1EncodableVector;
5import org.bouncycastle.asn1.ASN1Object;
6import org.bouncycastle.asn1.ASN1ObjectIdentifier;
7import org.bouncycastle.asn1.ASN1Primitive;
8import org.bouncycastle.asn1.ASN1Sequence;
9import org.bouncycastle.asn1.ASN1Set;
10import org.bouncycastle.asn1.ASN1TaggedObject;
11import org.bouncycastle.asn1.DLSequence;
12import org.bouncycastle.asn1.DLTaggedObject;
13
14public class SafeBag
15    extends ASN1Object
16{
17    private ASN1ObjectIdentifier bagId;
18    private ASN1Encodable bagValue;
19    private ASN1Set                     bagAttributes;
20
21    public SafeBag(
22        ASN1ObjectIdentifier oid,
23        ASN1Encodable obj)
24    {
25        this.bagId = oid;
26        this.bagValue = obj;
27        this.bagAttributes = null;
28    }
29
30    public SafeBag(
31        ASN1ObjectIdentifier oid,
32        ASN1Encodable obj,
33        ASN1Set                 bagAttributes)
34    {
35        this.bagId = oid;
36        this.bagValue = obj;
37        this.bagAttributes = bagAttributes;
38    }
39
40    public static SafeBag getInstance(
41        Object  obj)
42    {
43        if (obj instanceof SafeBag)
44        {
45            return (SafeBag)obj;
46        }
47
48        if (obj != null)
49        {
50            return new SafeBag(ASN1Sequence.getInstance(obj));
51        }
52
53        return null;
54    }
55
56    private SafeBag(
57        ASN1Sequence    seq)
58    {
59        this.bagId = (ASN1ObjectIdentifier)seq.getObjectAt(0);
60        this.bagValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject();
61        if (seq.size() == 3)
62        {
63            this.bagAttributes = (ASN1Set)seq.getObjectAt(2);
64        }
65    }
66
67    public ASN1ObjectIdentifier getBagId()
68    {
69        return bagId;
70    }
71
72    public ASN1Encodable getBagValue()
73    {
74        return bagValue;
75    }
76
77    public ASN1Set getBagAttributes()
78    {
79        return bagAttributes;
80    }
81
82    public ASN1Primitive toASN1Primitive()
83    {
84        ASN1EncodableVector v = new ASN1EncodableVector();
85
86        v.add(bagId);
87        v.add(new DLTaggedObject(true, 0, bagValue));
88
89        if (bagAttributes != null)
90        {
91            v.add(bagAttributes);
92        }
93
94        return new DLSequence(v);
95    }
96}
97