What changed, and why it matters
This commit only adds new test cases and fuzzing coverage for an existing SipHash variant called SipHash-1-3-UJ. It does not change any production code, so it cannot introduce a security vulnerability or fix one. The change makes the software's test suite more thorough by verifying that the existing hash implementation produces expected outputs.
No security action required; this is a test-only change. Reviewers may verify the new test vectors independently if desired.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit extends test vectors in src/test/data/siphash.json with ‘siphash13uj’ expected values, adds a CalculateSipHash13UJ helper and corresponding BOOST_CHECK assertions in src/test/hash_tests.cpp, and adds SipHasher13UJ fuzzing equivalence checks in src/test/fuzz/integer.cpp. No implementation code in src/crypto or elsewhere is modified. The outputs were generated by an independent implementation produced by Claude Opus 4.8 from the SipHasher13UJ class comment.
Changed components
src/test/data/siphash.jsonsrc/test/hash_tests.cppsrc/test/fuzz/integer.cppInspect captured patch +131 / −64
diff --git a/src/test/data/siphash.json b/src/test/data/siphash.json
index 6ea34009..19b4aaad 100644
--- a/src/test/data/siphash.json
+++ b/src/test/data/siphash.json
@@ -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"],
diff --git a/src/test/fuzz/integer.cpp b/src/test/fuzz/integer.cpp
index beaec6f7..357b84e5 100644
--- a/src/test/fuzz/integer.cpp
+++ b/src/test/fuzz/integer.cpp
@@ -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);
{
diff --git a/src/test/hash_tests.cpp b/src/test/hash_tests.cpp
index 1b541939..63ef4f5e 100644
--- a/src/test/hash_tests.cpp
+++ b/src/test/hash_tests.cpp
@@ -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);
+ }
+ }
}
}
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.