37template <
typename Curve>
40 bool has_valid_witness_assignments)
44 using Fq = Curve::fq_ct;
45 using Fr = Curve::bigfr_ct;
46 using G1 = Curve::g1_bigfr_ct;
55 for (
auto&
field : fields) {
60 result.
write(byte_to_append);
74 if (!has_valid_witness_assignments) {
76 create_dummy_ecdsa_constraint<Curve>(
77 builder, hashed_message_fields, r_fields, s_fields, pub_x_fields, pub_y_fields, result_field);
91 Fq pub_x(pub_x_bytes);
92 Fq pub_y(pub_y_bytes);
93 G1 public_key(pub_x, pub_y);
98 pub_x.assert_is_in_field();
99 pub_y.assert_is_in_field();
103 stdlib::ecdsa_verify_signature<Builder, Curve, Fq, Fr, G1>(hashed_message, public_key, { r, s });
115template <
typename Curve>
124 using Builder = Curve::Builder;
125 using FqNative = Curve::fq;
126 using G1Native = Curve::g1;
140 populate_fields(hashed_message_fields, mock_zeros);
143 populate_fields(r_fields, mock_zeros);
144 populate_fields(s_fields, mock_zeros);
147 std::array<uint8_t, 32> buffer_x;
148 std::array<uint8_t, 32> buffer_y;
151 FqNative::serialize_to_buffer(G1Native::one.x, &buffer_x[0]);
152 FqNative::serialize_to_buffer(G1Native::one.y, &buffer_y[0]);
153 for (
auto [byte_x, byte_y] :
zip_view(buffer_x, buffer_y)) {
154 mock_pub_x.emplace_back(
bb::fr(byte_x));
155 mock_pub_y.emplace_back(
bb::fr(byte_y));
157 populate_fields(pub_x_fields, mock_pub_x);
158 populate_fields(pub_y_fields, mock_pub_y);
164template void create_ecdsa_verify_constraints<stdlib::secp256k1<UltraCircuitBuilder>>(
166template void create_ecdsa_verify_constraints<stdlib::secp256k1<MegaCircuitBuilder>>(
168template void create_ecdsa_verify_constraints<stdlib::secp256r1<UltraCircuitBuilder>>(
170template void create_ecdsa_verify_constraints<stdlib::secp256r1<MegaCircuitBuilder>>(
173template void create_dummy_ecdsa_constraint<stdlib::secp256k1<UltraCircuitBuilder>>(
182template void create_dummy_ecdsa_constraint<stdlib::secp256r1<UltraCircuitBuilder>>(
Implements boolean logic in-circuit.
void assert_equal(const bool_t &rhs, std::string const &msg="bool_t::assert_equal") const
Implements copy constraint for bool_t elements.
Represents a dynamic array of bytes in-circuit.
byte_array & write(byte_array const &other)
Appends the contents of another byte_array (other) to the end of this one.
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr field one()
static constexpr field zero()