version 5.5.1

add SipHash and HalfSipHash for PIDigest
This commit is contained in:
2025-10-08 21:15:28 +03:00
parent 1d76cacae2
commit 978e350722
16 changed files with 3965 additions and 59 deletions

View File

@@ -25,6 +25,7 @@
#include "pidigest_md5_p.h"
#include "pidigest_sha1_p.h"
#include "pidigest_sha2_p.h"
#include "pidigest_siphash_p.h"
int PIDigest::hashLength(Type type) {
@@ -49,6 +50,10 @@ int PIDigest::hashLength(Type type) {
case Type::BLAKE2b_256: return 32;
case Type::BLAKE2b_384: return 48;
case Type::BLAKE2b_512: return 64;
case Type::SipHash_2_4_64: return 8;
case Type::SipHash_2_4_128: return 16;
case Type::HalfSipHash_2_4_32: return 4;
case Type::HalfSipHash_2_4_64: return 8;
default: break;
}
return 0;
@@ -77,6 +82,10 @@ int PIDigest::blockLength(Type type) {
case Type::BLAKE2b_256:
case Type::BLAKE2b_384:
case Type::BLAKE2b_512: return 128;
case Type::SipHash_2_4_64: return 8;
case Type::SipHash_2_4_128: return 16;
case Type::HalfSipHash_2_4_32: return 4;
case Type::HalfSipHash_2_4_64: return 8;
default: break;
}
return 0;
@@ -105,6 +114,10 @@ PIConstChars PIDigest::typeName(Type type) {
case Type::BLAKE2b_256: return "BLAKE2b_256";
case Type::BLAKE2b_384: return "BLAKE2b_384";
case Type::BLAKE2b_512: return "BLAKE2b_512";
case Type::SipHash_2_4_64: return "SipHash_2_4_64";
case Type::SipHash_2_4_128: return "SipHash_2_4_128";
case Type::HalfSipHash_2_4_32: return "HalfSipHash_2_4_32";
case Type::HalfSipHash_2_4_64: return "HalfSipHash_2_4_64";
default: break;
}
return "Unknown";
@@ -123,16 +136,42 @@ PIByteArray PIDigest::calculate(const PIByteArray & msg, Type type) {
case Type::SHA2_512: return SHA2::sha5xx(msg, SHA2::initial_512, 64);
case Type::SHA2_512_224: return SHA2::sha5xx(msg, SHA2::initial_512_224, 28);
case Type::SHA2_512_256: return SHA2::sha5xx(msg, SHA2::initial_512_256, 32);
case Type::BLAKE2s_128: return BLAKE2::blake2s(msg, 16);
case Type::BLAKE2s_160: return BLAKE2::blake2s(msg, 20);
case Type::BLAKE2s_224: return BLAKE2::blake2s(msg, 28);
case Type::BLAKE2s_256: return BLAKE2::blake2s(msg, 32);
case Type::BLAKE2b_128: return BLAKE2::blake2b(msg, 16);
case Type::BLAKE2b_160: return BLAKE2::blake2b(msg, 20);
case Type::BLAKE2b_224: return BLAKE2::blake2b(msg, 28);
case Type::BLAKE2b_256: return BLAKE2::blake2b(msg, 32);
case Type::BLAKE2b_384: return BLAKE2::blake2b(msg, 48);
case Type::BLAKE2b_512: return BLAKE2::blake2b(msg, 64);
case Type::BLAKE2s_128: return BLAKE2::blake2s(msg, {}, 16);
case Type::BLAKE2s_160: return BLAKE2::blake2s(msg, {}, 20);
case Type::BLAKE2s_224: return BLAKE2::blake2s(msg, {}, 28);
case Type::BLAKE2s_256: return BLAKE2::blake2s(msg, {}, 32);
case Type::BLAKE2b_128: return BLAKE2::blake2b(msg, {}, 16);
case Type::BLAKE2b_160: return BLAKE2::blake2b(msg, {}, 20);
case Type::BLAKE2b_224: return BLAKE2::blake2b(msg, {}, 28);
case Type::BLAKE2b_256: return BLAKE2::blake2b(msg, {}, 32);
case Type::BLAKE2b_384: return BLAKE2::blake2b(msg, {}, 48);
case Type::BLAKE2b_512: return BLAKE2::blake2b(msg, {}, 64);
case Type::SipHash_2_4_64: return SipHash::siphash(msg, {}, 8);
case Type::SipHash_2_4_128: return SipHash::siphash(msg, {}, 16);
case Type::HalfSipHash_2_4_32: return SipHash::halfsiphash(msg, {}, 4);
case Type::HalfSipHash_2_4_64: return SipHash::halfsiphash(msg, {}, 8);
default: break;
}
return {};
}
PIByteArray PIDigest::calculateWithKey(const PIByteArray & msg, const PIByteArray & key, Type type) {
switch (type) {
case Type::BLAKE2s_128: return BLAKE2::blake2s(msg, key, 16);
case Type::BLAKE2s_160: return BLAKE2::blake2s(msg, key, 20);
case Type::BLAKE2s_224: return BLAKE2::blake2s(msg, key, 28);
case Type::BLAKE2s_256: return BLAKE2::blake2s(msg, key, 32);
case Type::BLAKE2b_128: return BLAKE2::blake2b(msg, key, 16);
case Type::BLAKE2b_160: return BLAKE2::blake2b(msg, key, 20);
case Type::BLAKE2b_224: return BLAKE2::blake2b(msg, key, 28);
case Type::BLAKE2b_256: return BLAKE2::blake2b(msg, key, 32);
case Type::BLAKE2b_384: return BLAKE2::blake2b(msg, key, 48);
case Type::BLAKE2b_512: return BLAKE2::blake2b(msg, key, 64);
case Type::SipHash_2_4_64: return SipHash::siphash(msg, key, 8);
case Type::SipHash_2_4_128: return SipHash::siphash(msg, key, 16);
case Type::HalfSipHash_2_4_32: return SipHash::halfsiphash(msg, key, 4);
case Type::HalfSipHash_2_4_64: return SipHash::halfsiphash(msg, key, 8);
default: break;
}
return {};