<PackageReference Include="SSH.NET" Version="2020.0.0" />

Arrays

abstract class Arrays
General array utilities.
using Renci.SshNet.Security.Org.BouncyCastle.Math; using System; using System.Text; namespace Renci.SshNet.Security.Org.BouncyCastle.Utilities { internal abstract class Arrays { public static readonly byte[] EmptyBytes = new byte[0]; public static readonly int[] EmptyInts = new int[0]; public static bool AreAllZeroes(byte[] buf, int off, int len) { uint num = 0; for (int i = 0; i < len; i++) { num |= buf[off + i]; } return num == 0; } public static bool AreEqual(bool[] a, bool[] b) { if (a == b) return true; if (a == null || b == null) return false; return HaveSameContents(a, b); } public static bool AreEqual(char[] a, char[] b) { if (a == b) return true; if (a == null || b == null) return false; return HaveSameContents(a, b); } public static bool AreEqual(byte[] a, byte[] b) { if (a == b) return true; if (a == null || b == null) return false; return HaveSameContents(a, b); } [Obsolete("Use 'AreEqual' method instead")] public static bool AreSame(byte[] a, byte[] b) { return AreEqual(a, b); } public static bool ConstantTimeAreEqual(byte[] a, byte[] b) { int num = a.Length; if (num != b.Length) return false; int num2 = 0; while (num != 0) { num--; num2 |= (a[num] ^ b[num]); } return num2 == 0; } public static bool AreEqual(int[] a, int[] b) { if (a == b) return true; if (a == null || b == null) return false; return HaveSameContents(a, b); } public static bool AreEqual(uint[] a, uint[] b) { if (a == b) return true; if (a == null || b == null) return false; return HaveSameContents(a, b); } private static bool HaveSameContents(bool[] a, bool[] b) { int num = a.Length; if (num != b.Length) return false; while (num != 0) { num--; if (a[num] != b[num]) return false; } return true; } private static bool HaveSameContents(char[] a, char[] b) { int num = a.Length; if (num != b.Length) return false; while (num != 0) { num--; if (a[num] != b[num]) return false; } return true; } private static bool HaveSameContents(byte[] a, byte[] b) { int num = a.Length; if (num != b.Length) return false; while (num != 0) { num--; if (a[num] != b[num]) return false; } return true; } private static bool HaveSameContents(int[] a, int[] b) { int num = a.Length; if (num != b.Length) return false; while (num != 0) { num--; if (a[num] != b[num]) return false; } return true; } private static bool HaveSameContents(uint[] a, uint[] b) { int num = a.Length; if (num != b.Length) return false; while (num != 0) { num--; if (a[num] != b[num]) return false; } return true; } public static string ToString(object[] a) { StringBuilder stringBuilder = new StringBuilder(91); if (a.Length != 0) { stringBuilder.Append(a[0]); for (int i = 1; i < a.Length; i++) { stringBuilder.Append(", ").Append(a[i]); } } stringBuilder.Append(']'); return stringBuilder.ToString(); } public static int GetHashCode(byte[] data) { if (data == null) return 0; int num = data.Length; int num2 = num + 1; while (--num >= 0) { num2 *= 257; num2 ^= data[num]; } return num2; } public static int GetHashCode(byte[] data, int off, int len) { if (data == null) return 0; int num = len; int num2 = num + 1; while (--num >= 0) { num2 *= 257; num2 ^= data[off + num]; } return num2; } public static int GetHashCode(int[] data) { if (data == null) return 0; int num = data.Length; int num2 = num + 1; while (--num >= 0) { num2 *= 257; num2 ^= data[num]; } return num2; } public static int GetHashCode(int[] data, int off, int len) { if (data == null) return 0; int num = len; int num2 = num + 1; while (--num >= 0) { num2 *= 257; num2 ^= data[off + num]; } return num2; } public static int GetHashCode(uint[] data) { if (data == null) return 0; int num = data.Length; int num2 = num + 1; while (--num >= 0) { num2 *= 257; num2 ^= (int)data[num]; } return num2; } public static int GetHashCode(uint[] data, int off, int len) { if (data == null) return 0; int num = len; int num2 = num + 1; while (--num >= 0) { num2 *= 257; num2 ^= (int)data[off + num]; } return num2; } public static int GetHashCode(ulong[] data) { if (data == null) return 0; int num = data.Length; int num2 = num + 1; while (--num >= 0) { ulong num3 = data[num]; num2 *= 257; num2 ^= (int)num3; num2 *= 257; num2 ^= (int)(num3 >> 32); } return num2; } public static int GetHashCode(ulong[] data, int off, int len) { if (data == null) return 0; int num = len; int num2 = num + 1; while (--num >= 0) { ulong num3 = data[off + num]; num2 *= 257; num2 ^= (int)num3; num2 *= 257; num2 ^= (int)(num3 >> 32); } return num2; } public static byte[] Clone(byte[] data) { if (data != null) return (byte[])data.Clone(); return null; } public static byte[] Clone(byte[] data, byte[] existing) { if (data == null) return null; if (existing == null || existing.Length != data.Length) return Clone(data); Array.Copy(data, 0, existing, 0, existing.Length); return existing; } public static int[] Clone(int[] data) { if (data != null) return (int[])data.Clone(); return null; } internal static uint[] Clone(uint[] data) { if (data != null) return (uint[])data.Clone(); return null; } public static long[] Clone(long[] data) { if (data != null) return (long[])data.Clone(); return null; } public static ulong[] Clone(ulong[] data) { if (data != null) return (ulong[])data.Clone(); return null; } public static ulong[] Clone(ulong[] data, ulong[] existing) { if (data == null) return null; if (existing == null || existing.Length != data.Length) return Clone(data); Array.Copy(data, 0, existing, 0, existing.Length); return existing; } public static bool Contains(byte[] a, byte n) { for (int i = 0; i < a.Length; i++) { if (a[i] == n) return true; } return false; } public static bool Contains(short[] a, short n) { for (int i = 0; i < a.Length; i++) { if (a[i] == n) return true; } return false; } public static bool Contains(int[] a, int n) { for (int i = 0; i < a.Length; i++) { if (a[i] == n) return true; } return false; } public static void Fill(byte[] buf, byte b) { int num = buf.Length; while (num > 0) { buf[--num] = b; } } public static void Fill(byte[] buf, int from, int to, byte b) { for (int i = from; i < to; i++) { buf[i] = b; } } public static byte[] CopyOf(byte[] data, int newLength) { byte[] array = new byte[newLength]; Array.Copy(data, 0, array, 0, System.Math.Min(newLength, data.Length)); return array; } public static char[] CopyOf(char[] data, int newLength) { char[] array = new char[newLength]; Array.Copy(data, 0, array, 0, System.Math.Min(newLength, data.Length)); return array; } public static int[] CopyOf(int[] data, int newLength) { int[] array = new int[newLength]; Array.Copy(data, 0, array, 0, System.Math.Min(newLength, data.Length)); return array; } public static long[] CopyOf(long[] data, int newLength) { long[] array = new long[newLength]; Array.Copy(data, 0, array, 0, System.Math.Min(newLength, data.Length)); return array; } public static BigInteger[] CopyOf(BigInteger[] data, int newLength) { BigInteger[] array = new BigInteger[newLength]; Array.Copy(data, 0, array, 0, System.Math.Min(newLength, data.Length)); return array; } public static byte[] CopyOfRange(byte[] data, int from, int to) { int length = GetLength(from, to); byte[] array = new byte[length]; Array.Copy(data, from, array, 0, System.Math.Min(length, data.Length - from)); return array; } public static int[] CopyOfRange(int[] data, int from, int to) { int length = GetLength(from, to); int[] array = new int[length]; Array.Copy(data, from, array, 0, System.Math.Min(length, data.Length - from)); return array; } public static long[] CopyOfRange(long[] data, int from, int to) { int length = GetLength(from, to); long[] array = new long[length]; Array.Copy(data, from, array, 0, System.Math.Min(length, data.Length - from)); return array; } public static BigInteger[] CopyOfRange(BigInteger[] data, int from, int to) { int length = GetLength(from, to); BigInteger[] array = new BigInteger[length]; Array.Copy(data, from, array, 0, System.Math.Min(length, data.Length - from)); return array; } private static int GetLength(int from, int to) { int num = to - from; if (num < 0) throw new ArgumentException(from.ToString() + " > " + to.ToString()); return num; } public static byte[] Append(byte[] a, byte b) { if (a == null) return new byte[1] { b }; int num = a.Length; byte[] array = new byte[num + 1]; Array.Copy(a, 0, array, 0, num); array[num] = b; return array; } public static short[] Append(short[] a, short b) { if (a == null) return new short[1] { b }; int num = a.Length; short[] array = new short[num + 1]; Array.Copy(a, 0, array, 0, num); array[num] = b; return array; } public static int[] Append(int[] a, int b) { if (a == null) return new int[1] { b }; int num = a.Length; int[] array = new int[num + 1]; Array.Copy(a, 0, array, 0, num); array[num] = b; return array; } public static byte[] Concatenate(byte[] a, byte[] b) { if (a == null) return Clone(b); if (b == null) return Clone(a); byte[] array = new byte[a.Length + b.Length]; Array.Copy(a, 0, array, 0, a.Length); Array.Copy(b, 0, array, a.Length, b.Length); return array; } public static byte[] ConcatenateAll(params byte[][] vs) { byte[][] array = new byte[vs.Length][]; int num = 0; int num2 = 0; foreach (byte[] array2 in vs) { if (array2 != null) { array[num++] = array2; num2 += array2.Length; } } byte[] array3 = new byte[num2]; int num4 = 0; for (int j = 0; j < num; j++) { byte[] array4 = array[j]; Array.Copy(array4, 0, array3, num4, array4.Length); num4 += array4.Length; } return array3; } public static int[] Concatenate(int[] a, int[] b) { if (a == null) return Clone(b); if (b == null) return Clone(a); int[] array = new int[a.Length + b.Length]; Array.Copy(a, 0, array, 0, a.Length); Array.Copy(b, 0, array, a.Length, b.Length); return array; } public static byte[] Prepend(byte[] a, byte b) { if (a == null) return new byte[1] { b }; int num = a.Length; byte[] array = new byte[num + 1]; Array.Copy(a, 0, array, 1, num); array[0] = b; return array; } public static short[] Prepend(short[] a, short b) { if (a == null) return new short[1] { b }; int num = a.Length; short[] array = new short[num + 1]; Array.Copy(a, 0, array, 1, num); array[0] = b; return array; } public static int[] Prepend(int[] a, int b) { if (a == null) return new int[1] { b }; int num = a.Length; int[] array = new int[num + 1]; Array.Copy(a, 0, array, 1, num); array[0] = b; return array; } public static byte[] Reverse(byte[] a) { if (a == null) return null; int num = 0; int num2 = a.Length; byte[] array = new byte[num2]; while (--num2 >= 0) { array[num2] = a[num++]; } return array; } public static int[] Reverse(int[] a) { if (a == null) return null; int num = 0; int num2 = a.Length; int[] array = new int[num2]; while (--num2 >= 0) { array[num2] = a[num++]; } return array; } } }