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);
49 constexpr uint64_t NUM_LIMB_BITS = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION;
50 constexpr uint64_t TOTAL_BITS = 254;
54 "Conversion error here usually implies some bad proof serde or parsing");
56 (
uint256_t(1) << (TOTAL_BITS - NUM_LIMB_BITS * 2)),
57 "Conversion error here usually implies some bad proof serde or parsing");
69 constexpr uint64_t NUM_LIMB_BITS = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION;
70 constexpr uint64_t TOTAL_BITS = 254;
72 constexpr uint64_t LOWER_BITS = 2 * NUM_LIMB_BITS;
78 std::vector<bb::fr> out(2);
93 return static_cast<bool>(fr_vec[0]);
95 return static_cast<T
>(fr_vec[0]);
99 using BaseField =
typename T::Fq;
100 constexpr size_t BASE = calc_num_fields<BaseField>();
102 val.x = deserialize_from_fields<BaseField>(fr_vec.subspan(0, BASE));
103 val.y = deserialize_from_fields<BaseField>(fr_vec.subspan(BASE, BASE));
104 if (val.x == BaseField::zero() && val.y == BaseField::zero()) {
105 val.self_set_infinity();
112 constexpr size_t SZ = calc_num_fields<typename T::value_type>();
114 for (
auto& x : val) {
115 x = deserialize_from_fields<typename T::value_type>(fr_vec.subspan(SZ * i, SZ));
132 using BaseField =
typename T::Fq;
133 std::vector<bb::fr> fr_vec_x;
134 std::vector<bb::fr> fr_vec_y;
135 if (val.is_point_at_infinity()) {
142 std::vector<bb::fr> fr_vec(fr_vec_x.begin(), fr_vec_x.end());
143 fr_vec.insert(fr_vec.end(), fr_vec_y.begin(), fr_vec_y.end());
148 for (
auto& x : val) {
150 out.insert(out.end(), tmp.begin(), tmp.end());
167 static constexpr size_t LO_BITS = TOTAL_BITS / 2;
168 static constexpr size_t HI_BITS = TOTAL_BITS - LO_BITS;
186 2 * stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION,
187 "field_conversion: convert challenge");
188 return fq(challenge);
211 return calc_num_fields<typename T::value_type>() * (std::tuple_size<T>::value);
222 return static_cast<bool>(vec[0]);
224 return static_cast<T
>(vec[0]);
226 using BaseField =
typename T::Fq;
227 constexpr size_t N = calc_num_fields<BaseField>();
229 val.x = deserialize_from_fields<BaseField>(vec.subspan(0, N));
230 val.y = deserialize_from_fields<BaseField>(vec.subspan(N, N));
231 if (val.x == BaseField::zero() && val.y == BaseField::zero()) {
232 val.self_set_infinity();
239 constexpr size_t SZ = calc_num_fields<typename T::value_type>();
241 for (
auto& x : val) {
242 x = deserialize_from_fields<typename T::value_type>(vec.subspan(SZ * i, SZ));
257 using BaseField =
typename T::Fq;
262 if (val.is_point_at_infinity()) {
266 uint256_vec_x = serialize_to_fields<BaseField>(val.x);
267 uint256_vec_y = serialize_to_fields<BaseField>(val.y);
270 uint256_vec.insert(uint256_vec.end(), uint256_vec_y.begin(), uint256_vec_y.end());
275 for (
auto& e : val) {
277 out.insert(out.end(), tmp.begin(), tmp.end());
294 static constexpr size_t LO_BITS = TOTAL_BITS / 2;
295 static constexpr size_t HI_BITS = TOTAL_BITS - LO_BITS;
313 2 * stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION,
314 "field_conversion: convert challenge");
315 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 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