diff options
Diffstat (limited to 'crypto/src/asn1/ocsp/OCSPRequest.cs')
-rw-r--r-- | crypto/src/asn1/ocsp/OCSPRequest.cs | 82 |
1 files changed, 32 insertions, 50 deletions
diff --git a/crypto/src/asn1/ocsp/OCSPRequest.cs b/crypto/src/asn1/ocsp/OCSPRequest.cs index 6ecd29cae..da5e1e5db 100644 --- a/crypto/src/asn1/ocsp/OCSPRequest.cs +++ b/crypto/src/asn1/ocsp/OCSPRequest.cs @@ -1,70 +1,51 @@ using System; -using Org.BouncyCastle.Utilities; - namespace Org.BouncyCastle.Asn1.Ocsp { public class OcspRequest : Asn1Encodable { - private readonly TbsRequest tbsRequest; - private readonly Signature optionalSignature; - - public static OcspRequest GetInstance( - Asn1TaggedObject obj, - bool explicitly) - { - return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + public static OcspRequest GetInstance(object obj) + { + if (obj == null) + return null; + if (obj is OcspRequest ocspRequest) + return ocspRequest; + return new OcspRequest(Asn1Sequence.GetInstance(obj)); } - public static OcspRequest GetInstance( - object obj) - { - if (obj == null || obj is OcspRequest) - { - return (OcspRequest)obj; - } - - if (obj is Asn1Sequence) - { - return new OcspRequest((Asn1Sequence)obj); - } + public static OcspRequest GetInstance(Asn1TaggedObject obj, bool explicitly) + { + return new OcspRequest(Asn1Sequence.GetInstance(obj, explicitly)); + } - throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); - } + private readonly TbsRequest m_tbsRequest; + private readonly Signature m_optionalSignature; - public OcspRequest( - TbsRequest tbsRequest, - Signature optionalSignature) + public OcspRequest(TbsRequest tbsRequest, Signature optionalSignature) { - if (tbsRequest == null) - throw new ArgumentNullException("tbsRequest"); - - this.tbsRequest = tbsRequest; - this.optionalSignature = optionalSignature; + m_tbsRequest = tbsRequest ?? throw new ArgumentNullException(nameof(tbsRequest)); + m_optionalSignature = optionalSignature; } - private OcspRequest( - Asn1Sequence seq) + private OcspRequest(Asn1Sequence seq) { - tbsRequest = TbsRequest.GetInstance(seq[0]); + int count = seq.Count; + if (count < 1 || count > 2) + throw new ArgumentException("Bad sequence size: " + count, nameof(seq)); + + int pos = 0; - if (seq.Count == 2) - { - optionalSignature = Signature.GetInstance( - (Asn1TaggedObject)seq[1], true); - } + m_tbsRequest = TbsRequest.GetInstance(seq[pos++]); + m_optionalSignature = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 0, true, Signature.GetInstance); + + if (pos != count) + throw new ArgumentException("Unexpected elements in sequence", nameof(seq)); } - public TbsRequest TbsRequest - { - get { return tbsRequest; } - } + public TbsRequest TbsRequest => m_tbsRequest; - public Signature OptionalSignature - { - get { return optionalSignature; } - } + public Signature OptionalSignature => m_optionalSignature; /** * Produce an object suitable for an Asn1OutputStream. @@ -76,8 +57,9 @@ namespace Org.BouncyCastle.Asn1.Ocsp */ public override Asn1Object ToAsn1Object() { - Asn1EncodableVector v = new Asn1EncodableVector(tbsRequest); - v.AddOptionalTagged(true, 0, optionalSignature); + Asn1EncodableVector v = new Asn1EncodableVector(2); + v.Add(m_tbsRequest); + v.AddOptionalTagged(true, 0, m_optionalSignature); return new DerSequence(v); } } |