From 08010b821fe272c8828a7577ba35297bab019d30 Mon Sep 17 00:00:00 2001 From: James Dorfman Date: Thu, 9 Nov 2023 06:31:49 +0000 Subject: [PATCH] test: fix failing schnorr sig creation in bip341_keypath_test_vectors --- src/test/script_tests.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index a80e8a98f7..ee8d972b0e 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -33,6 +33,8 @@ #include +using namespace std; + // Uncomment if you want to output updated JSON tests. // #define UPDATE_JSON_TESTS @@ -1756,6 +1758,7 @@ BOOST_AUTO_TEST_CASE(script_assets_test) file.close(); } +// ELEMENTS: TODO: Some of these test vectors need updating BOOST_AUTO_TEST_CASE(bip341_keypath_test_vectors) { UniValue tests; @@ -1777,9 +1780,14 @@ BOOST_AUTO_TEST_CASE(bip341_keypath_test_vectors) PrecomputedTransactionData txdata; txdata.Init(tx, std::vector{utxos}, true); + // ELEMENTS: add a txout witness for each output + for (u_int i = 0; i < (u_int)utxos.size(); i++) { + tx.witness.vtxoutwit.emplace_back(CTxOutWitness()); + } BOOST_CHECK(txdata.m_bip341_taproot_ready); - // BOOST_CHECK_EQUAL(HexStr(txdata.m_spent_amounts_single_hash), vec["intermediary"]["hashAmounts"].get_str()); + // ELEMENTS: FIXME + //BOOST_CHECK_EQUAL(HexStr(txdata.m_spent_amounts_single_hash), vec["intermediary"]["hashAmounts"].get_str()); BOOST_CHECK_EQUAL(HexStr(txdata.m_outputs_single_hash), vec["intermediary"]["hashOutputs"].get_str()); BOOST_CHECK_EQUAL(HexStr(txdata.m_prevouts_single_hash), vec["intermediary"]["hashPrevouts"].get_str()); BOOST_CHECK_EQUAL(HexStr(txdata.m_spent_scripts_single_hash), vec["intermediary"]["hashScriptPubkeys"].get_str()); @@ -1809,22 +1817,24 @@ BOOST_AUTO_TEST_CASE(bip341_keypath_test_vectors) provider.keys[key.GetPubKey().GetID()] = key; MutableTransactionSignatureCreator creator(&tx, txinpos, utxos[txinpos].nValue, &txdata, hashtype); std::vector signature; + BOOST_CHECK(creator.CreateSchnorrSig(provider, signature, pubkey, nullptr, &merkle_root, SigVersion::TAPROOT)); // ELEMENTS: FIXME - // BOOST_CHECK(creator.CreateSchnorrSig(provider, signature, pubkey, nullptr, &merkle_root, SigVersion::TAPROOT)); - // BOOST_CHECK_EQUAL(HexStr(signature), input["expected"]["witness"][0].get_str()); + //BOOST_CHECK_EQUAL(HexStr(signature), input["expected"]["witness"][0].get_str()); // We can't observe the tweak used inside the signing logic, so verify by recomputing it. - // BOOST_CHECK_EQUAL(HexStr(pubkey.ComputeTapTweakHash(merkle_root.IsNull() ? nullptr : &merkle_root)), input["intermediary"]["tweak"].get_str()); + // ELEMENTS: FIXME + //BOOST_CHECK_EQUAL(HexStr(pubkey.ComputeTapTweakHash(merkle_root.IsNull() ? nullptr : &merkle_root)), input["intermediary"]["tweak"].get_str()); // We can't observe the sighash used inside the signing logic, so verify by recomputing it. ScriptExecutionData sed; sed.m_annex_init = true; sed.m_annex_present = false; - // uint256 sighash; - // BOOST_CHECK(SignatureHashSchnorr(sighash, sed, tx, txinpos, hashtype, SigVersion::TAPROOT, txdata, MissingDataBehavior::FAIL)); + uint256 sighash; + BOOST_CHECK(SignatureHashSchnorr(sighash, sed, tx, txinpos, hashtype, SigVersion::TAPROOT, txdata, MissingDataBehavior::FAIL)); // BOOST_CHECK_EQUAL(HexStr(sighash), input["intermediary"]["sigHash"].get_str()); // To verify the sigmsg, hash the expected sigmsg, and compare it with the (expected) sighash. + // ELEMENTS: FIXME //BOOST_CHECK_EQUAL(HexStr((CHashWriter(HASHER_TAPSIGHASH_ELEMENTS) << Span{ParseHex(input["intermediary"]["sigMsg"].get_str())}).GetSHA256()), input["intermediary"]["sigHash"].get_str()); }