From 1896a89cac8da9ecce43c89cccef302035b41abd Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Thu, 12 May 2016 16:27:54 -0600 Subject: [PATCH] Add h_sig test vectors. --- src/gtest/test_joinsplit.cpp | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/gtest/test_joinsplit.cpp b/src/gtest/test_joinsplit.cpp index 142916d26..96e887e77 100644 --- a/src/gtest/test_joinsplit.cpp +++ b/src/gtest/test_joinsplit.cpp @@ -2,6 +2,8 @@ #include "utilstrencodings.h" +#include + #include "zcash/prf.h" #include "zcash/JoinSplit.hpp" @@ -152,6 +154,85 @@ void test_full_api(ZCJoinSplit* js) )); } +TEST(joinsplit, h_sig) +{ + auto js = ZCJoinSplit::Unopened(); + +/* +// by Taylor Hornby + +import pyblake2 +import binascii + +def hSig(randomSeed, nf1, nf2, pubKeyHash): + return pyblake2.blake2b( + data=(randomSeed + nf1 + nf2 + pubKeyHash), + digest_size=32, + person=b"ZcashComputehSig" + ).digest() + +INCREASING = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" + +TEST_VECTORS = [ + [b"a" * 32, b"b" * 32, b"c" * 32, b"d" * 32], + [b"\x00" * 32, b"\x00" * 32, b"\x00" * 32, b"\x00" * 32], + [b"\xFF" * 32, b"\xFF" * 32, b"\xFF" * 32, b"\xFF" * 32], + [INCREASING, INCREASING, INCREASING, INCREASING] +] + +for test_input in TEST_VECTORS: + print "---" + print "\"" + binascii.hexlify(test_input[0][::-1]) + "\"" + print "\"" + binascii.hexlify(test_input[1][::-1]) + "\"" + print "\"" + binascii.hexlify(test_input[2][::-1]) + "\"" + print "\"" + binascii.hexlify(test_input[3][::-1]) + "\"" + print "\"" + binascii.hexlify(hSig(test_input[0], test_input[1], test_input[2], test_input[3])[::-1]) + "\"" +*/ + + std::vector> tests = { + { + "6161616161616161616161616161616161616161616161616161616161616161", + "6262626262626262626262626262626262626262626262626262626262626262", + "6363636363636363636363636363636363636363636363636363636363636363", + "6464646464646464646464646464646464646464646464646464646464646464", + "a8cba69f1fa329c055756b4af900f8a00b61e44f4cb8a1824ceb58b90a5b8113" + }, + { + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "697322276b5dd93b12fb1fcbd2144b2960f24c73aac6c6a0811447be1e7f1e19" + }, + { + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "4961048919f0ca79d49c9378c36a91a8767060001f4212fe6f7d426f3ccf9f32" + }, + { + "1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100", + "1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100", + "1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100", + "1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100", + "b61110ec162693bc3d9ca7fb0eec3afd2e278e2f41394b3ff11d7cb761ad4b27" + } + }; + + BOOST_FOREACH(std::vector& v, tests) { + auto expected = js->h_sig( + uint256S(v[0]), + {uint256S(v[1]), uint256S(v[2])}, + uint256S(v[3]) + ); + + EXPECT_EQ(expected, uint256S(v[4])); + } + + delete js; +} + TEST(joinsplit, full_api_test) { auto js = ZCJoinSplit::Generate();