From 6df184fa4e607f896278853bbedc5df25631ba07 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 9 Nov 2024 21:32:02 -0500 Subject: [PATCH] Add Tiger2 variants (0x80 pad start) --- SabreTools.Hashing.Test/TestHelper.cs | 6 + SabreTools.Hashing/HashType.cs | 30 +++++ SabreTools.Hashing/HashWrapper.cs | 6 + .../MessageDigest/Tiger128_3.cs | 25 ++++ .../MessageDigest/Tiger128_4.cs | 25 ++++ .../MessageDigest/Tiger160_3.cs | 25 ++++ .../MessageDigest/Tiger160_4.cs | 25 ++++ .../MessageDigest/Tiger192_3.cs | 14 +++ .../MessageDigest/Tiger192_4.cs | 14 +++ .../MessageDigest/Tiger2_128_3.cs | 25 ++++ .../MessageDigest/Tiger2_128_4.cs | 25 ++++ .../MessageDigest/Tiger2_160_3.cs | 25 ++++ .../MessageDigest/Tiger2_160_4.cs | 25 ++++ .../MessageDigest/Tiger2_192_3.cs | 14 +++ .../MessageDigest/Tiger2_192_4.cs | 14 +++ .../{TigerHashes.cs => TigerHashBase.cs} | 113 ++---------------- 16 files changed, 306 insertions(+), 105 deletions(-) create mode 100644 SabreTools.Hashing/MessageDigest/Tiger128_3.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger128_4.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger160_3.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger160_4.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger192_3.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger192_4.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger2_128_3.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger2_128_4.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger2_160_3.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger2_160_4.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger2_192_3.cs create mode 100644 SabreTools.Hashing/MessageDigest/Tiger2_192_4.cs rename SabreTools.Hashing/MessageDigest/{TigerHashes.cs => TigerHashBase.cs} (76%) diff --git a/SabreTools.Hashing.Test/TestHelper.cs b/SabreTools.Hashing.Test/TestHelper.cs index 0e4f0d1..da5ad18 100644 --- a/SabreTools.Hashing.Test/TestHelper.cs +++ b/SabreTools.Hashing.Test/TestHelper.cs @@ -191,6 +191,12 @@ namespace SabreTools.Hashing.Test {HashType.Tiger160_4, "e7609126923009f733cd0fcbc5a733fa4f4ccf7a"}, {HashType.Tiger192_3, "afc7ac1c3c031b675562f917b59f088533405e1a2f72912d"}, {HashType.Tiger192_4, "e7609126923009f733cd0fcbc5a733fa4f4ccf7ab7c0e2a3"}, + {HashType.Tiger2_128_3, "b26271774e66519b1c746f210e0be05c"}, + {HashType.Tiger2_128_4, "f1df540d3f2521b87a957c9b2b00fc7c"}, + {HashType.Tiger2_160_3, "b26271774e66519b1c746f210e0be05c4fd9efde"}, + {HashType.Tiger2_160_4, "f1df540d3f2521b87a957c9b2b00fc7c589306dc"}, + {HashType.Tiger2_192_3, "b26271774e66519b1c746f210e0be05c4fd9efde26e46e89"}, + {HashType.Tiger2_192_4, "f1df540d3f2521b87a957c9b2b00fc7c589306dcf094acb5"}, {HashType.XxHash32, "aa1d338e"}, {HashType.XxHash64, "181e9ea4f0f62b08"}, diff --git a/SabreTools.Hashing/HashType.cs b/SabreTools.Hashing/HashType.cs index c94c4e4..9c58b20 100644 --- a/SabreTools.Hashing/HashType.cs +++ b/SabreTools.Hashing/HashType.cs @@ -832,6 +832,36 @@ namespace SabreTools.Hashing /// Tiger192_4, + /// + /// Tiger2 128-bit hash, 3 passes + /// + Tiger2_128_3, + + /// + /// Tiger2 128-bit hash, 4 passes + /// + Tiger2_128_4, + + /// + /// Tiger2 160-bit hash, 3 passes + /// + Tiger2_160_3, + + /// + /// Tiger2 160-bit hash, 4 passes + /// + Tiger2_160_4, + + /// + /// Tiger2 192-bit hash, 3 passes + /// + Tiger2_192_3, + + /// + /// Tiger2 192-bit hash, 4 passes + /// + Tiger2_192_4, + #endregion #region xxHash diff --git a/SabreTools.Hashing/HashWrapper.cs b/SabreTools.Hashing/HashWrapper.cs index 0c25088..5cc5914 100644 --- a/SabreTools.Hashing/HashWrapper.cs +++ b/SabreTools.Hashing/HashWrapper.cs @@ -310,6 +310,12 @@ namespace SabreTools.Hashing HashType.Tiger160_4 => new MessageDigest.Tiger160_4(), HashType.Tiger192_3 => new MessageDigest.Tiger192_3(), HashType.Tiger192_4 => new MessageDigest.Tiger192_4(), + HashType.Tiger2_128_3 => new MessageDigest.Tiger2_128_3(), + HashType.Tiger2_128_4 => new MessageDigest.Tiger2_128_4(), + HashType.Tiger2_160_3 => new MessageDigest.Tiger2_160_3(), + HashType.Tiger2_160_4 => new MessageDigest.Tiger2_160_4(), + HashType.Tiger2_192_3 => new MessageDigest.Tiger2_192_3(), + HashType.Tiger2_192_4 => new MessageDigest.Tiger2_192_4(), HashType.XxHash32 => new XxHash.XxHash32(), HashType.XxHash64 => new XxHash.XxHash64(), diff --git a/SabreTools.Hashing/MessageDigest/Tiger128_3.cs b/SabreTools.Hashing/MessageDigest/Tiger128_3.cs new file mode 100644 index 0000000..454e4e9 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger128_3.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 3-pass variant of Tiger-128 + /// + public class Tiger128_3 : TigerHashBase + { + public Tiger128_3() : base() + { + _passes = 3; + _padStart = 0x01; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[16]; + Array.Copy(hash, trimmedHash, 16); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger128_4.cs b/SabreTools.Hashing/MessageDigest/Tiger128_4.cs new file mode 100644 index 0000000..50cae4b --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger128_4.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 4-pass variant of Tiger-128 + /// + public class Tiger128_4 : TigerHashBase + { + public Tiger128_4() : base() + { + _passes = 4; + _padStart = 0x01; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[16]; + Array.Copy(hash, trimmedHash, 16); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger160_3.cs b/SabreTools.Hashing/MessageDigest/Tiger160_3.cs new file mode 100644 index 0000000..e26b72b --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger160_3.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 3-pass variant of Tiger-160 + /// + public class Tiger160_3 : TigerHashBase + { + public Tiger160_3() : base() + { + _passes = 3; + _padStart = 0x01; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[20]; + Array.Copy(hash, trimmedHash, 20); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger160_4.cs b/SabreTools.Hashing/MessageDigest/Tiger160_4.cs new file mode 100644 index 0000000..56277c9 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger160_4.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 4-pass variant of Tiger-160 + /// + public class Tiger160_4 : TigerHashBase + { + public Tiger160_4() : base() + { + _passes = 4; + _padStart = 0x01; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[20]; + Array.Copy(hash, trimmedHash, 20); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger192_3.cs b/SabreTools.Hashing/MessageDigest/Tiger192_3.cs new file mode 100644 index 0000000..6d059bd --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger192_3.cs @@ -0,0 +1,14 @@ +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 3-pass variant of Tiger-192 + /// + public class Tiger192_3 : TigerHashBase + { + public Tiger192_3() : base() + { + _passes = 3; + _padStart = 0x01; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger192_4.cs b/SabreTools.Hashing/MessageDigest/Tiger192_4.cs new file mode 100644 index 0000000..f67a8cd --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger192_4.cs @@ -0,0 +1,14 @@ +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 4-pass variant of Tiger-192 + /// + public class Tiger192_4 : TigerHashBase + { + public Tiger192_4() : base() + { + _passes = 4; + _padStart = 0x01; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger2_128_3.cs b/SabreTools.Hashing/MessageDigest/Tiger2_128_3.cs new file mode 100644 index 0000000..5ad2ba5 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger2_128_3.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 3-pass variant of Tiger2-128 + /// + public class Tiger2_128_3 : TigerHashBase + { + public Tiger2_128_3() : base() + { + _passes = 3; + _padStart = 0x80; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[16]; + Array.Copy(hash, trimmedHash, 16); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger2_128_4.cs b/SabreTools.Hashing/MessageDigest/Tiger2_128_4.cs new file mode 100644 index 0000000..0f80b3c --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger2_128_4.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 4-pass variant of Tiger2-128 + /// + public class Tiger2_128_4 : TigerHashBase + { + public Tiger2_128_4() : base() + { + _passes = 4; + _padStart = 0x80; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[16]; + Array.Copy(hash, trimmedHash, 16); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger2_160_3.cs b/SabreTools.Hashing/MessageDigest/Tiger2_160_3.cs new file mode 100644 index 0000000..8f52258 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger2_160_3.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 3-pass variant of Tiger2-160 + /// + public class Tiger2_160_3 : TigerHashBase + { + public Tiger2_160_3() : base() + { + _passes = 3; + _padStart = 0x80; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[20]; + Array.Copy(hash, trimmedHash, 20); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger2_160_4.cs b/SabreTools.Hashing/MessageDigest/Tiger2_160_4.cs new file mode 100644 index 0000000..f706b63 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger2_160_4.cs @@ -0,0 +1,25 @@ +using System; + +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 4-pass variant of Tiger2-160 + /// + public class Tiger2_160_4 : TigerHashBase + { + public Tiger2_160_4() : base() + { + _passes = 4; + _padStart = 0x80; + } + + /// + public override byte[] GetHash() + { + byte[] hash = base.GetHash(); + byte[] trimmedHash = new byte[20]; + Array.Copy(hash, trimmedHash, 20); + return trimmedHash; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger2_192_3.cs b/SabreTools.Hashing/MessageDigest/Tiger2_192_3.cs new file mode 100644 index 0000000..aefe169 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger2_192_3.cs @@ -0,0 +1,14 @@ +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 3-pass variant of Tiger2-192 + /// + public class Tiger2_192_3 : TigerHashBase + { + public Tiger2_192_3() : base() + { + _passes = 3; + _padStart = 0x80; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/Tiger2_192_4.cs b/SabreTools.Hashing/MessageDigest/Tiger2_192_4.cs new file mode 100644 index 0000000..ffe8c94 --- /dev/null +++ b/SabreTools.Hashing/MessageDigest/Tiger2_192_4.cs @@ -0,0 +1,14 @@ +namespace SabreTools.Hashing.MessageDigest +{ + /// + /// 4-pass variant of Tiger2-192 + /// + public class Tiger2_192_4 : TigerHashBase + { + public Tiger2_192_4() : base() + { + _passes = 4; + _padStart = 0x80; + } + } +} \ No newline at end of file diff --git a/SabreTools.Hashing/MessageDigest/TigerHashes.cs b/SabreTools.Hashing/MessageDigest/TigerHashBase.cs similarity index 76% rename from SabreTools.Hashing/MessageDigest/TigerHashes.cs rename to SabreTools.Hashing/MessageDigest/TigerHashBase.cs index d81ac1e..5dbe59b 100644 --- a/SabreTools.Hashing/MessageDigest/TigerHashes.cs +++ b/SabreTools.Hashing/MessageDigest/TigerHashBase.cs @@ -5,19 +5,24 @@ using static SabreTools.Hashing.MessageDigest.Constants; namespace SabreTools.Hashing.MessageDigest { ///