40template <
typename Curve>
45 using Fq = Curve::fq_ct;
46 using Fr = Curve::bigfr_ct;
47 using G1 = Curve::g1_bigfr_ct;
62 if (
builder.is_write_vk_mode()) {
64 create_dummy_ecdsa_constraint<Curve>(
65 builder, hashed_message_fields, r_fields, s_fields, pub_x_fields, pub_y_fields, result_field);
69 if (!predicate.is_constant()) {
71 for (
size_t idx = 0; idx < 32; idx++) {
74 hashed_message_fields[idx] =
83 typename Curve::AffineElementNative default_point_native(Curve::g1::one + Curve::g1::one);
84 std::array<uint8_t, 32> default_x_bytes;
85 std::array<uint8_t, 32> default_y_bytes;
86 Curve::fq::serialize_to_buffer(default_point_native.x, default_x_bytes.data());
87 Curve::fq::serialize_to_buffer(default_point_native.y, default_y_bytes.data());
89 for (
size_t i = 0; i < 32; ++i) {
94 BB_ASSERT(input.
predicate.value,
"Creating ECDSA constraints with a constant predicate equal to false.");
103 bool_ct result(result_field);
106 Fq pub_x(pub_x_bytes);
107 Fq pub_y(pub_y_bytes);
110 G1 public_key(pub_x, pub_y,
false);
113 bool_ct signature_result =
114 stdlib::ecdsa_verify_signature<Builder, Curve, Fq, Fr, G1>(hashed_message, public_key, { r, s });
118 signature_result.assert_equal(bool_ct::conditional_assign(predicate, result, signature_result));
126template <
typename Curve>
135 using FqNative = Curve::fq;
136 using G1Native = Curve::g1;
149 std::array<uint8_t, 32> buffer_x;
150 std::array<uint8_t, 32> buffer_y;
151 std::vector<bb::fr> mock_pub_x;
152 std::vector<bb::fr> mock_pub_y;
153 FqNative::serialize_to_buffer(G1Native::one.x, &buffer_x[0]);
154 FqNative::serialize_to_buffer(G1Native::one.y, &buffer_y[0]);
155 for (
auto [byte_x, byte_y] :
zip_view(buffer_x, buffer_y)) {
156 mock_pub_x.emplace_back(
bb::fr(byte_x));
157 mock_pub_y.emplace_back(
bb::fr(byte_y));
175template void create_dummy_ecdsa_constraint<stdlib::secp256k1<UltraCircuitBuilder>>(
184template void create_dummy_ecdsa_constraint<stdlib::secp256r1<UltraCircuitBuilder>>(
#define BB_ASSERT(expression,...)
Implements boolean logic in-circuit.
Represents a dynamic array of bytes in-circuit.
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
static field_t conditional_assign(const bool_t< Builder > &predicate, const field_t &lhs, const field_t &rhs)
uint32_t get_witness_index() const
Get the witness index of the current field element.
stdlib::field_t< Builder > field_ct
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr field one()
static constexpr field zero()