Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
secp256r1_fixed_base_mul_ultra.fuzzer.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
26
27#include <cassert>
28#include <cstdint>
29#include <cstring>
30
34using element_ct = typename Curve::Group;
38using affine_native = typename g1_native::affine_element;
39
40extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size)
41{
42 // Need 32 bytes for one scalar.
43 if (Size < 32) {
44 return 0;
45 }
46
47 uint64_t limbs[4]{};
48 for (size_t i = 0; i < 4; ++i) {
49 std::memcpy(&limbs[i], Data + i * 8, sizeof(uint64_t));
50 }
51 const uint256_t scalar_raw(limbs[0], limbs[1], limbs[2], limbs[3]);
52 const fr_native scalar(scalar_raw);
53
56
57 const auto output = element_ct::secp256r1_fixed_base_mul(u);
58 const affine_native expected(g1_native::one * scalar);
59
60 if (expected.is_point_at_infinity()) {
61 // u = 0 → expected = O; the in-circuit construction should also flag infinity.
62 assert(output.is_point_at_infinity().get_value() && "fixed_base_mul: u=0 did not yield infinity");
63 } else {
64 assert(!output.is_point_at_infinity().get_value() && "fixed_base_mul: unexpected infinity");
65 assert(output.x().get_value().lo == uint256_t(expected.x) && "fixed_base_mul: x mismatch");
66 assert(output.y().get_value().lo == uint256_t(expected.y) && "fixed_base_mul: y mismatch");
67 }
68
69 assert(bb::CircuitChecker::check(builder) && "fixed_base_mul: circuit check failed");
70 return 0;
71}
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static bigfield from_witness(Builder *ctx, const bb::field< T > &input)
Definition bigfield.hpp:322
AluTraceBuilder builder
Definition alu.test.cpp:124
secp256r1_ct::Group element_ct
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
typename Curve::ScalarFieldNative fr_native
typename g1_native::affine_element affine_native
typename Curve::GroupNative g1_native
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
::bb::secp256r1::g1 GroupNative
Definition secp256r1.hpp:24
element< CircuitType, BaseField, ScalarField, GroupNative > Group
Definition secp256r1.hpp:31
bigfield< CircuitType, typename ::bb::secp256r1::FrParams > ScalarField
Definition secp256r1.hpp:29
::bb::secp256r1::fr ScalarFieldNative
Definition secp256r1.hpp:22