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));
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));