2#include "../../primitives/bigfield/bigfield.hpp"
3#include "../../primitives/biggroup/biggroup.hpp"
4#include "../../primitives/curves/secp256k1.hpp"
5#include "../../primitives/curves/secp256r1.hpp"
10#include <gtest/gtest.h>
15template <
class Curve>
class EcdsaTests :
public ::testing::Test {
25 using Fr = Curve::bigfr_ct;
26 using Fq = Curve::fq_ct;
27 using G1 = Curve::g1_bigfr_ct;
36 bool tamper_with_signature)
43 ecdsa_construct_signature<Sha256Hasher, FqNative, FrNative, G1Native>(message_string, account);
45 if (tamper_with_signature) {
49 return { account, signature };
53 std::string message_string,
61 std::vector<uint8_t> rr(signature.
r.begin(), signature.
r.end());
62 std::vector<uint8_t> ss(signature.
s.begin(), signature.
s.end());
63 std::vector<uint8_t> vv = { signature.
v };
68 return { message, pub_key, sig };
74 std::string message_string =
"Instructions unclear, ask again later.";
76 auto [account, signature] =
80 bool native_verification = ecdsa_verify_signature<Sha256Hasher, FqNative, FrNative, G1Native>(
81 message_string, account.public_key, signature);
82 EXPECT_EQ(native_verification, !tamper_with_signature);
95 stdlib::ecdsa_verify_signature<Builder, Curve, Fq, Fr, G1>(hashed_message, public_key, sig);
100 EXPECT_EQ(signature_result.
get_value(), !tamper_with_signature);
105 "Signature Verification Test",
107 builder.get_estimated_num_finalized_gates());
109 EXPECT_EQ(proof_result, !tamper_with_signature);
113using Curves = testing::Types<stdlib::secp256k1<UltraCircuitBuilder>,
121 TestFixture::test_verify_signature(
false);
126 TestFixture::test_verify_signature(
true);
StdlibEcdsaData create_stdlib_ecdsa_data(Builder &builder, std::string message_string, ecdsa_key_pair< FrNative, G1Native > &account, ecdsa_signature &signature)
void test_verify_signature(bool tamper_with_signature)
std::pair< ecdsa_key_pair< FrNative, G1Native >, ecdsa_signature > generate_dummy_ecdsa_data(std::string message_string, bool tamper_with_signature)
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static byte_array< Builder > hash(const byte_array_ct &input)
Implements boolean logic in-circuit.
Represents a dynamic array of bytes in-circuit.
std::vector< uint8_t > get_value() const
A helper converting a byte_array into the vector of its uint8_t values.
void benchmark_info(Args...)
Info used to store circuit statistics during CI/CD with concrete structure. Writes straight to log.
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
::testing::Types< curve::BN254, curve::Grumpkin > Curves
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
stdlib::ecdsa_signature< Builder > sig
stdlib::byte_array< Builder > message
G1::affine_element public_key
std::array< uint8_t, 32 > r
std::array< uint8_t, 32 > s