diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2026-04-25 22:46:05 +0200 |
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2026-05-06 09:04:41 +0200 |
| commit | 20d4a472800cbc9338f0c6c9c3dfce8eb13663c7 (patch) | |
| tree | b796528ce6272c95c3e0fafe937fcc28898a3afc /src/lib/tests/hash_test.c | |
| parent | 77fdc9f1d162b2307d7752d56930710858f702b4 (diff) | |
| download | ouroboros-20d4a472800cbc9338f0c6c9c3dfce8eb13663c7.tar.gz ouroboros-20d4a472800cbc9338f0c6c9c3dfce8eb13663c7.zip | |
lib: Add CRC-64/NVMe checksum
Add CRC-64/NVMe implementation with compile-time hardware backend
selection:
x86 PCLMUL+SSE4.1 fold-by-16 (HAVE_PCLMUL)
aarch64 PMULL fold-by-16 when (HAVE_PMULL)
and a byte-table fallback.
It's added as HASH_CRC64 to enum hash_algo (in the internal-use-only
section after HASH_MD5). Both mem_hash() and hash_len() early-return
for HASH_CRC64 because libgcrypt has no CRC-64/NVMe.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/lib/tests/hash_test.c')
| -rw-r--r-- | src/lib/tests/hash_test.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/tests/hash_test.c b/src/lib/tests/hash_test.c index e43847e1..19343b17 100644 --- a/src/lib/tests/hash_test.c +++ b/src/lib/tests/hash_test.c @@ -74,6 +74,42 @@ static int test_crc32(void) return ret; } +static int test_crc64(void) +{ + int ret = 0; + + struct vec_entry vec [] = { + { "", "0000000000000000" }, + { "123456789", "ae8b14860a799888" }, + { "0123456789abcdef", + "091485ca7018730e" }, + { NULL, NULL } + }; + + struct vec_entry * cur = vec; + + TEST_START(); + + while (cur->in != NULL) { + uint8_t crc[8]; + char res[17]; + + str_hash(HASH_CRC64, crc, cur->in); + + sprintf(res, HASH_FMT64, HASH_VAL64(crc)); + if (strcmp(res, cur->out) != 0) { + printf("Hash failed %s != %s.\n", res, cur->out); + ret |= -1; + } + + ++cur; + } + + TEST_END(ret); + + return ret; +} + static int test_md5(void) { int ret = 0; @@ -194,6 +230,8 @@ int hash_test(int argc, ret |= test_crc32(); + ret |= test_crc64(); + ret |= test_md5(); ret |= test_sha3(); |
