barretenberg
Loading...
Searching...
No Matches
ecdsa.hpp
1#pragma once
2#include "../hashers/hashers.hpp"
3#include "barretenberg/ecc/curves/secp256k1/secp256k1.hpp"
4
5#include "barretenberg/ecc/curves/secp256r1/secp256r1.hpp"
6
7#include "barretenberg/serialize/msgpack.hpp"
8#include <array>
9#include <string>
10
11namespace crypto {
12namespace ecdsa {
13template <typename Fr, typename G1> struct key_pair {
14 Fr private_key;
15 typename G1::affine_element public_key;
16 // For serialization, update with any new fields
17 MSGPACK_FIELDS(private_key, public_key);
18};
19
20struct signature {
21 std::array<uint8_t, 32> r;
22 std::array<uint8_t, 32> s;
23 uint8_t v;
24 // For serialization, update with any new fields
25 MSGPACK_FIELDS(r, s, v);
26};
27
28template <typename Hash, typename Fq, typename Fr, typename G1>
29signature construct_signature(const std::string& message, const key_pair<Fr, G1>& account);
30
31template <typename Hash, typename Fq, typename Fr, typename G1>
32typename G1::affine_element recover_public_key(const std::string& message, const signature& sig);
33
34template <typename Hash, typename Fq, typename Fr, typename G1>
35bool verify_signature(const std::string& message,
36 const typename G1::affine_element& public_key,
37 const signature& signature);
38
39inline bool operator==(signature const& lhs, signature const& rhs)
40{
41 return lhs.r == rhs.r && lhs.s == rhs.s && lhs.v == rhs.v;
42}
43
44inline std::ostream& operator<<(std::ostream& os, signature const& sig)
45{
46 os << "{ " << sig.r << ", " << sig.s << ", " << static_cast<uint32_t>(sig.v) << " }";
47 return os;
48}
49
50} // namespace ecdsa
51} // namespace crypto
52
53#include "./ecdsa_impl.hpp"
Definition: aes128.cpp:9
Definition: ecdsa.hpp:13
Definition: ecdsa.hpp:20