14#include "gtest/gtest.h"
53 .linear_combinations = {},
61 expr.linear_combinations.push_back(
79 .linear_combinations = {},
129 uint32_t block_id = 0)
131 std::vector<Acir::Opcode> opcodes;
134 std::vector<Acir::Witness> init_witnesses;
135 init_witnesses.reserve(constraint.
init.size());
136 for (
const auto& init_val : constraint.
init) {
148 for (
const auto& mem_op : constraint.
trace) {
166 if (mul_quad.
a != bb::stdlib::IS_CONSTANT && mul_quad.
b != bb::stdlib::IS_CONSTANT &&
207 if (constraint.is_xor_gate) {
213 .num_bits = constraint.num_bits,
222 .num_bits = constraint.num_bits,
230 .num_bits = constraint.num_bits,
233 std::vector<Acir::FunctionInput>
inputs;
234 for (
const auto& input : constraint.inputs) {
238 for (
size_t i = 0; i < 16; ++i) {
242 for (
size_t i = 0; i < 16; ++i) {
245 std::vector<Acir::Witness> outputs;
246 for (
const auto& out : constraint.outputs) {
258 for (
size_t i = 0; i < 16; ++i) {
262 for (
size_t i = 0; i < 8; ++i) {
266 for (
size_t i = 0; i < 8; ++i) {
272 .hash_values = hash_values,
277 for (
size_t i = 0; i < 32; ++i) {
281 for (
size_t i = 0; i < 64; ++i) {
285 for (
size_t i = 0; i < 32; ++i) {
289 for (
size_t i = 0; i < 32; ++i) {
298 .public_key_y = public_key_y,
299 .signature = signature,
300 .hashed_message = hashed_message,
301 .predicate = predicate,
309 .public_key_y = public_key_y,
310 .signature = signature,
311 .hashed_message = hashed_message,
312 .predicate = predicate,
316 std::vector<Acir::FunctionInput>
inputs;
317 for (
const auto& input : constraint.inputs) {
321 for (
size_t i = 0; i < 32; ++i) {
330 std::vector<Acir::FunctionInput>
inputs;
331 for (
const auto& input : constraint.inputs) {
335 for (
size_t i = 0; i < 32; ++i) {
345 for (
size_t i = 0; i < 25; ++i) {
349 for (
size_t i = 0; i < 25; ++i) {
358 std::vector<Acir::FunctionInput>
inputs;
359 for (
const auto& input : constraint.state) {
362 std::vector<Acir::Witness> outputs;
363 for (
const auto& out : constraint.result) {
373 std::vector<Acir::FunctionInput> points;
374 for (
const auto& pt : constraint.points) {
377 std::vector<Acir::FunctionInput> scalars;
378 for (
const auto& sc : constraint.scalars) {
415 std::vector<Acir::FunctionInput> verification_key;
416 for (
const auto& key_idx : constraint.key) {
419 std::vector<Acir::FunctionInput> proof;
420 for (
const auto& proof_idx : constraint.proof) {
423 std::vector<Acir::FunctionInput> public_inputs;
424 for (
const auto& pub_input_idx : constraint.public_inputs) {
432 .public_inputs =
std::move(public_inputs),
434 .proof_type = constraint.proof_type,
443 .linear_combinations = {},
444 .q_c = constraint.const_scaling.to_buffer(),
454 .linear_combinations = {},
455 .q_c = constraint[0].const_scaling.to_buffer(),
458 for (
const auto& mul_quad : constraint) {
481 .current_witness_index = max_witness_index,
483 .private_parameters = {},
486 .assert_messages = {},
502template <
typename Constra
intType>
525 typename T::AcirConstraint;
526 typename T::InvalidWitness;
527 typename T::InvalidWitness::Target;
533 { T::InvalidWitness::Target::None };
541 typename T::AcirConstraint& constraint,
543 const typename T::InvalidWitness::Target& invalid_witness_target) {
576 base_instance.generate_constraints(constraint, witness_values);
577 base_instance.invalidate_witness(constraint, witness_values, invalid_witness_target);
579 return { constraint, witness_values };
602 constraint,
static_cast<uint32_t
>(witness_values.size()) - 1);
604 AcirProgram program{ constraint_system, witness_values };
605 auto builder = create_circuit<Builder>(program);
623 size_t num_gates = 0;
630 constraint,
static_cast<uint32_t
>(witness_values.size()) - 1);
633 std::shared_ptr<VerificationKey> vk_from_witness;
635 AcirProgram program{ constraint_system, witness_values };
636 auto builder = create_circuit<Builder>(program);
637 num_gates =
builder.get_num_finalized_gates_inefficient();
646 std::shared_ptr<VerificationKey> vk_from_constraint;
649 auto builder = create_circuit<Builder>(program);
654 EXPECT_EQ(*vk_from_witness, *vk_from_constraint) <<
"Mismatch in the vks";
666 std::vector<std::string> error_msgs;
667 for (
auto [target, label] :
zip_view(InvalidWitness::get_all(), InvalidWitness::get_labels())) {
668 auto [circuit_checker_result, builder_failed, builder_err] =
test_constraints(target);
669 error_msgs.emplace_back(builder_err);
671 if (target != InvalidWitness::Target::None) {
672 bool circuit_check_failed = !circuit_checker_result;
673 bool assert_eq_error_present = (builder_err.find(
"assert_eq") != std::string::npos);
674 EXPECT_TRUE(circuit_check_failed || assert_eq_error_present)
675 <<
"Circuit checker succeeded unexpectedly and no assert_eq failure for invalid witness target " +
677 EXPECT_TRUE(builder_failed) <<
"Builder succeeded for invalid witness target " + label;
679 EXPECT_TRUE(circuit_checker_result)
680 <<
"Circuit checker failed unexpectedly for invalid witness target " + label;
681 EXPECT_FALSE(builder_failed) <<
"Builder failed unexpectedly for invalid witness target " + label;
std::shared_ptr< Napi::ThreadSafeFunction > instance
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
UltraKeccakFlavor::VerificationKey VerificationKey
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::vector< uint8_t > to_buffer(T const &value)
std::vector< Acir::FunctionInput > inputs
std::vector< Acir::FunctionInput > inputs
std::vector< Acir::FunctionInput > inputs
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input1
std::shared_ptr< std::array< Acir::FunctionInput, 25 > > inputs
std::vector< Acir::FunctionInput > points
std::vector< Acir::FunctionInput > inputs
Acir::FunctionInput input
std::vector< Acir::FunctionInput > verification_key
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > inputs
std::variant< AES128Encrypt, AND, XOR, RANGE, Blake2s, Blake3, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Keccakf1600, RecursiveAggregation, Poseidon2Permutation, Sha256Compression > value
std::variant< Memory, CallData, ReturnData > value
std::string function_name
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness > > linear_combinations
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness, Acir::Witness > > mul_terms
Acir::Expression operation
Acir::BlackBoxFuncCall value
std::variant< AssertZero, BlackBoxFuncCall, MemoryOp, MemoryInit, BrilligCall, Call > value
static constexpr field one()
BB_INLINE constexpr bool is_zero() const noexcept
BB_INLINE std::vector< uint8_t > to_buffer() const
static constexpr field zero()
void throw_or_abort(std::string const &err)