001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1GeneralizedTime; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERIA5String; 013import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 014import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 015 016public class CrlID 017 extends ASN1Object 018{ 019 private DERIA5String crlUrl; 020 private ASN1Integer crlNum; 021 private ASN1GeneralizedTime crlTime; 022 023 private CrlID( 024 ASN1Sequence seq) 025 { 026 Enumeration e = seq.getObjects(); 027 028 while (e.hasMoreElements()) 029 { 030 ASN1TaggedObject o = (ASN1TaggedObject)e.nextElement(); 031 032 switch (o.getTagNo()) 033 { 034 case 0: 035 crlUrl = DERIA5String.getInstance(o, true); 036 break; 037 case 1: 038 crlNum = ASN1Integer.getInstance(o, true); 039 break; 040 case 2: 041 crlTime = ASN1GeneralizedTime.getInstance(o, true); 042 break; 043 default: 044 throw new IllegalArgumentException( 045 "unknown tag number: " + o.getTagNo()); 046 } 047 } 048 } 049 050 public static CrlID getInstance( 051 Object obj) 052 { 053 if (obj instanceof CrlID) 054 { 055 return (CrlID)obj; 056 } 057 else if (obj != null) 058 { 059 return new CrlID(ASN1Sequence.getInstance(obj)); 060 } 061 062 return null; 063 } 064 065 public DERIA5String getCrlUrl() 066 { 067 return crlUrl; 068 } 069 070 public ASN1Integer getCrlNum() 071 { 072 return crlNum; 073 } 074 075 public ASN1GeneralizedTime getCrlTime() 076 { 077 return crlTime; 078 } 079 080 /** 081 * Produce an object suitable for an ASN1OutputStream. 082 * <pre> 083 * CrlID ::= SEQUENCE { 084 * crlUrl [0] EXPLICIT IA5String OPTIONAL, 085 * crlNum [1] EXPLICIT INTEGER OPTIONAL, 086 * crlTime [2] EXPLICIT GeneralizedTime OPTIONAL } 087 * </pre> 088 */ 089 public ASN1Primitive toASN1Primitive() 090 { 091 ASN1EncodableVector v = new ASN1EncodableVector(); 092 093 if (crlUrl != null) 094 { 095 v.add(new DERTaggedObject(true, 0, crlUrl)); 096 } 097 098 if (crlNum != null) 099 { 100 v.add(new DERTaggedObject(true, 1, crlNum)); 101 } 102 103 if (crlTime != null) 104 { 105 v.add(new DERTaggedObject(true, 2, crlTime)); 106 } 107 108 return new DERSequence(v); 109 } 110}