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.ASN1TaggedObject;
10import org.bouncycastle.asn1.DERSequence;
11import org.bouncycastle.asn1.DERTaggedObject;
12
13/**
14 * CRL Bag for PKCS#12
15 */
16public class CRLBag
17    extends ASN1Object
18{
19    private ASN1ObjectIdentifier crlId;
20    private ASN1Encodable crlValue;
21
22    private CRLBag(
23        ASN1Sequence seq)
24    {
25        this.crlId = (ASN1ObjectIdentifier)seq.getObjectAt(0);
26        this.crlValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject();
27    }
28
29    public static CRLBag getInstance(Object o)
30    {
31        if (o instanceof CRLBag)
32        {
33            return (CRLBag)o;
34        }
35        else if (o != null)
36        {
37            return new CRLBag(ASN1Sequence.getInstance(o));
38        }
39
40        return null;
41    }
42
43    public CRLBag(
44        ASN1ObjectIdentifier crlId,
45        ASN1Encodable crlValue)
46    {
47        this.crlId = crlId;
48        this.crlValue = crlValue;
49    }
50
51    public ASN1ObjectIdentifier getCrlId()
52    {
53        return crlId;
54    }
55
56    public ASN1Encodable getCrlValue()
57    {
58        return crlValue;
59    }
60
61    /**
62     * <pre>
63     * CRLBag ::= SEQUENCE {
64     * crlId  BAG-TYPE.&amp;id ({CRLTypes}),
65     * crlValue  [0] EXPLICIT BAG-TYPE.&amp;Type ({CRLTypes}{&#64;crlId})
66     * }
67     *
68     * x509CRL BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}
69     * -- DER-encoded X.509 CRL stored in OCTET STRING
70	 *
71     * CRLTypes BAG-TYPE ::= {
72     * x509CRL,
73     * ... -- For future extensions
74     * }
75     * </pre>
76     */
77    public ASN1Primitive toASN1Primitive()
78    {
79        ASN1EncodableVector  v = new ASN1EncodableVector();
80
81        v.add(crlId);
82        v.add(new DERTaggedObject(0, crlValue));
83
84        return new DERSequence(v);
85    }
86}
87