1 package org.bouncycastle.asn1.ocsp; 2 3 import org.bouncycastle.asn1.ASN1EncodableVector; 4 import org.bouncycastle.asn1.ASN1GeneralizedTime; 5 import org.bouncycastle.asn1.ASN1Object; 6 import org.bouncycastle.asn1.ASN1Primitive; 7 import org.bouncycastle.asn1.ASN1Sequence; 8 import org.bouncycastle.asn1.ASN1TaggedObject; 9 import org.bouncycastle.asn1.DERSequence; 10 import org.bouncycastle.asn1.DERTaggedObject; 11 import org.bouncycastle.asn1.x509.Extensions; 12 import org.bouncycastle.asn1.x509.X509Extensions; 13 14 public class SingleResponse 15 extends ASN1Object 16 { 17 private CertID certID; 18 private CertStatus certStatus; 19 private ASN1GeneralizedTime thisUpdate; 20 private ASN1GeneralizedTime nextUpdate; 21 private Extensions singleExtensions; 22 23 /** 24 * @deprecated use method taking ASN1GeneralizedTime and Extensions 25 * @param certID 26 * @param certStatus 27 * @param thisUpdate 28 * @param nextUpdate 29 * @param singleExtensions 30 */ SingleResponse( CertID certID, CertStatus certStatus, ASN1GeneralizedTime thisUpdate, ASN1GeneralizedTime nextUpdate, X509Extensions singleExtensions)31 public SingleResponse( 32 CertID certID, 33 CertStatus certStatus, 34 ASN1GeneralizedTime thisUpdate, 35 ASN1GeneralizedTime nextUpdate, 36 X509Extensions singleExtensions) 37 { 38 this(certID, certStatus, thisUpdate, nextUpdate, Extensions.getInstance(singleExtensions)); 39 } 40 SingleResponse( CertID certID, CertStatus certStatus, ASN1GeneralizedTime thisUpdate, ASN1GeneralizedTime nextUpdate, Extensions singleExtensions)41 public SingleResponse( 42 CertID certID, 43 CertStatus certStatus, 44 ASN1GeneralizedTime thisUpdate, 45 ASN1GeneralizedTime nextUpdate, 46 Extensions singleExtensions) 47 { 48 this.certID = certID; 49 this.certStatus = certStatus; 50 this.thisUpdate = thisUpdate; 51 this.nextUpdate = nextUpdate; 52 this.singleExtensions = singleExtensions; 53 } 54 SingleResponse( ASN1Sequence seq)55 private SingleResponse( 56 ASN1Sequence seq) 57 { 58 this.certID = CertID.getInstance(seq.getObjectAt(0)); 59 this.certStatus = CertStatus.getInstance(seq.getObjectAt(1)); 60 this.thisUpdate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(2)); 61 62 if (seq.size() > 4) 63 { 64 this.nextUpdate = ASN1GeneralizedTime.getInstance( 65 (ASN1TaggedObject)seq.getObjectAt(3), true); 66 this.singleExtensions = Extensions.getInstance( 67 (ASN1TaggedObject)seq.getObjectAt(4), true); 68 } 69 else if (seq.size() > 3) 70 { 71 ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(3); 72 73 if (o.getTagNo() == 0) 74 { 75 this.nextUpdate = ASN1GeneralizedTime.getInstance(o, true); 76 } 77 else 78 { 79 this.singleExtensions = Extensions.getInstance(o, true); 80 } 81 } 82 } 83 getInstance( ASN1TaggedObject obj, boolean explicit)84 public static SingleResponse getInstance( 85 ASN1TaggedObject obj, 86 boolean explicit) 87 { 88 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 89 } 90 getInstance( Object obj)91 public static SingleResponse getInstance( 92 Object obj) 93 { 94 if (obj instanceof SingleResponse) 95 { 96 return (SingleResponse)obj; 97 } 98 else if (obj != null) 99 { 100 return new SingleResponse(ASN1Sequence.getInstance(obj)); 101 } 102 103 return null; 104 } 105 getCertID()106 public CertID getCertID() 107 { 108 return certID; 109 } 110 getCertStatus()111 public CertStatus getCertStatus() 112 { 113 return certStatus; 114 } 115 getThisUpdate()116 public ASN1GeneralizedTime getThisUpdate() 117 { 118 return thisUpdate; 119 } 120 getNextUpdate()121 public ASN1GeneralizedTime getNextUpdate() 122 { 123 return nextUpdate; 124 } 125 getSingleExtensions()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 */ toASN1Primitive()142 public ASN1Primitive toASN1Primitive() 143 { 144 ASN1EncodableVector v = new ASN1EncodableVector(5); 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 } 163