Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
test
fuzz
signature_checker.cpp
Go to the documentation of this file.
1
// Copyright (c) 2009-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
pubkey.h
>
6
#include <
script/interpreter.h
>
7
#include <
test/fuzz/FuzzedDataProvider.h
>
8
#include <
test/fuzz/fuzz.h
>
9
#include <
test/fuzz/util.h
>
10
#include <
test/util/script.h
>
11
12
#include <cstdint>
13
#include <limits>
14
#include <string>
15
#include <vector>
16
17
namespace
{
18
class
FuzzedSignatureChecker :
public
BaseSignatureChecker
19
{
20
FuzzedDataProvider& m_fuzzed_data_provider;
21
22
public
:
23
explicit
FuzzedSignatureChecker(FuzzedDataProvider& fuzzed_data_provider) : m_fuzzed_data_provider(fuzzed_data_provider)
24
{
25
}
26
27
bool
CheckECDSASignature(
const
std::vector<unsigned char>& scriptSig,
const
std::vector<unsigned char>& vchPubKey,
const
CScript& scriptCode,
SigVersion
sigversion)
const override
28
{
29
return
m_fuzzed_data_provider.ConsumeBool();
30
}
31
32
bool
CheckSchnorrSignature(std::span<const unsigned char> sig, std::span<const unsigned char> pubkey,
SigVersion
sigversion, ScriptExecutionData& execdata,
ScriptError
* serror =
nullptr
)
const override
33
{
34
return
m_fuzzed_data_provider.ConsumeBool();
35
}
36
37
bool
CheckLockTime(
const
CScriptNum& nLockTime)
const override
38
{
39
return
m_fuzzed_data_provider.ConsumeBool();
40
}
41
42
bool
CheckSequence(
const
CScriptNum& nSequence)
const override
43
{
44
return
m_fuzzed_data_provider.ConsumeBool();
45
}
46
47
virtual
~FuzzedSignatureChecker() =
default
;
48
};
49
}
// namespace
50
51
FUZZ_TARGET
(signature_checker)
52
{
53
FuzzedDataProvider
fuzzed_data_provider(buffer.data(), buffer.size());
54
const
auto
flags
=
script_verify_flags::from_int
(fuzzed_data_provider.
ConsumeIntegral
<
script_verify_flags::value_type
>());
55
const
SigVersion
sig_version = fuzzed_data_provider.
PickValueInArray
({
SigVersion::BASE
,
SigVersion::WITNESS_V0
});
56
const
auto
script_1{
ConsumeScript
(fuzzed_data_provider)};
57
const
auto
script_2{
ConsumeScript
(fuzzed_data_provider)};
58
std::vector<std::vector<unsigned char>> stack;
59
(void)
EvalScript
(stack, script_1,
flags
, FuzzedSignatureChecker(fuzzed_data_provider), sig_version,
nullptr
);
60
if
(!
IsValidFlagCombination
(
flags
)) {
61
return
;
62
}
63
(void)
VerifyScript
(script_1, script_2,
nullptr
,
flags
, FuzzedSignatureChecker(fuzzed_data_provider),
nullptr
);
64
}
FuzzedDataProvider.h
flags
int flags
Definition
bitcoin-tx.cpp:529
BaseSignatureChecker
Definition
interpreter.h:275
FuzzedDataProvider
Definition
FuzzedDataProvider.h:32
FuzzedDataProvider::PickValueInArray
T PickValueInArray(const T(&array)[size])
Definition
FuzzedDataProvider.h:304
FuzzedDataProvider::ConsumeIntegral
T ConsumeIntegral()
Definition
FuzzedDataProvider.h:195
script_verify_flags::value_type
uint64_t value_type
Definition
verify_flags.h:17
script_verify_flags::from_int
static constexpr script_verify_flags from_int(value_type f)
Definition
verify_flags.h:35
fuzz.h
FUZZ_TARGET
#define FUZZ_TARGET(...)
Definition
fuzz.h:35
EvalScript
bool EvalScript(std::vector< std::vector< unsigned char > > &stack, const CScript &script, script_verify_flags flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptExecutionData &execdata, ScriptError *serror)
Definition
interpreter.cpp:407
VerifyScript
bool VerifyScript(const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, script_verify_flags flags, const BaseSignatureChecker &checker, ScriptError *serror)
Definition
interpreter.cpp:2002
interpreter.h
SigVersion
SigVersion
Definition
interpreter.h:201
SigVersion::BASE
@ BASE
Bare scripts and BIP16 P2SH-wrapped redeemscripts.
Definition
interpreter.h:202
SigVersion::WITNESS_V0
@ WITNESS_V0
Witness v0 (P2WPKH and P2WSH); see BIP 141.
Definition
interpreter.h:203
pubkey.h
ScriptError
enum ScriptError_t ScriptError
ConsumeScript
CScript ConsumeScript(FuzzedDataProvider &fuzzed_data_provider, const bool maybe_p2wsh) noexcept
Definition
util.cpp:98
util.h
IsValidFlagCombination
bool IsValidFlagCombination(script_verify_flags flags)
Flags that are not forbidden by an assert in script validation.
Definition
script.cpp:8
script.h
Generated on
for Bitcoin Core by
1.17.0