What changed, and why it matters
This commit only adds new test data and test code for the SipHash hashing function used in Bitcoin Core. It does not change any production code that handles transactions, networking, or wallets. The goal is to make sure the existing SipHash implementation behaves correctly and stays correct during future cleanups.
No security action needed. This is a test-only change that improves regression coverage for SipHash behavior.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit introduces a shared JSON test vector file (src/test/data/siphash.json) containing official SipHash-2-4 vectors plus block-partition and empty-block cases. It wires the vectors into the C++ unit tests (hash_tests.cpp), the fuzz target (integer.cpp), and the Python functional-test framework (test_framework/crypto/siphash.py). The C++ tests compare CSipHasher and PresaltedSipHasher outputs against the vectors. No production hashing logic is modified.
Changed components
src/test/hash_tests.cppsrc/test/fuzz/integer.cppsrc/test/data/siphash.jsontest/functional/test_framework/crypto/siphash.pytest/functional/feature_framework_unit_tests.pysrc/test/CMakeLists.txttest/CMakeLists.txtInspect captured patch +797 / −23
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index b5a12f72..c9b6de0b 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -149,6 +149,7 @@ target_json_data_sources(test_bitcoin
data/key_io_valid.json
data/script_tests.json
data/sighash.json
+ data/siphash.json
data/tx_invalid.json
data/tx_valid.json
)
diff --git a/src/test/data/siphash.json b/src/test/data/siphash.json
new file mode 100644
index 00000000..6ea34009
--- /dev/null
+++ b/src/test/data/siphash.json
@@ -0,0 +1,732 @@
+[
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": [],
+ "expected": {"siphash24": "1e924b9d737700d7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": [],
+ "expected": {"siphash24": "726fdb47dd0e0e31"}
+ },
+ {
+ "key": ["ffffffffffffffff", "ffffffffffffffff"],
+ "input": [],
+ "expected": {"siphash24": "35dd279ee86ce565"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000000"],
+ "expected": {"siphash24": "39d3851ca07681a7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["ffffffffffffffff"],
+ "expected": {"siphash24": "2a68ff30a3d9da34"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304050607"],
+ "expected": {"siphash24": "93f5f5799a932462"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["0000000000000000"],
+ "expected": {"siphash24": "e849e8bb6ffe2567"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000000000000000000000000000000000000000000000000000000"],
+ "expected": {"siphash24": "8990d3e4299496f4"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],
+ "expected": {"siphash24": "e1041d47f898e431"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],
+ "expected": {"siphash24": "7127512f72f27cce"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["0000000000000000000000000000000000000000000000000000000000000000"],
+ "expected": {"siphash24": "6c37e103dfa2827d"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["1011121314151617"],
+ "expected": {"siphash24": "76b71a8cb872b528"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["1011121314151617000000000000000000000000000000000000000000000000"],
+ "expected": {"siphash24": "070fb8d2b4264e7e"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0102030405060708", "0203040506070809", "030405060708090a"],
+ "expected": {"siphash24": "9b3c1cee5de9caa4"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0102030405060708000000000000000000000000000000000000000000000000", "0203040506070809000000000000000000000000000000000000000000000000", "030405060708090a000000000000000000000000000000000000000000000000"],
+ "expected": {"siphash24": "e9277fda84de2f84"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f"],
+ "expected": {"siphash24": "27bd5ecb84e56c87"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["4041424344454647", "48494a4b4c4d4e4f", "5051525354555657", "58595a5b5c5d5e5f"],
+ "expected": {"siphash24": "27bd5ecb84e56c87"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304050607", "08090a0b0c0d0e0f"],
+ "expected": {"siphash24": "3f2acc7f57c29bdb"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304050607", "08090a0b0c0d0e0f", "1011121314151617", "18191a1b1c1d1e1f"],
+ "expected": {"siphash24": "7127512f72f27cce"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304050607", "08090a0b0c0d0e0f", "1011121314151617", "18191a1b1c1d1e1f", "2021222324252627", "28292a2b2c2d2e2f", "3031323334353637", "38393a3b3c3d3e3f"],
+ "expected": {"siphash24": "acd2c40b8502cad8"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000"],
+ "expected": {"siphash24": "d6d266a868d1e17c"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"],
+ "expected": {"siphash24": "acd2c40b8502cad8"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f"],
+ "expected": {"siphash24": "deb79e256c8736ae"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f", "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", "a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf", "c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf", "e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"],
+ "expected": {"siphash24": "999d0526d2a7bfd7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["1112131415161718", "22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041"],
+ "expected": {"siphash24": "2a8b45c236d6964c"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041", "1112131415161718"],
+ "expected": {"siphash24": "2086c12dd61e796a"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["a0a1a2a3a4a5a6a7", "b0b1b2b3b4b5b6b7"],
+ "expected": {"siphash24": "103eacf2c5a3c798"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["b0b1b2b3b4b5b6b7", "a0a1a2a3a4a5a6a7"],
+ "expected": {"siphash24": "16098ab961ca74be"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0102030405060708", "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021", "030405060708090a"],
+ "expected": {"siphash24": "f33f8a1ac89a38a5"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20", "0203040506070809", "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122"],
+ "expected": {"siphash24": "83a7e7cb48fcc3f0"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0101010101010101", "0202020202020202", "0303030303030303030303030303030303030303030303030303030303030303", "0404040404040404040404040404040404040404040404040404040404040404", "0505050505050505"],
+ "expected": {"siphash24": "2da632417cf98266"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304050607", "08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627", "28292a2b2c2d2e2f", "303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f", "5051525354555657", "58595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677"],
+ "expected": {"siphash24": "9fee744ff1c22fcc"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
+ "expected": {"siphash24": "f4b057ed3852ca9c"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
+ "expected": {"siphash24": "b0ecaab557894381"}
+ },
+ {
+ "key": ["ffffffffffffffff", "ffffffffffffffff"],
+ "input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
+ "expected": {"siphash24": "c31e72088331c72c"}
+ },
+ {
+ "key": ["0123456789abcdef", "0000000000000000"],
+ "input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
+ "expected": {"siphash24": "f74571f90abc512c"}
+ },
+ {
+ "key": ["0000000000000000", "0123456789abcdef"],
+ "input": ["3031323334353637", "505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f"],
+ "expected": {"siphash24": "4b58713a5c1de640"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0100000000000000"],
+ "expected": {"siphash24": "2b91b2b085e6d1f6"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000080"],
+ "expected": {"siphash24": "45f93120d11c42c2"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000000000000000000000000000000000000000000000000000080"],
+ "expected": {"siphash24": "52de95ec1fc46cf4"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0100000000000000010000000000000001000000000000000100000000000000"],
+ "expected": {"siphash24": "256fc49da00e8ae9"}
+ },
+ {
+ "key": ["3becfe231ec833e1", "e5fe84a1124e5b76"],
+ "input": ["5d6fae7bea1143a44b6a307d8dd3a8d5946d1b50943a0a4edb5390d7f41c6e29", "d22ee74ea5bb4d8d", "8032bbb059b1b9ef", "ec2ae4550dad3c60"],
+ "expected": {"siphash24": "2f57b02b4a7cf7d6"}
+ },
+ {
+ "key": ["cff49392d5b0aefe", "b8a0d7022086fc70"],
+ "input": [],
+ "expected": {"siphash24": "9c7123b7b45d0895"}
+ },
+ {
+ "key": ["9bf012bb0d65f966", "f15a2c8514da1d9d"],
+ "input": [],
+ "expected": {"siphash24": "a5c78c807512368a"}
+ },
+ {
+ "key": ["4ac23ef0d1555a54", "4a498a3964dd2bc1"],
+ "input": ["3e83c8e8b335d732", "539aea9c7872ae8f", "6f14ac803d3a9181"],
+ "expected": {"siphash24": "be7ea59e0e60a59d"}
+ },
+ {
+ "key": ["eef84fb309e552b9", "e60195c78faa2ee8"],
+ "input": [],
+ "expected": {"siphash24": "001e0c1c4140f9ec"}
+ },
+ {
+ "key": ["ecfdd5a1ea62a991", "6448b8f842081342"],
+ "input": ["6d72f7bce2f0f751", "e277849660a8af7f"],
+ "expected": {"siphash24": "3bc824e8141dcdd9"}
+ },
+ {
+ "key": ["ab7a12b9c8774c7d", "38056b7041eb2098"],
+ "input": ["feebaa5f18a92c7e", "192679c9e82e3aa7"],
+ "expected": {"siphash24": "783219f01bb9d829"}
+ },
+ {
+ "key": ["13551d7a6089e83e", "ec3f8c0f4cbc1f7c"],
+ "input": ["7a0704789365d997", "4bb21a07f4b75d0208d5d4638edcc438c9f8ffcc78e2106a0637c629f81ffbdb", "a7d8197a04173065ec896b73a6803d6113201c56fd643b241200b7ea357e6efd", "0202e1ebcf15e1a8", "316c96f5464fa473", "0700f913bbe4dad357c5db1b7e79abd29e6e590e842141a16cb6e97e6933206c"],
+ "expected": {"siphash24": "30cca0cb21a31ffe"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f"],
+ "expected": {"siphash24": "1ca45bed0c8a9300"}
+ },
+ {
+ "key": ["ffffffffffffffff", "ffffffffffffffff"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f"],
+ "expected": {"siphash24": "acb2f25002d4ece5"}
+ },
+ {
+ "key": ["25fd75c04a240044", "4e3816151d29e2ce"],
+ "input": ["8940d79240a5bf8acdf428eece829dc27d8cc2ff7b74aaeb134f66062192d308"],
+ "expected": {"siphash24": "135eaef5f79941ad"}
+ },
+ {
+ "key": ["aea4345a0fc4e761", "49456a8e8d82e5ee"],
+ "input": ["6e0e507f21292ad46a49aa0b20efec23000474f6203f5ceaf4f9325c4e032bbe"],
+ "expected": {"siphash24": "56e57b1e7d81c846"}
+ },
+ {
+ "key": ["f7ce16edcfe54eeb", "81c22c4aed3e516d"],
+ "input": ["caf32c2d8d827c8e55ee92253cffc657359af1cab7f24804afabac89a436fc75"],
+ "expected": {"siphash24": "84cad9f91acd36d0"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041", "11121314"],
+ "expected": {"siphash24": "6ff1e744e4b586fc"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000000000000000000000000000000000000000000000000000000", "00000000"],
+ "expected": {"siphash24": "115c6b8926ef399f"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffff"],
+ "expected": {"siphash24": "0b2ebbee73a3d1ed"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "40414243"],
+ "expected": {"siphash24": "65f756d1213070be"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0100000000000000000000000000000000000000000000000000000000000000", "00000000"],
+ "expected": {"siphash24": "12691f997c461ea1"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "20212223"],
+ "expected": {"siphash24": "c1164a11849da500"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "21222324"],
+ "expected": {"siphash24": "0efac191c5ac8cff"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "20212223"],
+ "expected": {"siphash24": "fb3489181e5cf821"}
+ },
+ {
+ "key": ["49b001bc5a213d62", "80a330a42e60a89d"],
+ "input": ["6f7438d2dd360dcea691dd40e87426f4af6870315898ccbde0d3b19fcbb5ae6d", "55c36c12"],
+ "expected": {"siphash24": "fe9e704f0f707a09"}
+ },
+ {
+ "key": ["f4d704fa00ce074d", "6f1a65f3fe494b0a"],
+ "input": ["175202cb9f976ebd6c4ddc4a80d63b2b53e2976466041ae43b41397c41fe66ac", "803a0172"],
+ "expected": {"siphash24": "42861dd0d0b147c5"}
+ },
+ {
+ "key": ["c3f929b4cb53785c", "1693fa676a8ee165"],
+ "input": ["2ac097c589bc75eb6e294605cafb3198891ff93764032225756aab86de06514b", "5c642eed"],
+ "expected": {"siphash24": "f4c119ec8022dc9f"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000"],
+ "expected": {"siphash24": "9aef4ef6217cbc9b"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffff"],
+ "expected": {"siphash24": "ccf329a45ab38059"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "4041424344454647"],
+ "expected": {"siphash24": "50a2be7f0f871937"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0100000000000000000000000000000000000000000000000000000000000000", "0000000000000080"],
+ "expected": {"siphash24": "5c7d5fcb5ea2a305"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "2021222324252627"],
+ "expected": {"siphash24": "ac705932e98104a4"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "2122232425262728"],
+ "expected": {"siphash24": "7cbaa4ae7acddb81"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "2021222324252627"],
+ "expected": {"siphash24": "22cfffe8bffea59f"}
+ },
+ {
+ "key": ["49b001bc5a213d62", "80a330a42e60a89d"],
+ "input": ["6f7438d2dd360dcea691dd40e87426f4af6870315898ccbde0d3b19fcbb5ae6d", "55c36c12f25fffc9"],
+ "expected": {"siphash24": "9a5250a51a9eebfb"}
+ },
+ {
+ "key": ["f4d704fa00ce074d", "6f1a65f3fe494b0a"],
+ "input": ["175202cb9f976ebd6c4ddc4a80d63b2b53e2976466041ae43b41397c41fe66ac", "803a01720ad0c5a9"],
+ "expected": {"siphash24": "70552fcc39899ae4"}
+ },
+ {
+ "key": ["c3f929b4cb53785c", "1693fa676a8ee165"],
+ "input": ["2ac097c589bc75eb6e294605cafb3198891ff93764032225756aab86de06514b", "5c642eedd61df985"],
+ "expected": {"siphash24": "7b87d628efb69dd7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": [""],
+ "expected": {"siphash24": "726fdb47dd0e0e31"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["00"],
+ "expected": {"siphash24": "74f839c593dc67fd"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001"],
+ "expected": {"siphash24": "0d6c8009d9a94f5a"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102"],
+ "expected": {"siphash24": "85676696d7fb7e2d"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["00010203"],
+ "expected": {"siphash24": "cf2794e0277187b7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304"],
+ "expected": {"siphash24": "18765564cd99a68d"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405"],
+ "expected": {"siphash24": "cbc9466e58fee3ce"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["00010203040506"],
+ "expected": {"siphash24": "ab0200f58b01d137"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708"],
+ "expected": {"siphash24": "9e0082df0ba9e4b0"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["00010203040506070809"],
+ "expected": {"siphash24": "7a5dbbc594ddb9f3"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a"],
+ "expected": {"siphash24": "f4b32f46226bada7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b"],
+ "expected": {"siphash24": "751e8fbc860ee5fb"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c"],
+ "expected": {"siphash24": "14ea5627c0843d90"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d"],
+ "expected": {"siphash24": "f723ca908e7af2ee"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e"],
+ "expected": {"siphash24": "a129ca6149be45e5"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f"],
+ "expected": {"siphash24": "3f2acc7f57c29bdb"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f10"],
+ "expected": {"siphash24": "699ae9f52cbe4794"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f1011"],
+ "expected": {"siphash24": "4bc1b3f0968dd39c"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112"],
+ "expected": {"siphash24": "bb6dc91da77961bd"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f10111213"],
+ "expected": {"siphash24": "bed65cf21aa2ee98"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f1011121314"],
+ "expected": {"siphash24": "d0f2cbb02e3b67c7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415"],
+ "expected": {"siphash24": "93536795e3a33e88"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f10111213141516"],
+ "expected": {"siphash24": "a80c038ccd5ccec8"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f1011121314151617"],
+ "expected": {"siphash24": "b8ad50c6f649af94"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718"],
+ "expected": {"siphash24": "bce192de8a85b8ea"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f10111213141516171819"],
+ "expected": {"siphash24": "17d835b85bbb15f3"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a"],
+ "expected": {"siphash24": "2f2e6163076bcfad"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b"],
+ "expected": {"siphash24": "de4daaaca71dc9a5"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c"],
+ "expected": {"siphash24": "a6a2506687956571"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d"],
+ "expected": {"siphash24": "ad87a3535c49ef28"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e"],
+ "expected": {"siphash24": "32d892fad841c342"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20"],
+ "expected": {"siphash24": "a7f32346f95978e3"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"],
+ "expected": {"siphash24": "12e0b01abb051238"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122"],
+ "expected": {"siphash24": "15e034d40fa197ae"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223"],
+ "expected": {"siphash24": "314dffbe0815a3b4"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324"],
+ "expected": {"siphash24": "027990f029623981"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425"],
+ "expected": {"siphash24": "cadcd4e59ef40c4d"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526"],
+ "expected": {"siphash24": "9abfd8766a33735c"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627"],
+ "expected": {"siphash24": "0e3ea96b5304a7d0"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728"],
+ "expected": {"siphash24": "ad0c42d6fc585992"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829"],
+ "expected": {"siphash24": "187306c89bc215a9"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a"],
+ "expected": {"siphash24": "d4a60abcf3792b95"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b"],
+ "expected": {"siphash24": "f935451de4f21df2"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c"],
+ "expected": {"siphash24": "a9538f0419755787"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d"],
+ "expected": {"siphash24": "db9acddff56ca510"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e"],
+ "expected": {"siphash24": "d06c98cd5c0975eb"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f"],
+ "expected": {"siphash24": "e612a3cb9ecba951"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30"],
+ "expected": {"siphash24": "c766e62cfcadaf96"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031"],
+ "expected": {"siphash24": "ee64435a9752fe72"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132"],
+ "expected": {"siphash24": "a192d576b245165a"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233"],
+ "expected": {"siphash24": "0a8787bf8ecb74b2"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334"],
+ "expected": {"siphash24": "81b3e73d20b49b6f"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435"],
+ "expected": {"siphash24": "7fa8220ba3b2ecea"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536"],
+ "expected": {"siphash24": "245731c13ca42499"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637"],
+ "expected": {"siphash24": "b78dbfaf3a8d83bd"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738"],
+ "expected": {"siphash24": "ea1ad565322a1a0b"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839"],
+ "expected": {"siphash24": "60e61c23a3795013"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a"],
+ "expected": {"siphash24": "6606d7e446282b93"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b"],
+ "expected": {"siphash24": "6ca4ecb15c5f91e1"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c"],
+ "expected": {"siphash24": "9f626da15c9625f3"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d"],
+ "expected": {"siphash24": "e51b38608ef25f57"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e"],
+ "expected": {"siphash24": "958a324ceb064572"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["", ""],
+ "expected": {"siphash24": "726fdb47dd0e0e31"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["", "00010203"],
+ "expected": {"siphash24": "cf2794e0277187b7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["00010203", ""],
+ "expected": {"siphash24": "cf2794e0277187b7"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["0001020304050607", ""],
+ "expected": {"siphash24": "93f5f5799a932462"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102", "030405"],
+ "expected": {"siphash24": "cbc9466e58fee3ce"}
+ },
+ {
+ "key": ["0000000000000000", "0000000000000000"],
+ "input": ["0001020304", "0506070809"],
+ "expected": {"siphash24": "789ad31dad123412"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["000102030405060708090a0b0c0d0e0f", "ff"],
+ "expected": {"siphash24": "de12af186282e681"}
+ },
+ {
+ "key": ["ffffffffffffffff", "ffffffffffffffff"],
+ "input": ["000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", ""],
+ "expected": {"siphash24": "5b57d1f2ce33f816"}
+ },
+ {
+ "key": ["0706050403020100", "0f0e0d0c0b0a0908"],
+ "input": ["00", "01", "02", "03", "04"],
+ "expected": {"siphash24": "18765564cd99a68d"}
+ }
+]
diff --git a/src/test/fuzz/integer.cpp b/src/test/fuzz/integer.cpp
index a1cd18bf..beaec6f7 100644
--- a/src/test/fuzz/integer.cpp
+++ b/src/test/fuzz/integer.cpp
@@ -67,6 +67,7 @@ FUZZ_TARGET(integer, .init = initialize_integer)
// ConsumeIntegral<char>() instead of casting from {u,}int8_t.
const char ch = fuzzed_data_provider.ConsumeIntegral<char>();
const bool b = fuzzed_data_provider.ConsumeBool();
+ const uint64_t u64_2{fuzzed_data_provider.ConsumeIntegral<uint64_t>()};
const Consensus::Params& consensus_params = Params().GetConsensus();
(void)CheckProofOfWorkImpl(u256, u32, consensus_params);
@@ -118,8 +119,16 @@ FUZZ_TARGET(integer, .init = initialize_integer)
}
(void)MillisToTimeval(i64);
(void)SighashToStr(uch);
- (void)PresaltedSipHasher(u64, u64)(u256);
- (void)PresaltedSipHasher(u64, u64)(u256, u32);
+ {
+ CSipHasher hasher{u64, u64_2};
+ const PresaltedSipHasher presalted_hasher{u64, u64_2};
+ hasher.Write(u256);
+ assert(presalted_hasher(u256) == hasher.Finalize());
+ uint8_t extra[4]{};
+ WriteLE32(extra, u32);
+ hasher.Write(extra);
+ assert(presalted_hasher(u256, u32) == hasher.Finalize());
+ }
(void)ToLower(ch);
(void)ToUpper(ch);
{
diff --git a/src/test/hash_tests.cpp b/src/test/hash_tests.cpp
index a5059a8f..1b541939 100644
--- a/src/test/hash_tests.cpp
+++ b/src/test/hash_tests.cpp
@@ -2,17 +2,34 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-#include <clientversion.h>
+#include <crypto/common.h>
#include <crypto/siphash.h>
#include <hash.h>
-#include <test/util/random.h>
+#include <test/data/siphash.json.h>
+#include <test/util/json.h>
#include <test/util/setup_common.h>
+#include <uint256.h>
#include <util/strencodings.h>
#include <boost/test/unit_test.hpp>
BOOST_FIXTURE_TEST_SUITE(hash_tests, BasicTestingSetup)
+static uint64_t FromHex64(const UniValue& value) { return ToIntegral<uint64_t>(value.get_str(), /*base=*/16).value(); }
+static uint256 FromHex256(const UniValue& value) { return uint256{ParseHex(value.get_str())}; }
+static bool HasByteLength(const UniValue& value, size_t length) { return value.get_str().size() == 2 * length; }
+
+static uint64_t CalculateSipHash24(const UniValue& input, uint64_t k0, uint64_t k1)
+{
+ CSipHasher hasher{k0, k1};
+ for (auto& block : input.getValues()) {
+ hasher.Write(ParseHex(block.get_str()));
+ }
+ const uint64_t result{hasher.Finalize()};
+ BOOST_CHECK_EQUAL(hasher.Finalize(), result);
+ return result;
+}
+
BOOST_AUTO_TEST_CASE(murmurhash3)
{
@@ -104,8 +121,6 @@ BOOST_AUTO_TEST_CASE(siphash)
hasher.Write(0x2F2E2D2C2B2A2928ULL);
BOOST_CHECK_EQUAL(hasher.Finalize(), 0xe612a3cb9ecba951ull);
- BOOST_CHECK_EQUAL(PresaltedSipHasher(0x0706050403020100ULL, 0x0F0E0D0C0B0A0908ULL)(uint256{"1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100"}), 0x7127512f72f27cceull);
-
// Check test vectors from spec, one byte at a time
CSipHasher hasher2(0x0706050403020100ULL, 0x0F0E0D0C0B0A0908ULL);
for (uint8_t x=0; x<std::size(siphash_4_2_testvec); ++x)
@@ -129,24 +144,24 @@ BOOST_AUTO_TEST_CASE(siphash)
tx.version = 1;
ss << TX_WITH_WITNESS(tx);
BOOST_CHECK_EQUAL(PresaltedSipHasher(1, 2)(ss.GetHash()), 0x79751e980c2a0a35ULL);
+}
- // Check consistency between CSipHasher and PresaltedSipHasher.
- FastRandomContext ctx;
- for (int i = 0; i < 16; ++i) {
- uint64_t k0 = ctx.rand64();
- uint64_t k1 = ctx.rand64();
- uint256 x = m_rng.rand256();
-
- CSipHasher sip256(k0, k1);
- sip256.Write(x);
- BOOST_CHECK_EQUAL(PresaltedSipHasher(k0, k1)(x), sip256.Finalize());
-
- CSipHasher sip288 = sip256;
- uint32_t n = ctx.rand32();
- uint8_t nb[4];
- WriteLE32(nb, n);
- sip288.Write(nb);
- BOOST_CHECK_EQUAL(PresaltedSipHasher(k0, k1)(x, n), sip288.Finalize());
+BOOST_AUTO_TEST_CASE(siphash_test_vectors)
+{
+ for (UniValue tests{read_json(json_tests::siphash)}; auto& test : tests.getValues()) {
+ const uint64_t k0{FromHex64(test["key"][0])}, k1{FromHex64(test["key"][1])};
+ auto& input{test["input"]};
+ const bool starts_with_hash{!input.empty() && HasByteLength(input[0], uint256::size())};
+ const bool hash_only{starts_with_hash && input.size() == 1};
+ const bool hash_extra{starts_with_hash && input.size() == 2};
+ const uint64_t expected24{FromHex64(test["expected"]["siphash24"])};
+ BOOST_CHECK_EQUAL(CalculateSipHash24(input, k0, k1), expected24);
+ if (hash_only) {
+ BOOST_CHECK_EQUAL(PresaltedSipHasher(k0, k1)(FromHex256(input[0])), expected24);
+ } else if (hash_extra && HasByteLength(input[1], sizeof(uint32_t))) {
+ const auto extra{ParseHex(input[1].get_str())};
+ BOOST_CHECK_EQUAL(PresaltedSipHasher(k0, k1)(FromHex256(input[0]), ReadLE32(extra.data())), expected24);
+ }
}
}
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index eac3ec59..a3bf911c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -94,6 +94,8 @@ function(create_test_directory_links)
endif()
file(CREATE_LINK ${CMAKE_CURRENT_SOURCE_DIR}/${f} ${CMAKE_CURRENT_BINARY_DIR}/${f} COPY_ON_ERROR ${symlink})
endforeach()
+
+ configure_file(${PROJECT_SOURCE_DIR}/src/test/data/siphash.json ${PROJECT_BINARY_DIR}/src/test/data/siphash.json COPYONLY)
endfunction()
create_test_directory_links()
diff --git a/test/functional/feature_framework_unit_tests.py b/test/functional/feature_framework_unit_tests.py
index 6b38b402..7da6fb53 100755
--- a/test/functional/feature_framework_unit_tests.py
+++ b/test/functional/feature_framework_unit_tests.py
@@ -28,6 +28,7 @@ TEST_FRAMEWORK_MODULES = [
"crypto.poly1305",
"crypto.ripemd160",
"crypto.secp256k1",
+ "crypto.siphash",
"script",
"script_util",
"segwit_addr",
diff --git a/test/functional/test_framework/crypto/siphash.py b/test/functional/test_framework/crypto/siphash.py
index f89a7ce9..a7390f34 100644
--- a/test/functional/test_framework/crypto/siphash.py
+++ b/test/functional/test_framework/crypto/siphash.py
@@ -8,6 +8,11 @@ This implements SipHash-2-4. For convenience, an interface taking 256-bit
integers is provided in addition to the one accepting generic data.
"""
+import json
+from pathlib import Path
+import unittest
+
+
def rotl64(n, b):
return n >> (64 - b) | (n & ((1 << (64 - b)) - 1)) << b
@@ -63,3 +68,12 @@ def siphash(k0, k1, data):
def siphash256(k0, k1, num):
assert type(num) is int
return siphash(k0, k1, num.to_bytes(32, 'little'))
+
+
+class TestFrameworkSipHash(unittest.TestCase):
+ def test_vectors(self):
+ with (Path(__file__).parents[4] / "src/test/data/siphash.json").open() as vectors_file:
+ for test in json.load(vectors_file):
+ k0, k1 = (int(key, 16) for key in test["key"])
+ data = b"".join(bytes.fromhex(block) for block in test["input"])
+ self.assertEqual(siphash(k0, k1, data), int(test["expected"]["siphash24"], 16))
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.