Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
biggroup_secp256r1.test.cpp
Go to the documentation of this file.
1#include "../bigfield/bigfield.hpp"
2#include "../biggroup/biggroup.hpp"
3#include "../bool/bool.hpp"
4#include "../field/field.hpp"
11#include "gtest/gtest.h"
12
13using namespace bb;
14
15namespace {
17}
18
19template <typename Curve> class stdlibBiggroupSecp256r1 : public testing::Test {
20 public:
21 using element_ct = typename Curve::Group;
22 using scalar_ct = typename Curve::ScalarField;
23
24 using fr = typename Curve::ScalarFieldNative;
25 using g1 = typename Curve::GroupNative;
27
28 using Builder = typename Curve::Builder;
29
30 static constexpr auto EXPECT_CIRCUIT_CORRECTNESS = [](Builder& builder, bool expected_result = true) {
31 Builder copy = builder;
32 copy.finalize_circuit();
33 const size_t num_gates = copy.get_num_finalized_gates();
34 const size_t tables_size = copy.get_tables_size();
35 info("num gates = ", num_gates, ", tables_size = ", tables_size, ", max = ", std::max(num_gates, tables_size));
37 };
38
40 {
42 const size_t num_repetitions = 4;
43 for (size_t i = 0; i < num_repetitions; ++i) {
46
47 auto output = element_ct::secp256r1_fixed_base_mul(u);
48
49 auto expected = affine_element(g1::one * scalar);
50 EXPECT_EQ(output.x().get_value().lo, uint256_t(expected.x));
51 EXPECT_EQ(output.y().get_value().lo, uint256_t(expected.y));
52 }
53
55 }
56
58 {
62
63 auto output = element_ct::secp256r1_fixed_base_mul(u);
64 auto expected = affine_element(g1::one * scalar);
65 EXPECT_EQ(output.x().get_value().lo, uint256_t(expected.x));
66 EXPECT_EQ(output.y().get_value().lo, uint256_t(expected.y));
67
69 }
70
72 {
74 fr scalar_a(fr::random_element(&engine));
75 fr scalar_b(fr::random_element(&engine));
76 fr scalar_c(fr::random_element(&engine));
77 element_ct P_a = element_ct::from_witness(&builder, g1::one * scalar_c);
80
81 auto output = element_ct::secp256r1_ecdsa_mul(P_a, u1, u2);
82
83 auto expected = affine_element(g1::one * (scalar_c * scalar_b) + g1::one * scalar_a);
84 EXPECT_EQ(output.result.x().get_value().lo, uint256_t(expected.x));
85 EXPECT_EQ(output.result.y().get_value().lo, uint256_t(expected.y));
86
88 }
89
91 {
93 fr scalar_b(fr::random_element(&engine));
94 fr scalar_c(fr::random_element(&engine));
95 element_ct P_a = element_ct::from_witness(&builder, g1::one * scalar_c);
98
99 auto output = element_ct::secp256r1_ecdsa_mul(P_a, u1, u2);
100
101 // u₁·G + u₂·Q = 0 + scalar_c·scalar_b·G
102 auto expected = affine_element(g1::one * (scalar_c * scalar_b));
103 EXPECT_EQ(output.result.x().get_value().lo, uint256_t(expected.x));
104 EXPECT_EQ(output.result.y().get_value().lo, uint256_t(expected.y));
105
107 }
108};
109
111 testing::Types<stdlib::secp256r1<bb::UltraCircuitBuilder>, stdlib::secp256r1<bb::MegaCircuitBuilder>>;
112
114
116{
117 TestFixture::test_fixed_base_mul_secp256r1();
118}
119
120TYPED_TEST(stdlibBiggroupSecp256r1, FixedBaseMulSingleCallGateCount)
121{
122 TestFixture::test_fixed_base_mul_secp256r1_single_call_gate_count();
123}
124
126{
127 TestFixture::test_ecdsa_mul_secp256r1_gate_count();
128}
129
131{
132 TestFixture::test_ecdsa_mul_secp256r1_u1_zero();
133}
testing::Types< stdlib::secp256r1< bb::UltraCircuitBuilder >, stdlib::secp256r1< bb::MegaCircuitBuilder > > Secp256r1TestTypes
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
typename grumpkin::g1 Group
Definition grumpkin.hpp:62
group_elements::affine_element< Fq, Fr, Params > affine_element
Definition group.hpp:44
static constexpr element one
Definition group.hpp:48
static bigfield from_witness(Builder *ctx, const bb::field< T > &input)
Definition bigfield.hpp:322
static void test_fixed_base_mul_secp256r1_single_call_gate_count()
static constexpr auto EXPECT_CIRCUIT_CORRECTNESS
typename Curve::ScalarFieldNative fr
static void test_ecdsa_mul_secp256r1_gate_count()
typename Curve::Builder Builder
typename Curve::ScalarField scalar_ct
typename Curve::GroupNative g1
typename g1::affine_element affine_element
#define info(...)
Definition log.hpp:93
AluTraceBuilder builder
Definition alu.test.cpp:124
bool expected_result
numeric::RNG & engine
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Definition engine.cpp:245
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
TYPED_TEST_SUITE(CommitmentKeyTest, Curves)
TYPED_TEST(CommitmentKeyTest, CommitToZeroPoly)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static field random_element(numeric::RNG *engine=nullptr) noexcept
static constexpr field zero()