1 package org.bouncycastle.asn1.bc;
2 
3 import java.io.IOException;
4 
5 import org.bouncycastle.asn1.ASN1Choice;
6 import org.bouncycastle.asn1.ASN1Encodable;
7 import org.bouncycastle.asn1.ASN1Object;
8 import org.bouncycastle.asn1.ASN1Primitive;
9 import org.bouncycastle.asn1.ASN1Sequence;
10 import org.bouncycastle.asn1.ASN1TaggedObject;
11 import org.bouncycastle.asn1.DERTaggedObject;
12 
13 /**
14  * <pre>
15  * ObjectStoreIntegrityCheck ::= CHOICE {
16  *     PbkdMacIntegrityCheck
17  *     [0] EXPLICIT SignatureCheck
18  * }
19  * </pre>
20  */
21 public class ObjectStoreIntegrityCheck
22     extends ASN1Object
23     implements ASN1Choice
24 {
25     public static final int PBKD_MAC_CHECK = 0;
26     public static final int SIG_CHECK = 1;
27 
28     private final int type;
29     private final ASN1Object integrityCheck;
30 
ObjectStoreIntegrityCheck(PbkdMacIntegrityCheck macIntegrityCheck)31     public ObjectStoreIntegrityCheck(PbkdMacIntegrityCheck macIntegrityCheck)
32     {
33         this((ASN1Encodable)macIntegrityCheck);
34     }
35 
ObjectStoreIntegrityCheck(SignatureCheck signatureCheck)36     public ObjectStoreIntegrityCheck(SignatureCheck signatureCheck)
37     {
38         this(new DERTaggedObject(0, signatureCheck));
39     }
40 
ObjectStoreIntegrityCheck(ASN1Encodable obj)41     private ObjectStoreIntegrityCheck(ASN1Encodable obj)
42     {
43         if (obj instanceof ASN1Sequence || obj instanceof  PbkdMacIntegrityCheck)
44         {
45             this.type = PBKD_MAC_CHECK;
46             this.integrityCheck = PbkdMacIntegrityCheck.getInstance(obj);
47         }
48         else if (obj instanceof ASN1TaggedObject)
49         {
50             this.type = SIG_CHECK;
51             this.integrityCheck = SignatureCheck.getInstance(((ASN1TaggedObject)obj).getObject());
52         }
53         else
54         {
55             throw new IllegalArgumentException("Unknown check object in integrity check.");
56         }
57     }
58 
getInstance(Object o)59     public static ObjectStoreIntegrityCheck getInstance(Object o)
60     {
61         if (o instanceof ObjectStoreIntegrityCheck)
62         {
63             return (ObjectStoreIntegrityCheck)o;
64         }
65         else if (o instanceof byte[])
66         {
67             try
68             {
69                 return new ObjectStoreIntegrityCheck(ASN1Primitive.fromByteArray((byte[])o));
70             }
71             catch (IOException e)
72             {
73                 throw new IllegalArgumentException("Unable to parse integrity check details.");
74             }
75         }
76         else if (o != null)
77         {
78             return new ObjectStoreIntegrityCheck((ASN1Encodable)(o));
79         }
80 
81         return null;
82     }
83 
84 
getType()85     public int getType()
86     {
87         return type;
88     }
89 
getIntegrityCheck()90     public ASN1Object getIntegrityCheck()
91     {
92         return integrityCheck;
93     }
94 
toASN1Primitive()95     public ASN1Primitive toASN1Primitive()
96     {
97         if (integrityCheck instanceof SignatureCheck)
98         {
99             return new DERTaggedObject(0, integrityCheck);
100         }
101         return integrityCheck.toASN1Primitive();
102     }
103 }
104