purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
bulletproof.hpp File Reference

Native Bulletproof-style circuit types and witness serialization helpers. More...

#include <algorithm>
#include <array>
#include <cstddef>
#include <memory>
#include <optional>
#include <span>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
#include "purify/curve.hpp"
#include "purify/expr.hpp"

Go to the source code of this file.

Data Structures

struct  purify::BulletproofAssignmentData
 Columnar witness assignment compatible with the native Bulletproof circuit layout. More...
 
struct  purify::NativeBulletproofCircuitTerm
 One sparse matrix entry in a native circuit row. More...
 
struct  purify::NativeBulletproofCircuitRow
 One sparse row of circuit coefficients. More...
 
struct  purify::NativeBulletproofCircuitRow::PackedWithSlack
 Non-owning packed row view used by NativeBulletproofCircuit::PackedWithSlack. More...
 
struct  purify::NativeBulletproofCircuit
 Native in-memory representation of a Bulletproof-style arithmetic circuit. More...
 
struct  purify::NativeBulletproofCircuit::PackedSlackPlan
 
class  purify::NativeBulletproofCircuit::PackedWithSlack
 Resettable packed circuit representation backed by one aligned owning slab. More...
 
struct  purify::ExperimentalBulletproofProof
 Experimental single-proof wrapper over the imported legacy Bulletproof circuit backend. More...
 
class  purify::ExperimentalBulletproofBackendCache
 Caller-owned cache for reusable legacy Bulletproof backend resources keyed by gate count. More...
 
class  purify::NativeBulletproofCircuitTemplate
 Public-key-agnostic native verifier-circuit template. More...
 
class  purify::BulletproofTranscript
 Lowering helper that converts a symbolic transcript into native Bulletproof witness and circuit forms. More...
 
struct  purify::CircuitMainResult
 Result bundle returned by the main symbolic Purify circuit construction. More...
 

Namespaces

namespace  purify
 

Typedefs

using purify::BulletproofScalarBytes = std::array< unsigned char, 32 >
 
using purify::BulletproofPointBytes = std::array< unsigned char, 33 >
 
using purify::BulletproofGeneratorBytes = std::array< unsigned char, 33 >
 
using purify::ExprPoint = std::pair< Expr, Expr >
 Symbolic affine point represented as independent x and y expressions.
 

Functions

Result< ExperimentalBulletproofProofpurify::prove_experimental_circuit (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, const BulletproofScalarBytes &nonce, const BulletproofGeneratorBytes &value_generator, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, std::optional< BulletproofScalarBytes > blind=std::nullopt, ExperimentalBulletproofBackendCache *backend_cache=nullptr)
 Proves a native circuit with the experimental imported Bulletproof circuit backend.
 
Result< ExperimentalBulletproofProofpurify::prove_experimental_circuit (const NativeBulletproofCircuit::PackedWithSlack &circuit, const BulletproofAssignmentData &assignment, const BulletproofScalarBytes &nonce, const BulletproofGeneratorBytes &value_generator, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, std::optional< BulletproofScalarBytes > blind=std::nullopt, ExperimentalBulletproofBackendCache *backend_cache=nullptr)
 
Result< bool > purify::verify_experimental_circuit (const NativeBulletproofCircuit &circuit, const ExperimentalBulletproofProof &proof, const BulletproofGeneratorBytes &value_generator, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalBulletproofBackendCache *backend_cache=nullptr)
 Verifies a proof produced by prove_experimental_circuit against the same one-commitment native circuit.
 
Result< bool > purify::verify_experimental_circuit (const NativeBulletproofCircuit::PackedWithSlack &circuit, const ExperimentalBulletproofProof &proof, const BulletproofGeneratorBytes &value_generator, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalBulletproofBackendCache *backend_cache=nullptr)
 
Result< NativeBulletproofCircuitTemplatepurify::verifier_circuit_template (const Bytes &message)
 Builds a reusable public-key-agnostic verifier-circuit template for a message.
 
Expr purify::circuit_1bit (const std::array< FieldElement, 2 > &values, Transcript &transcript, const Expr &x)
 Selects one of two field constants using a single boolean expression bit.
 
Expr purify::circuit_2bit (const std::array< FieldElement, 4 > &values, Transcript &transcript, const Expr &x, const Expr &y)
 Selects one of four field constants using two boolean expression bits.
 
Expr purify::circuit_3bit (const std::array< FieldElement, 8 > &values, Transcript &transcript, const Expr &x, const Expr &y, const Expr &z)
 Selects one of eight field constants using three boolean expression bits.
 
ExprPoint purify::circuit_1bit_point (const EllipticCurve &curve, const std::array< JacobianPoint, 2 > &points, Transcript &transcript, const Expr &b0)
 Selects between two affine point constants using one boolean expression bit.
 
ExprPoint purify::circuit_2bit_point (const EllipticCurve &curve, const std::array< JacobianPoint, 4 > &points, Transcript &transcript, const Expr &b0, const Expr &b1)
 Selects between four affine point constants using two boolean expression bits.
 
ExprPoint purify::circuit_3bit_point (const EllipticCurve &curve, const std::array< JacobianPoint, 8 > &points, Transcript &transcript, const Expr &b0, const Expr &b1, const Expr &b2)
 Selects between eight affine point constants using three boolean expression bits.
 
ExprPoint purify::circuit_optionally_negate_ec (const ExprPoint &point, Transcript &transcript, const Expr &negate_bit)
 Conditionally negates an elliptic-curve point encoded as symbolic affine expressions.
 
ExprPoint purify::circuit_ec_add (Transcript &transcript, const ExprPoint &p1, const ExprPoint &p2)
 Symbolically adds two affine elliptic-curve points.
 
Expr purify::circuit_ec_add_x (Transcript &transcript, const ExprPoint &p1, const ExprPoint &p2)
 Symbolically adds two affine points and returns only the resulting x-coordinate.
 
Expr purify::circuit_ec_multiply_x (const EllipticCurve &curve, Transcript &transcript, const JacobianPoint &point, const std::vector< Expr > &bits)
 Builds the symbolic x-coordinate multiplication gadget for one curve point.
 
Expr purify::circuit_combine (Transcript &transcript, const Expr &x1, const Expr &x2)
 Builds the symbolic Purify output combiner over two x-coordinates.
 
Result< CircuitMainResultpurify::circuit_main (Transcript &transcript, const JacobianPoint &m1, const JacobianPoint &m2, const std::optional< UInt256 > &z1=std::nullopt, const std::optional< UInt256 > &z2=std::nullopt)
 Builds the full symbolic Purify circuit from message points and optional witness scalars.