001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 013import org.apache.commons.ssl.org.bouncycastle.asn1.crmf.CertId; 014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.CertificateList; 015 016public class RevRepContent 017 extends ASN1Object 018{ 019 private ASN1Sequence status; 020 private ASN1Sequence revCerts; 021 private ASN1Sequence crls; 022 023 private RevRepContent(ASN1Sequence seq) 024 { 025 Enumeration en = seq.getObjects(); 026 027 status = ASN1Sequence.getInstance(en.nextElement()); 028 while (en.hasMoreElements()) 029 { 030 ASN1TaggedObject tObj = ASN1TaggedObject.getInstance(en.nextElement()); 031 032 if (tObj.getTagNo() == 0) 033 { 034 revCerts = ASN1Sequence.getInstance(tObj, true); 035 } 036 else 037 { 038 crls = ASN1Sequence.getInstance(tObj, true); 039 } 040 } 041 } 042 043 public static RevRepContent getInstance(Object o) 044 { 045 if (o instanceof RevRepContent) 046 { 047 return (RevRepContent)o; 048 } 049 050 if (o != null) 051 { 052 return new RevRepContent(ASN1Sequence.getInstance(o)); 053 } 054 055 return null; 056 } 057 058 public PKIStatusInfo[] getStatus() 059 { 060 PKIStatusInfo[] results = new PKIStatusInfo[status.size()]; 061 062 for (int i = 0; i != results.length; i++) 063 { 064 results[i] = PKIStatusInfo.getInstance(status.getObjectAt(i)); 065 } 066 067 return results; 068 } 069 070 public CertId[] getRevCerts() 071 { 072 if (revCerts == null) 073 { 074 return null; 075 } 076 077 CertId[] results = new CertId[revCerts.size()]; 078 079 for (int i = 0; i != results.length; i++) 080 { 081 results[i] = CertId.getInstance(revCerts.getObjectAt(i)); 082 } 083 084 return results; 085 } 086 087 public CertificateList[] getCrls() 088 { 089 if (crls == null) 090 { 091 return null; 092 } 093 094 CertificateList[] results = new CertificateList[crls.size()]; 095 096 for (int i = 0; i != results.length; i++) 097 { 098 results[i] = CertificateList.getInstance(crls.getObjectAt(i)); 099 } 100 101 return results; 102 } 103 104 /** 105 * <pre> 106 * RevRepContent ::= SEQUENCE { 107 * status SEQUENCE SIZE (1..MAX) OF PKIStatusInfo, 108 * -- in same order as was sent in RevReqContent 109 * revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL, 110 * -- IDs for which revocation was requested 111 * -- (same order as status) 112 * crls [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL 113 * -- the resulting CRLs (there may be more than one) 114 * } 115 * </pre> 116 * @return a basic ASN.1 object representation. 117 */ 118 public ASN1Primitive toASN1Primitive() 119 { 120 ASN1EncodableVector v = new ASN1EncodableVector(); 121 122 v.add(status); 123 124 addOptional(v, 0, revCerts); 125 addOptional(v, 1, crls); 126 127 return new DERSequence(v); 128 } 129 130 private void addOptional(ASN1EncodableVector v, int tagNo, ASN1Encodable obj) 131 { 132 if (obj != null) 133 { 134 v.add(new DERTaggedObject(true, tagNo, obj)); 135 } 136 } 137}