Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
pedersen.test.cpp
Go to the documentation of this file.
8#include "pedersen.hpp"
9
10using namespace bb;
11namespace {
13}
14
15template <typename Builder> class StdlibPedersen : public testing::Test {
17
18 using fr_ct = typename _curve::ScalarField;
22
23 public:
24 static void test_pedersen()
25 {
26
28
29 fr left_in = fr::random_element();
30 fr right_in = fr::random_element();
31
32 // ensure left has skew 1, right has skew 0
33 if ((left_in.from_montgomery_form().data[0] & 1) == 1) {
34 left_in += fr::one();
35 }
36 if ((right_in.from_montgomery_form().data[0] & 1) == 0) {
37 right_in += fr::one();
38 }
39
40 fr_ct left = public_witness_ct(&builder, left_in);
41 fr_ct right = witness_ct(&builder, right_in);
42
43 builder.fix_witness(left.witness_index, left.get_value());
44 builder.fix_witness(right.witness_index, right.get_value());
45
46 auto out = pedersen_commitment::commit({ left, right });
47
48 info("num gates = ", builder.get_estimated_num_finalized_gates());
49
50 bool result = CircuitChecker::check(builder);
51 EXPECT_EQ(result, true);
52
53 auto commit_native = crypto::pedersen_commitment::commit_native({ left.get_value(), right.get_value() });
54
55 EXPECT_EQ(out.x.get_value(), commit_native.x);
56 EXPECT_EQ(out.y.get_value(), commit_native.y);
57 }
58
59 static void test_hash_constants()
60 {
62
63 std::vector<fr> inputs;
65
66 for (size_t i = 0; i < 8; ++i) {
67 inputs.push_back(bb::fr::random_element());
68 if (i % 2 == 1) {
69 witness_inputs.push_back(witness_ct(&builder, inputs[i]));
70 } else {
71 witness_inputs.push_back(fr_ct(&builder, inputs[i]));
72 }
73 }
74
75 auto expected = crypto::pedersen_commitment::commit_native(inputs);
76 auto result = pedersen_commitment::commit(witness_inputs);
77
78 EXPECT_EQ(result.x.get_value(), expected.x);
79 EXPECT_EQ(result.y.get_value(), expected.y);
80 }
81};
82
83using CircuitTypes = testing::Types<bb::UltraCircuitBuilder>;
84
86
88{
89 TestFixture::test_pedersen();
90};
91
93{
94 TestFixture::test_hash_constants();
95};
typename stdlib::pedersen_commitment< Builder > pedersen_commitment
typename _curve::witness_ct witness_ct
static void test_hash_constants()
typename _curve::ScalarField fr_ct
typename _curve::public_witness_ct public_witness_ct
static void test_pedersen()
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static AffineElement commit_native(const std::vector< Fq > &inputs, GeneratorContext context={})
Given a vector of fields, generate a pedersen commitment using the indexed generators.
Definition pedersen.cpp:24
bb::fr get_value() const
Given a := *this, compute its value given by a.v * a.mul + a.add.
Definition field.cpp:827
uint32_t witness_index
Definition field.hpp:132
void info(Args... args)
Definition log.hpp:70
AluTraceBuilder builder
Definition alu.test.cpp:123
numeric::RNG & engine
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Definition engine.cpp:190
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
testing::Types< bb::UltraCircuitBuilder > CircuitTypes
static constexpr field one()
static field random_element(numeric::RNG *engine=nullptr) noexcept
BB_INLINE constexpr field from_montgomery_form() const noexcept
field_t< CircuitBuilder > ScalarField
Definition bn254.hpp:33
public_witness_t< CircuitBuilder > public_witness_ct
Definition bn254.hpp:42
witness_t< CircuitBuilder > witness_ct
Definition bn254.hpp:41