Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
c_bind.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7// TODO: Delete this cbind once funcs working in root cbind of ecc module.
9#include "grumpkin.hpp"
10
11using namespace bb;
12
13// Silencing warnings about reserved identifiers. Fixing would break downstream code that calls our WASM API.
14// NOLINTBEGIN(cert-dcl37-c, cert-dcl51-cpp, bugprone-reserved-identifier)
15WASM_EXPORT void ecc_grumpkin__mul(uint8_t const* point_buf, uint8_t const* scalar_buf, uint8_t* result)
16{
17 using serialize::write;
18 auto point = from_buffer<grumpkin::g1::affine_element>(point_buf);
19 auto scalar = from_buffer<grumpkin::fr>(scalar_buf);
20 grumpkin::g1::affine_element r = point * scalar;
21 write(result, r);
22}
23
24// Silencing warnings about reserved identifiers. Fixing would break downstream code that calls our WASM API.
25// NOLINTBEGIN(cert-dcl37-c, cert-dcl51-cpp, bugprone-reserved-identifier)
26WASM_EXPORT void ecc_grumpkin__add(uint8_t const* point_a_buf, uint8_t const* point_b_buf, uint8_t* result)
27{
28 using serialize::write;
29 auto point_a = from_buffer<grumpkin::g1::affine_element>(point_a_buf);
30 auto point_b = from_buffer<grumpkin::g1::affine_element>(point_b_buf);
31 grumpkin::g1::affine_element r = point_a + point_b;
32 write(result, r);
33}
34
35// multiplies a vector of points by a single scalar. Returns a vector of points (this is NOT a multi-exponentiation)
36WASM_EXPORT void ecc_grumpkin__batch_mul(uint8_t const* point_buf,
37 uint8_t const* scalar_buf,
38 uint32_t num_points,
39 uint8_t* result)
40{
41 using serialize::write;
43 points.reserve(num_points);
44 for (size_t i = 0; i < num_points; ++i) {
45 points.emplace_back(from_buffer<grumpkin::g1::affine_element>(point_buf + (i * 64)));
46 }
47 auto scalar = from_buffer<grumpkin::fr>(scalar_buf);
48 auto output = grumpkin::g1::element::batch_mul_with_endomorphism(points, scalar);
49 for (size_t i = 0; i < num_points; ++i) {
50 grumpkin::g1::affine_element r = output[i];
51 uint8_t* result_ptr = result + (i * 64);
52 write(result_ptr, r);
53 }
54}
55
57{
59 write(result, output);
60}
61
63{
64 auto bigint_input = from_buffer<uint512_t>(input);
65
66 uint512_t barretenberg_modulus(bb::fr::modulus);
67
68 uint512_t target_output = bigint_input % barretenberg_modulus;
69 write(result, target_output.lo);
70}
71
72// NOLINTEND(cert-dcl37-c, cert-dcl51-cpp, bugprone-reserved-identifier)
WASM_EXPORT void ecc_grumpkin__get_random_scalar_mod_circuit_modulus(uint8_t *result)
Definition c_bind.cpp:56
WASM_EXPORT void ecc_grumpkin__batch_mul(uint8_t const *point_buf, uint8_t const *scalar_buf, uint32_t num_points, uint8_t *result)
Definition c_bind.cpp:36
WASM_EXPORT void ecc_grumpkin__reduce512_buffer_mod_circuit_modulus(uint8_t *input, uint8_t *result)
Definition c_bind.cpp:62
WASM_EXPORT void ecc_grumpkin__mul(uint8_t const *point_buf, uint8_t const *scalar_buf, uint8_t *result)
Definition c_bind.cpp:15
WASM_EXPORT void ecc_grumpkin__add(uint8_t const *point_a_buf, uint8_t const *point_b_buf, uint8_t *result)
Definition c_bind.cpp:26
Entry point for Barretenberg command-line interface.
void write(B &buf, field2< base_field, Params > const &value)
void write(auto &buf, const msgpack_concepts::HasMsgPack auto &obj)
Automatically derived write for any object that defines .msgpack() (implicitly defined by MSGPACK_FIE...
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static constexpr uint256_t modulus
static field random_element(numeric::RNG *engine=nullptr) noexcept
#define WASM_EXPORT