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/BerSequence.cs | |
parent | Make cast more specific (diff) | |
download | BouncyCastle.NET-ed25519-be15049124860ccb7335b92215e8b8dfa1821bf9.tar.xz |
ASN.1: Staged encoding
Diffstat (limited to 'crypto/src/asn1/BerSequence.cs')
-rw-r--r-- | crypto/src/asn1/BerSequence.cs | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/crypto/src/asn1/BerSequence.cs b/crypto/src/asn1/BerSequence.cs index a92b70f98..deed8fbb9 100644 --- a/crypto/src/asn1/BerSequence.cs +++ b/crypto/src/asn1/BerSequence.cs @@ -46,32 +46,23 @@ namespace Org.BouncyCastle.Asn1 { } - internal override int EncodedLength(int encoding, bool withID) + internal override IAsn1Encoding GetEncoding(int encoding) { if (Asn1OutputStream.EncodingBer != encoding) - return base.EncodedLength(encoding, withID); + return base.GetEncoding(encoding); - int totalLength = withID ? 4 : 3; - - for (int i = 0, count = elements.Length; i < count; ++i) - { - Asn1Object asn1Object = elements[i].ToAsn1Object(); - totalLength += asn1Object.EncodedLength(encoding, true); - } - - return totalLength; + return new ConstructedILEncoding(Asn1Tags.Universal, Asn1Tags.Sequence, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); } - internal override void Encode(Asn1OutputStream asn1Out, bool withID) - { - if (Asn1OutputStream.EncodingBer != asn1Out.Encoding) - { - base.Encode(asn1Out, withID); - return; - } + internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo) + { + if (Asn1OutputStream.EncodingBer != encoding) + return base.GetEncodingImplicit(encoding, tagClass, tagNo); - asn1Out.WriteEncodingIL(withID, Asn1Tags.Constructed | Asn1Tags.Sequence, elements); - } + return new ConstructedILEncoding(tagClass, tagNo, + Asn1OutputStream.GetContentsEncodings(encoding, elements)); + } internal override DerBitString ToAsn1BitString() { |