Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cpp/src/barretenberg/ecc/curves/secp256k1/c_bind.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ WASM_EXPORT void ecc_secp256k1__mul(uint8_t const* point_buf, uint8_t const* sca

WASM_EXPORT void ecc_secp256k1__get_random_scalar_mod_circuit_modulus(uint8_t* result)
{
barretenberg::fr output = barretenberg::fr::random_element();
secp256k1::fr output = secp256k1::fr::random_element();
write(result, output);
}

WASM_EXPORT void ecc_secp256k1__reduce512_buffer_mod_circuit_modulus(uint8_t* input, uint8_t* result)
{
uint512_t bigint_input = from_buffer<uint512_t>(input);

uint512_t barretenberg_modulus(barretenberg::fr::modulus);
uint512_t barretenberg_modulus(secp256k1::fr::modulus);

uint512_t target_output = bigint_input % barretenberg_modulus;
write(result, target_output.lo);
Expand Down
25 changes: 0 additions & 25 deletions cpp/src/barretenberg/ecc/curves/secp256k1/secp256k1.hpp
Original file line number Diff line number Diff line change
@@ -1,36 +1,11 @@
#pragma once

#include "barretenberg/numeric/uint256/uint256.hpp"
#include "barretenberg/numeric/uintx/uintx.hpp"

#include "../../fields/field.hpp"
#include "../../groups/group.hpp"
#include "../bn254/fq.hpp"
#include "../bn254/fr.hpp"
#include "../types.hpp"

namespace secp256k1 {

constexpr uint256_t get_r_squared(const uint256_t prime_256)
{
uint512_t R(0, 1);
uint1024_t R_1024 = uint1024_t(R);
uint1024_t R_squared = R_1024 * R_1024;
uint1024_t modulus = uint1024_t(uint512_t(prime_256));

uint1024_t R_squared_mod_p = R_squared % modulus;
return R_squared_mod_p.lo.lo;
}

constexpr uint64_t get_r_inv(const uint256_t prime_256)
{
uint512_t r{ 0, 1 };
// -(1/q) mod r
uint512_t q{ -prime_256, 0 };
uint256_t q_inv = q.invmod(r).lo;
return (q_inv).data[0];
}

struct Secp256k1FqParams {
static constexpr uint64_t modulus_0 = 0xFFFFFFFEFFFFFC2FULL;
static constexpr uint64_t modulus_1 = 0xFFFFFFFFFFFFFFFFULL;
Expand Down
25 changes: 0 additions & 25 deletions cpp/src/barretenberg/ecc/curves/secp256r1/secp256r1.hpp
Original file line number Diff line number Diff line change
@@ -1,35 +1,10 @@
#pragma once

#include "barretenberg/numeric/uint256/uint256.hpp"
#include "barretenberg/numeric/uintx/uintx.hpp"

#include "../../fields/field.hpp"
#include "../../groups/group.hpp"
#include "../bn254/fq.hpp"
#include "../bn254/fr.hpp"

namespace secp256r1 {

constexpr uint256_t get_r_squared(const uint256_t prime_256)
{
uint512_t R(0, 1);
uint1024_t R_1024 = uint1024_t(R);
uint1024_t R_squared = R_1024 * R_1024;
uint1024_t modulus = uint1024_t(uint512_t(prime_256));

uint1024_t R_squared_mod_p = R_squared % modulus;
return R_squared_mod_p.lo.lo;
}

constexpr uint64_t get_r_inv(const uint256_t prime_256)
{
uint512_t r{ 0, 1 };
// -(1/q) mod r
uint512_t q{ -prime_256, 0 };
uint256_t q_inv = q.invmod(r).lo;
return (q_inv).data[0];
}

struct Secp256r1FqParams {
static constexpr uint64_t modulus_0 = 0xFFFFFFFFFFFFFFFFULL;
static constexpr uint64_t modulus_1 = 0x00000000FFFFFFFFULL;
Expand Down
3 changes: 0 additions & 3 deletions cpp/src/barretenberg/honk/flavor/standard.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,6 @@ class Standard {
static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1;
static constexpr size_t NUM_RELATIONS = std::tuple_size<Relations>::value;

// Instantiate the BarycentricData needed to extend each Relation Univariate
static_assert(instantiate_barycentric_utils<FF, MAX_RANDOM_RELATION_LENGTH>());

// define the containers for storing the contributions from each relation in Sumcheck
using RelationUnivariates = decltype(create_relation_univariates_container<FF, Relations>());
using RelationValues = decltype(create_relation_values_container<FF, Relations>());
Expand Down
3 changes: 0 additions & 3 deletions cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,6 @@ class StandardGrumpkin {
static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1;
static constexpr size_t NUM_RELATIONS = std::tuple_size<Relations>::value;

// Instantiate the BarycentricData needed to extend each Relation Univariate
static_assert(instantiate_barycentric_utils<FF, MAX_RANDOM_RELATION_LENGTH>());

// define the containers for storing the contributions from each relation in Sumcheck
using RelationUnivariates = decltype(create_relation_univariates_container<FF, Relations>());
using RelationValues = decltype(create_relation_values_container<FF, Relations>());
Expand Down
3 changes: 0 additions & 3 deletions cpp/src/barretenberg/honk/flavor/ultra.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,6 @@ class Ultra {
static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1;
static constexpr size_t NUM_RELATIONS = std::tuple_size<Relations>::value;

// Instantiate the BarycentricData needed to extend each Relation Univariate
static_assert(instantiate_barycentric_utils<FF, MAX_RANDOM_RELATION_LENGTH>());

// define the container for storing the univariate contribution from each relation in Sumcheck
using RelationUnivariates = decltype(create_relation_univariates_container<FF, Relations>());
using RelationValues = decltype(create_relation_values_container<FF, Relations>());
Expand Down
3 changes: 0 additions & 3 deletions cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,6 @@ class UltraGrumpkin {
static constexpr size_t MAX_RANDOM_RELATION_LENGTH = MAX_RELATION_LENGTH + 1;
static constexpr size_t NUM_RELATIONS = std::tuple_size<Relations>::value;

// Instantiate the BarycentricData needed to extend each Relation Univariate
static_assert(instantiate_barycentric_utils<FF, MAX_RANDOM_RELATION_LENGTH>());

// define the container for storing the univariate contribution from each relation in Sumcheck
using RelationUnivariates = decltype(create_relation_univariates_container<FF, Relations>());
using RelationValues = decltype(create_relation_values_container<FF, Relations>());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,34 @@ template <class Fr, size_t domain_size, size_t num_evals> class BarycentricData
return result;
}

static constexpr std::array<Fr, domain_size * num_evals> batch_invert(
const std::array<Fr, domain_size * num_evals>& coeffs)
{
constexpr size_t n = domain_size * num_evals;
std::array<Fr, n> temporaries{};
std::array<bool, n> skipped{};
Fr accumulator = 1;
for (size_t i = 0; i < n; ++i) {
temporaries[i] = accumulator;
if (coeffs[i] == 0) {
skipped[i] = true;
} else {
skipped[i] = false;
accumulator *= coeffs[i];
}
}
accumulator = Fr(1) / accumulator;
std::array<Fr, n> result{};
Fr T0;
for (size_t i = n - 1; i < n; --i) {
if (!skipped[i]) {
T0 = accumulator * temporaries[i];
accumulator *= coeffs[i];
result[i] = T0;
}
}
return result;
}
// for each x_k in the big domain, build set of domain size-many denominator inverses
// 1/(d_i*(x_k - x_j)). will multiply against each of these (rather than to divide by something)
// for each barycentric evaluation
Expand All @@ -62,11 +90,10 @@ template <class Fr, size_t domain_size, size_t num_evals> class BarycentricData
for (size_t j = 0; j < domain_size; ++j) {
Fr inv = lagrange_denominators[j];
inv *= (big_domain[k] - big_domain[j]);
inv = Fr(1) / inv; // prob have self_inverse method; should be part of Field concept
result[k * domain_size + j] = inv;
}
}
return result;
return batch_invert(result);
}

// get full numerator values
Expand Down