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

Lowering and native circuit helpers for Purify's Bulletproof-style verifier model. More...

#include "purify/bulletproof.hpp"
#include "bulletproof_internal.hpp"
#include "bppp_bridge.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstring>
#include <limits>
#include <memory>
#include <new>
#include <sstream>
#include <type_traits>
#include <unordered_map>

Go to the source code of this file.

Data Structures

struct  purify::BulletproofBackendResourceDeleter
 
struct  purify::ExperimentalBulletproofBackendCache::Impl
 

Namespaces

namespace  purify
 

Typedefs

using purify::BulletproofBackendResourcePtr = std::unique_ptr< purify_bulletproof_backend_resources, BulletproofBackendResourceDeleter >
 

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< ExperimentalBulletproofProofpurify::prove_experimental_circuit_assume_valid (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, ExperimentalBulletproofBackendCache *backend_cache)
 
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)
 
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.
 
Result< Bytespurify::experimental_circuit_binding_digest (const NativeBulletproofCircuit &circuit, std::span< const unsigned char > statement_binding)
 
Result< Bytespurify::experimental_circuit_binding_digest (const NativeBulletproofCircuit::PackedWithSlack &circuit, std::span< const unsigned char > statement_binding)