diff options
author | Matt Johnston <matt@ucc.asn.au> | 2017-05-26 00:20:01 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2017-05-26 00:20:01 +0800 |
commit | cbd5be1b82c182d2e55656d29f19ae7f3ac91dea (patch) | |
tree | 9f285fd838256d4806a40456fca987cbe05df9d2 /fuzzer-verify.c | |
parent | f24d93d4e411eb3bf192abdfc90312da62cd69a6 (diff) |
add fuzzer-verify
--HG--
branch : fuzz
Diffstat (limited to 'fuzzer-verify.c')
-rw-r--r-- | fuzzer-verify.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/fuzzer-verify.c b/fuzzer-verify.c new file mode 100644 index 0000000..7e23bc9 --- /dev/null +++ b/fuzzer-verify.c @@ -0,0 +1,44 @@ +#include "fuzz.h" +#include "session.h" +#include "fuzz-wrapfd.h" +#include "debug.h" + +static void setup_fuzzer(void) { + common_setup_fuzzer(); +} + +static buffer *verifydata; + +/* Tests reading a public key and verifying a signature */ +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + static int once = 0; + if (!once) { + setup_fuzzer(); + verifydata = buf_new(30); + buf_putstring(verifydata, "x", 1); + once = 1; + } + + if (fuzzer_set_input(Data, Size) == DROPBEAR_FAILURE) { + return 0; + } + + m_malloc_set_epoch(1); + + if (setjmp(fuzz.jmp) == 0) { + sign_key *key = new_sign_key(); + enum signkey_type type = DROPBEAR_SIGNKEY_ANY; + if (buf_get_pub_key(fuzz.input, key, &type) == DROPBEAR_SUCCESS) { + /* Don't expect random fuzz input to verify */ + assert(buf_verify(fuzz.input, key, verifydata) == DROPBEAR_FAILURE); + } + sign_key_free(key); + m_malloc_free_epoch(1, 0); + } else { + m_malloc_free_epoch(1, 1); + TRACE(("dropbear_exit longjmped")) + // dropbear_exit jumped here + } + + return 0; +} |