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.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 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.AlgorithmIdentifier; 012 013public class BasicOCSPResponse 014 extends ASN1Object 015{ 016 private ResponseData tbsResponseData; 017 private AlgorithmIdentifier signatureAlgorithm; 018 private DERBitString signature; 019 private ASN1Sequence certs; 020 021 public BasicOCSPResponse( 022 ResponseData tbsResponseData, 023 AlgorithmIdentifier signatureAlgorithm, 024 DERBitString signature, 025 ASN1Sequence certs) 026 { 027 this.tbsResponseData = tbsResponseData; 028 this.signatureAlgorithm = signatureAlgorithm; 029 this.signature = signature; 030 this.certs = certs; 031 } 032 033 private BasicOCSPResponse( 034 ASN1Sequence seq) 035 { 036 this.tbsResponseData = ResponseData.getInstance(seq.getObjectAt(0)); 037 this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); 038 this.signature = (DERBitString)seq.getObjectAt(2); 039 040 if (seq.size() > 3) 041 { 042 this.certs = ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(3), true); 043 } 044 } 045 046 public static BasicOCSPResponse getInstance( 047 ASN1TaggedObject obj, 048 boolean explicit) 049 { 050 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 051 } 052 053 public static BasicOCSPResponse getInstance( 054 Object obj) 055 { 056 if (obj instanceof BasicOCSPResponse) 057 { 058 return (BasicOCSPResponse)obj; 059 } 060 else if (obj != null) 061 { 062 return new BasicOCSPResponse(ASN1Sequence.getInstance(obj)); 063 } 064 065 return null; 066 } 067 068 public ResponseData getTbsResponseData() 069 { 070 return tbsResponseData; 071 } 072 073 public AlgorithmIdentifier getSignatureAlgorithm() 074 { 075 return signatureAlgorithm; 076 } 077 078 public DERBitString getSignature() 079 { 080 return signature; 081 } 082 083 public ASN1Sequence getCerts() 084 { 085 return certs; 086 } 087 088 /** 089 * Produce an object suitable for an ASN1OutputStream. 090 * <pre> 091 * BasicOCSPResponse ::= SEQUENCE { 092 * tbsResponseData ResponseData, 093 * signatureAlgorithm AlgorithmIdentifier, 094 * signature BIT STRING, 095 * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } 096 * </pre> 097 */ 098 public ASN1Primitive toASN1Primitive() 099 { 100 ASN1EncodableVector v = new ASN1EncodableVector(); 101 102 v.add(tbsResponseData); 103 v.add(signatureAlgorithm); 104 v.add(signature); 105 if (certs != null) 106 { 107 v.add(new DERTaggedObject(true, 0, certs)); 108 } 109 110 return new DERSequence(v); 111 } 112}