001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERNull; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 010 011public class CertStatus 012 extends ASN1Object 013 implements ASN1Choice 014{ 015 private int tagNo; 016 private ASN1Encodable value; 017 018 /** 019 * create a CertStatus object with a tag of zero. 020 */ 021 public CertStatus() 022 { 023 tagNo = 0; 024 value = DERNull.INSTANCE; 025 } 026 027 public CertStatus( 028 RevokedInfo info) 029 { 030 tagNo = 1; 031 value = info; 032 } 033 034 public CertStatus( 035 int tagNo, 036 ASN1Encodable value) 037 { 038 this.tagNo = tagNo; 039 this.value = value; 040 } 041 042 public CertStatus( 043 ASN1TaggedObject choice) 044 { 045 this.tagNo = choice.getTagNo(); 046 047 switch (choice.getTagNo()) 048 { 049 case 0: 050 value = DERNull.INSTANCE; 051 break; 052 case 1: 053 value = RevokedInfo.getInstance(choice, false); 054 break; 055 case 2: 056 value = DERNull.INSTANCE; 057 } 058 } 059 060 public static CertStatus getInstance( 061 Object obj) 062 { 063 if (obj == null || obj instanceof CertStatus) 064 { 065 return (CertStatus)obj; 066 } 067 else if (obj instanceof ASN1TaggedObject) 068 { 069 return new CertStatus((ASN1TaggedObject)obj); 070 } 071 072 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 073 } 074 075 public static CertStatus getInstance( 076 ASN1TaggedObject obj, 077 boolean explicit) 078 { 079 return getInstance(obj.getObject()); // must be explicitly tagged 080 } 081 082 public int getTagNo() 083 { 084 return tagNo; 085 } 086 087 public ASN1Encodable getStatus() 088 { 089 return value; 090 } 091 092 /** 093 * Produce an object suitable for an ASN1OutputStream. 094 * <pre> 095 * CertStatus ::= CHOICE { 096 * good [0] IMPLICIT NULL, 097 * revoked [1] IMPLICIT RevokedInfo, 098 * unknown [2] IMPLICIT UnknownInfo } 099 * </pre> 100 */ 101 public ASN1Primitive toASN1Primitive() 102 { 103 return new DERTaggedObject(false, tagNo, value); 104 } 105}