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
{
///