001package org.apache.commons.ssl.org.bouncycastle.asn1.esf; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.ocsp.BasicOCSPResponse; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.CertificateList; 013 014/** 015 * <pre> 016 * RevocationValues ::= SEQUENCE { 017 * crlVals [0] SEQUENCE OF CertificateList OPTIONAL, 018 * ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, 019 * otherRevVals [2] OtherRevVals OPTIONAL} 020 * </pre> 021 */ 022public class RevocationValues 023 extends ASN1Object 024{ 025 026 private ASN1Sequence crlVals; 027 private ASN1Sequence ocspVals; 028 private OtherRevVals otherRevVals; 029 030 public static RevocationValues getInstance(Object obj) 031 { 032 if (obj instanceof RevocationValues) 033 { 034 return (RevocationValues)obj; 035 } 036 else if (obj != null) 037 { 038 return new RevocationValues(ASN1Sequence.getInstance(obj)); 039 } 040 041 return null; 042 } 043 044 private RevocationValues(ASN1Sequence seq) 045 { 046 if (seq.size() > 3) 047 { 048 throw new IllegalArgumentException("Bad sequence size: " 049 + seq.size()); 050 } 051 Enumeration e = seq.getObjects(); 052 while (e.hasMoreElements()) 053 { 054 DERTaggedObject o = (DERTaggedObject)e.nextElement(); 055 switch (o.getTagNo()) 056 { 057 case 0: 058 ASN1Sequence crlValsSeq = (ASN1Sequence)o.getObject(); 059 Enumeration crlValsEnum = crlValsSeq.getObjects(); 060 while (crlValsEnum.hasMoreElements()) 061 { 062 CertificateList.getInstance(crlValsEnum.nextElement()); 063 } 064 this.crlVals = crlValsSeq; 065 break; 066 case 1: 067 ASN1Sequence ocspValsSeq = (ASN1Sequence)o.getObject(); 068 Enumeration ocspValsEnum = ocspValsSeq.getObjects(); 069 while (ocspValsEnum.hasMoreElements()) 070 { 071 BasicOCSPResponse.getInstance(ocspValsEnum.nextElement()); 072 } 073 this.ocspVals = ocspValsSeq; 074 break; 075 case 2: 076 this.otherRevVals = OtherRevVals.getInstance(o.getObject()); 077 break; 078 default: 079 throw new IllegalArgumentException("invalid tag: " 080 + o.getTagNo()); 081 } 082 } 083 } 084 085 public RevocationValues(CertificateList[] crlVals, 086 BasicOCSPResponse[] ocspVals, OtherRevVals otherRevVals) 087 { 088 if (null != crlVals) 089 { 090 this.crlVals = new DERSequence(crlVals); 091 } 092 if (null != ocspVals) 093 { 094 this.ocspVals = new DERSequence(ocspVals); 095 } 096 this.otherRevVals = otherRevVals; 097 } 098 099 public CertificateList[] getCrlVals() 100 { 101 if (null == this.crlVals) 102 { 103 return new CertificateList[0]; 104 } 105 CertificateList[] result = new CertificateList[this.crlVals.size()]; 106 for (int idx = 0; idx < result.length; idx++) 107 { 108 result[idx] = CertificateList.getInstance(this.crlVals 109 .getObjectAt(idx)); 110 } 111 return result; 112 } 113 114 public BasicOCSPResponse[] getOcspVals() 115 { 116 if (null == this.ocspVals) 117 { 118 return new BasicOCSPResponse[0]; 119 } 120 BasicOCSPResponse[] result = new BasicOCSPResponse[this.ocspVals.size()]; 121 for (int idx = 0; idx < result.length; idx++) 122 { 123 result[idx] = BasicOCSPResponse.getInstance(this.ocspVals 124 .getObjectAt(idx)); 125 } 126 return result; 127 } 128 129 public OtherRevVals getOtherRevVals() 130 { 131 return this.otherRevVals; 132 } 133 134 public ASN1Primitive toASN1Primitive() 135 { 136 ASN1EncodableVector v = new ASN1EncodableVector(); 137 if (null != this.crlVals) 138 { 139 v.add(new DERTaggedObject(true, 0, this.crlVals)); 140 } 141 if (null != this.ocspVals) 142 { 143 v.add(new DERTaggedObject(true, 1, this.ocspVals)); 144 } 145 if (null != this.otherRevVals) 146 { 147 v.add(new DERTaggedObject(true, 2, this.otherRevVals.toASN1Primitive())); 148 } 149 return new DERSequence(v); 150 } 151}