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