-
Notifications
You must be signed in to change notification settings - Fork 333
/
Copy pathcomposer.cpp.hbs
70 lines (53 loc) · 1.95 KB
/
composer.cpp.hbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// AUTOGENERATED FILE
#include "barretenberg/vm/{{snakeCase name}}/generated/composer.hpp"
namespace bb {
using Flavor = {{name}}Flavor;
void {{name}}Composer::compute_witness(CircuitConstructor& circuit)
{
if (computed_witness) {
return;
}
auto polynomials = circuit.compute_polynomials();
for (auto [key_poly, prover_poly] : zip_view(proving_key->get_all(), polynomials.get_unshifted())) {
ASSERT(flavor_get_label(*proving_key, key_poly) == flavor_get_label(polynomials, prover_poly));
key_poly = prover_poly;
}
computed_witness = true;
}
{{name}}Prover {{name}}Composer::create_prover(CircuitConstructor& circuit_constructor)
{
compute_proving_key(circuit_constructor);
compute_witness(circuit_constructor);
compute_commitment_key(circuit_constructor.get_circuit_subgroup_size());
{{name}}Prover output_state(proving_key, proving_key->commitment_key);
return output_state;
}
{{name}}Verifier {{name}}Composer::create_verifier(CircuitConstructor& circuit_constructor)
{
auto verification_key = compute_verification_key(circuit_constructor);
return {{name}}Verifier(std::move(verification_key));
}
std::shared_ptr<Flavor::ProvingKey> {{name}}Composer::compute_proving_key(CircuitConstructor& circuit_constructor)
{
if (proving_key) {
return proving_key;
}
// Initialize proving_key
{
const size_t subgroup_size = circuit_constructor.get_circuit_subgroup_size();
proving_key = std::make_shared<Flavor::ProvingKey>(subgroup_size, 0);
}
return proving_key;
}
std::shared_ptr<Flavor::VerificationKey> {{name}}Composer::compute_verification_key(CircuitConstructor& circuit_constructor)
{
if (verification_key) {
return verification_key;
}
if (!proving_key) {
compute_proving_key(circuit_constructor);
}
verification_key = std::make_shared<Flavor::VerificationKey>(proving_key);
return verification_key;
}
} // namespace bb