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
7template <typename Builder> using fr = field_t<Builder>;
8template <typename Builder> using fq = bigfield<Builder, bb::Bn254FqParams>;
10template <typename Builder> using grumpkin_element = cycle_group<Builder>;
11
12template <typename Builder> class StdlibFieldConversionTests : public ::testing::Test {
13 public:
14 template <typename T> void check_conversion(Builder& builder, T x)
15 {
16 size_t len = bb::stdlib::field_conversion::calc_num_bn254_frs<Builder, T>();
17 auto frs = bb::stdlib::field_conversion::convert_to_bn254_frs<Builder, T>(x);
18 EXPECT_EQ(len, frs.size());
19 auto y = bb::stdlib::field_conversion::convert_from_bn254_frs<Builder, T>(builder, frs);
20 EXPECT_EQ(x.get_value(), y.get_value());
21 }
22
23 template <typename T> void check_conversion_iterable(Builder& builder, T x)
24 {
25 size_t len = bb::stdlib::field_conversion::calc_num_bn254_frs<Builder, T>();
26 auto frs = bb::stdlib::field_conversion::convert_to_bn254_frs<Builder, T>(x);
27 EXPECT_EQ(len, frs.size());
28 auto y = bb::stdlib::field_conversion::convert_from_bn254_frs<Builder, T>(builder, frs);
29 EXPECT_EQ(x.size(), y.size());
30 for (auto [val1, val2] : zip_view(x, y)) {
31 EXPECT_EQ(val1.get_value(), val2.get_value());
32 }
33 }
34};
35
36using BuilderTypes = testing::Types<UltraCircuitBuilder, MegaCircuitBuilder>;
37
39
44{
45 using Builder = TypeParam;
47 bb::fr x1_val(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")); // 256 bits
48 fr<Builder> x1(&builder, x1_val);
49 this->check_conversion(builder, x1);
50
51 bb::fr x2_val(bb::fr::modulus_minus_two); // modulus - 2
52 fr<Builder> x2(&builder, x2_val);
53 this->check_conversion(builder, x2);
54
55 bb::fr x3_val(1);
56 fr<Builder> x3(&builder, x3_val);
57 this->check_conversion(builder, x3);
58}
59
63TYPED_TEST(StdlibFieldConversionTests, FieldConversionGrumpkinFr)
64{
65 using Builder = TypeParam;
67
68 // Constructing bigfield objects with grumpkin::fr values
69 grumpkin::fr x1_val(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")); // 256 bits
70 fq<Builder> x1(&builder, x1_val);
71 this->check_conversion(builder, x1);
72}
73
78TYPED_TEST(StdlibFieldConversionTests, FieldConversionBN254AffineElement)
79{
80 using Builder = TypeParam;
82
83 // Constructing element objects with curve::BN254::AffineElement values
84 curve::BN254::AffineElement x1_val(1, 2);
86 this->check_conversion(builder, x1);
87
90 this->check_conversion(builder, x2);
91}
92
97TYPED_TEST(StdlibFieldConversionTests, FieldConversionGrumpkinAffineElement)
98{
99 using Builder = TypeParam;
101
102 // Constructing element objects with curve::Grumpkin::AffineElement values
103 curve::Grumpkin::AffineElement x1_val(12, 100);
105 this->check_conversion(builder, x1);
106
109 this->check_conversion(builder, x2);
110}
111
115TYPED_TEST(StdlibFieldConversionTests, FieldConversionArrayBn254Fr)
116{
117 using Builder = TypeParam;
119
120 // Constructing std::array objects with fr<Builder> values
123 };
124 this->check_conversion_iterable(builder, x1);
125
128 fr<Builder>(&builder, 215215125),
129 fr<Builder>(&builder, 102701750),
130 fr<Builder>(&builder, 367032),
131 fr<Builder>(&builder, 12985028),
133 this->check_conversion_iterable(builder, x2);
134}
135
139TYPED_TEST(StdlibFieldConversionTests, FieldConversionArrayGrumpkinFr)
140{
141 using Builder = TypeParam;
143
144 // Constructing std::array objects with fq<Builder> values
147 &builder,
148 static_cast<grumpkin::fr>(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789"))),
150 &builder,
151 static_cast<grumpkin::fr>(std::string("2bf1eaf87f7d27e8dc4056e9af975985bccc89077a21891d6c7b6ccce0631f95"))),
153 &builder,
154 static_cast<grumpkin::fr>(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789"))),
156 &builder,
157 static_cast<grumpkin::fr>(std::string("018555a8eb50cf07f64b019ebaf3af3c925c93e631f3ecd455db07bbb52bbdd3"))),
158 };
159 this->check_conversion_iterable(builder, x1);
160}
161
165TYPED_TEST(StdlibFieldConversionTests, FieldConversionUnivariateBn254Fr)
166{
167 using Builder = TypeParam;
169
170 // Constructing Univariate objects with fr<Builder> values
173 };
174 this->check_conversion_iterable(builder, x);
175}
176
180TYPED_TEST(StdlibFieldConversionTests, FieldConversionUnivariateGrumpkinFr)
181{
182 using Builder = TypeParam;
184
185 // Constructing std::array objects with fq<Builder> values
188 static_cast<grumpkin::fr>(
189 std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789"))),
191 static_cast<grumpkin::fr>(
192 std::string("2bf1eaf87f7d27e8dc4056e9af975985bccc89077a21891d6c7b6ccce0631f95"))),
194 static_cast<grumpkin::fr>(
195 std::string("018555a8eb50cf07f64b019ebaf3af3c925c93e631f3ecd455db07bbb52bbdd3"))),
197 static_cast<grumpkin::fr>(
198 std::string("2bf1eaf87f7d27e8dc4056e9af975985bccc89077a21891d6c7b6ccce0631f95"))) }
199 };
200 this->check_conversion_iterable(builder, x);
201}
202
207TYPED_TEST(StdlibFieldConversionTests, ConvertChallengeGrumpkinFr)
208{
209 using Builder = TypeParam;
211
212 bb::fr chal_val(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")); // 256 bits
213 auto chal = fr<Builder>::from_witness(&builder, chal_val);
214 auto result = bb::stdlib::field_conversion::convert_challenge<Builder, fq<Builder>>(builder, chal);
215 auto expected = uint256_t(chal.get_value());
216 EXPECT_EQ(uint256_t(result.get_value()), expected);
217}
218} // namespace bb::stdlib::field_conversion_tests
A univariate polynomial represented by its values on {domain_start, domain_start + 1,...
typename bb::g1 Group
Definition bn254.hpp:20
typename Group::affine_element AffineElement
Definition bn254.hpp:22
typename Group::affine_element AffineElement
Definition grumpkin.hpp:56
cycle_group represents a group Element of the proving system's embedded curve i.e....
AluTraceBuilder builder
Definition alu.test.cpp:123
testing::Types< UltraCircuitBuilder, MegaCircuitBuilder > BuilderTypes
element< Builder, fq< Builder >, fr< Builder >, curve::BN254::Group > bn254_element
std::conditional_t< IsGoblinBigGroup< C, Fq, Fr, G >, element_goblin::goblin_element< C, goblin_field< C >, Fr, G >, element_default::element< C, Fq, Fr, G > > element
element wraps either element_default::element or element_goblin::goblin_element depending on parametr...
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
uint8_t len
static constexpr uint256_t modulus_minus_two