fuzz/mpi_mod_target.cc
author Makoto Kato <m_kato@ga2.so-net.ne.jp>
Wed, 25 Nov 2020 10:53:42 +0000
changeset 15805 f1e48fbead3d9e69500d7aedc1ef6e4bf334f41e
parent 13132 3cd42b902761a49d30b5648b00e477fadfe9bd53
permissions -rw-r--r--
Bug 1678990 - Use __ARM_FEATURE_CRYPTO for feature detection. r=bbeurdouche Actually, we have CPU feature detection for Linux and FreeBSD on aarch64 platform. But others don't. macOS doesn't has any CPU feature detection for ARM Crypto Extension, but toolchain default is turned on. So we should respect __ARM_FEATURE_CRYPTO. Differential Revision: https://phabricator.services.mozilla.com/D97909

/* 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/. */

/*
 * This target fuzzes NSS mpi against openssl bignum.
 * It therefore requires openssl to be installed.
 */

#include "mpi_helper.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  // We require at least size 3 to get two integers from Data.
  if (size < 3) {
    return 0;
  }
  INIT_FOUR_NUMBERS

  // We can't divide by 0.
  if (mp_cmp_z(&b) == 0) {
    CLEANUP_AND_RETURN
  }

  // Compare with OpenSSL mod
  assert(mp_mod(&a, &b, &c) == MP_OKAY);
  (void)BN_mod(C, A, B, ctx);
  check_equal(C, &c, max_size);

  // Check a mod b = a - floor(a / b) * b
  assert(mp_div(&a, &b, &r, nullptr) == MP_OKAY);
  assert(mp_mul(&r, &b, &r) == MP_OKAY);
  assert(mp_sub(&a, &r, &r) == MP_OKAY);
  assert(mp_cmp(&c, &r) == 0);

  CLEANUP_AND_RETURN
}