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// TODO: Delete this cbind once funcs working in root cbind of ecc module.
3#include "grumpkin.hpp"
4
5using namespace bb;
6
7// Silencing warnings about reserved identifiers. Fixing would break downstream code that calls our WASM API.
8// NOLINTBEGIN(cert-dcl37-c, cert-dcl51-cpp, bugprone-reserved-identifier)
9WASM_EXPORT void ecc_grumpkin__mul(uint8_t const* point_buf, uint8_t const* scalar_buf, uint8_t* result)
10{
11 using serialize::write;
12 auto point = from_buffer<grumpkin::g1::affine_element>(point_buf);
13 auto scalar = from_buffer<grumpkin::fr>(scalar_buf);
14 grumpkin::g1::affine_element r = point * scalar;
15 write(result, r);
16}
17
18// Silencing warnings about reserved identifiers. Fixing would break downstream code that calls our WASM API.
19// NOLINTBEGIN(cert-dcl37-c, cert-dcl51-cpp, bugprone-reserved-identifier)
20WASM_EXPORT void ecc_grumpkin__add(uint8_t const* point_a_buf, uint8_t const* point_b_buf, uint8_t* result)
21{
22 using serialize::write;
23 auto point_a = from_buffer<grumpkin::g1::affine_element>(point_a_buf);
24 auto point_b = from_buffer<grumpkin::g1::affine_element>(point_b_buf);
25 grumpkin::g1::affine_element r = point_a + point_b;
26 write(result, r);
27}
28
29// multiplies a vector of points by a single scalar. Returns a vector of points (this is NOT a multi-exponentiation)
30WASM_EXPORT void ecc_grumpkin__batch_mul(uint8_t const* point_buf,
31 uint8_t const* scalar_buf,
32 uint32_t num_points,
33 uint8_t* result)
34{
35 using serialize::write;
37 points.reserve(num_points);
38 for (size_t i = 0; i < num_points; ++i) {
39 points.emplace_back(from_buffer<grumpkin::g1::affine_element>(point_buf + (i * 64)));
40 }
41 auto scalar = from_buffer<grumpkin::fr>(scalar_buf);
42 auto output = grumpkin::g1::element::batch_mul_with_endomorphism(points, scalar);
43 for (size_t i = 0; i < num_points; ++i) {
44 grumpkin::g1::affine_element r = output[i];
45 uint8_t* result_ptr = result + (i * 64);
46 write(result_ptr, r);
47 }
48}
49
51{
53 write(result, output);
54}
55
57{
58 auto bigint_input = from_buffer<uint512_t>(input);
59
60 uint512_t barretenberg_modulus(bb::fr::modulus);
61
62 uint512_t target_output = bigint_input % barretenberg_modulus;
63 write(result, target_output.lo);
64}
65
66// 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:50
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:30
WASM_EXPORT void ecc_grumpkin__reduce512_buffer_mod_circuit_modulus(uint8_t *input, uint8_t *result)
Definition c_bind.cpp:56
WASM_EXPORT void ecc_grumpkin__mul(uint8_t const *point_buf, uint8_t const *scalar_buf, uint8_t *result)
Definition c_bind.cpp:9
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:20
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
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