001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1GeneralizedTime; 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.ASN1Sequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 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.x509.Extensions; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.X509Extensions; 013 014public class SingleResponse 015 extends ASN1Object 016{ 017 private CertID certID; 018 private CertStatus certStatus; 019 private ASN1GeneralizedTime thisUpdate; 020 private ASN1GeneralizedTime nextUpdate; 021 private Extensions singleExtensions; 022 023 /** 024 * @deprecated use method taking ASN1GeneralizedTime and Extensions 025 * @param certID 026 * @param certStatus 027 * @param thisUpdate 028 * @param nextUpdate 029 * @param singleExtensions 030 */ 031 public SingleResponse( 032 CertID certID, 033 CertStatus certStatus, 034 ASN1GeneralizedTime thisUpdate, 035 ASN1GeneralizedTime nextUpdate, 036 X509Extensions singleExtensions) 037 { 038 this(certID, certStatus, thisUpdate, nextUpdate, Extensions.getInstance(singleExtensions)); 039 } 040 041 public SingleResponse( 042 CertID certID, 043 CertStatus certStatus, 044 ASN1GeneralizedTime thisUpdate, 045 ASN1GeneralizedTime nextUpdate, 046 Extensions singleExtensions) 047 { 048 this.certID = certID; 049 this.certStatus = certStatus; 050 this.thisUpdate = thisUpdate; 051 this.nextUpdate = nextUpdate; 052 this.singleExtensions = singleExtensions; 053 } 054 055 private SingleResponse( 056 ASN1Sequence seq) 057 { 058 this.certID = CertID.getInstance(seq.getObjectAt(0)); 059 this.certStatus = CertStatus.getInstance(seq.getObjectAt(1)); 060 this.thisUpdate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(2)); 061 062 if (seq.size() > 4) 063 { 064 this.nextUpdate = ASN1GeneralizedTime.getInstance( 065 (ASN1TaggedObject)seq.getObjectAt(3), true); 066 this.singleExtensions = Extensions.getInstance( 067 (ASN1TaggedObject)seq.getObjectAt(4), true); 068 } 069 else if (seq.size() > 3) 070 { 071 ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(3); 072 073 if (o.getTagNo() == 0) 074 { 075 this.nextUpdate = ASN1GeneralizedTime.getInstance(o, true); 076 } 077 else 078 { 079 this.singleExtensions = Extensions.getInstance(o, true); 080 } 081 } 082 } 083 084 public static SingleResponse getInstance( 085 ASN1TaggedObject obj, 086 boolean explicit) 087 { 088 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 089 } 090 091 public static SingleResponse getInstance( 092 Object obj) 093 { 094 if (obj instanceof SingleResponse) 095 { 096 return (SingleResponse)obj; 097 } 098 else if (obj != null) 099 { 100 return new SingleResponse(ASN1Sequence.getInstance(obj)); 101 } 102 103 return null; 104 } 105 106 public CertID getCertID() 107 { 108 return certID; 109 } 110 111 public CertStatus getCertStatus() 112 { 113 return certStatus; 114 } 115 116 public ASN1GeneralizedTime getThisUpdate() 117 { 118 return thisUpdate; 119 } 120 121 public ASN1GeneralizedTime getNextUpdate() 122 { 123 return nextUpdate; 124 } 125 126 public Extensions getSingleExtensions() 127 { 128 return singleExtensions; 129 } 130 131 /** 132 * Produce an object suitable for an ASN1OutputStream. 133 * <pre> 134 * SingleResponse ::= SEQUENCE { 135 * certID CertID, 136 * certStatus CertStatus, 137 * thisUpdate GeneralizedTime, 138 * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, 139 * singleExtensions [1] EXPLICIT Extensions OPTIONAL } 140 * </pre> 141 */ 142 public ASN1Primitive toASN1Primitive() 143 { 144 ASN1EncodableVector v = new ASN1EncodableVector(); 145 146 v.add(certID); 147 v.add(certStatus); 148 v.add(thisUpdate); 149 150 if (nextUpdate != null) 151 { 152 v.add(new DERTaggedObject(true, 0, nextUpdate)); 153 } 154 155 if (singleExtensions != null) 156 { 157 v.add(new DERTaggedObject(true, 1, singleExtensions)); 158 } 159 160 return new DERSequence(v); 161 } 162}