| 13 | #include <vector> |
| 14 | |
| 15 | FUZZ_TARGET(script_bitcoin_consensus) |
| 16 | { |
| 17 | FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); |
| 18 | const std::vector<uint8_t> random_bytes_1 = ConsumeRandomLengthByteVector(fuzzed_data_provider); |
| 19 | const std::vector<uint8_t> random_bytes_2 = ConsumeRandomLengthByteVector(fuzzed_data_provider); |
| 20 | const uint256 random_hash = ConsumeUInt256(fuzzed_data_provider); |
| 21 | |
| 22 | const std::optional<CConfidentialValue> money = ConsumeDeserializable<CConfidentialValue>(fuzzed_data_provider); |
| 23 | bitcoinconsensus_error err; |
| 24 | bitcoinconsensus_error* err_p = fuzzed_data_provider.ConsumeBool() ? &err : nullptr; |
| 25 | const unsigned int n_in = fuzzed_data_provider.ConsumeIntegral<unsigned int>(); |
| 26 | const unsigned int flags = fuzzed_data_provider.ConsumeIntegral<unsigned int>(); |
| 27 | assert(bitcoinconsensus_version() == BITCOINCONSENSUS_API_VER); |
| 28 | if ((flags & SCRIPT_VERIFY_WITNESS) != 0 && (flags & SCRIPT_VERIFY_P2SH) == 0) { |
| 29 | return; |
| 30 | } |
| 31 | (void)bitcoinconsensus_verify_script(random_hash.begin() ,random_bytes_1.data(), random_bytes_1.size(), random_bytes_2.data(), random_bytes_2.size(), n_in, flags, err_p); |
| 32 | if (money) { |
| 33 | CDataStream data_stream(SER_NETWORK, PROTOCOL_VERSION); |
| 34 | data_stream << *money; |
| 35 | (void)bitcoinconsensus_verify_script_with_amount(random_hash.begin(), random_bytes_1.data(), random_bytes_1.size(), (unsigned char*) data_stream.data(), data_stream.size(), random_bytes_2.data(), random_bytes_2.size(), n_in, flags, err_p); |
| 36 | } |
| 37 | } |
nothing calls this directly
no test coverage detected