1package org.bouncycastle.asn1.ocsp; 2 3import org.bouncycastle.asn1.ASN1Choice; 4import org.bouncycastle.asn1.ASN1Encodable; 5import org.bouncycastle.asn1.ASN1Object; 6import org.bouncycastle.asn1.ASN1Primitive; 7import org.bouncycastle.asn1.ASN1TaggedObject; 8import org.bouncycastle.asn1.DERNull; 9import org.bouncycastle.asn1.DERTaggedObject; 10 11public class CertStatus 12 extends ASN1Object 13 implements ASN1Choice 14{ 15 private int tagNo; 16 private ASN1Encodable value; 17 18 /** 19 * create a CertStatus object with a tag of zero. 20 */ 21 public CertStatus() 22 { 23 tagNo = 0; 24 value = DERNull.INSTANCE; 25 } 26 27 public CertStatus( 28 RevokedInfo info) 29 { 30 tagNo = 1; 31 value = info; 32 } 33 34 public CertStatus( 35 int tagNo, 36 ASN1Encodable value) 37 { 38 this.tagNo = tagNo; 39 this.value = value; 40 } 41 42 private CertStatus( 43 ASN1TaggedObject choice) 44 { 45 this.tagNo = choice.getTagNo(); 46 47 switch (choice.getTagNo()) 48 { 49 case 0: 50 value = DERNull.INSTANCE; 51 break; 52 case 1: 53 value = RevokedInfo.getInstance(choice, false); 54 break; 55 case 2: 56 value = DERNull.INSTANCE; 57 break; 58 default: 59 throw new IllegalArgumentException("Unknown tag encountered: " + choice.getTagNo()); 60 } 61 } 62 63 public static CertStatus getInstance( 64 Object obj) 65 { 66 if (obj == null || obj instanceof CertStatus) 67 { 68 return (CertStatus)obj; 69 } 70 else if (obj instanceof ASN1TaggedObject) 71 { 72 return new CertStatus((ASN1TaggedObject)obj); 73 } 74 75 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 76 } 77 78 public static CertStatus getInstance( 79 ASN1TaggedObject obj, 80 boolean explicit) 81 { 82 return getInstance(obj.getObject()); // must be explicitly tagged 83 } 84 85 public int getTagNo() 86 { 87 return tagNo; 88 } 89 90 public ASN1Encodable getStatus() 91 { 92 return value; 93 } 94 95 /** 96 * Produce an object suitable for an ASN1OutputStream. 97 * <pre> 98 * CertStatus ::= CHOICE { 99 * good [0] IMPLICIT NULL, 100 * revoked [1] IMPLICIT RevokedInfo, 101 * unknown [2] IMPLICIT UnknownInfo } 102 * </pre> 103 */ 104 public ASN1Primitive toASN1Primitive() 105 { 106 return new DERTaggedObject(false, tagNo, value); 107 } 108} 109