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

C++ convenience wrappers over the low-level BPPP C bridge. More...

#include "purify/bppp.hpp"
#include <algorithm>
#include <cstdint>
#include <cstring>
#include <limits>
#include <memory>
#include <span>
#include <string>
#include <string_view>
#include <tuple>
#include <type_traits>
#include <unordered_map>
#include <vector>
#include "bppp_bridge.h"
#include "bulletproof_internal.hpp"
#include "purify/secp_bridge.h"

Go to the source code of this file.

Data Structures

struct  purify::bppp::BpppBackendResourcesDeleter
 
struct  purify::bppp::GeneratorBackendCacheKeyHash
 
struct  purify::bppp::ExperimentalCircuitCacheLine::Impl
 
struct  purify::bppp::ExperimentalCircuitCache::Impl
 

Namespaces

namespace  purify
 
namespace  purify::bppp
 

Typedefs

using purify::bppp::OwnedBpppBackendResources = std::unique_ptr< purify_bppp_backend_resources, BpppBackendResourcesDeleter >
 
using purify::bppp::GeneratorBackendCacheKey = std::array< unsigned char, 32 >
 
using purify::bppp::CircuitNormArgPublicDataCacheKey = std::array< unsigned char, 32 >
 
using purify::bppp::CircuitNormArgPublicDataCacheKeyHash = GeneratorBackendCacheKeyHash
 

Functions

template<typename Digest >
std::size_t purify::bppp::digest_prefix_hash (const Digest &digest) noexcept
 
GeneratorBackendCacheKey purify::bppp::generator_backend_cache_key (std::span< const PointBytes > generators)
 
GeneratorBytes purify::bppp::base_generator (purify_secp_context *secp_context)
 Returns the serialized secp256k1 base generator used as the blind generator.
 
GeneratorBytes purify::bppp::value_generator_h (purify_secp_context *secp_context)
 Returns the serialized alternate generator used for committed values.
 
Result< std::vector< PointBytes > > purify::bppp::create_generators (std::size_t count, purify_secp_context *secp_context)
 Expands the BPPP generator list.
 
Result< PointBytespurify::bppp::commit_norm_arg_with_cache (const NormArgInputs &inputs, purify_secp_context *secp_context, ExperimentalCircuitBackend *cache=nullptr)
 
Result< PointBytespurify::bppp::pedersen_commit_char (const ScalarBytes &blind, const ScalarBytes &value, purify_secp_context *secp_context)
 Computes a Pedersen commitment to an arbitrary 32-byte scalar value using Purify's default generators.
 
Result< PointBytespurify::bppp::pedersen_commit_char (const ScalarBytes &blind, const ScalarBytes &value, purify_secp_context *secp_context, const GeneratorBytes &value_gen, const GeneratorBytes &blind_gen)
 Computes a Pedersen commitment to an arbitrary 32-byte scalar value with explicit generators.
 
Result< NormArgProofpurify::bppp::prove_norm_arg (const NormArgInputs &inputs, purify_secp_context *secp_context)
 Produces a standalone BPPP norm argument.
 
Result< NormArgProofpurify::bppp::prove_norm_arg (NormArgInputs &&inputs, purify_secp_context *secp_context)
 Produces a standalone BPPP norm argument, moving large inputs into the returned proof when possible.
 
Result< NormArgProofpurify::bppp::prove_norm_arg_to_commitment_with_cache (const NormArgInputs &inputs, const PointBytes &commitment, purify_secp_context *secp_context, ExperimentalCircuitBackend *cache=nullptr)
 
bool purify::bppp::verify_norm_arg_with_cache (const NormArgProof &proof, purify_secp_context *secp_context, ExperimentalCircuitBackend *cache=nullptr)
 
Result< PointBytespurify::bppp::commit_norm_arg (const NormArgInputs &inputs, purify_secp_context *secp_context)
 Computes the public BPPP commitment for a standalone norm-argument input bundle.
 
Result< NormArgProofpurify::bppp::prove_norm_arg_to_commitment (const NormArgInputs &inputs, const PointBytes &commitment, purify_secp_context *secp_context)
 Produces a standalone BPPP norm argument anchored to a caller-supplied public commitment.
 
bool purify::bppp::verify_norm_arg (const NormArgProof &proof, purify_secp_context *secp_context)
 Verifies a standalone BPPP norm argument.
 
