32 bool tweak_pub_key_x =
false,
33 bool tweak_pub_key_y =
false)
35 std::string message_string =
"Instructions unclear, ask again later.";
38 std::vector<uint8_t> message_buffer(message_string.begin(), message_string.end());
48 ecdsa_construct_signature<Sha256Hasher, FqNative, FrNative, G1Native>(message_string, account);
51 std::array<uint8_t, 32> buffer_x;
52 std::array<uint8_t, 32> buffer_y;
53 FqNative::serialize_to_buffer(account.
public_key.x, &buffer_x[0]);
54 FqNative::serialize_to_buffer(account.
public_key.y, &buffer_y[0]);
55 if (tweak_pub_key_x || tweak_pub_key_y) {
56 std::vector<uint8_t> modulus_plus_one = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
57 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
58 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30 };
59 for (
auto [
byte, tweaked_byte] :
zip_view(tweak_pub_key_x ? buffer_x : buffer_y, modulus_plus_one)) {
65 size_t num_variables = 0;
67 std::array<uint32_t, 32> hashed_message_indices =
68 add_to_witness_and_track_indices<uint8_t, 32>(witness_values, std::span(hashed_message));
69 num_variables += hashed_message_indices.size();
71 std::array<uint32_t, 32> pub_x_indices =
72 add_to_witness_and_track_indices<uint8_t, 32>(witness_values, std::span(buffer_x));
73 num_variables += pub_x_indices.size();
75 std::array<uint32_t, 32> pub_y_indices =
76 add_to_witness_and_track_indices<uint8_t, 32>(witness_values, std::span(buffer_y));
77 num_variables += pub_y_indices.size();
79 std::array<uint32_t, 32> r_indices =
80 add_to_witness_and_track_indices<uint8_t, 32>(witness_values, std::span(signature.
r));
81 num_variables += r_indices.size();
83 std::array<uint32_t, 32> s_indices =
84 add_to_witness_and_track_indices<uint8_t, 32>(witness_values, std::span(signature.
s));
85 num_variables += s_indices.size();
87 uint32_t result_index =
static_cast<uint32_t
>(num_variables);
89 witness_values.emplace_back(result);
93 std::array<uint32_t, 64> signature_indices;
94 std::ranges::copy(r_indices, signature_indices.begin());
95 std::ranges::copy(s_indices, signature_indices.begin() + 32);
98 .signature = signature_indices,
99 .pub_x_indices = pub_x_indices,
100 .pub_y_indices = pub_y_indices,
102 .result = result_index };
104 return num_variables;