Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
field_conversion.test.cpp
Go to the documentation of this file.
3#include <gtest/gtest.h>
4
6
7class FieldConversionTest : public ::testing::Test {
8 public:
9 template <typename T> void check_conversion(T x)
10 {
11 size_t len = bb::field_conversion::calc_num_bn254_frs<T>();
13 EXPECT_EQ(len, frs.size());
14 auto y = bb::field_conversion::convert_from_bn254_frs<T>(frs);
15 EXPECT_EQ(x, y);
16 }
17};
18
22TEST_F(FieldConversionTest, FieldConversionUint32)
23{
24 auto x = static_cast<uint32_t>(1) << 31;
25 check_conversion(x);
26}
27
31TEST_F(FieldConversionTest, FieldConversionFr)
32{
33 bb::fr x1(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")); // 256 bits
34 check_conversion(x1);
35
36 bb::fr x2(bb::fr::modulus_minus_two); // modulus - 2
37 check_conversion(x2);
38}
39
44TEST_F(FieldConversionTest, FieldConversionGrumpkinFr)
45{
46 grumpkin::fr x1(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")); // 256 bits
47 check_conversion(x1);
48}
49
50namespace {
51bb::fq derive_bn254_y(bb::fq x)
52{
53 auto [found, y] = (x.sqr() * x + Bn254G1Params::b).sqrt();
54 EXPECT_TRUE(found);
55 return y;
56}
57} // namespace
58
63TEST_F(FieldConversionTest, FieldConversionBN254AffineElement)
64{
65 curve::BN254::AffineElement x1(1, derive_bn254_y(1));
66 check_conversion(x1);
67
69 check_conversion(x2);
70}
71
72namespace {
73bb::grumpkin::fq derive_grumpkin_y(bb::grumpkin::fq x)
74{
75 auto [found, y] = (x.sqr() * x + grumpkin::G1Params::b + x * grumpkin::G1Params::a).sqrt();
76 EXPECT_TRUE(found);
77 return y;
78}
79} // namespace
80
84TEST_F(FieldConversionTest, FieldConversionGrumpkinAffineElement)
85{
86 curve::Grumpkin::AffineElement x1(1, derive_grumpkin_y(1));
87 check_conversion(x1);
88
90 check_conversion(x2);
91}
92
97TEST_F(FieldConversionTest, FieldConversionArrayBn254Fr)
98{
99 std::array<bb::fr, 4> x1{ 1, 2, 3, 4 };
100 check_conversion(x1);
101
104 215215125,
105 102701750,
106 367032,
107 12985028,
108 bb::fr::modulus_minus_two - 125015028 };
109 check_conversion(x2);
110}
111
116TEST_F(FieldConversionTest, FieldConversionArrayGrumpkinFr)
117{
118 std::array<grumpkin::fr, 4> x1{ 1, 2, 3, 4 };
119 check_conversion(x1);
120
123 215215125,
124 102701750,
125 367032,
126 12985028,
128 check_conversion(x2);
129}
130
135TEST_F(FieldConversionTest, FieldConversionUnivariateBn254Fr)
136{
137 std::array<bb::fr, 4> x1_arr{ 1, 2, 3, 4 };
138 bb::Univariate<bb::fr, 4> x1{ x1_arr };
139 check_conversion(x1);
140}
141
146TEST_F(FieldConversionTest, FieldConversionUnivariateGrumpkinFr)
147{
148 std::array<grumpkin::fr, 4> x1_arr{ 1, 2, 3, 4 };
150 check_conversion(x1);
151}
152
157TEST_F(FieldConversionTest, ConvertChallengeGrumpkinFr)
158{
159 bb::fr chal(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")); // 256 bits
160 auto result = bb::field_conversion::convert_challenge<grumpkin::fr>(chal);
161 auto expected = uint256_t(chal);
162 EXPECT_EQ(uint256_t(result), expected);
163}
164
165} // namespace bb::field_conversion_tests
A univariate polynomial represented by its values on {domain_start, domain_start + 1,...
typename Group::affine_element AffineElement
Definition bn254.hpp:22
typename Group::affine_element AffineElement
Definition grumpkin.hpp:56
TEST_F(FieldConversionTest, FieldConversionUint32)
Field conversion test for uint32_t.
std::vector< bb::fr > convert_to_bn254_frs(const T &val)
Conversion from transcript values to bb::frs.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
uint8_t len
static constexpr fq b
Definition g1.hpp:29
BB_INLINE constexpr field sqr() const noexcept
static constexpr uint256_t modulus_minus_two
static constexpr bb::fr b
Definition grumpkin.hpp:29
static constexpr bb::fr a
Definition grumpkin.hpp:31