diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index b5a12f7277d..c9b6de0baca 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 00000000000..6ea340096a6 --- /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 a1cd18bf7bc..beaec6f73dd 100644 --- a/src/test/fuzz/integer.cpp +++ b/src/test/fuzz/integer.cpp @@ -67,6 +67,7 @@ FUZZ_TARGET(integer, .init = initialize_integer) // ConsumeIntegral() instead of casting from {u,}int8_t. const char ch = fuzzed_data_provider.ConsumeIntegral(); const bool b = fuzzed_data_provider.ConsumeBool(); + const uint64_t u64_2{fuzzed_data_provider.ConsumeIntegral()}; 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 a5059a8fe8c..1b5419390a4 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 +#include #include #include -#include +#include +#include #include +#include #include #include BOOST_FIXTURE_TEST_SUITE(hash_tests, BasicTestingSetup) +static uint64_t FromHex64(const UniValue& value) { return ToIntegral(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> (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))