33 return T::Params::NUM_BN254_SCALARS;
35 return 2 * calc_num_fields<typename T::Fq>();
38 return calc_num_fields<typename T::value_type>() * (std::tuple_size<T>::value);
52 for (
const auto& limb : fr_vec) {
53 if (!limb.is_zero()) {
68 constexpr uint64_t NUM_LIMB_BITS = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION;
69 constexpr uint64_t TOTAL_BITS = 254;
73 "Conversion error here usually implies some bad proof serde or parsing");
75 (
uint256_t(1) << (TOTAL_BITS - NUM_LIMB_BITS * 2)),
76 "Conversion error here usually implies some bad proof serde or parsing");
92 constexpr uint64_t NUM_LIMB_BITS = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION;
93 constexpr uint64_t TOTAL_BITS = 254;
95 constexpr uint64_t LOWER_BITS = 2 * NUM_LIMB_BITS;
101 std::vector<bb::fr> out(2);
116 return static_cast<bool>(fr_vec[0]);
118 return static_cast<T
>(fr_vec[0]);
122 using BaseField =
typename T::Fq;
123 constexpr size_t BASE = calc_num_fields<BaseField>();
128 if (check_point_at_infinity<T>(fr_vec)) {
129 return T::infinity();
134 val.x = deserialize_from_fields<BaseField>(fr_vec.subspan(0, BASE));
135 val.y = deserialize_from_fields<BaseField>(fr_vec.subspan(BASE, BASE));
141 constexpr size_t SZ = calc_num_fields<typename T::value_type>();
143 for (
auto& x : val) {
144 x = deserialize_from_fields<typename T::value_type>(fr_vec.subspan(SZ * i, SZ));
161 using BaseField =
typename T::Fq;
162 std::vector<bb::fr> fr_vec_x =
164 std::vector<bb::fr> fr_vec_y =
167 std::vector<bb::fr> fr_vec =
std::move(fr_vec_x);
168 fr_vec.reserve(fr_vec.size() + fr_vec_y.size());
169 for (
auto& e : fr_vec_y) {
176 for (
auto& x : val) {
178 for (
auto& e : tmp) {
197 static constexpr size_t LO_BITS = TOTAL_BITS / 2;
198 static constexpr size_t HI_BITS = TOTAL_BITS - LO_BITS;
216 2 * stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION,
217 "field_conversion: convert challenge");
218 return fq(challenge);
241 return calc_num_fields<typename T::value_type>() * (std::tuple_size<T>::value);
252 return static_cast<bool>(vec[0]);
254 return static_cast<T
>(vec[0]);
256 using BaseField =
typename T::Fq;
257 constexpr size_t N = calc_num_fields<BaseField>();
259 val.x = deserialize_from_fields<BaseField>(vec.subspan(0, N));
260 val.y = deserialize_from_fields<BaseField>(vec.subspan(N, N));
261 if (val.x == BaseField::zero() && val.y == BaseField::zero()) {
262 val.self_set_infinity();
269 constexpr size_t SZ = calc_num_fields<typename T::value_type>();
271 for (
auto& x : val) {
272 x = deserialize_from_fields<typename T::value_type>(vec.subspan(SZ * i, SZ));
287 using BaseField =
typename T::Fq;
292 if (val.is_point_at_infinity()) {
296 uint256_vec_x = serialize_to_fields<BaseField>(val.x);
297 uint256_vec_y = serialize_to_fields<BaseField>(val.y);
300 uint256_vec.insert(uint256_vec.end(), uint256_vec_y.begin(), uint256_vec_y.end());
305 for (
auto& e : val) {
307 out.insert(out.end(), tmp.begin(), tmp.end());
324 static constexpr size_t LO_BITS = TOTAL_BITS / 2;
325 static constexpr size_t HI_BITS = TOTAL_BITS - LO_BITS;
343 2 * stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION,
344 "field_conversion: convert challenge");
345 return fq(challenge);
#define BB_ASSERT(expression,...)
#define BB_ASSERT_EQ(actual, expected,...)
#define BB_ASSERT_LT(left, right,...)
curve::BN254::AffineElement bn254_commitment
static std::vector< fr > serialize_to_fields(const T &val)
Conversion from transcript values to bb::frs.
static std::array< bb::fr, 2 > split_challenge(const bb::fr &challenge)
Split a challenge field element into two equal-width challenges.
static bool check_point_at_infinity(std::span< const bb::fr > fr_vec)
Check whether raw limbs represent the point at infinity (all limbs zero).
static T convert_challenge(const bb::fr &challenge)
Convert an fr challenge to a target type (fr or fq). Assumes challenge is "short".
static fq convert_grumpkin_fr_from_bn254_frs(std::span< const bb::fr > fr_vec)
Converts 2 bb::fr elements to fq.
static std::vector< bb::fr > convert_grumpkin_fr_to_bn254_frs(const fq &val)
Converts fq to 2 bb::fr elements (inverse of the above).
static T deserialize_from_fields(std::span< const fr > fr_vec)
curve::Grumpkin::AffineElement grumpkin_commitment
static constexpr size_t calc_num_fields()
curve::BN254::AffineElement bn254_commitment
curve::Grumpkin::AffineElement grumpkin_commitment
static constexpr size_t calc_num_fields()
static std::array< uint256_t, 2 > split_challenge(const uint256_t &challenge)
Split a challenge field element into two equal-width challenges.
static T convert_challenge(const bb::fr &challenge)
Convert an fr challenge to a target type (fr or fq). Assumes challenge is "short".
static std::vector< uint256_t > serialize_to_fields(const T &val)
Conversion from transcript values to uint256_ts.
static T deserialize_from_fields(std::span< const uint256_t > vec)
typename Group::affine_element AffineElement
typename Group::affine_element AffineElement
constexpr uint256_t slice(uint64_t start, uint64_t end) const
constexpr uint64_t get_msb() const
constexpr T get_msb(const T in)
Entry point for Barretenberg command-line interface.
field< Bn254FrParams > fr
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr uint256_t modulus