diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2021-11-16 22:37:52 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2021-11-16 22:37:52 +0700 |
commit | be15049124860ccb7335b92215e8b8dfa1821bf9 (patch) | |
tree | 7a86ed2110021307465a617076d601ca812c69ed /crypto/src/asn1/ConstructedILEncoding.cs | |
parent | Make cast more specific (diff) | |
download | BouncyCastle.NET-ed25519-be15049124860ccb7335b92215e8b8dfa1821bf9.tar.xz |
ASN.1: Staged encoding
Diffstat (limited to 'crypto/src/asn1/ConstructedILEncoding.cs')
-rw-r--r-- | crypto/src/asn1/ConstructedILEncoding.cs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/crypto/src/asn1/ConstructedILEncoding.cs b/crypto/src/asn1/ConstructedILEncoding.cs new file mode 100644 index 000000000..1934c6f48 --- /dev/null +++ b/crypto/src/asn1/ConstructedILEncoding.cs @@ -0,0 +1,35 @@ +using System; + +namespace Org.BouncyCastle.Asn1 +{ + internal class ConstructedILEncoding + : IAsn1Encoding + { + private readonly int m_tagClass; + private readonly int m_tagNo; + private readonly IAsn1Encoding[] m_contentsElements; + + internal ConstructedILEncoding(int tagClass, int tagNo, IAsn1Encoding[] contentsElements) + { + m_tagClass = tagClass; + m_tagNo = tagNo; + m_contentsElements = contentsElements; + } + + void IAsn1Encoding.Encode(Asn1OutputStream asn1Out) + { + asn1Out.WriteIdentifier(Asn1Tags.Constructed | m_tagClass, m_tagNo); + asn1Out.WriteByte(0x80); + asn1Out.EncodeContents(m_contentsElements); + asn1Out.WriteByte(0x00); + asn1Out.WriteByte(0x00); + } + + int IAsn1Encoding.GetLength() + { + return Asn1OutputStream.GetLengthOfIdentifier(m_tagNo) + + 3 + + Asn1OutputStream.GetLengthOfContents(m_contentsElements); + } + } +} |