Skip to content

Commit

Permalink
32-Byte Keccak256 challenges for UltraPlonK (#350)
Browse files Browse the repository at this point in the history
* Add WithKeccak variants.

* Update SYSTEM_COMPOSER dependents.
  • Loading branch information
codygunton authored Apr 13, 2023
1 parent ebed17f commit d104756
Show file tree
Hide file tree
Showing 26 changed files with 254 additions and 271 deletions.
12 changes: 6 additions & 6 deletions cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ TEST(acir_format, test_logic_gate_from_noir_circuit)

std::cout << "made composer" << std::endl;

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();

auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

EXPECT_EQ(verifier.verify_proof(proof), true);
}
Expand Down Expand Up @@ -174,10 +174,10 @@ TEST(acir_format, test_schnorr_verify_pass)
67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, 205, 69, 33, 236, 163, 83, 194,
84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, 250, 39, 239, 1, 0, 0, 0 });

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();

auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

EXPECT_EQ(verifier.verify_proof(proof), true);
}
Expand Down Expand Up @@ -243,10 +243,10 @@ TEST(acir_format, test_schnorr_verify_small_range)
67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, 205, 69, 33, 236, 163, 83, 194,
84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, 250, 39, 239, 1, 0, 0, 0 });

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();

auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

EXPECT_EQ(verifier.verify_proof(proof), true);
}
4 changes: 2 additions & 2 deletions cpp/src/barretenberg/dsl/acir_proofs/acir_proofs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ size_t new_proof(void* pippenger,

create_circuit_with_witness(composer, constraint_system, witness);

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();

auto heapProver = new stdlib::types::Prover(std::move(prover));
auto& proof_data = heapProver->construct_proof().proof_data;
Expand All @@ -144,7 +144,7 @@ bool verify_proof(
create_circuit(composer, constraint_system);
plonk::proof pp = { std::vector<uint8_t>(proof, proof + length) };

auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

verified = verifier.verify_proof(pp);
#ifndef __wasm__
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,20 +229,20 @@ circuit_data get_circuit_data(std::string const& name,

Timer timer;
if (!mock) {
auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();
data.padding_proof = proof.proof_data;
data.num_gates = composer.get_num_gates();
info(name, ": Circuit size: ", data.num_gates);
auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();
info(name, ": Padding verified: ", verifier.verify_proof(proof));
} else {
auto prover = mock_proof_composer.create_prover();
auto prover = mock_proof_composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();
data.padding_proof = proof.proof_data;
data.num_gates = mock_proof_composer.get_num_gates();
info(name, ": Mock circuit size: ", data.num_gates);
auto verifier = mock_proof_composer.create_verifier();
auto verifier = mock_proof_composer.create_ultra_with_keccak_verifier();
info(name, ": Padding verified: ", verifier.verify_proof(proof));
}
info(name, ": Padding proof computed in ", timer.toString(), "s");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ inline std::vector<uint8_t> create_proof(join_split_tx const& tx,
info("Join-split circuit logic failed: ", composer.err());
}

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();

return proof.proof_data;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,12 @@ stdlib::types::Prover new_join_split_prover(join_split_tx const& tx, bool mock)

if (!mock) {
info("composer gates: ", composer.get_num_gates());
return composer.create_prover();
return composer.create_ultra_with_keccak_prover();
} else {
Composer mock_proof_composer(proving_key, nullptr);
join_split_example::proofs::mock::mock_circuit(mock_proof_composer, composer.get_public_inputs());
info("mock composer gates: ", mock_proof_composer.get_num_gates());
return mock_proof_composer.create_prover();
return mock_proof_composer.create_ultra_with_keccak_prover();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,14 @@ TYPED_TEST(join_split, deposit)

BenchmarkInfoCollator benchmark_collator;
Timer timer;
auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto build_time = timer.toString();
benchmark_collator.benchmark_info_deferred(
GET_COMPOSER_NAME_STRING(Composer::type), "Core", "join split", "Build time", build_time);

auto proof = prover.construct_proof();

auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();
bool verified = verifier.verify_proof(proof);

ASSERT_TRUE(verified);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ TEST(mock_circuit_tests, test_simple_circuit)
Composer composer = Composer("../srs_db/ignition");
mock_circuit(composer, public_inputs);

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
plonk::proof proof = prover.construct_proof();

std::cout << "gates: " << composer.get_num_gates() << std::endl;
std::cout << "proof size: " << proof.proof_data.size() << std::endl;
std::cout << "public inputs size: " << composer.public_inputs.size() << std::endl;

auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();
bool result = verifier.verify_proof(proof);

EXPECT_TRUE(result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ TEST(value_note, commits)
auto result = circuit_note.commitment;
result.assert_equal(expected);

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();

EXPECT_FALSE(composer.failed());
printf("composer gates = %zu\n", composer.get_num_gates());
auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

plonk::proof proof = prover.construct_proof();

Expand Down Expand Up @@ -64,11 +64,11 @@ TEST(value_note, commits_with_0_value)
auto result = circuit_note.commitment;
result.assert_equal(expected);

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();

EXPECT_FALSE(composer.failed());
printf("composer gates = %zu\n", composer.get_num_gates());
auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

plonk::proof proof = prover.construct_proof();

Expand Down Expand Up @@ -96,11 +96,11 @@ TEST(value_note, commit_with_oversized_asset_id_fails)
auto result = circuit_note.commitment;
result.assert_equal(expected);

auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();

EXPECT_TRUE(composer.failed());
printf("composer gates = %zu\n", composer.get_num_gates());
auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();

plonk::proof proof = prover.construct_proof();

Expand Down
12 changes: 6 additions & 6 deletions cpp/src/barretenberg/join_split_example/proofs/verify.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,12 @@ auto verify_internal(Composer& composer, Tx& tx, CircuitData const& cd, char con
auto proof = prover.construct_proof();
result.proof_data = proof.proof_data;
} else {
auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();
result.proof_data = proof.proof_data;
}
} else {
auto prover = composer.create_prover();
auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();
result.proof_data = proof.proof_data;
}
Expand All @@ -108,12 +108,12 @@ auto verify_internal(Composer& composer, Tx& tx, CircuitData const& cd, char con
auto proof = prover.construct_proof();
result.proof_data = proof.proof_data;
} else {
auto prover = mock_proof_composer.create_prover();
auto prover = mock_proof_composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();
result.proof_data = proof.proof_data;
}
} else {
auto prover = mock_proof_composer.create_prover();
auto prover = mock_proof_composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();
result.proof_data = proof.proof_data;
}
Expand All @@ -126,11 +126,11 @@ auto verify_internal(Composer& composer, Tx& tx, CircuitData const& cd, char con
auto verifier = composer.create_ultra_to_standard_verifier();
result.verified = verifier.verify_proof({ result.proof_data });
} else {
auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();
result.verified = verifier.verify_proof({ result.proof_data });
}
} else {
auto verifier = composer.create_verifier();
auto verifier = composer.create_ultra_with_keccak_verifier();
result.verified = verifier.verify_proof({ result.proof_data });
}

Expand Down
58 changes: 58 additions & 0 deletions cpp/src/barretenberg/plonk/composer/ultra_composer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -890,6 +890,50 @@ UltraToStandardProver UltraComposer::create_ultra_to_standard_prover()
return output_state;
}

/**
* @brief Uses slightly different settings from the UltraProver.
*/
UltraWithKeccakProver UltraComposer::create_ultra_with_keccak_prover()
{
compute_proving_key();
compute_witness();

UltraWithKeccakProver output_state(circuit_proving_key, create_manifest(public_inputs.size()));

std::unique_ptr<ProverPermutationWidget<4, true>> permutation_widget =
std::make_unique<ProverPermutationWidget<4, true>>(circuit_proving_key.get());

std::unique_ptr<ProverPlookupWidget<>> plookup_widget =
std::make_unique<ProverPlookupWidget<>>(circuit_proving_key.get());

std::unique_ptr<ProverPlookupArithmeticWidget<ultra_with_keccak_settings>> arithmetic_widget =
std::make_unique<ProverPlookupArithmeticWidget<ultra_with_keccak_settings>>(circuit_proving_key.get());

std::unique_ptr<ProverGenPermSortWidget<ultra_with_keccak_settings>> sort_widget =
std::make_unique<ProverGenPermSortWidget<ultra_with_keccak_settings>>(circuit_proving_key.get());

std::unique_ptr<ProverEllipticWidget<ultra_with_keccak_settings>> elliptic_widget =
std::make_unique<ProverEllipticWidget<ultra_with_keccak_settings>>(circuit_proving_key.get());

std::unique_ptr<ProverPlookupAuxiliaryWidget<ultra_with_keccak_settings>> auxiliary_widget =
std::make_unique<ProverPlookupAuxiliaryWidget<ultra_with_keccak_settings>>(circuit_proving_key.get());

output_state.random_widgets.emplace_back(std::move(permutation_widget));
output_state.random_widgets.emplace_back(std::move(plookup_widget));

output_state.transition_widgets.emplace_back(std::move(arithmetic_widget));
output_state.transition_widgets.emplace_back(std::move(sort_widget));
output_state.transition_widgets.emplace_back(std::move(elliptic_widget));
output_state.transition_widgets.emplace_back(std::move(auxiliary_widget));

std::unique_ptr<KateCommitmentScheme<ultra_with_keccak_settings>> kate_commitment_scheme =
std::make_unique<KateCommitmentScheme<ultra_with_keccak_settings>>();

output_state.commitment_scheme = std::move(kate_commitment_scheme);

return output_state;
}

UltraVerifier UltraComposer::create_verifier()
{
compute_verification_key();
Expand Down Expand Up @@ -918,6 +962,20 @@ UltraToStandardVerifier UltraComposer::create_ultra_to_standard_verifier()
return output_state;
}

UltraWithKeccakVerifier UltraComposer::create_ultra_with_keccak_verifier()
{
compute_verification_key();

UltraWithKeccakVerifier output_state(circuit_verification_key, create_manifest(public_inputs.size()));

std::unique_ptr<KateCommitmentScheme<ultra_with_keccak_settings>> kate_commitment_scheme =
std::make_unique<KateCommitmentScheme<ultra_with_keccak_settings>>();

output_state.commitment_scheme = std::move(kate_commitment_scheme);

return output_state;
}

void UltraComposer::initialize_precomputed_table(
const plookup::BasicTableId id,
bool (*generator)(std::vector<fr>&, std ::vector<fr>&, std::vector<fr>&),
Expand Down
3 changes: 3 additions & 0 deletions cpp/src/barretenberg/plonk/composer/ultra_composer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ class UltraComposer : public ComposerBase {
UltraToStandardProver create_ultra_to_standard_prover();
UltraToStandardVerifier create_ultra_to_standard_verifier();

UltraWithKeccakProver create_ultra_with_keccak_prover();
UltraWithKeccakVerifier create_ultra_with_keccak_verifier();

void create_add_gate(const add_triple& in) override;

void create_big_add_gate(const add_quad& in, const bool use_next_gate_w_4 = false);
Expand Down
Loading

0 comments on commit d104756

Please # to comment.