Rename HashType to TigerHash
This commit is contained in:
parent
e8467cebe0
commit
094f7fc679
3 changed files with 23 additions and 23 deletions
|
@ -24,18 +24,18 @@
|
||||||
#include <climits>
|
#include <climits>
|
||||||
|
|
||||||
namespace dhandy::bt {
|
namespace dhandy::bt {
|
||||||
struct HashType {
|
struct TigerHash {
|
||||||
consteval HashType ( uint64_t parA, uint64_t parB, uint64_t parC ) :
|
consteval TigerHash ( uint64_t parA, uint64_t parB, uint64_t parC ) :
|
||||||
a(parA), b(parB), c(parC)
|
a(parA), b(parB), c(parC)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
consteval HashType ( uint64_t parAP, uint64_t parA, uint64_t parBP, uint64_t parB, uint64_t parCP, uint64_t parC ) :
|
consteval TigerHash ( uint64_t parAP, uint64_t parA, uint64_t parBP, uint64_t parB, uint64_t parCP, uint64_t parC ) :
|
||||||
a(0 == parAP ? parA : (0 == parBP ? parB : (0 == parCP ? parC : throw 0))),
|
a(0 == parAP ? parA : (0 == parBP ? parB : (0 == parCP ? parC : throw 0))),
|
||||||
b(1 == parAP ? parA : (1 == parBP ? parB : (1 == parCP ? parC : throw 0))),
|
b(1 == parAP ? parA : (1 == parBP ? parB : (1 == parCP ? parC : throw 0))),
|
||||||
c(2 == parAP ? parA : (2 == parBP ? parB : (2 == parCP ? parC : throw 0)))
|
c(2 == parAP ? parA : (2 == parBP ? parB : (2 == parCP ? parC : throw 0)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
consteval HashType ( const HashType& ) = default;
|
consteval TigerHash ( const TigerHash& ) = default;
|
||||||
consteval uint64_t operator[] ( uint64_t parIndex ) const {
|
consteval uint64_t operator[] ( uint64_t parIndex ) const {
|
||||||
return (parIndex == 0 ? a :
|
return (parIndex == 0 ? a :
|
||||||
(parIndex == 1 ? b :
|
(parIndex == 1 ? b :
|
||||||
|
@ -53,7 +53,7 @@ namespace dhandy::bt {
|
||||||
inline const constexpr char TigerPaddingV2 = 0x80;
|
inline const constexpr char TigerPaddingV2 = 0x80;
|
||||||
|
|
||||||
[[gnu::const]]
|
[[gnu::const]]
|
||||||
consteval HashType tiger ( const char* parStr, uint64_t parLen, char parPad );
|
consteval TigerHash tiger ( const char* parStr, uint64_t parLen, char parPad );
|
||||||
} //namespace dhandy::bt
|
} //namespace dhandy::bt
|
||||||
|
|
||||||
#include "tiger_bt.inl"
|
#include "tiger_bt.inl"
|
||||||
|
|
|
@ -358,8 +358,8 @@ namespace dhandy::bt {
|
||||||
return (r >> (a * CHAR_BIT)) bitand 0xff;
|
return (r >> (a * CHAR_BIT)) bitand 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType round (uint64_t mul, uint64_t a, uint64_t b, uint64_t c, uint64_t x, const TigerBlock& block, const HashType& hash) {
|
consteval TigerHash round (uint64_t mul, uint64_t a, uint64_t b, uint64_t c, uint64_t x, const TigerBlock& block, const TigerHash& hash) {
|
||||||
return HashType(
|
return TigerHash(
|
||||||
a,
|
a,
|
||||||
hash[a] - (
|
hash[a] - (
|
||||||
table[ gb(hash[c] xor block[x], 0)] xor
|
table[ gb(hash[c] xor block[x], 0)] xor
|
||||||
|
@ -377,7 +377,7 @@ namespace dhandy::bt {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType pass (uint64_t a, uint64_t b, uint64_t c, uint64_t mul, const TigerBlock& block, const HashType& hash, uint64_t x=0) {
|
consteval TigerHash pass (uint64_t a, uint64_t b, uint64_t c, uint64_t mul, const TigerBlock& block, const TigerHash& hash, uint64_t x=0) {
|
||||||
return (
|
return (
|
||||||
8 == x ?
|
8 == x ?
|
||||||
//if 0 == x
|
//if 0 == x
|
||||||
|
@ -426,15 +426,15 @@ namespace dhandy::bt {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType finalize_tiger_step (HashType parOriginal, HashType parPartial) {
|
consteval TigerHash finalize_tiger_step (TigerHash parOriginal, TigerHash parPartial) {
|
||||||
return HashType(
|
return TigerHash(
|
||||||
parPartial.a ^ parOriginal.a,
|
parPartial.a ^ parOriginal.a,
|
||||||
parPartial.b - parOriginal.b,
|
parPartial.b - parOriginal.b,
|
||||||
parPartial.c + parOriginal.c
|
parPartial.c + parOriginal.c
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType tiger_block (const TigerBlock& parBlock, HashType parHash) {
|
consteval TigerHash tiger_block (const TigerBlock& parBlock, TigerHash parHash) {
|
||||||
return finalize_tiger_step(
|
return finalize_tiger_step(
|
||||||
parHash,
|
parHash,
|
||||||
pass(1, 2, 0, 9, key_sched(key_sched(parBlock)),
|
pass(1, 2, 0, 9, key_sched(key_sched(parBlock)),
|
||||||
|
@ -445,11 +445,11 @@ namespace dhandy::bt {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType tiger_block (const char* parStr, HashType parHash) {
|
consteval TigerHash tiger_block (const char* parStr, TigerHash parHash) {
|
||||||
return tiger_block(TigerBlock(parStr), parHash);
|
return tiger_block(TigerBlock(parStr), parHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType tiger_chunk (const char* parStr, uint64_t parLen, HashType parHash) {
|
consteval TigerHash tiger_chunk (const char* parStr, uint64_t parLen, TigerHash parHash) {
|
||||||
return (parLen == 0 ?
|
return (parLen == 0 ?
|
||||||
//if parLen == 0
|
//if parLen == 0
|
||||||
parHash
|
parHash
|
||||||
|
@ -459,7 +459,7 @@ namespace dhandy::bt {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
consteval HashType tiger_last_chunk (const char* parStr, uint64_t parLen, uint64_t parRealLen, HashType parHash, char parPad) {
|
consteval TigerHash tiger_last_chunk (const char* parStr, uint64_t parLen, uint64_t parRealLen, TigerHash parHash, char parPad) {
|
||||||
return (
|
return (
|
||||||
parLen + 1 + ((8 - parLen - 1) bitand 7) == 64 ?
|
parLen + 1 + ((8 - parLen - 1) bitand 7) == 64 ?
|
||||||
tiger_block(
|
tiger_block(
|
||||||
|
@ -472,7 +472,7 @@ namespace dhandy::bt {
|
||||||
}
|
}
|
||||||
} //namespace implem
|
} //namespace implem
|
||||||
|
|
||||||
consteval HashType tiger (const char* parStr, uint64_t parLen, char parPad) {
|
consteval TigerHash tiger (const char* parStr, uint64_t parLen, char parPad) {
|
||||||
return implem::tiger_last_chunk(
|
return implem::tiger_last_chunk(
|
||||||
parStr + (parLen bitand ~static_cast<uint64_t>(0x3f)),
|
parStr + (parLen bitand ~static_cast<uint64_t>(0x3f)),
|
||||||
parLen - (parLen bitand ~static_cast<uint64_t>(0x3f)),
|
parLen - (parLen bitand ~static_cast<uint64_t>(0x3f)),
|
||||||
|
@ -480,7 +480,7 @@ namespace dhandy::bt {
|
||||||
implem::tiger_chunk(
|
implem::tiger_chunk(
|
||||||
parStr,
|
parStr,
|
||||||
parLen bitand ~static_cast<uint64_t>(0x3f),
|
parLen bitand ~static_cast<uint64_t>(0x3f),
|
||||||
HashType(0x0123456789ABCDEFULL, 0xFEDCBA9876543210ULL, 0xF096A5B4C3B2E187ULL)
|
TigerHash{0x0123456789ABCDEFULL, 0xFEDCBA9876543210ULL, 0xF096A5B4C3B2E187ULL}
|
||||||
),
|
),
|
||||||
parPad
|
parPad
|
||||||
);
|
);
|
||||||
|
|
|
@ -20,36 +20,36 @@
|
||||||
|
|
||||||
TEST_CASE("Build-time Tiger hash tests", "[hash][bt][tiger]") {
|
TEST_CASE("Build-time Tiger hash tests", "[hash][bt][tiger]") {
|
||||||
using dhandy::bt::tiger;
|
using dhandy::bt::tiger;
|
||||||
using dhandy::bt::HashType;
|
using dhandy::bt::TigerHash;
|
||||||
using dhandy::bt::TigerPaddingV1;
|
using dhandy::bt::TigerPaddingV1;
|
||||||
using dhandy::bt::TigerPaddingV2;
|
using dhandy::bt::TigerPaddingV2;
|
||||||
|
|
||||||
constexpr HashType h1 = tiger("", 0, TigerPaddingV2);
|
constexpr TigerHash h1 = tiger("", 0, TigerPaddingV2);
|
||||||
CHECK(h1.a == 0x738701f675be4144);
|
CHECK(h1.a == 0x738701f675be4144);
|
||||||
CHECK(h1.b == 0x924b374527c206c2);
|
CHECK(h1.b == 0x924b374527c206c2);
|
||||||
CHECK(h1.c == 0x419f91ef3f31a84a);
|
CHECK(h1.c == 0x419f91ef3f31a84a);
|
||||||
|
|
||||||
constexpr HashType h2 = tiger("", 0, TigerPaddingV1);
|
constexpr TigerHash h2 = tiger("", 0, TigerPaddingV1);
|
||||||
CHECK(h2.a == 0x24f0130c63ac9332);
|
CHECK(h2.a == 0x24f0130c63ac9332);
|
||||||
CHECK(h2.b == 0x16166e76b1bb925f);
|
CHECK(h2.b == 0x16166e76b1bb925f);
|
||||||
CHECK(h2.c == 0xf373de2d49584e7a);
|
CHECK(h2.c == 0xf373de2d49584e7a);
|
||||||
|
|
||||||
constexpr HashType h3 = tiger("message digest", 14, TigerPaddingV2);
|
constexpr TigerHash h3 = tiger("message digest", 14, TigerPaddingV2);
|
||||||
CHECK(h3.a == 0x9d25fab5a11994e2);
|
CHECK(h3.a == 0x9d25fab5a11994e2);
|
||||||
CHECK(h3.b == 0xea7850e77d5e00e8);
|
CHECK(h3.b == 0xea7850e77d5e00e8);
|
||||||
CHECK(h3.c == 0x2d465225ef42a581);
|
CHECK(h3.c == 0x2d465225ef42a581);
|
||||||
|
|
||||||
constexpr HashType h4 = tiger("message digest", 14, TigerPaddingV1);
|
constexpr TigerHash h4 = tiger("message digest", 14, TigerPaddingV1);
|
||||||
CHECK(h4.a == 0x951a2078cbf881d9);
|
CHECK(h4.a == 0x951a2078cbf881d9);
|
||||||
CHECK(h4.b == 0x1c441e754830cf0d);
|
CHECK(h4.b == 0x1c441e754830cf0d);
|
||||||
CHECK(h4.c == 0xf6295aa51aca7f51);
|
CHECK(h4.c == 0xf6295aa51aca7f51);
|
||||||
|
|
||||||
constexpr HashType h5 = tiger("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62, TigerPaddingV2);
|
constexpr TigerHash h5 = tiger("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62, TigerPaddingV2);
|
||||||
CHECK(h5.a == 0x517bee8c22b69aea);
|
CHECK(h5.a == 0x517bee8c22b69aea);
|
||||||
CHECK(h5.b == 0x8c6c06a6fc4475b7);
|
CHECK(h5.b == 0x8c6c06a6fc4475b7);
|
||||||
CHECK(h5.c == 0xcd059531e6ba5bbb);
|
CHECK(h5.c == 0xcd059531e6ba5bbb);
|
||||||
|
|
||||||
constexpr HashType h6 = tiger("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62, TigerPaddingV1);
|
constexpr TigerHash h6 = tiger("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62, TigerPaddingV1);
|
||||||
CHECK(h6.a == 0xee8375a180a6ce8d);
|
CHECK(h6.a == 0xee8375a180a6ce8d);
|
||||||
CHECK(h6.b == 0x5186363c8aa32b50);
|
CHECK(h6.b == 0x5186363c8aa32b50);
|
||||||
CHECK(h6.c == 0xcca849dcccfb0f89);
|
CHECK(h6.c == 0xcca849dcccfb0f89);
|
||||||
|
|
Loading…
Reference in a new issue