mirror of
https://github.com/SabreTools/SabreTools.Hashing.git
synced 2026-09-22 14:55:04 +00:00
Add Tiger2 variants (0x80 pad start)
This commit is contained in:
@@ -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"},
|
||||
|
||||
@@ -832,6 +832,36 @@ namespace SabreTools.Hashing
|
||||
/// </summary>
|
||||
Tiger192_4,
|
||||
|
||||
/// <summary>
|
||||
/// Tiger2 128-bit hash, 3 passes
|
||||
/// </summary>
|
||||
Tiger2_128_3,
|
||||
|
||||
/// <summary>
|
||||
/// Tiger2 128-bit hash, 4 passes
|
||||
/// </summary>
|
||||
Tiger2_128_4,
|
||||
|
||||
/// <summary>
|
||||
/// Tiger2 160-bit hash, 3 passes
|
||||
/// </summary>
|
||||
Tiger2_160_3,
|
||||
|
||||
/// <summary>
|
||||
/// Tiger2 160-bit hash, 4 passes
|
||||
/// </summary>
|
||||
Tiger2_160_4,
|
||||
|
||||
/// <summary>
|
||||
/// Tiger2 192-bit hash, 3 passes
|
||||
/// </summary>
|
||||
Tiger2_192_3,
|
||||
|
||||
/// <summary>
|
||||
/// Tiger2 192-bit hash, 4 passes
|
||||
/// </summary>
|
||||
Tiger2_192_4,
|
||||
|
||||
#endregion
|
||||
|
||||
#region xxHash
|
||||
|
||||
@@ -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(),
|
||||
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger128_3.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger128_3.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger-128
|
||||
/// </summary>
|
||||
public class Tiger128_3 : TigerHashBase
|
||||
{
|
||||
public Tiger128_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
_padStart = 0x01;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[16];
|
||||
Array.Copy(hash, trimmedHash, 16);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger128_4.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger128_4.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger-128
|
||||
/// </summary>
|
||||
public class Tiger128_4 : TigerHashBase
|
||||
{
|
||||
public Tiger128_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
_padStart = 0x01;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[16];
|
||||
Array.Copy(hash, trimmedHash, 16);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger160_3.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger160_3.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger-160
|
||||
/// </summary>
|
||||
public class Tiger160_3 : TigerHashBase
|
||||
{
|
||||
public Tiger160_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
_padStart = 0x01;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[20];
|
||||
Array.Copy(hash, trimmedHash, 20);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger160_4.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger160_4.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger-160
|
||||
/// </summary>
|
||||
public class Tiger160_4 : TigerHashBase
|
||||
{
|
||||
public Tiger160_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
_padStart = 0x01;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[20];
|
||||
Array.Copy(hash, trimmedHash, 20);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
SabreTools.Hashing/MessageDigest/Tiger192_3.cs
Normal file
14
SabreTools.Hashing/MessageDigest/Tiger192_3.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger-192
|
||||
/// </summary>
|
||||
public class Tiger192_3 : TigerHashBase
|
||||
{
|
||||
public Tiger192_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
_padStart = 0x01;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
SabreTools.Hashing/MessageDigest/Tiger192_4.cs
Normal file
14
SabreTools.Hashing/MessageDigest/Tiger192_4.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger-192
|
||||
/// </summary>
|
||||
public class Tiger192_4 : TigerHashBase
|
||||
{
|
||||
public Tiger192_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
_padStart = 0x01;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger2_128_3.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger2_128_3.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger2-128
|
||||
/// </summary>
|
||||
public class Tiger2_128_3 : TigerHashBase
|
||||
{
|
||||
public Tiger2_128_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
_padStart = 0x80;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[16];
|
||||
Array.Copy(hash, trimmedHash, 16);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger2_128_4.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger2_128_4.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger2-128
|
||||
/// </summary>
|
||||
public class Tiger2_128_4 : TigerHashBase
|
||||
{
|
||||
public Tiger2_128_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
_padStart = 0x80;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[16];
|
||||
Array.Copy(hash, trimmedHash, 16);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger2_160_3.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger2_160_3.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger2-160
|
||||
/// </summary>
|
||||
public class Tiger2_160_3 : TigerHashBase
|
||||
{
|
||||
public Tiger2_160_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
_padStart = 0x80;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[20];
|
||||
Array.Copy(hash, trimmedHash, 20);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Hashing/MessageDigest/Tiger2_160_4.cs
Normal file
25
SabreTools.Hashing/MessageDigest/Tiger2_160_4.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger2-160
|
||||
/// </summary>
|
||||
public class Tiger2_160_4 : TigerHashBase
|
||||
{
|
||||
public Tiger2_160_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
_padStart = 0x80;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[20];
|
||||
Array.Copy(hash, trimmedHash, 20);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
SabreTools.Hashing/MessageDigest/Tiger2_192_3.cs
Normal file
14
SabreTools.Hashing/MessageDigest/Tiger2_192_3.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger2-192
|
||||
/// </summary>
|
||||
public class Tiger2_192_3 : TigerHashBase
|
||||
{
|
||||
public Tiger2_192_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
_padStart = 0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
SabreTools.Hashing/MessageDigest/Tiger2_192_4.cs
Normal file
14
SabreTools.Hashing/MessageDigest/Tiger2_192_4.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger2-192
|
||||
/// </summary>
|
||||
public class Tiger2_192_4 : TigerHashBase
|
||||
{
|
||||
public Tiger2_192_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
_padStart = 0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,19 +5,24 @@ using static SabreTools.Hashing.MessageDigest.Constants;
|
||||
namespace SabreTools.Hashing.MessageDigest
|
||||
{
|
||||
/// <see href="https://biham.cs.technion.ac.il/Reports/Tiger//>
|
||||
public abstract class TigerHash : MessageDigestBase<ulong>
|
||||
public abstract class TigerHashBase : MessageDigestBase<ulong>
|
||||
{
|
||||
/// <summary>
|
||||
/// Number of passes (minimum 3)
|
||||
/// </summary>
|
||||
protected int _passes;
|
||||
|
||||
/// <summary>
|
||||
/// Byte to start padding with
|
||||
/// </summary>
|
||||
protected byte _padStart;
|
||||
|
||||
/// <summary>
|
||||
/// Set of 3 64-bit numbers representing the hash state
|
||||
/// </summary>
|
||||
private readonly ulong[] _state = new ulong[3];
|
||||
|
||||
public TigerHash() : base()
|
||||
public TigerHashBase() : base()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -97,7 +102,7 @@ namespace SabreTools.Hashing.MessageDigest
|
||||
|
||||
// Prebuild the padding
|
||||
var padding = new byte[padLength];
|
||||
padding[0] = 0x01;
|
||||
padding[0] = _padStart;
|
||||
padding[padLength - 1] = (byte)((totalBitCount >> 56) & 0xff);
|
||||
padding[padLength - 2] = (byte)((totalBitCount >> 48) & 0xff);
|
||||
padding[padLength - 3] = (byte)((totalBitCount >> 40) & 0xff);
|
||||
@@ -234,106 +239,4 @@ namespace SabreTools.Hashing.MessageDigest
|
||||
_block[7] -= _block[6] ^ 0x0123456789ABCDEF;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger-192
|
||||
/// </summary>
|
||||
public class Tiger192_3 : TigerHash
|
||||
{
|
||||
public Tiger192_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger-192
|
||||
/// </summary>
|
||||
public class Tiger192_4 : TigerHash
|
||||
{
|
||||
public Tiger192_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger-160
|
||||
/// </summary>
|
||||
public class Tiger160_3 : TigerHash
|
||||
{
|
||||
public Tiger160_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[20];
|
||||
Array.Copy(hash, trimmedHash, 20);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger-160
|
||||
/// </summary>
|
||||
public class Tiger160_4 : TigerHash
|
||||
{
|
||||
public Tiger160_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[20];
|
||||
Array.Copy(hash, trimmedHash, 20);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 3-pass variant of Tiger-128
|
||||
/// </summary>
|
||||
public class Tiger128_3 : TigerHash
|
||||
{
|
||||
public Tiger128_3() : base()
|
||||
{
|
||||
_passes = 3;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[16];
|
||||
Array.Copy(hash, trimmedHash, 16);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 4-pass variant of Tiger-128
|
||||
/// </summary>
|
||||
public class Tiger128_4 : TigerHash
|
||||
{
|
||||
public Tiger128_4() : base()
|
||||
{
|
||||
_passes = 4;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[] GetHash()
|
||||
{
|
||||
byte[] hash = base.GetHash();
|
||||
byte[] trimmedHash = new byte[16];
|
||||
Array.Copy(hash, trimmedHash, 16);
|
||||
return trimmedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user