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;
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;
135 if (val.is_point_at_infinity()) {
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());
166 static constexpr size_t LO_BITS = bb::fr::Params::MAX_BITS_PER_ENDOMORPHISM_SCALAR;
185 2 * stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION,
186 "field_conversion: convert challenge");
187 return fq(challenge);
210 return calc_num_fields<typename T::value_type>() * (std::tuple_size<T>::value);
221 return static_cast<bool>(vec[0]);
223 return static_cast<T
>(vec[0]);
225 using BaseField =
typename T::Fq;
226 constexpr size_t N = calc_num_fields<BaseField>();
228 val.x = deserialize_from_fields<BaseField>(vec.subspan(0, N));
229 val.y = deserialize_from_fields<BaseField>(vec.subspan(N, N));
230 if (val.x == BaseField::zero() && val.y == BaseField::zero()) {
231 val.self_set_infinity();
238 constexpr size_t SZ = calc_num_fields<typename T::value_type>();
240 for (
auto& x : val) {
241 x = deserialize_from_fields<typename T::value_type>(vec.subspan(SZ * i, SZ));
256 using BaseField =
typename T::Fq;
261 if (val.is_point_at_infinity()) {
265 uint256_vec_x = serialize_to_fields<BaseField>(val.x);
266 uint256_vec_y = serialize_to_fields<BaseField>(val.y);
269 uint256_vec.insert(uint256_vec.end(), uint256_vec_y.begin(), uint256_vec_y.end());
274 for (
auto& e : val) {
276 out.insert(out.end(), tmp.begin(), tmp.end());
292 static constexpr size_t LO_BITS = bb::fr::Params::MAX_BITS_PER_ENDOMORPHISM_SCALAR;
311 2 * stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION,
312 "field_conversion: convert challenge");
313 return fq(challenge);
#define BB_ASSERT_EQ(actual, expected,...)
#define BB_ASSERT_LT(left, right,...)
#define ASSERT(expression,...)
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 half-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).
curve::Grumpkin::AffineElement grumpkin_point
curve::BN254::AffineElement bn254_point
static T deserialize_from_fields(std::span< const fr > fr_vec)
static constexpr size_t calc_num_fields()
static constexpr size_t calc_num_fields()
curve::Grumpkin::AffineElement grumpkin_point
static std::array< uint256_t, 2 > split_challenge(const uint256_t &challenge)
Split a challenge field element into two half-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)
curve::BN254::AffineElement bn254_point
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