<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" />

BasicOcspResponse

using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.Ocsp { public class BasicOcspResponse : Asn1Encodable { private readonly ResponseData m_tbsResponseData; private readonly AlgorithmIdentifier m_signatureAlgorithm; private readonly DerBitString m_signature; private readonly Asn1Sequence m_certs; public ResponseData TbsResponseData => m_tbsResponseData; public AlgorithmIdentifier SignatureAlgorithm => m_signatureAlgorithm; public DerBitString Signature => m_signature; public Asn1Sequence Certs => m_certs; public static BasicOcspResponse GetInstance(object obj) { if (obj == null) return null; BasicOcspResponse basicOcspResponse = obj as BasicOcspResponse; if (basicOcspResponse != null) return basicOcspResponse; return new BasicOcspResponse(Asn1Sequence.GetInstance(obj)); } public static BasicOcspResponse GetInstance(Asn1TaggedObject obj, bool explicitly) { return new BasicOcspResponse(Asn1Sequence.GetInstance(obj, explicitly)); } public static BasicOcspResponse GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new BasicOcspResponse(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public BasicOcspResponse(ResponseData tbsResponseData, AlgorithmIdentifier signatureAlgorithm, DerBitString signature, Asn1Sequence certs) { if (tbsResponseData == null) throw new ArgumentNullException("tbsResponseData"); m_tbsResponseData = tbsResponseData; if (signatureAlgorithm == null) throw new ArgumentNullException("signatureAlgorithm"); m_signatureAlgorithm = signatureAlgorithm; if (signature == null) throw new ArgumentNullException("signature"); m_signature = signature; m_certs = certs; } private BasicOcspResponse(Asn1Sequence seq) { int count = seq.Count; if (count < 3 || count > 4) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); int sequencePosition = 0; m_tbsResponseData = ResponseData.GetInstance(seq[sequencePosition++]); m_signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_signature = DerBitString.GetInstance(seq[sequencePosition++]); m_certs = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, Asn1Sequence.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public byte[] GetSignatureOctets() { return m_signature.GetOctets(); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(4); asn1EncodableVector.Add(m_tbsResponseData, m_signatureAlgorithm, m_signature); asn1EncodableVector.AddOptionalTagged(true, 0, m_certs); return new DerSequence(asn1EncodableVector); } } }