summary refs log tree commit diff
path: root/crypto/src/asn1/Asn1Encodable.cs
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2023-03-05 14:56:01 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2023-03-05 14:56:01 +0700
commitcc722c1881f86bd2c4690b84f8bd99969a63fc80 (patch)
tree08ffb1d22f99c5d0e16a8e5ca25b4d5362269bd9 /crypto/src/asn1/Asn1Encodable.cs
parentSupport 'leaveOpen' in Asn1 streams (diff)
downloadBouncyCastle.NET-ed25519-cc722c1881f86bd2c4690b84f8bd99969a63fc80.tar.xz
Improve Asn1 encoding
- reduced allocations for GetEncoded
Diffstat (limited to 'crypto/src/asn1/Asn1Encodable.cs')
-rw-r--r--crypto/src/asn1/Asn1Encodable.cs21
1 files changed, 8 insertions, 13 deletions
diff --git a/crypto/src/asn1/Asn1Encodable.cs b/crypto/src/asn1/Asn1Encodable.cs
index 15918afb0..a6b8d38b9 100644
--- a/crypto/src/asn1/Asn1Encodable.cs
+++ b/crypto/src/asn1/Asn1Encodable.cs
@@ -18,18 +18,16 @@ namespace Org.BouncyCastle.Asn1
             ToAsn1Object().EncodeTo(output, encoding);
         }
 
+		// TODO[api] Make virtual and override in Asn1Object
 		public byte[] GetEncoded()
         {
-            MemoryStream bOut = new MemoryStream();
-            ToAsn1Object().EncodeTo(bOut);
-            return bOut.ToArray();
+            return ToAsn1Object().InternalGetEncoded(Ber);
         }
 
+        // TODO[api] Make virtual and override in Asn1Object
         public byte[] GetEncoded(string encoding)
         {
-            MemoryStream bOut = new MemoryStream();
-            ToAsn1Object().EncodeTo(bOut, encoding);
-            return bOut.ToArray();
+			return ToAsn1Object().InternalGetEncoded(encoding);
         }
 
         /**
@@ -54,19 +52,16 @@ namespace Org.BouncyCastle.Asn1
 			return ToAsn1Object().CallAsn1GetHashCode();
 		}
 
-		public sealed override bool Equals(
-			object obj)
+		public sealed override bool Equals(object obj)
 		{
 			if (obj == this)
 				return true;
 
-			IAsn1Convertible other = obj as IAsn1Convertible;
-
-			if (other == null)
+			if (!(obj is IAsn1Convertible that))
 				return false;
 
-			Asn1Object o1 = ToAsn1Object();
-			Asn1Object o2 = other.ToAsn1Object();
+			Asn1Object o1 = this.ToAsn1Object();
+			Asn1Object o2 = that.ToAsn1Object();
 
 			return o1 == o2 || (null != o2 && o1.CallAsn1Equals(o2));
 		}