TbsRequest
using Org.BouncyCastle.Asn1.X509;
using System;
namespace Org.BouncyCastle.Asn1.Ocsp
{
public class TbsRequest : Asn1Encodable
{
private static readonly DerInteger V1 = DerInteger.Zero;
private readonly DerInteger m_version;
private readonly bool m_versionPresent;
private readonly GeneralName m_requestorName;
private readonly Asn1Sequence m_requestList;
private readonly X509Extensions m_requestExtensions;
public DerInteger Version => m_version;
public GeneralName RequestorName => m_requestorName;
public Asn1Sequence RequestList => m_requestList;
public X509Extensions RequestExtensions => m_requestExtensions;
public static TbsRequest GetInstance(object obj)
{
if (obj == null)
return null;
TbsRequest tbsRequest = obj as TbsRequest;
if (tbsRequest != null)
return tbsRequest;
return new TbsRequest(Asn1Sequence.GetInstance(obj));
}
public static TbsRequest GetInstance(Asn1TaggedObject obj, bool explicitly)
{
return new TbsRequest(Asn1Sequence.GetInstance(obj, explicitly));
}
public static TbsRequest GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new TbsRequest(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
public TbsRequest(GeneralName requestorName, Asn1Sequence requestList, X509Extensions requestExtensions)
{
m_version = V1;
m_versionPresent = false;
m_requestorName = requestorName;
if (requestList == null)
throw new ArgumentNullException("requestList");
m_requestList = requestList;
m_requestExtensions = requestExtensions;
}
private TbsRequest(Asn1Sequence seq)
{
int count = seq.Count;
if (count < 1 || count > 4)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
int sequencePosition = 0;
DerInteger derInteger = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, DerInteger.GetTagged);
m_version = (derInteger ?? V1);
m_versionPresent = (derInteger != null);
m_requestorName = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, GeneralName.GetTagged);
m_requestList = Asn1Sequence.GetInstance(seq[sequencePosition++]);
m_requestExtensions = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, true, X509Extensions.GetTagged);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(4);
if (m_versionPresent || !V1.Equals(m_version))
asn1EncodableVector.Add(new DerTaggedObject(true, 0, m_version));
asn1EncodableVector.AddOptionalTagged(true, 1, m_requestorName);
asn1EncodableVector.Add(m_requestList);
asn1EncodableVector.AddOptionalTagged(true, 2, m_requestExtensions);
return new DerSequence(asn1EncodableVector);
}
}
}