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

ConstructedDerEncoding

using System; namespace Org.BouncyCastle.Asn1 { internal class ConstructedDerEncoding : DerEncoding { private readonly DerEncoding[] m_contentsElements; private readonly int m_contentsLength; internal ConstructedDerEncoding(int tagClass, int tagNo, DerEncoding[] contentsElements) : base(tagClass, tagNo) { m_contentsElements = contentsElements; m_contentsLength = Asn1OutputStream.GetLengthOfContents(contentsElements); } protected internal override int CompareLengthAndContents(DerEncoding other) { ConstructedDerEncoding constructedDerEncoding = other as ConstructedDerEncoding; if (constructedDerEncoding == null) throw new InvalidOperationException(); if (m_contentsLength != constructedDerEncoding.m_contentsLength) return m_contentsLength - constructedDerEncoding.m_contentsLength; int num = System.Math.Min(m_contentsElements.Length, constructedDerEncoding.m_contentsElements.Length); for (int i = 0; i < num; i++) { int num2 = m_contentsElements[i].CompareTo(constructedDerEncoding.m_contentsElements[i]); if (num2 != 0) return num2; } return m_contentsElements.Length - constructedDerEncoding.m_contentsElements.Length; } public override void Encode(Asn1OutputStream asn1Out) { asn1Out.WriteIdentifier(32 | m_tagClass, m_tagNo); asn1Out.WriteDL(m_contentsLength); IAsn1Encoding[] contentsElements = m_contentsElements; asn1Out.EncodeContents(contentsElements); } public override int GetLength() { return Asn1OutputStream.GetLengthOfEncodingDL(m_tagNo, m_contentsLength); } } }