Result< PointBytespurify::bppp::commit_experimental_circuit_witness (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Commits to the reduced witness coordinates used by the experimental circuit-to-BPPP reduction.
 
Result< ExperimentalCircuitNormArgProofpurify::bppp::prove_experimental_circuit_norm_arg_to_commitment (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, const PointBytes &witness_commitment, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Produces an anchored transparent circuit proof against a caller-supplied reduced witness commitment.
 
Result< ExperimentalCircuitNormArgProofpurify::bppp::prove_experimental_circuit_norm_arg (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Produces an anchored transparent circuit proof using the experimental circuit-to-BPPP reduction.
 
Result< bool > purify::bppp::verify_experimental_circuit_norm_arg (const NativeBulletproofCircuit &circuit, const ExperimentalCircuitNormArgProof &proof, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Verifies an experimental transparent circuit proof produced by prove_experimental_circuit_norm_arg.
 
Result< ExperimentalCircuitZkNormArgProofpurify::bppp::prove_experimental_circuit_zk_norm_arg_impl (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, const ScalarBytes &nonce, std::span< const PointBytes > public_commitments, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding, bool externalize_commitments, ExperimentalCircuitBackend *cache)
 
Result< bool > purify::bppp::verify_experimental_circuit_zk_norm_arg_impl (const NativeBulletproofCircuit &circuit, const ExperimentalCircuitZkNormArgProof &proof, std::span< const PointBytes > public_commitments, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding, bool externalize_commitments, ExperimentalCircuitBackend *cache)
 
Result< ExperimentalCircuitZkNormArgProofpurify::bppp::prove_experimental_circuit_zk_norm_arg (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, const ScalarBytes &nonce, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Produces an experimental masked circuit proof over the reduced BPPP relation.
 
Result< bool > purify::bppp::verify_experimental_circuit_zk_norm_arg (const NativeBulletproofCircuit &circuit, const ExperimentalCircuitZkNormArgProof &proof, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Verifies an experimental masked circuit proof produced by prove_experimental_circuit_zk_norm_arg.
 
Result< ExperimentalCircuitZkNormArgProofpurify::bppp::prove_experimental_circuit_zk_norm_arg_with_public_commitments (const NativeBulletproofCircuit &circuit, const BulletproofAssignmentData &assignment, const ScalarBytes &nonce, std::span< const PointBytes > public_commitments, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Produces an experimental masked circuit proof bound to explicit public commitment points.
 
Result< bool > purify::bppp::verify_experimental_circuit_zk_norm_arg_with_public_commitments (const NativeBulletproofCircuit &circuit, const ExperimentalCircuitZkNormArgProof &proof, std::span< const PointBytes > public_commitments, purify_secp_context *secp_context, std::span< const unsigned char > statement_binding={}, ExperimentalCircuitBackend *cache=nullptr)
 Verifies an experimental masked circuit proof against explicit public commitment points.
 
Result< CommittedPurifyWitnesspurify::bppp::commit_output_witness (const Bytes &message, const SecretKey &secret, const ScalarBytes &blind, purify_secp_context *secp_context)
 Evaluates Purify, derives its witness, and commits to the output using Purify's default generators.
 
Result< CommittedPurifyWitnesspurify::bppp::commit_output_witness (const Bytes &message, const SecretKey &secret, const ScalarBytes &blind, purify_secp_context *secp_context, const GeneratorBytes &value_gen, const GeneratorBytes &blind_gen)
 Evaluates Purify, derives its witness, and commits to the output with explicit generators.
 

Variable Documentation

◆ backend_resources

purify_bppp_backend_resources* backend_resources = nullptr

Definition at line 345 of file bppp.cpp.

◆ c_vec

◆ c_vec_bytes

std::vector<ScalarBytes> c_vec_bytes

Definition at line 473 of file bppp.cpp.

◆ generator_count

std::size_t generator_count = 0

◆ generators

◆ l_vec

◆ minus_shift

std::vector<FieldElement> minus_shift

Definition at line 478 of file bppp.cpp.

◆ minus_terms

std::vector<std::array<FieldElement, 2> > minus_terms

Definition at line 476 of file bppp.cpp.

◆ n_vec

◆ plus_shift

std::vector<FieldElement> plus_shift

Definition at line 477 of file bppp.cpp.

◆ plus_terms

std::vector<std::array<FieldElement, 2> > plus_terms

Definition at line 475 of file bppp.cpp.

◆ public_commitment_coeffs

std::vector<FieldElement> public_commitment_coeffs

Definition at line 474 of file bppp.cpp.

◆ public_data

CircuitNormArgPublicDataPtr public_data

◆ rho

◆ rho_bytes

ScalarBytes rho_bytes {}

Definition at line 469 of file bppp.cpp.

◆ serialized_bytes

std::span<const unsigned char> serialized_bytes {}

Definition at line 343 of file bppp.cpp.

◆ target

FieldElement target = FieldElement::zero()

Definition at line 470 of file bppp.cpp.