|
purify
C++ Purify implementation with native circuit and BPP support
|
Native in-memory representation of a Bulletproof-style arithmetic circuit. More...
#include <bulletproof.hpp>
Data Structures | |
| struct | PackedSlackPlan |
| class | PackedWithSlack |
| Resettable packed circuit representation backed by one aligned owning slab. More... | |
Public Member Functions | |
| NativeBulletproofCircuit ()=default | |
| NativeBulletproofCircuit (std::size_t gates, std::size_t commitments, std::size_t bits=0) | |
| void | resize (std::size_t gates, std::size_t commitments, std::size_t bits=0) |
| Reinitializes the circuit shape and clears all accumulated constraints. | |
| bool | has_valid_shape () const |
| Returns true when the sparse matrix vectors match the declared circuit dimensions. | |
| std::size_t | add_constraint (const FieldElement &constant=FieldElement::zero()) |
| Appends a new linear constraint constant term and returns its index. | |
| void | add_left_term (std::size_t gate_idx, std::size_t constraint_idx, const FieldElement &scalar) |
| Adds a coefficient to the left-wire matrix. | |
| void | add_right_term (std::size_t gate_idx, std::size_t constraint_idx, const FieldElement &scalar) |
| Adds a coefficient to the right-wire matrix. | |
| void | add_output_term (std::size_t gate_idx, std::size_t constraint_idx, const FieldElement &scalar) |
| Adds a coefficient to the output-wire matrix. | |
| void | add_commitment_term (std::size_t commitment_idx, std::size_t constraint_idx, const FieldElement &scalar) |
| Adds a coefficient to the commitment matrix using the Bulletproof sign convention. | |
| bool | evaluate (const BulletproofAssignmentData &assignment) const |
| Evaluates the circuit against a witness assignment and checks all gate and row equations. | |
| Result< PackedWithSlack > | pack_with_slack () const |
| Packs the circuit into one aligned slab with no additional row or constraint slack. | |
| Result< PackedWithSlack > | pack_with_slack (const PackedSlackPlan &slack) const |
| Packs the circuit into one aligned slab with caller-specified slack for later mutation. | |
Data Fields | |
| std::size_t | n_gates = 0 |
| std::size_t | n_commitments = 0 |
| std::size_t | n_bits = 0 |
| std::vector< NativeBulletproofCircuitRow > | wl |
| std::vector< NativeBulletproofCircuitRow > | wr |
| std::vector< NativeBulletproofCircuitRow > | wo |
| std::vector< NativeBulletproofCircuitRow > | wv |
| std::vector< FieldElement > | c |
The matrices are stored in sparse row form per gate column so the circuit can be built directly in C++ without parser round-trips.
Definition at line 81 of file bulletproof.hpp.
|
default |
| purify::NativeBulletproofCircuit::NativeBulletproofCircuit | ( | std::size_t | gates, |
| std::size_t | commitments, | ||
| std::size_t | bits = 0 |
||
| ) |
Definition at line 842 of file bulletproof.cpp.
| void purify::NativeBulletproofCircuit::add_commitment_term | ( | std::size_t | commitment_idx, |
| std::size_t | constraint_idx, | ||
| const FieldElement & | scalar | ||
| ) |
Definition at line 880 of file bulletproof.cpp.
References n_commitments, scalar, and wv.
| std::size_t purify::NativeBulletproofCircuit::add_constraint | ( | const FieldElement & | constant = FieldElement::zero() | ) |
Definition at line 863 of file bulletproof.cpp.
References c.
Referenced by purify::BulletproofTranscript::add_pubkey_and_out().
| void purify::NativeBulletproofCircuit::add_left_term | ( | std::size_t | gate_idx, |
| std::size_t | constraint_idx, | ||
| const FieldElement & | scalar | ||
| ) |
Definition at line 868 of file bulletproof.cpp.
| void purify::NativeBulletproofCircuit::add_output_term | ( | std::size_t | gate_idx, |
| std::size_t | constraint_idx, | ||
| const FieldElement & | scalar | ||
| ) |
Definition at line 876 of file bulletproof.cpp.
| void purify::NativeBulletproofCircuit::add_right_term | ( | std::size_t | gate_idx, |
| std::size_t | constraint_idx, | ||
| const FieldElement & | scalar | ||
| ) |
Definition at line 872 of file bulletproof.cpp.
| bool purify::NativeBulletproofCircuit::evaluate | ( | const BulletproofAssignmentData & | assignment | ) | const |
Definition at line 884 of file bulletproof.cpp.
References c, purify::BulletproofAssignmentData::commitments, has_valid_shape(), purify::BulletproofAssignmentData::left, n_commitments, n_gates, purify::FieldElement::negate(), purify::BulletproofAssignmentData::output, purify::BulletproofAssignmentData::right, wl, wo, wr, wv, and purify::FieldElement::zero().
Referenced by purify::bppp::prove_experimental_circuit_norm_arg_to_commitment(), and purify::bppp::prove_experimental_circuit_zk_norm_arg_impl().
| bool purify::NativeBulletproofCircuit::has_valid_shape | ( | ) | const |
Definition at line 856 of file bulletproof.cpp.
References n_commitments, n_gates, wl, wo, wr, and wv.
Referenced by purify::NativeBulletproofCircuit::PackedWithSlack::evaluate(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), purify::bppp::prove_experimental_circuit_norm_arg_to_commitment(), purify::bppp::prove_experimental_circuit_zk_norm_arg_impl(), purify::NativeBulletproofCircuit::PackedWithSlack::unpack(), purify::verify_experimental_circuit(), purify::bppp::verify_experimental_circuit_norm_arg(), and purify::bppp::verify_experimental_circuit_zk_norm_arg_impl().
| Result< NativeBulletproofCircuit::PackedWithSlack > purify::NativeBulletproofCircuit::pack_with_slack | ( | ) | const |
Definition at line 1487 of file bulletproof.cpp.
References pack_with_slack().
Referenced by pack_with_slack(), and purify::verifier_circuit_template().
| Result< NativeBulletproofCircuit::PackedWithSlack > purify::NativeBulletproofCircuit::pack_with_slack | ( | const PackedSlackPlan & | slack | ) | const |
Definition at line 1483 of file bulletproof.cpp.
References purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit().
| void purify::NativeBulletproofCircuit::resize | ( | std::size_t | gates, |
| std::size_t | commitments, | ||
| std::size_t | bits = 0 |
||
| ) |
Definition at line 845 of file bulletproof.cpp.
References c, n_bits, n_commitments, n_gates, wl, wo, wr, and wv.
| std::vector<FieldElement> purify::NativeBulletproofCircuit::c |
Definition at line 253 of file bulletproof.hpp.
Referenced by add_constraint(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), purify::BulletproofTranscript::native_circuit(), resize(), and purify::NativeBulletproofCircuit::PackedWithSlack::unpack().
| std::size_t purify::NativeBulletproofCircuit::n_bits = 0 |
Definition at line 248 of file bulletproof.hpp.
Referenced by purify::circuit_main(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), purify::BulletproofTranscript::from_transcript(), purify::BulletproofTranscript::native_circuit(), and resize().
| std::size_t purify::NativeBulletproofCircuit::n_commitments = 0 |
Definition at line 247 of file bulletproof.hpp.
Referenced by add_commitment_term(), purify::detail::circuit_n_commitments(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), has_valid_shape(), purify::BulletproofTranscript::native_circuit(), purify::bppp::prove_experimental_circuit_norm_arg_to_commitment(), purify::bppp::prove_experimental_circuit_zk_norm_arg_impl(), resize(), purify::verifier_circuit_template(), and purify::verify_experimental_circuit().
| std::size_t purify::NativeBulletproofCircuit::n_gates = 0 |
Definition at line 246 of file bulletproof.hpp.
Referenced by add_left_term(), add_output_term(), add_right_term(), purify::detail::circuit_n_gates(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), has_valid_shape(), purify::BulletproofTranscript::native_circuit(), purify::bppp::prove_experimental_circuit_norm_arg_to_commitment(), purify::bppp::prove_experimental_circuit_zk_norm_arg_impl(), resize(), purify::verifier_circuit_template(), purify::verify_experimental_circuit(), purify::bppp::verify_experimental_circuit_norm_arg(), and purify::bppp::verify_experimental_circuit_zk_norm_arg_impl().
| std::vector<NativeBulletproofCircuitRow> purify::NativeBulletproofCircuit::wl |
Definition at line 249 of file bulletproof.hpp.
Referenced by add_left_term(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), has_valid_shape(), purify::BulletproofTranscript::native_circuit(), resize(), and purify::NativeBulletproofCircuit::PackedWithSlack::unpack().
| std::vector<NativeBulletproofCircuitRow> purify::NativeBulletproofCircuit::wo |
Definition at line 251 of file bulletproof.hpp.
Referenced by add_output_term(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), has_valid_shape(), purify::BulletproofTranscript::native_circuit(), resize(), and purify::NativeBulletproofCircuit::PackedWithSlack::unpack().
| std::vector<NativeBulletproofCircuitRow> purify::NativeBulletproofCircuit::wr |
Definition at line 250 of file bulletproof.hpp.
Referenced by add_right_term(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), has_valid_shape(), purify::BulletproofTranscript::native_circuit(), resize(), and purify::NativeBulletproofCircuit::PackedWithSlack::unpack().
| std::vector<NativeBulletproofCircuitRow> purify::NativeBulletproofCircuit::wv |
Definition at line 252 of file bulletproof.hpp.
Referenced by add_commitment_term(), evaluate(), purify::NativeBulletproofCircuit::PackedWithSlack::from_circuit(), has_valid_shape(), purify::BulletproofTranscript::native_circuit(), resize(), and purify::NativeBulletproofCircuit::PackedWithSlack::unpack().