test: add SipHash-1-3-UJ coverage

Add SipHash-1-3-UJ outputs to the shared vectors for sequences of 8- and 32-byte blocks.
Check generic writes and applicable fixed-width `Hash` overloads against those outputs, and fuzz their equivalence including mixed normal/jumbo encodings.

The outputs were generated by an independent implementation that Claude Opus 4.8 produced using only the `SipHasher13UJ` class comment as its prompt.

Co-authored-by: Lőrinc <pap.lorinc@gmail.com>
This commit is contained in:
Pieter Wuille
2026-07-15 17:11:28 -07:00
committed by Lőrinc
parent a0ccd4ad17
commit 3aea85411f
3 changed files with 131 additions and 64 deletions

View File

@@ -2,272 +2,272 @@
{
"key": ["0000000000000000", "0000000000000000"],
"input": [],
"expected": {"siphash24": "1e924b9d737700d7"}
"expected": {"siphash24": "1e924b9d737700d7", "siphash13uj": "74fdd8982aa99156"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": [],
"expected": {"siphash24": "726fdb47dd0e0e31"}
"expected": {"siphash24": "726fdb47dd0e0e31", "siphash13uj": "feee657d7e331ac3"}
},
{
"key": ["ffffffffffffffff", "ffffffffffffffff"],
"input": [],
"expected": {"siphash24": "35dd279ee86ce565"}
"expected": {"siphash24": "35dd279ee86ce565", "siphash13uj": "b2203b65f6fc20f2"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0000000000000000"],
"expected": {"siphash24": "39d3851ca07681a7"}
"expected": {"siphash24": "39d3851ca07681a7", "siphash13uj": "6a74cba00ddbfeba"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["ffffffffffffffff"],
"expected": {"siphash24": "2a68ff30a3d9da34"}
"expected": {"siphash24": "2a68ff30a3d9da34", "siphash13uj": "a49b16683645df11"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0001020304050607"],
"expected": {"siphash24": "93f5f5799a932462"}
"expected": {"siphash24": "93f5f5799a932462", "siphash13uj": "636d75a66b0b2dee"}
},
{
"key": ["0000000000000000", "0000000000000000"],
"input": ["0000000000000000"],
"expected": {"siphash24": "e849e8bb6ffe2567"}
"expected": {"siphash24": "e849e8bb6ffe2567", "siphash13uj": "44ba508bb47f860a"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0000000000000000000000000000000000000000000000000000000000000000"],
"expected": {"siphash24": "8990d3e4299496f4"}
"expected": {"siphash24": "8990d3e4299496f4", "siphash13uj": "6a74cba00ddbfeba"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],
"expected": {"siphash24": "e1041d47f898e431"}
"expected": {"siphash24": "e1041d47f898e431", "siphash13uj": "7f745a471ec7c2f6"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],
"expected": {"siphash24": "7127512f72f27cce"}
"expected": {"siphash24": "7127512f72f27cce", "siphash13uj": "c67d87b08ca4b5c6"}
},
{
"key": ["0000000000000000", "0000000000000000"],
"input": ["0000000000000000000000000000000000000000000000000000000000000000"],
"expected": {"siphash24": "6c37e103dfa2827d"}
"expected": {"siphash24": "6c37e103dfa2827d", "siphash13uj": "44ba508bb47f860a"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["1011121314151617"],
"expected": {"siphash24": "76b71a8cb872b528"}
"expected": {"siphash24": "76b71a8cb872b528", "siphash13uj": "17bd848a0ddd6294"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["1011121314151617000000000000000000000000000000000000000000000000"],
"expected": {"siphash24": "070fb8d2b4264e7e"}
"expected": {"siphash24": "070fb8d2b4264e7e", "siphash13uj": "17bd848a0ddd6294"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0102030405060708", "0203040506070809", "030405060708090a"],
"expected": {"siphash24": "9b3c1cee5de9caa4"}
"expected": {"siphash24": "9b3c1cee5de9caa4", "siphash13uj": "46b8c5978195f0d0"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0102030405060708000000000000000000000000000000000000000000000000", "0203040506070809000000000000000000000000000000000000000000000000", "030405060708090a000000000000000000000000000000000000000000000000"],
"expected": {"siphash24": "e9277fda84de2f84"}
"expected": {"siphash24": "e9277fda84de2f84", "siphash13uj": "46b8c5978195f0d0"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f"],
"expected": {"siphash24": "27bd5ecb84e56c87"}
"expected": {"siphash24": "27bd5ecb84e56c87", "siphash13uj": "d2c0b9ab84599147"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["4041424344454647", "48494a4b4c4d4e4f", "5051525354555657", "58595a5b5c5d5e5f"],
"expected": {"siphash24": "27bd5ecb84e56c87"}
"expected": {"siphash24": "27bd5ecb84e56c87", "siphash13uj": "d630244e335448dd"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0001020304050607", "08090a0b0c0d0e0f"],
"expected": {"siphash24": "3f2acc7f57c29bdb"}
"expected": {"siphash24": "3f2acc7f57c29bdb", "siphash13uj": "7c25d372353b5aa1"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0001020304050607", "08090a0b0c0d0e0f", "1011121314151617", "18191a1b1c1d1e1f"],
"expected": {"siphash24": "7127512f72f27cce"}
"expected": {"siphash24": "7127512f72f27cce", "siphash13uj": "1aba99b7cf175f4a"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0001020304050607", "08090a0b0c0d0e0f", "1011121314151617", "18191a1b1c1d1e1f", "2021222324252627", "28292a2b2c2d2e2f", "3031323334353637", "38393a3b3c3d3e3f"],
"expected": {"siphash24": "acd2c40b8502cad8"}
"expected": {"siphash24": "acd2c40b8502cad8", "siphash13uj": "ba4cdea787bdabb9"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000"],
"expected": {"siphash24": "d6d266a868d1e17c"}
"expected": {"siphash24": "d6d266a868d1e17c", "siphash13uj": "b40ca9149482127a"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"],
"expected": {"siphash24": "acd2c40b8502cad8"}
"expected": {"siphash24": "acd2c40b8502cad8", "siphash13uj": "6bd1d4ec2ccd0192"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f"],
"expected": {"siphash24": "deb79e256c8736ae"}
"expected": {"siphash24": "deb79e256c8736ae", "siphash13uj": "497a4c5f66a6c9ac"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f", "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", "a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf", "c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf", "e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"],
"expected": {"siphash24": "999d0526d2a7bfd7"}
"expected": {"siphash24": "999d0526d2a7bfd7", "siphash13uj": "33f9f36a0690842d"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["1112131415161718", "22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041"],
"expected": {"siphash24": "2a8b45c236d6964c"}
"expected": {"siphash24": "2a8b45c236d6964c", "siphash13uj": "2e989a98fc8ab941"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041", "1112131415161718"],
"expected": {"siphash24": "2086c12dd61e796a"}
"expected": {"siphash24": "2086c12dd61e796a", "siphash13uj": "6f62e14ce40a8928"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["a0a1a2a3a4a5a6a7", "b0b1b2b3b4b5b6b7"],
"expected": {"siphash24": "103eacf2c5a3c798"}
"expected": {"siphash24": "103eacf2c5a3c798", "siphash13uj": "3d50654ce19fef0a"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["b0b1b2b3b4b5b6b7", "a0a1a2a3a4a5a6a7"],
"expected": {"siphash24": "16098ab961ca74be"}
"expected": {"siphash24": "16098ab961ca74be", "siphash13uj": "93d52229e1bf3f12"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0102030405060708", "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021", "030405060708090a"],
"expected": {"siphash24": "f33f8a1ac89a38a5"}
"expected": {"siphash24": "f33f8a1ac89a38a5", "siphash13uj": "93d4844f68473bde"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20", "0203040506070809", "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122"],
"expected": {"siphash24": "83a7e7cb48fcc3f0"}
"expected": {"siphash24": "83a7e7cb48fcc3f0", "siphash13uj": "1eeb5627f80ec45e"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0101010101010101", "0202020202020202", "0303030303030303030303030303030303030303030303030303030303030303", "0404040404040404040404040404040404040404040404040404040404040404", "0505050505050505"],
"expected": {"siphash24": "2da632417cf98266"}
"expected": {"siphash24": "2da632417cf98266", "siphash13uj": "36c183e8c31960ca"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0001020304050607", "08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627", "28292a2b2c2d2e2f", "303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f", "5051525354555657", "58595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677"],
"expected": {"siphash24": "9fee744ff1c22fcc"}
"expected": {"siphash24": "9fee744ff1c22fcc", "siphash13uj": "0373fa0d4680e12a"}
},
{
"key": ["0000000000000000", "0000000000000000"],
"input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
"expected": {"siphash24": "f4b057ed3852ca9c"}
"expected": {"siphash24": "f4b057ed3852ca9c", "siphash13uj": "0ca784307a2b3941"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
"expected": {"siphash24": "b0ecaab557894381"}
"expected": {"siphash24": "b0ecaab557894381", "siphash13uj": "40a0e330ade3b826"}
},
{
"key": ["ffffffffffffffff", "ffffffffffffffff"],
"input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
"expected": {"siphash24": "c31e72088331c72c"}
"expected": {"siphash24": "c31e72088331c72c", "siphash13uj": "39b802d0fb124208"}
},
{
"key": ["0123456789abcdef", "0000000000000000"],
"input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
"expected": {"siphash24": "f74571f90abc512c"}
"expected": {"siphash24": "f74571f90abc512c", "siphash13uj": "21bd1ab2c8db2044"}
},
{
"key": ["0000000000000000", "0123456789abcdef"],
"input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
"expected": {"siphash24": "4b58713a5c1de640"}
"expected": {"siphash24": "4b58713a5c1de640", "siphash13uj": "bc66d61864912a68"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0100000000000000"],
"expected": {"siphash24": "2b91b2b085e6d1f6"}
"expected": {"siphash24": "2b91b2b085e6d1f6", "siphash13uj": "7426afff81e13e5d"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0000000000000080"],
"expected": {"siphash24": "45f93120d11c42c2"}
"expected": {"siphash24": "45f93120d11c42c2", "siphash13uj": "dbd8592fe9fd3b1b"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0000000000000000000000000000000000000000000000000000000000000080"],
"expected": {"siphash24": "52de95ec1fc46cf4"}
"expected": {"siphash24": "52de95ec1fc46cf4", "siphash13uj": "c946b5eafdebf91d"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0100000000000000010000000000000001000000000000000100000000000000"],
"expected": {"siphash24": "256fc49da00e8ae9"}
"expected": {"siphash24": "256fc49da00e8ae9", "siphash13uj": "28193aab7f7f53b5"}
},
{
"key": ["3becfe231ec833e1", "e5fe84a1124e5b76"],
"input": ["5d6fae7bea1143a44b6a307d8dd3a8d5946d1b50943a0a4edb5390d7f41c6e29", "d22ee74ea5bb4d8d", "8032bbb059b1b9ef", "ec2ae4550dad3c60"],
"expected": {"siphash24": "2f57b02b4a7cf7d6"}
"expected": {"siphash24": "2f57b02b4a7cf7d6", "siphash13uj": "8f201c9a3e7ca92a"}
},
{
"key": ["cff49392d5b0aefe", "b8a0d7022086fc70"],
"input": [],
"expected": {"siphash24": "9c7123b7b45d0895"}
"expected": {"siphash24": "9c7123b7b45d0895", "siphash13uj": "25f929e44740ac55"}
},
{
"key": ["9bf012bb0d65f966", "f15a2c8514da1d9d"],
"input": [],
"expected": {"siphash24": "a5c78c807512368a"}
"expected": {"siphash24": "a5c78c807512368a", "siphash13uj": "e317bf983b4cf183"}
},
{
"key": ["4ac23ef0d1555a54", "4a498a3964dd2bc1"],
"input": ["3e83c8e8b335d732", "539aea9c7872ae8f", "6f14ac803d3a9181"],
"expected": {"siphash24": "be7ea59e0e60a59d"}
"expected": {"siphash24": "be7ea59e0e60a59d", "siphash13uj": "3adb5b8275ff1694"}
},
{
"key": ["eef84fb309e552b9", "e60195c78faa2ee8"],
"input": [],
"expected": {"siphash24": "001e0c1c4140f9ec"}
"expected": {"siphash24": "001e0c1c4140f9ec", "siphash13uj": "2bdc46f9f5e83bdc"}
},
{
"key": ["ecfdd5a1ea62a991", "6448b8f842081342"],
"input": ["6d72f7bce2f0f751", "e277849660a8af7f"],
"expected": {"siphash24": "3bc824e8141dcdd9"}
"expected": {"siphash24": "3bc824e8141dcdd9", "siphash13uj": "89510c79ae874736"}
},
{
"key": ["ab7a12b9c8774c7d", "38056b7041eb2098"],
"input": ["feebaa5f18a92c7e", "192679c9e82e3aa7"],
"expected": {"siphash24": "783219f01bb9d829"}
"expected": {"siphash24": "783219f01bb9d829", "siphash13uj": "a7cb7379701c754e"}
},
{
"key": ["13551d7a6089e83e", "ec3f8c0f4cbc1f7c"],
"input": ["7a0704789365d997", "4bb21a07f4b75d0208d5d4638edcc438c9f8ffcc78e2106a0637c629f81ffbdb", "a7d8197a04173065ec896b73a6803d6113201c56fd643b241200b7ea357e6efd", "0202e1ebcf15e1a8", "316c96f5464fa473", "0700f913bbe4dad357c5db1b7e79abd29e6e590e842141a16cb6e97e6933206c"],
"expected": {"siphash24": "30cca0cb21a31ffe"}
"expected": {"siphash24": "30cca0cb21a31ffe", "siphash13uj": "638ab9733accc61a"}
},
{
"key": ["0000000000000000", "0000000000000000"],
"input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f"],
"expected": {"siphash24": "1ca45bed0c8a9300"}
"expected": {"siphash24": "1ca45bed0c8a9300", "siphash13uj": "071384882b8b1ef6"}
},
{
"key": ["ffffffffffffffff", "ffffffffffffffff"],
"input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f"],
"expected": {"siphash24": "acb2f25002d4ece5"}
"expected": {"siphash24": "acb2f25002d4ece5", "siphash13uj": "6d3cb0c74116cdd5"}
},
{
"key": ["25fd75c04a240044", "4e3816151d29e2ce"],
"input": ["8940d79240a5bf8acdf428eece829dc27d8cc2ff7b74aaeb134f66062192d308"],
"expected": {"siphash24": "135eaef5f79941ad"}
"expected": {"siphash24": "135eaef5f79941ad", "siphash13uj": "16823b5389538dba"}
},
{
"key": ["aea4345a0fc4e761", "49456a8e8d82e5ee"],
"input": ["6e0e507f21292ad46a49aa0b20efec23000474f6203f5ceaf4f9325c4e032bbe"],
"expected": {"siphash24": "56e57b1e7d81c846"}
"expected": {"siphash24": "56e57b1e7d81c846", "siphash13uj": "36ae52fdbe166c9a"}
},
{
"key": ["f7ce16edcfe54eeb", "81c22c4aed3e516d"],
"input": ["caf32c2d8d827c8e55ee92253cffc657359af1cab7f24804afabac89a436fc75"],
"expected": {"siphash24": "84cad9f91acd36d0"}
"expected": {"siphash24": "84cad9f91acd36d0", "siphash13uj": "d8ebd74386d41628"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
@@ -327,52 +327,52 @@
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000"],
"expected": {"siphash24": "9aef4ef6217cbc9b"}
"expected": {"siphash24": "9aef4ef6217cbc9b", "siphash13uj": "71c3a354a6b56058"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffff"],
"expected": {"siphash24": "ccf329a45ab38059"}
"expected": {"siphash24": "ccf329a45ab38059", "siphash13uj": "958c1a52a5e57e8b"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "4041424344454647"],
"expected": {"siphash24": "50a2be7f0f871937"}
"expected": {"siphash24": "50a2be7f0f871937", "siphash13uj": "6cfc788446f0491d"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["0100000000000000000000000000000000000000000000000000000000000000", "0000000000000080"],
"expected": {"siphash24": "5c7d5fcb5ea2a305"}
"expected": {"siphash24": "5c7d5fcb5ea2a305", "siphash13uj": "9e89e2fc7abb2ba2"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "2021222324252627"],
"expected": {"siphash24": "ac705932e98104a4"}
"expected": {"siphash24": "ac705932e98104a4", "siphash13uj": "cdcd25f7a2ba32c5"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],
"input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "2122232425262728"],
"expected": {"siphash24": "7cbaa4ae7acddb81"}
"expected": {"siphash24": "7cbaa4ae7acddb81", "siphash13uj": "738d1f7d2d53622b"}
},
{
"key": ["0000000000000000", "0000000000000000"],
"input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "2021222324252627"],
"expected": {"siphash24": "22cfffe8bffea59f"}
"expected": {"siphash24": "22cfffe8bffea59f", "siphash13uj": "0f078522df1349f3"}
},
{
"key": ["49b001bc5a213d62", "80a330a42e60a89d"],
"input": ["6f7438d2dd360dcea691dd40e87426f4af6870315898ccbde0d3b19fcbb5ae6d", "55c36c12f25fffc9"],
"expected": {"siphash24": "9a5250a51a9eebfb"}
"expected": {"siphash24": "9a5250a51a9eebfb", "siphash13uj": "da1c5bf6cf31653d"}
},
{
"key": ["f4d704fa00ce074d", "6f1a65f3fe494b0a"],
"input": ["175202cb9f976ebd6c4ddc4a80d63b2b53e2976466041ae43b41397c41fe66ac", "803a01720ad0c5a9"],
"expected": {"siphash24": "70552fcc39899ae4"}
"expected": {"siphash24": "70552fcc39899ae4", "siphash13uj": "5725ddc762049274"}
},
{
"key": ["c3f929b4cb53785c", "1693fa676a8ee165"],
"input": ["2ac097c589bc75eb6e294605cafb3198891ff93764032225756aab86de06514b", "5c642eedd61df985"],
"expected": {"siphash24": "7b87d628efb69dd7"}
"expected": {"siphash24": "7b87d628efb69dd7", "siphash13uj": "49b121224ea53698"}
},
{
"key": ["0706050403020100", "0f0e0d0c0b0a0908"],

View File

@@ -129,6 +129,38 @@ FUZZ_TARGET(integer, .init = initialize_integer)
hasher.Write(extra);
assert(presalted_hasher(u256, u32) == hasher.Finalize());
}
{
const uint64_t data0{u160.GetUint64(0)}, data1{u160.GetUint64(1)};
SipHasher13UJ hasher{u64, u64_2};
const SipHasher13UJ fixed_hasher{u64, u64_2};
hasher.WriteJumbo(u256);
assert(fixed_hasher.Hash(u256) == hasher.Finalize());
hasher.Write(data0);
assert(fixed_hasher.Hash(u256, data0) == hasher.Finalize());
SipHasher13UJ reference{u64, u64_2};
SipHasher13UJ mixed{u64, u64_2};
reference.WriteJumbo(u256);
mixed.WriteJumbo(u256);
const auto write_normal{[](SipHasher13UJ& hasher, uint64_t data, bool as_jumbo) {
if (as_jumbo) {
uint256 data256{};
WriteLE64(data256.data(), data);
hasher.WriteJumbo(data256);
} else {
hasher.Write(data);
}
}};
reference.Write(data0).Write(data1);
write_normal(mixed, data0, b);
write_normal(mixed, data1, u8 & 1);
assert(mixed.Finalize() == reference.Finalize());
reference.WriteJumbo(u256).Write(data0);
assert(mixed.Hash(u256, data0) == reference.Finalize());
}
(void)ToLower(ch);
(void)ToUpper(ch);
{

View File

@@ -30,6 +30,29 @@ static uint64_t CalculateSipHash24(const UniValue& input, uint64_t k0, uint64_t
return result;
}
static uint64_t CalculateSipHash13UJ(const UniValue& input, uint64_t k0, uint64_t k1, bool normal_as_jumbo)
{
SipHasher13UJ hasher{k0, k1};
for (auto& value : input.getValues()) {
const auto block{ParseHex(value.get_str())};
if (block.size() == sizeof(uint64_t)) {
if (!normal_as_jumbo) {
hasher.Write(ReadLE64(block.data()));
} else {
uint256 data256{};
WriteLE64(data256.data(), ReadLE64(block.data()));
hasher.WriteJumbo(data256);
}
} else {
BOOST_REQUIRE_EQUAL(block.size(), uint256::size());
hasher.WriteJumbo(uint256{block});
}
}
const uint64_t result{hasher.Finalize()};
BOOST_CHECK_EQUAL(hasher.Finalize(), result);
return result;
}
BOOST_AUTO_TEST_CASE(murmurhash3)
{
@@ -162,6 +185,18 @@ BOOST_AUTO_TEST_CASE(siphash_test_vectors)
const auto extra{ParseHex(input[1].get_str())};
BOOST_CHECK_EQUAL(PresaltedSipHasher(k0, k1)(FromHex256(input[0]), ReadLE32(extra.data())), expected24);
}
if (auto& expected_value{test["expected"]["siphash13uj"]}; !expected_value.isNull()) {
const uint64_t expected13uj{FromHex64(expected_value)};
BOOST_CHECK_EQUAL(CalculateSipHash13UJ(input, k0, k1, /*normal_as_jumbo=*/false), expected13uj);
BOOST_CHECK_EQUAL(CalculateSipHash13UJ(input, k0, k1, /*normal_as_jumbo=*/true), expected13uj);
const SipHasher13UJ fixed_hasher{k0, k1};
if (hash_only) {
BOOST_CHECK_EQUAL(fixed_hasher.Hash(FromHex256(input[0])), expected13uj);
} else if (hash_extra && HasByteLength(input[1], sizeof(uint64_t))) {
const auto extra{ParseHex(input[1].get_str())};
BOOST_CHECK_EQUAL(fixed_hasher.Hash(FromHex256(input[0]), ReadLE64(extra.data())), expected13uj);
}
}
}
}