Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
relation_manual.test.cpp
Go to the documentation of this file.
5#include <gtest/gtest.h>
6
7using namespace bb;
8
9using FF = fr;
10
11class RelationManual : public testing::Test {};
12
13TEST_F(RelationManual, Poseidon2ExternalRelationZeros)
14{
15 using Accumulator = std::array<FF, 4>;
17
18 Accumulator acc{ 0, 0, 0, 0 };
19 struct AllPoseidonValues {
20 FF q_poseidon2_external;
21 FF w_l;
22 FF w_r;
23 FF w_o;
24 FF w_4;
25 FF w_l_shift;
26 FF w_r_shift;
27 FF w_o_shift;
28 FF w_4_shift;
29 FF q_l;
30 FF q_r;
31 FF q_o;
32 FF q_4;
33 };
34 AllPoseidonValues all_poseidon_values{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
35
36 const auto parameters = RelationParameters<FF>::get_random();
37 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
38 EXPECT_EQ(acc[0], 0);
39 EXPECT_EQ(acc[1], 0);
40 EXPECT_EQ(acc[2], 0);
41 EXPECT_EQ(acc[3], 0);
42}
43
44TEST_F(RelationManual, Poseidon2ExternalRelationRandom)
45{
46 using Accumulator = std::array<FF, 4>;
48
49 Accumulator acc{ 0, 0, 0, 0 };
50 struct AllPoseidonValues {
51 FF q_poseidon2_external;
52 FF w_l;
53 FF w_r;
54 FF w_o;
55 FF w_4;
56 FF q_l;
57 FF q_r;
58 FF q_o;
59 FF q_4;
60 FF w_l_shift;
61 FF w_r_shift;
62 FF w_o_shift;
63 FF w_4_shift;
64 };
65 /*
66 * v1 = w_1 + q_1 = 5 + 6 = 11
67 * v2 = w_2 + q_2 = 4 + 9 = 13
68 * v3 = w_3 + q_3 = 1 + 8 = 9
69 * v4 = w_4 + q_4 = 7 + 3 = 10
70 * u1 = v1^5 = 11^5 = 161051
71 * u2 = v2^5 = 13^5 = 371293
72 * u3 = v3^5 = 9^5 = 59049
73 * u4 = v4^5 = 10^5 = 100000
74 * matrix mul with calculator:
75 * 1 3763355
76 * 2 3031011
77 * 3 2270175
78 * 4 1368540
79 */
80 AllPoseidonValues all_poseidon_values{ 1, 5, 4, 1, 7, 6, 9, 8, 3, 3763355, 3031011, 2270175, 1368540 };
81
82 const auto parameters = RelationParameters<FF>::get_random();
83 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
84 EXPECT_EQ(acc[0], 0);
85 EXPECT_EQ(acc[1], 0);
86 EXPECT_EQ(acc[2], 0);
87 EXPECT_EQ(acc[3], 0);
88}
89
90TEST_F(RelationManual, Poseidon2InternalRelationZeros)
91{
92 using Accumulator = std::array<FF, 4>;
94
95 Accumulator acc{ 0, 0, 0, 0 };
96 struct AllPoseidonValues {
97 FF q_poseidon2_internal;
98 FF w_l;
99 FF w_r;
100 FF w_o;
101 FF w_4;
102 FF w_l_shift;
103 FF w_r_shift;
104 FF w_o_shift;
105 FF w_4_shift;
106 FF q_l;
107 FF q_r;
108 FF q_o;
109 FF q_4;
110 };
111 AllPoseidonValues all_poseidon_values{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
112
113 const auto parameters = RelationParameters<FF>::get_random();
114 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
115 EXPECT_EQ(acc[0], 0);
116 EXPECT_EQ(acc[1], 0);
117 EXPECT_EQ(acc[2], 0);
118 EXPECT_EQ(acc[3], 0);
119}
120
121TEST_F(RelationManual, Poseidon2InternalRelationRandom)
122{
123 using Accumulator = std::array<FF, 4>;
125
126 Accumulator acc{ 0, 0, 0, 0 };
127 struct AllPoseidonValues {
128 FF q_poseidon2_internal;
129 FF w_l;
130 FF w_r;
131 FF w_o;
132 FF w_4;
133 FF q_l;
134
135 FF w_l_shift;
136 FF w_r_shift;
137 FF w_o_shift;
138 FF w_4_shift;
139 };
140 /*
141 * u1 = (w_1 + q_1)^5 = (1 + 5)^5 = 7776
142 * sum = u1 + w_2 + w_3 + w_4 = 7776 + 2 + 3 + 4 = 7785
143 * matrix mul with calculator:
144 * 1 0x122d9ce41e83c533318954d77a4ebc40eb729f6543ebd5f2e4ecb175ced3bc74
145 * 2 0x185028b6d489be7c029367a14616776b33bf2eada9bb370950d6719f68b5067f
146 * 3 0x00fce289a96b3f4a18562d0ef0ab76ca165e613222aa0c24501377003c5622a8
147 * 4 0x27e7677799fda1694819803f459b76d2fb1c45fdf0773375c72d61e8efb92893
148 */
149 AllPoseidonValues all_poseidon_values{
150 1,
151 1,
152 2,
153 3,
154 4,
155 5,
156 FF(std::string("0x122d9ce41e83c533318954d77a4ebc40eb729f6543ebd5f2e4ecb175ced3bc74")),
157 FF(std::string("0x185028b6d489be7c029367a14616776b33bf2eada9bb370950d6719f68b5067f")),
158 FF(std::string("0x00fce289a96b3f4a18562d0ef0ab76ca165e613222aa0c24501377003c5622a8")),
159 FF(std::string("0x27e7677799fda1694819803f459b76d2fb1c45fdf0773375c72d61e8efb92893"))
160 };
161 const auto parameters = RelationParameters<FF>::get_random();
162 Relation::accumulate(acc, all_poseidon_values, parameters, 1);
163 EXPECT_EQ(acc[0], 0);
164 EXPECT_EQ(acc[1], 0);
165 EXPECT_EQ(acc[2], 0);
166 EXPECT_EQ(acc[3], 0);
167}
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
Base class templates for structures that contain data parameterized by the fundamental polynomials of...
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
Definition ipa.test.cpp:123
typename Flavor::FF FF
field< Bn254FrParams > fr
Definition fr.hpp:174
static RelationParameters get_random()