diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2022-10-08 01:46:51 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2022-10-08 01:46:51 +0700 |
commit | 89a4ead3b8bfe966f6a89eaa5ced3105529efef5 (patch) | |
tree | c202b57b6b020f114d5d51788697eaebd14326bf | |
parent | More span variants in randomness classes (diff) | |
download | BouncyCastle.NET-ed25519-89a4ead3b8bfe966f6a89eaa5ced3105529efef5.tar.xz |
Span usage in Asn1RelativeOid
-rw-r--r-- | crypto/src/asn1/Asn1RelativeOid.cs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/crypto/src/asn1/Asn1RelativeOid.cs b/crypto/src/asn1/Asn1RelativeOid.cs index d3c031913..a1997864d 100644 --- a/crypto/src/asn1/Asn1RelativeOid.cs +++ b/crypto/src/asn1/Asn1RelativeOid.cs @@ -196,7 +196,11 @@ namespace Org.BouncyCastle.Asn1 internal static void WriteField(Stream outputStream, long fieldValue) { +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + Span<byte> result = stackalloc byte[9]; +#else byte[] result = new byte[9]; +#endif int pos = 8; result[pos] = (byte)((int)fieldValue & 0x7F); while (fieldValue >= (1L << 7)) @@ -204,7 +208,11 @@ namespace Org.BouncyCastle.Asn1 fieldValue >>= 7; result[--pos] = (byte)((int)fieldValue | 0x80); } +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + outputStream.Write(result[pos..]); +#else outputStream.Write(result, pos, 9 - pos); +#endif } internal static void WriteField(Stream outputStream, BigInteger fieldValue) @@ -217,14 +225,24 @@ namespace Org.BouncyCastle.Asn1 else { BigInteger tmpValue = fieldValue; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + Span<byte> tmp = byteCount <= 16 + ? stackalloc byte[byteCount] + : new byte[byteCount]; +#else byte[] tmp = new byte[byteCount]; +#endif for (int i = byteCount - 1; i >= 0; i--) { tmp[i] = (byte)(tmpValue.IntValue | 0x80); tmpValue = tmpValue.ShiftRight(7); } tmp[byteCount - 1] &= 0x7F; +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + outputStream.Write(tmp); +#else outputStream.Write(tmp, 0, tmp.Length); +#endif } } |