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

OptionalValidity

using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.Crmf { public class OptionalValidity : Asn1Encodable { private readonly Time m_notBefore; private readonly Time m_notAfter; public virtual Time NotBefore => m_notBefore; public virtual Time NotAfter => m_notAfter; public static OptionalValidity GetInstance(object obj) { if (obj == null) return null; OptionalValidity optionalValidity = obj as OptionalValidity; if (optionalValidity != null) return optionalValidity; return new OptionalValidity(Asn1Sequence.GetInstance(obj)); } public static OptionalValidity GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new OptionalValidity(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static OptionalValidity GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new OptionalValidity(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private OptionalValidity(Asn1Sequence seq) { int count = seq.Count; if (count < 0 || count > 2) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); int sequencePosition = 0; m_notBefore = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, Time.GetTagged); m_notAfter = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, Time.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public OptionalValidity(Time notBefore, Time notAfter) { m_notBefore = notBefore; m_notAfter = notAfter; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2); asn1EncodableVector.AddOptionalTagged(true, 0, m_notBefore); asn1EncodableVector.AddOptionalTagged(true, 1, m_notAfter); return new DerSequence(asn1EncodableVector); } } }