Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Add macro definition for fuzzers
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Fix FuzzedDataProvider header missing problem
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Add README
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Provide static FuzzedDataProvider.h
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Update and enhance fuzzer
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Activate UBSan
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Fix fuzz target retrieval
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Remove bias selector and fix protocol lifespan
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Drop SIGALARM handling and fix bug on selectors
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Fix rpc request changes
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Add a new fuzzer profile that catch all expcetions
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Fix typo
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Add warning
Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
Add monero_add_minimal_executable and use in tests
This is done in order not to have to relink targets, when just an .so changed, but not its interface.
The basic approach it to delegate all sensitive data (master key, secret
ephemeral key, key derivation, ....) and related operations to the device.
As device has low memory, it does not keep itself the values
(except for view/spend keys) but once computed there are encrypted (with AES
are equivalent) and return back to monero-wallet-cli. When they need to be
manipulated by the device, they are decrypted on receive.
Moreover, using the client for storing the value in encrypted form limits
the modification in the client code. Those values are transfered from one
C-structure to another one as previously.
The code modification has been done with the wishes to be open to any
other hardware wallet. To achieve that a C++ class hw::Device has been
introduced. Two initial implementations are provided: the "default", which
remaps all calls to initial Monero code, and the "Ledger", which delegates
all calls to Ledger device.
Existing tests: block, transaction, signature, cold outputs,
cold transaction.
Data for these is in tests/data/fuzz.
A convenience shell script is in contrib/fuzz_testing/fuzz.sh, eg:
contrib/fuzz_testing/fuzz.sh signature
The fuzzer will run indefinitely, ^C to stop.
Fuzzing is currently supported for GCC only. I can't get CLANG
to build Monero here as it dies on some system headers, so if
someone wants to make it work on both, that'd be great.
In particular, the __AFL_LOOP construct should be made to work
so that a given run can fuzz multiple inputs, as the C++ load
time is substantial.