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

DeltaCertificateDescriptor

using System; namespace Org.BouncyCastle.Asn1.X509 { public class DeltaCertificateDescriptor : Asn1Encodable { private readonly DerInteger m_serialNumber; private readonly AlgorithmIdentifier m_signature; private readonly X509Name m_issuer; private readonly Validity m_validity; private readonly X509Name m_subject; private readonly SubjectPublicKeyInfo m_subjectPublicKeyInfo; private readonly X509Extensions m_extensions; private readonly DerBitString m_signatureValue; public X509Extensions Extensions => m_extensions; public X509Name Issuer => m_issuer; public DerInteger SerialNumber => m_serialNumber; public AlgorithmIdentifier Signature => m_signature; public DerBitString SignatureValue => m_signatureValue; public X509Name Subject => m_subject; public SubjectPublicKeyInfo SubjectPublicKeyInfo => m_subjectPublicKeyInfo; public Validity Validity => m_validity; public static DeltaCertificateDescriptor GetInstance(object obj) { if (obj == null) return null; DeltaCertificateDescriptor deltaCertificateDescriptor = obj as DeltaCertificateDescriptor; if (deltaCertificateDescriptor != null) return deltaCertificateDescriptor; return new DeltaCertificateDescriptor(Asn1Sequence.GetInstance(obj)); } public static DeltaCertificateDescriptor GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new DeltaCertificateDescriptor(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static DeltaCertificateDescriptor GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new DeltaCertificateDescriptor(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public static DeltaCertificateDescriptor FromExtensions(X509Extensions extensions) { return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.DRAFT_DeltaCertificateDescriptor)); } private DeltaCertificateDescriptor(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 3 || count > 8) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_serialNumber = DerInteger.GetInstance(seq[sequencePosition++]); m_signature = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, AlgorithmIdentifier.GetTagged); m_issuer = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, X509Name.GetTagged); m_validity = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, true, Validity.GetTagged); m_subject = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 3, true, X509Name.GetTagged); m_subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[sequencePosition++]); m_extensions = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 4, true, X509Extensions.GetTagged); m_signatureValue = DerBitString.GetInstance(seq[sequencePosition++]); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public DeltaCertificateDescriptor(DerInteger serialNumber, AlgorithmIdentifier signature, X509Name issuer, Validity validity, X509Name subject, SubjectPublicKeyInfo subjectPublicKeyInfo, X509Extensions extensions, DerBitString signatureValue) { if (serialNumber == null) throw new ArgumentNullException("serialNumber"); m_serialNumber = serialNumber; m_signature = signature; m_issuer = issuer; m_validity = validity; m_subject = subject; if (subjectPublicKeyInfo == null) throw new ArgumentNullException("subjectPublicKeyInfo"); m_subjectPublicKeyInfo = subjectPublicKeyInfo; m_extensions = extensions; if (signatureValue == null) throw new ArgumentNullException("signatureValue"); m_signatureValue = signatureValue; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(8); asn1EncodableVector.Add(m_serialNumber); asn1EncodableVector.AddOptionalTagged(true, 0, m_signature); asn1EncodableVector.AddOptionalTagged(true, 1, m_issuer); asn1EncodableVector.AddOptionalTagged(true, 2, m_validity); asn1EncodableVector.AddOptionalTagged(true, 3, m_subject); asn1EncodableVector.Add(m_subjectPublicKeyInfo); asn1EncodableVector.AddOptionalTagged(true, 4, m_extensions); asn1EncodableVector.Add(m_signatureValue); return new DerSequence(asn1EncodableVector); } } }