diff --git a/src/gtest/test_checktransaction.cpp b/src/gtest/test_checktransaction.cpp index 1ff043cd8..a5afda321 100644 --- a/src/gtest/test_checktransaction.cpp +++ b/src/gtest/test_checktransaction.cpp @@ -10,25 +10,6 @@ //TODO: Update these tests for Sapling /* -TEST(checktransaction_tests, check_vpub_not_both_nonzero) { - CMutableTransaction tx; - tx.nVersion = 2; - - { - // Ensure that values within the joinsplit are well-formed. - CMutableTransaction newTx(tx); - CValidationState state; - - newTx.vjoinsplit.push_back(JSDescription()); - - JSDescription *jsdesc = &newTx.vjoinsplit[0]; - jsdesc->vpub_old = 1; - jsdesc->vpub_new = 1; - - EXPECT_FALSE(CheckTransactionWithoutProofVerification(newTx, state)); - EXPECT_EQ(state.GetRejectReason(), "bad-txns-vpubs-both-nonzero"); - } -} class MockCValidationState : public CValidationState { public: @@ -47,56 +28,6 @@ public: MOCK_CONST_METHOD0(GetRejectReason, std::string()); }; -void CreateJoinSplitSignature(CMutableTransaction& mtx, uint32_t consensusBranchId); - -CMutableTransaction GetValidTransaction() { - uint32_t consensusBranchId = SPROUT_BRANCH_ID; - - CMutableTransaction mtx; - mtx.vin.resize(2); - mtx.vin[0].prevout.hash = uint256S("0000000000000000000000000000000000000000000000000000000000000001"); - mtx.vin[0].prevout.n = 0; - mtx.vin[1].prevout.hash = uint256S("0000000000000000000000000000000000000000000000000000000000000002"); - mtx.vin[1].prevout.n = 0; - mtx.vout.resize(2); - // mtx.vout[0].scriptPubKey = - mtx.vout[0].nValue = 0; - mtx.vout[1].nValue = 0; - mtx.vjoinsplit.resize(2); - mtx.vjoinsplit[0].nullifiers.at(0) = uint256S("0000000000000000000000000000000000000000000000000000000000000000"); - mtx.vjoinsplit[0].nullifiers.at(1) = uint256S("0000000000000000000000000000000000000000000000000000000000000001"); - mtx.vjoinsplit[1].nullifiers.at(0) = uint256S("0000000000000000000000000000000000000000000000000000000000000002"); - mtx.vjoinsplit[1].nullifiers.at(1) = uint256S("0000000000000000000000000000000000000000000000000000000000000003"); - - CreateJoinSplitSignature(mtx, consensusBranchId); - return mtx; -} - -void CreateJoinSplitSignature(CMutableTransaction& mtx, uint32_t consensusBranchId) { - // Generate an ephemeral keypair. - uint256 joinSplitPubKey; - unsigned char joinSplitPrivKey[crypto_sign_SECRETKEYBYTES]; - crypto_sign_keypair(joinSplitPubKey.begin(), joinSplitPrivKey); - mtx.joinSplitPubKey = joinSplitPubKey; - - // Compute the correct hSig. - // TODO: #966. - static const uint256 one(uint256S("0000000000000000000000000000000000000000000000000000000000000001")); - // Empty output script. - CScript scriptCode; - CTransaction signTx(mtx); - uint256 dataToBeSigned = SignatureHash(scriptCode, signTx, NOT_AN_INPUT, SIGHASH_ALL, 0, consensusBranchId); - if (dataToBeSigned == one) { - throw std::runtime_error("SignatureHash failed"); - } - - // Add the signature - assert(crypto_sign_detached(&mtx.joinSplitSig[0], NULL, - dataToBeSigned.begin(), 32, - joinSplitPrivKey - ) == 0); -} - TEST(checktransaction_tests, valid_transaction) { CMutableTransaction mtx = GetValidTransaction(); CTransaction tx(mtx); @@ -515,42 +446,6 @@ TEST(checktransaction_tests, bad_txns_invalid_joinsplit_signature) { ContextualCheckTransaction(0,tx, state, 0, 100, []() { return false; }); } -TEST(checktransaction_tests, non_canonical_ed25519_signature) { - SelectParams(CBaseChainParams::REGTEST); - - CMutableTransaction mtx = GetValidTransaction(); - - // Check that the signature is valid before we add L - { - CTransaction tx(mtx); - MockCValidationState state; - EXPECT_TRUE(ContextualCheckTransaction(0,tx, state, 0, 100)); - } - - // Copied from libsodium/crypto_sign/ed25519/ref10/open.c - static const unsigned char L[32] = - { 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, - 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 }; - - // Add L to S, which starts at mtx.joinSplitSig[32]. - unsigned int s = 0; - for (size_t i = 0; i < 32; i++) { - s = mtx.joinSplitSig[32 + i] + L[i] + (s >> 8); - mtx.joinSplitSig[32 + i] = s & 0xff; - } - - CTransaction tx(mtx); - - MockCValidationState state; - // during initial block download, DoS ban score should be zero, else 100 - EXPECT_CALL(state, DoS(0, false, REJECT_INVALID, "bad-txns-invalid-joinsplit-signature", false)).Times(1); - ContextualCheckTransaction(0,tx, state, 0, 100, []() { return true; }); - EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-txns-invalid-joinsplit-signature", false)).Times(1); - ContextualCheckTransaction(0,tx, state, 0, 100, []() { return false; }); -} - TEST(checktransaction_tests, OverwinterConstructors) { CMutableTransaction mtx; mtx.fOverwintered = true;