diff options
author | Franziskus Kiefer <franziskuskiefer@gmail.com> | 2017-02-08 11:17:15 +0100 |
---|---|---|
committer | Franziskus Kiefer <franziskuskiefer@gmail.com> | 2017-02-08 11:17:15 +0100 |
commit | 0b281a3b0744b6c477aa1cbbde00d8910581f236 (patch) | |
tree | dfd20406072399d3af0ef7c170927f4f0266a53f /fuzz/mpi_helper.h | |
parent | 353a1a1cbca51f6fd056f5f4d0d5e2d49e65134b (diff) | |
download | nss-hg-0b281a3b0744b6c477aa1cbbde00d8910581f236.tar.gz |
Bug 1334106 - split mpi target, r=ttaubert
Differential Revision: https://nss-review.dev.mozaws.net/D189
Diffstat (limited to 'fuzz/mpi_helper.h')
-rw-r--r-- | fuzz/mpi_helper.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/fuzz/mpi_helper.h b/fuzz/mpi_helper.h new file mode 100644 index 000000000..8775b533f --- /dev/null +++ b/fuzz/mpi_helper.h @@ -0,0 +1,60 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* Helper functions for MPI fuzzing targets. */ + +#ifndef mpi_helper_h__ +#define mpi_helper_h__ + +#include <iostream> +#include <string> +#include <tuple> +#include <vector> + +#include "hasht.h" +#include "mpi.h" + +#include <openssl/bn.h> + +void check_equal(BIGNUM *b, mp_int *m, size_t max_size); +void parse_input(const uint8_t *data, size_t size, BIGNUM *A, BIGNUM *B, + mp_int *a, mp_int *b); +void parse_input(const uint8_t *data, size_t size, BIGNUM *A, mp_int *a); +std::tuple<BIGNUM *, mp_int> get_modulus(const uint8_t *data, size_t size, + BN_CTX *ctx); + +// Initialise MPI and BN variables +// XXX: Also silence unused variable warnings for R. +#define INIT_NUMBERS \ + mp_int a, b, c, r; \ + mp_int *m1 = nullptr; \ + BN_CTX *ctx = BN_CTX_new(); \ + BN_CTX_start(ctx); \ + BIGNUM *A = BN_CTX_get(ctx); \ + BIGNUM *B = BN_CTX_get(ctx); \ + BIGNUM *C = BN_CTX_get(ctx); \ + BIGNUM *R = BN_CTX_get(ctx); \ + assert(mp_init(&a) == MP_OKAY); \ + assert(mp_init(&b) == MP_OKAY); \ + assert(mp_init(&c) == MP_OKAY); \ + assert(mp_init(&r) == MP_OKAY); \ + size_t max_size = 2 * size + 1; \ + parse_input(data, size, A, B, &a, &b); \ + do { \ + (void)(R); \ + } while (0); + +#define CLEANUP_AND_RETURN \ + mp_clear(&a); \ + mp_clear(&b); \ + mp_clear(&c); \ + mp_clear(&r); \ + if (m1) { \ + mp_clear(m1); \ + } \ + BN_CTX_end(ctx); \ + BN_CTX_free(ctx); \ + return 0; + +#endif // mpi_helper_h__ |