barretenberg
Loading...
Searching...
No Matches
transcript.hpp
1#pragma once
2#include "manifest.hpp"
3#include <array>
4#include <exception>
5#include <map>
6#include <string>
7#include <vector>
8
9#include "barretenberg/plonk/proof_system/verification_key/verification_key.hpp"
10namespace transcript {
11
13 static constexpr size_t SECURITY_PARAMETER_SIZE = 32;
14 static constexpr size_t PRNG_OUTPUT_SIZE = 32;
15
16 static std::array<uint8_t, PRNG_OUTPUT_SIZE> hash(std::vector<uint8_t> const& buffer);
17};
18
20 static constexpr size_t SECURITY_PARAMETER_SIZE = 16;
21 static constexpr size_t PRNG_OUTPUT_SIZE = 32;
22
23 static std::array<uint8_t, PRNG_OUTPUT_SIZE> hash(std::vector<uint8_t> const& input);
24};
25
26enum HashType { Keccak256, PedersenBlake3s };
27
35 static constexpr size_t PRNG_OUTPUT_SIZE = 32;
36 struct challenge {
37 std::array<uint8_t, PRNG_OUTPUT_SIZE> data;
38 };
39
40 public:
42
51 Transcript(const Manifest input_manifest,
52 const HashType hash_type = HashType::Keccak256,
53 const size_t challenge_bytes = 32)
54 : num_challenge_bytes(challenge_bytes)
55 , hasher(hash_type)
56 , manifest(input_manifest)
57 {
58 // Just to be safe, because compilers can be weird.
59 current_challenge.data = {};
61 }
62
73 Transcript(const std::vector<uint8_t>& input_transcript,
74 const Manifest input_manifest,
75 const HashType hash_type = HashType::Keccak256,
76 const size_t challenge_bytes = 32);
77
78 Manifest get_manifest() const { return manifest; }
79
80 void add_element(const std::string& element_name, const std::vector<uint8_t>& buffer);
81
82 void apply_fiat_shamir(const std::string& challenge_name /*, const bool debug = false*/);
83
84 bool has_challenge(const std::string& challenge_name) const;
85
86 std::array<uint8_t, PRNG_OUTPUT_SIZE> get_challenge(const std::string& challenge_name, const size_t idx = 0) const;
87
88 int get_challenge_index_from_map(const std::string& challenge_map_name) const;
89
90 std::array<uint8_t, PRNG_OUTPUT_SIZE> get_challenge_from_map(const std::string& challenge_name,
91 const std::string& challenge_map_name) const;
92
93 size_t get_num_challenges(const std::string& challenge_name) const;
94
95 std::vector<uint8_t> get_element(const std::string& element_name) const;
96
97 size_t get_element_size(const std::string& element_name) const;
98
99 std::vector<uint8_t> export_transcript() const;
100
102
103 void mock_inputs_prior_to_challenge(const std::string& challenge_name, size_t circuit_size = 1);
104
105 void print();
106
107 private:
108 // The round of the protocol
109 size_t current_round = 0;
110 size_t num_challenge_bytes;
111 HashType hasher;
112 std::map<std::string, std::vector<uint8_t>> elements;
113
114 std::map<std::string, std::vector<challenge>> challenges;
115
116 challenge current_challenge;
117
118 Manifest manifest;
119 std::map<std::string, int> challenge_map;
120};
121
122} // namespace transcript
Definition: manifest.hpp:11
Definition: transcript.hpp:34
std::array< uint8_t, PRNG_OUTPUT_SIZE > get_challenge(const std::string &challenge_name, const size_t idx=0) const
Definition: transcript.cpp:308
std::vector< uint8_t > get_element(const std::string &element_name) const
Definition: transcript.cpp:392
void compute_challenge_map()
Definition: transcript.cpp:111
Transcript(const Manifest input_manifest, const HashType hash_type=HashType::Keccak256, const size_t challenge_bytes=32)
Definition: transcript.hpp:51
std::array< uint8_t, PRNG_OUTPUT_SIZE > get_challenge_from_map(const std::string &challenge_name, const std::string &challenge_map_name) const
Definition: transcript.cpp:351
size_t get_num_challenges(const std::string &challenge_name) const
Definition: transcript.cpp:377
std::vector< uint8_t > export_transcript() const
Definition: transcript.cpp:422
int get_challenge_index_from_map(const std::string &challenge_map_name) const
Definition: transcript.cpp:324
bool has_challenge(const std::string &challenge_name) const
Definition: transcript.cpp:337
void apply_fiat_shamir(const std::string &challenge_name)
Definition: transcript.cpp:171
size_t get_element_size(const std::string &element_name) const
Definition: transcript.cpp:405
void mock_inputs_prior_to_challenge(const std::string &challenge_name, size_t circuit_size=1)
Mock prover transcript interactions up to fiat-shamir of a given challenge.
Definition: transcript.cpp:133
Definition: verification_key.hpp:48
Definition: transcript.hpp:19
Definition: transcript.hpp:12