diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2023-12-13 01:23:50 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2023-12-13 01:23:50 +0700 |
commit | fb78aa65513a5ccf287c0851ed2aa60074975ff3 (patch) | |
tree | 97fc93c7cfb93995c2947c9a4937ea727caf4139 /crypto/src/util/Arrays.cs | |
parent | Update safegcd implementation (diff) | |
download | BouncyCastle.NET-ed25519-fb78aa65513a5ccf287c0851ed2aa60074975ff3.tar.xz |
LMS updates
Diffstat (limited to 'crypto/src/util/Arrays.cs')
-rw-r--r-- | crypto/src/util/Arrays.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/crypto/src/util/Arrays.cs b/crypto/src/util/Arrays.cs index f99065512..ab96357b1 100644 --- a/crypto/src/util/Arrays.cs +++ b/crypto/src/util/Arrays.cs @@ -115,6 +115,44 @@ namespace Org.BouncyCastle.Utilities return true; } + public static bool AreEqual(object[] a, object[] b) + { + if (a == b) + return true; + + if (a == null || b == null) + return false; + + int length = a.Length; + if (length != b.Length) + return false; + + for (int i = 0; i < length; ++i) + { + if (!Objects.Equals(a[i], b[i])) + return false; + } + + return true; + } + + public static bool AreEqual(object[] a, int aFromIndex, int aToIndex, object[] b, int bFromIndex, int bToIndex) + { + int aLength = aToIndex - aFromIndex; + int bLength = bToIndex - bFromIndex; + + if (aLength != bLength) + return false; + + for (int i = 0; i < aLength; ++i) + { + if (!Objects.Equals(a[aFromIndex + i], b[bFromIndex + i])) + return false; + } + + return true; + } + [Obsolete("Use 'FixedTimeEquals' instead")] public static bool ConstantTimeAreEqual(byte[] a, byte[] b) { @@ -530,6 +568,35 @@ namespace Org.BouncyCastle.Utilities return hc; } + public static int GetHashCode(object[] data) + { + if (data == null) + return 0; + + int len = data.Length; + int hc = len + 1; + for (int i = 0; i < len; ++i) + { + hc *= 257; + hc ^= Objects.GetHashCode(data[i]); + } + return hc; + } + + public static int GetHashCode(object[] data, int off, int len) + { + if (data == null) + return 0; + + int hc = len + 1; + for (int i = 0; i < len; ++i) + { + hc *= 257; + hc ^= Objects.GetHashCode(data[off + i]); + } + return hc; + } + public static bool[] Clone(bool[] data) { return data == null ? null : (bool[])data.Clone(); |