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

C bridge that binds Purify's lightweight ABI to secp256k1-zkp internals and BPPP helpers.

#include "purify.h"
#include "bppp_bridge.h"
#include "purify/secp_bridge.h"
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "third_party/secp256k1-zkp/include/secp256k1_extrakeys.h"
#include "third_party/secp256k1-zkp/include/secp256k1_schnorrsig.h"
#include "third_party/secp256k1-zkp/src/secp256k1.c"
#include "third_party/secp256k1-zkp/src/precomputed_ecmult.c"
#include "third_party/secp256k1-zkp/src/precomputed_ecmult_gen.c"
#include "src/legacy_bulletproof/circuit_impl.h"

Go to the source code of this file.

Data Structures

struct  purify_secp_context
struct  purify_bulletproof_backend_resources
struct  purify_bppp_backend_resources
struct  purify_bppp_mutable_generators_guard

Macros

#define SECP256K1_BUILD
#define ENABLE_MODULE_GENERATOR   1
#define ENABLE_MODULE_BPPP   1
#define ENABLE_MODULE_EXTRAKEYS   1
#define ENABLE_MODULE_SCHNORRSIG   1

Typedefs

typedef struct purify_bppp_mutable_generators_guard purify_bppp_mutable_generators_guard

Functions

static void purify_bridge_secure_clear (void *data, size_t size)
static secp256k1_context * purify_context_handle (const purify_secp_context *context)
purify_secp_context * purify_secp_context_create (void)
 Creates one reusable secp256k1 context for the Purify bridge and public APIs.
void purify_secp_context_destroy (purify_secp_context *context)
 Destroys a context returned by purify_secp_context_create.
static int purify_bridge_checked_mul_size (size_t lhs, size_t rhs, size_t *out)
static int purify_bridge_checked_add_size (size_t lhs, size_t rhs, size_t *out)
static int purify_bulletproof_add_scratch_frame (size_t *total, size_t bytes, size_t objects)
static int purify_bulletproof_circuit_scratch_size (const secp256k1_bulletproof_circuit *circuit, size_t *out)
static int purify_bulletproof_reserve_circuit_scratch (purify_bulletproof_backend_resources *resources, const secp256k1_bulletproof_circuit *circuit)
static void * purify_malloc_array (size_t count, size_t elem_size)
static void * purify_calloc_array (size_t count, size_t elem_size)
static secp256k1_bppp_generators * purify_bppp_generators_clone (const secp256k1_bppp_generators *generators)
static int purify_bppp_backend_resources_reset_scratch_gens (purify_bppp_backend_resources *resources)
static secp256k1_bppp_generators * purify_bppp_backend_resources_acquire_scratch_gens (purify_bppp_backend_resources *resources, purify_bppp_mutable_generators_guard *guard)
static void purify_bppp_backend_resources_release_scratch_gens (purify_bppp_mutable_generators_guard *guard)
purify_bulletproof_backend_resources * purify_bulletproof_backend_resources_create (purify_secp_context *context, size_t n_gates)
purify_bulletproof_backend_resources * purify_bulletproof_backend_resources_clone (const purify_bulletproof_backend_resources *resources)
void purify_bulletproof_backend_resources_destroy (purify_bulletproof_backend_resources *resources)
purify_bppp_backend_resources * purify_bppp_backend_resources_create (purify_secp_context *context, const unsigned char *generators33, size_t generators_count)
purify_bppp_backend_resources * purify_bppp_backend_resources_clone (const purify_bppp_backend_resources *resources)
void purify_bppp_backend_resources_destroy (purify_bppp_backend_resources *resources)
static secp256k1_scalar * purify_scalar_cast (purify_scalar *scalar)
static const secp256k1_scalar * purify_scalar_cast_const (const purify_scalar *scalar)
void purify_scalar_set_int (purify_scalar *out, unsigned int value)
 Initializes a scalar from an unsigned integer.
void purify_scalar_set_u64 (purify_scalar *out, uint64_t value)
 Initializes a scalar from a 64-bit unsigned integer.
void purify_scalar_set_b32 (purify_scalar *out, const unsigned char input32[32], int *overflow)
 Parses a big-endian 32-byte scalar.
void purify_scalar_get_b32 (unsigned char output32[32], const purify_scalar *value)
 Serializes a scalar as 32 big-endian bytes.
int purify_scalar_is_zero (const purify_scalar *value)
 Returns nonzero when the scalar is zero.
int purify_scalar_is_one (const purify_scalar *value)
 Returns nonzero when the scalar is one.
int purify_scalar_is_even (const purify_scalar *value)
 Returns nonzero when the scalar is even.
int purify_scalar_eq (const purify_scalar *lhs, const purify_scalar *rhs)
 Returns nonzero when two scalars are equal.
void purify_scalar_negate (purify_scalar *out, const purify_scalar *value)
 Computes the additive inverse of a scalar.
void purify_scalar_inverse (purify_scalar *out, const purify_scalar *value)
 Computes the multiplicative inverse of a scalar in constant time.
void purify_scalar_inverse_var (purify_scalar *out, const purify_scalar *value)
 Computes the multiplicative inverse of a scalar.
int purify_scalar_add (purify_scalar *out, const purify_scalar *lhs, const purify_scalar *rhs)
 Adds two scalars modulo the backend field.
void purify_scalar_mul (purify_scalar *out, const purify_scalar *lhs, const purify_scalar *rhs)
 Multiplies two scalars modulo the backend field.
void purify_scalar_cmov (purify_scalar *dst, const purify_scalar *src, int flag)
 Conditionally assigns src into dst when flag is nonzero.
void purify_sha256 (unsigned char output32[32], const unsigned char *data, size_t data_len)
 Computes SHA-256 over a byte string.
int purify_sha256_many (unsigned char output32[32], const unsigned char *const *items, const size_t *item_lens, size_t items_count)
 Computes SHA-256 over a set of byte strings.
void purify_hmac_sha256 (unsigned char output32[32], const unsigned char *key, size_t key_len, const unsigned char *data, size_t data_len)
 Computes HMAC-SHA256 over a byte string.
int purify_bip340_key_from_seckey (purify_secp_context *context, unsigned char seckey32[32], unsigned char xonly_pubkey32[32])
 Canonicalizes a valid secp256k1 secret key for BIP340 and derives its x-only public key.
int purify_bip340_nonce_from_scalar (purify_secp_context *context, unsigned char scalar32[32], unsigned char xonly_nonce32[32])
 Canonicalizes a valid secp256k1 nonce scalar for BIP340 and derives its x-only public nonce.
int purify_bip340_xonly_from_point (purify_secp_context *context, const unsigned char point33[33], unsigned char xonly32[32], int *parity_out)
 Converts a compressed secp256k1 point into its x-only public key encoding.
int purify_bip340_validate_xonly_pubkey (purify_secp_context *context, const unsigned char xonly_pubkey32[32])
 Returns nonzero when the x-only public key encoding parses successfully.
int purify_bip340_validate_signature (purify_secp_context *context, const unsigned char sig64[64])
 Returns nonzero when the 64-byte BIP340 signature has a syntactically valid encoding.
static int purify_fixed_nonce_function (unsigned char *nonce32, const unsigned char *msg, size_t msglen, const unsigned char *key32, const unsigned char *xonly_pk32, const unsigned char *algo, size_t algolen, void *data)
int purify_bip340_sign_with_fixed_nonce (purify_secp_context *context, unsigned char sig64[64], const unsigned char *msg, size_t msglen, const unsigned char seckey32[32], const unsigned char nonce32[32])
 Signs a message with a caller-supplied BIP340 nonce scalar.
int purify_bip340_verify (purify_secp_context *context, const unsigned char sig64[64], const unsigned char *msg, size_t msglen, const unsigned char xonly_pubkey32[32])
 Verifies a BIP340 signature against a serialized x-only public key.
static int purify_parse_scalar (const unsigned char input32[32], secp256k1_scalar *scalar, int reject_zero)
static int purify_parse_scalar_array (const unsigned char *input32, size_t count, secp256k1_scalar *out)
static int purify_serialize_point (unsigned char out33[33], secp256k1_ge *point)
static int purify_parse_fast_scalar (const unsigned char input32[32], secp256k1_fast_scalar *scalar)
static int purify_parse_generator_as_ge (const secp256k1_context *ctx, const unsigned char generator33[33], secp256k1_ge *out)
static int purify_parse_point_as_ge (const unsigned char point33[33], secp256k1_ge *out)
static void purify_free_bulletproof_circuit (secp256k1_bulletproof_circuit *circuit)
static void purify_free_bulletproof_assignment (secp256k1_bulletproof_circuit_assignment *assignment)
static size_t purify_total_row_entries (const purify_bulletproof_row_view *rows, size_t count, int *ok)
static int purify_build_row_family (secp256k1_bulletproof_wmatrix_row *out_rows, size_t row_count, const purify_bulletproof_row_view *in_rows, size_t n_constraints, secp256k1_bulletproof_wmatrix_entry *entries, size_t *offset)
static void purify_bulletproof_circuit_evaluate_sum_row (secp256k1_scalar *acc, const secp256k1_bulletproof_wmatrix_row *row, const secp256k1_scalar *assn)
static int purify_bulletproof_circuit_evaluate (const secp256k1_bulletproof_circuit *circuit, const secp256k1_bulletproof_circuit_assignment *assignment)
static int purify_build_bulletproof_circuit (const purify_bulletproof_circuit_view *view, secp256k1_bulletproof_circuit *out)
static int purify_build_bulletproof_assignment (const purify_bulletproof_assignment_view *view, secp256k1_bulletproof_circuit_assignment *out)
size_t purify_bulletproof_required_proof_size (size_t n_gates)
static int purify_bulletproof_prove_circuit_impl (const purify_bulletproof_circuit_view *circuit, const purify_bulletproof_assignment_view *assignment, const unsigned char *blind32, const unsigned char value_gen33[33], const unsigned char nonce32[32], const unsigned char *extra_commit, size_t extra_commit_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len, int require_valid_assignment, purify_secp_context *context, purify_bulletproof_backend_resources *resources)
int purify_bulletproof_prove_circuit (purify_secp_context *context, const purify_bulletproof_circuit_view *circuit, const purify_bulletproof_assignment_view *assignment, const unsigned char *blind32, const unsigned char value_gen33[33], const unsigned char nonce32[32], const unsigned char *extra_commit, size_t extra_commit_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
int purify_bulletproof_prove_circuit_with_resources (purify_bulletproof_backend_resources *resources, const purify_bulletproof_circuit_view *circuit, const purify_bulletproof_assignment_view *assignment, const unsigned char *blind32, const unsigned char value_gen33[33], const unsigned char nonce32[32], const unsigned char *extra_commit, size_t extra_commit_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
int purify_bulletproof_prove_circuit_assume_valid (purify_secp_context *context, const purify_bulletproof_circuit_view *circuit, const purify_bulletproof_assignment_view *assignment, const unsigned char *blind32, const unsigned char value_gen33[33], const unsigned char nonce32[32], const unsigned char *extra_commit, size_t extra_commit_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
int purify_bulletproof_prove_circuit_assume_valid_with_resources (purify_bulletproof_backend_resources *resources, const purify_bulletproof_circuit_view *circuit, const purify_bulletproof_assignment_view *assignment, const unsigned char *blind32, const unsigned char value_gen33[33], const unsigned char nonce32[32], const unsigned char *extra_commit, size_t extra_commit_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
static int purify_bulletproof_verify_circuit_impl (purify_secp_context *context, purify_bulletproof_backend_resources *resources, const purify_bulletproof_circuit_view *circuit, const unsigned char commitment33[33], const unsigned char value_gen33[33], const unsigned char *extra_commit, size_t extra_commit_len, const unsigned char *proof, size_t proof_len)
int purify_bulletproof_verify_circuit (purify_secp_context *context, const purify_bulletproof_circuit_view *circuit, const unsigned char commitment33[33], const unsigned char value_gen33[33], const unsigned char *extra_commit, size_t extra_commit_len, const unsigned char *proof, size_t proof_len)
int purify_bulletproof_verify_circuit_with_resources (purify_bulletproof_backend_resources *resources, const purify_bulletproof_circuit_view *circuit, const unsigned char commitment33[33], const unsigned char value_gen33[33], const unsigned char *extra_commit, size_t extra_commit_len, const unsigned char *proof, size_t proof_len)
static int purify_norm_arg_commit_initial_data (secp256k1_sha256 *transcript, const secp256k1_scalar *rho, const secp256k1_bppp_generators *gens_vec, size_t g_len, const secp256k1_scalar *c_vec, size_t c_vec_len, const secp256k1_ge *commit)
static int purify_copy_vectors_into_scratch (const secp256k1_context *ctx, secp256k1_scratch_space *scratch, secp256k1_scalar **ns, secp256k1_scalar **ls, secp256k1_scalar **cs, secp256k1_ge **gs, const secp256k1_scalar *n_vec, const secp256k1_scalar *l_vec, const secp256k1_scalar *c_vec, const secp256k1_ge *gens_vec, size_t g_len, size_t h_len)
static int purify_bppp_rangeproof_norm_product_prove_const (const secp256k1_context *ctx, secp256k1_scratch_space *scratch, unsigned char *proof, size_t *proof_len, secp256k1_sha256 *transcript, const secp256k1_scalar *rho, const secp256k1_ge *g_vec, size_t g_vec_len, const secp256k1_scalar *n_vec, size_t n_vec_len, const secp256k1_scalar *l_vec, size_t l_vec_len, const secp256k1_scalar *c_vec, size_t c_vec_len)
size_t purify_bppp_required_proof_size (size_t n_vec_len, size_t c_vec_len)
 Computes the maximum serialized size of a BPPP norm proof.
int purify_bppp_base_generator (purify_secp_context *context, unsigned char out33[33])
 Serializes the secp256k1 base generator into compressed form.
int purify_bppp_value_generator_h (purify_secp_context *context, unsigned char out33[33])
 Serializes the alternate value generator used by Pedersen commitments.
int purify_bppp_create_generators (purify_secp_context *context, size_t count, unsigned char *out, size_t *out_len)
 Expands the generator list required by the BPPP prover and verifier.
int purify_pedersen_commit_char (purify_secp_context *context, const unsigned char blind32[32], const unsigned char value32[32], const unsigned char value_gen33[33], const unsigned char blind_gen33[33], unsigned char commitment_out33[33])
 Computes a Pedersen commitment to an arbitrary 32-byte scalar value.
static int purify_bppp_commit_norm_arg_impl (purify_secp_context *context, purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, unsigned char commitment_out33[33])
int purify_bppp_commit_norm_arg (purify_secp_context *context, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, unsigned char commitment_out33[33])
int purify_bppp_commit_norm_arg_with_resources (purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, unsigned char commitment_out33[33])
static int purify_bppp_commit_witness_only_impl (purify_secp_context *context, purify_bppp_backend_resources *resources, const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, unsigned char commitment_out33[33])
int purify_bppp_commit_witness_only (purify_secp_context *context, const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, unsigned char commitment_out33[33])
int purify_bppp_commit_witness_only_with_resources (purify_bppp_backend_resources *resources, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, unsigned char commitment_out33[33])
int purify_bppp_offset_commitment (purify_secp_context *context, const unsigned char commitment33[33], const unsigned char scalar32[32], unsigned char commitment_out33[33])
int purify_point_scale (purify_secp_context *context, const unsigned char point33[33], const unsigned char scalar32[32], unsigned char out33[33])
int purify_point_add (purify_secp_context *context, const unsigned char lhs33[33], const unsigned char rhs33[33], unsigned char out33[33])
static int purify_bppp_prove_norm_arg_impl (purify_secp_context *context, purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
int purify_bppp_prove_norm_arg (purify_secp_context *context, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
 Produces a standalone BPPP norm argument.
int purify_bppp_prove_norm_arg_with_resources (purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, unsigned char commitment_out33[33], unsigned char *proof_out, size_t *proof_len)
static int purify_bppp_prove_norm_arg_to_commitment_impl (purify_secp_context *context, purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, const unsigned char commitment33[33], unsigned char *proof_out, size_t *proof_len)
int purify_bppp_prove_norm_arg_to_commitment (purify_secp_context *context, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, const unsigned char commitment33[33], unsigned char *proof_out, size_t *proof_len)
int purify_bppp_prove_norm_arg_to_commitment_with_resources (purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *n_vec32, size_t n_vec_len, const unsigned char *l_vec32, size_t l_vec_len, const unsigned char *c_vec32, size_t c_vec_len, const unsigned char commitment33[33], unsigned char *proof_out, size_t *proof_len)
static int purify_bppp_verify_norm_arg_impl (purify_secp_context *context, purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *c_vec32, size_t c_vec_len, size_t n_vec_len, const unsigned char commitment33[33], const unsigned char *proof, size_t proof_len)
int purify_bppp_verify_norm_arg (purify_secp_context *context, const unsigned char rho32[32], const unsigned char *generators33, size_t generators_count, const unsigned char *c_vec32, size_t c_vec_len, size_t n_vec_len, const unsigned char commitment33[33], const unsigned char *proof, size_t proof_len)
 Verifies a standalone BPPP norm argument.
int purify_bppp_verify_norm_arg_with_resources (purify_bppp_backend_resources *resources, const unsigned char rho32[32], const unsigned char *c_vec32, size_t c_vec_len, size_t n_vec_len, const unsigned char commitment33[33], const unsigned char *proof, size_t proof_len)

Variables

static const size_t purify_bulletproof_msm_scratch_size = (size_t)1u << 24

Macro Definition Documentation

◆ ENABLE_MODULE_BPPP

#define ENABLE_MODULE_BPPP   1

Definition at line 12 of file bppp_bridge.c.

◆ ENABLE_MODULE_EXTRAKEYS

#define ENABLE_MODULE_EXTRAKEYS   1

Definition at line 13 of file bppp_bridge.c.

◆ ENABLE_MODULE_GENERATOR

#define ENABLE_MODULE_GENERATOR   1

Definition at line 11 of file bppp_bridge.c.

◆ ENABLE_MODULE_SCHNORRSIG

#define ENABLE_MODULE_SCHNORRSIG   1

Definition at line 14 of file bppp_bridge.c.

◆ SECP256K1_BUILD

#define SECP256K1_BUILD

Definition at line 10 of file bppp_bridge.c.

Typedef Documentation

◆ purify_bppp_mutable_generators_guard

typedef struct purify_bppp_mutable_generators_guard purify_bppp_mutable_generators_guard

Function Documentation

◆ purify_bip340_key_from_seckey()

int purify_bip340_key_from_seckey ( purify_secp_context * context,
unsigned char seckey32[32],
unsigned char xonly_pubkey32[32] )

The input/output seckey32 buffer is rewritten in place to the even-Y canonical secret scalar corresponding to the returned x-only public key. Returns zero when the input scalar is invalid.

Definition at line 616 of file bppp_bridge.c.

References purify_bridge_secure_clear(), and purify_context_handle().

Referenced by purify_derive_bip340_key().

◆ purify_bip340_nonce_from_scalar()

int purify_bip340_nonce_from_scalar ( purify_secp_context * context,
unsigned char scalar32[32],
unsigned char xonly_nonce32[32] )

The input/output scalar32 buffer is rewritten in place to the even-Y representative corresponding to the returned x-only public nonce. Returns zero when the input scalar is invalid or zero.

Definition at line 655 of file bppp_bridge.c.

References purify_bridge_secure_clear(), and purify_context_handle().

Referenced by purify_bip340_sign_with_fixed_nonce().

◆ purify_bip340_sign_with_fixed_nonce()

int purify_bip340_sign_with_fixed_nonce ( purify_secp_context * context,
unsigned char sig64[64],
const unsigned char * msg,
size_t msglen,
const unsigned char seckey32[32],
const unsigned char nonce32[32] )

seckey32 must be a valid secp256k1 secret key. nonce32 must be a non-zero canonical nonce scalar whose public point has even Y, for example the output of purify_bip340_nonce_from_scalar. Returns zero when any input is invalid.

Definition at line 798 of file bppp_bridge.c.

References purify_bip340_nonce_from_scalar(), purify_bridge_secure_clear(), purify_context_handle(), and purify_fixed_nonce_function().

Referenced by purify::puresign::PreparedNonce::sign_message(), purify::puresign_plusplus::PreparedNonce::sign_message(), purify::puresign::PreparedNonce::sign_topic_message(), and purify::puresign_plusplus::PreparedNonce::sign_topic_message().

◆ purify_bip340_validate_signature()

int purify_bip340_validate_signature ( purify_secp_context * context,
const unsigned char sig64[64] )

This only checks the standalone encoding shape (r as a valid x-only point and s as a scalar below the curve order). It does not verify the signature against a message or public key.

Definition at line 753 of file bppp_bridge.c.

References purify_bridge_secure_clear(), and purify_context_handle().

Referenced by purify::puresign::Signature::deserialize(), purify::puresign_plusplus::Signature::deserialize(), purify::puresign::api_impl::verify_signature(), and purify::puresign_plusplus::api_impl::verify_signature().

◆ purify_bip340_validate_xonly_pubkey()

◆ purify_bip340_verify()

int purify_bip340_verify ( purify_secp_context * context,
const unsigned char sig64[64],
const unsigned char * msg,
size_t msglen,
const unsigned char xonly_pubkey32[32] )

◆ purify_bip340_xonly_from_point()

int purify_bip340_xonly_from_point ( purify_secp_context * context,
const unsigned char point33[33],
unsigned char xonly32[32],
int * parity_out )

Returns zero when the point encoding is invalid. When parity_out is not null it receives the original point parity as returned by secp256k1_xonly_pubkey_from_pubkey (0 for even Y, 1 for odd Y).

Definition at line 694 of file bppp_bridge.c.

References purify_bridge_secure_clear(), and purify_context_handle().

◆ purify_bppp_backend_resources_acquire_scratch_gens()

◆ purify_bppp_backend_resources_clone()

◆ purify_bppp_backend_resources_create()

◆ purify_bppp_backend_resources_destroy()

◆ purify_bppp_backend_resources_release_scratch_gens()

◆ purify_bppp_backend_resources_reset_scratch_gens()

◆ purify_bppp_base_generator()

int purify_bppp_base_generator ( purify_secp_context * context,
unsigned char out33[33] )

Definition at line 1618 of file bppp_bridge.c.

References purify_context_handle().

Referenced by purify::bppp::base_generator().

◆ purify_bppp_commit_norm_arg()

int purify_bppp_commit_norm_arg ( purify_secp_context * context,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
unsigned char commitment_out33[33] )

◆ purify_bppp_commit_norm_arg_impl()

int purify_bppp_commit_norm_arg_impl ( purify_secp_context * context,
purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
unsigned char commitment_out33[33] )
static

◆ purify_bppp_commit_norm_arg_with_resources()

int purify_bppp_commit_norm_arg_with_resources ( purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
unsigned char commitment_out33[33] )

◆ purify_bppp_commit_witness_only()

int purify_bppp_commit_witness_only ( purify_secp_context * context,
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
unsigned char commitment_out33[33] )

Definition at line 1860 of file bppp_bridge.c.

References purify_bppp_commit_witness_only_impl().

◆ purify_bppp_commit_witness_only_impl()

int purify_bppp_commit_witness_only_impl ( purify_secp_context * context,
purify_bppp_backend_resources * resources,
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
unsigned char commitment_out33[33] )
static

◆ purify_bppp_commit_witness_only_with_resources()

int purify_bppp_commit_witness_only_with_resources ( purify_bppp_backend_resources * resources,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
unsigned char commitment_out33[33] )

◆ purify_bppp_create_generators()

int purify_bppp_create_generators ( purify_secp_context * context,
size_t count,
unsigned char * out,
size_t * out_len )
Parameters
countNumber of generators requested.
outOutput buffer for count compressed points.
out_lenIn/out serialized byte length.
Returns
Nonzero on success.

Definition at line 1643 of file bppp_bridge.c.

References purify_bridge_checked_mul_size(), and purify_context_handle().

Referenced by purify::bppp::create_generators().

◆ purify_bppp_generators_clone()

secp256k1_bppp_generators * purify_bppp_generators_clone ( const secp256k1_bppp_generators * generators)
static

◆ purify_bppp_offset_commitment()

int purify_bppp_offset_commitment ( purify_secp_context * context,
const unsigned char commitment33[33],
const unsigned char scalar32[32],
unsigned char commitment_out33[33] )

◆ purify_bppp_prove_norm_arg()

int purify_bppp_prove_norm_arg ( purify_secp_context * context,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )
Parameters
rho32Fiat-Shamir seed.
generators33Serialized generator list.
generators_countNumber of generators in generators33.
n_vec32Serialized n vector.
n_vec_lenLength of the n vector.
l_vec32Serialized l vector.
l_vec_lenLength of the l vector.
c_vec32Serialized c vector.
c_vec_lenLength of the c vector.
commitment_out33Commitment output used by the proof.
proof_outOutput buffer for the serialized proof.
proof_lenIn/out proof buffer length.
Returns
Nonzero on success.

Definition at line 2044 of file bppp_bridge.c.

References purify_bppp_prove_norm_arg_impl().

◆ purify_bppp_prove_norm_arg_impl()

int purify_bppp_prove_norm_arg_impl ( purify_secp_context * context,
purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )
static

◆ purify_bppp_prove_norm_arg_to_commitment()

int purify_bppp_prove_norm_arg_to_commitment ( purify_secp_context * context,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
const unsigned char commitment33[33],
unsigned char * proof_out,
size_t * proof_len )

◆ purify_bppp_prove_norm_arg_to_commitment_impl()

int purify_bppp_prove_norm_arg_to_commitment_impl ( purify_secp_context * context,
purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
const unsigned char commitment33[33],
unsigned char * proof_out,
size_t * proof_len )
static

◆ purify_bppp_prove_norm_arg_to_commitment_with_resources()

int purify_bppp_prove_norm_arg_to_commitment_with_resources ( purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
const unsigned char commitment33[33],
unsigned char * proof_out,
size_t * proof_len )

◆ purify_bppp_prove_norm_arg_with_resources()

int purify_bppp_prove_norm_arg_with_resources ( purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * n_vec32,
size_t n_vec_len,
const unsigned char * l_vec32,
size_t l_vec_len,
const unsigned char * c_vec32,
size_t c_vec_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )

◆ purify_bppp_rangeproof_norm_product_prove_const()

int purify_bppp_rangeproof_norm_product_prove_const ( const secp256k1_context * ctx,
secp256k1_scratch_space * scratch,
unsigned char * proof,
size_t * proof_len,
secp256k1_sha256 * transcript,
const secp256k1_scalar * rho,
const secp256k1_ge * g_vec,
size_t g_vec_len,
const secp256k1_scalar * n_vec,
size_t n_vec_len,
const secp256k1_scalar * l_vec,
size_t l_vec_len,
const secp256k1_scalar * c_vec,
size_t c_vec_len )
static

◆ purify_bppp_required_proof_size()

size_t purify_bppp_required_proof_size ( size_t n_vec_len,
size_t c_vec_len )
Parameters
n_vec_lenLength of the n vector.
c_vec_lenLength of the c vector.
Returns
Required output buffer size in bytes.

Definition at line 1603 of file bppp_bridge.c.

References purify_bridge_checked_add_size(), and purify_bridge_checked_mul_size().

Referenced by purify::bppp::prove_norm_arg_to_commitment_with_cache(), purify_bppp_prove_norm_arg_impl(), and purify_bppp_prove_norm_arg_to_commitment_impl().

◆ purify_bppp_value_generator_h()

int purify_bppp_value_generator_h ( purify_secp_context * context,
unsigned char out33[33] )

Definition at line 1632 of file bppp_bridge.c.

References purify_context_handle().

Referenced by purify::bppp::value_generator_h().

◆ purify_bppp_verify_norm_arg()

int purify_bppp_verify_norm_arg ( purify_secp_context * context,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * c_vec32,
size_t c_vec_len,
size_t n_vec_len,
const unsigned char commitment33[33],
const unsigned char * proof,
size_t proof_len )
Parameters
rho32Fiat-Shamir seed.
generators33Serialized generator list.
generators_countNumber of generators in generators33.
c_vec32Serialized c vector.
c_vec_lenLength of the c vector.
n_vec_lenLength of the hidden n vector.
commitment33Serialized compressed commitment point.
proofSerialized proof bytes.
proof_lenProof length in bytes.
Returns
Nonzero on success.

Definition at line 2247 of file bppp_bridge.c.

References purify_bppp_verify_norm_arg_impl().

Referenced by purify::bppp::verify_norm_arg_with_cache().

◆ purify_bppp_verify_norm_arg_impl()

int purify_bppp_verify_norm_arg_impl ( purify_secp_context * context,
purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * generators33,
size_t generators_count,
const unsigned char * c_vec32,
size_t c_vec_len,
size_t n_vec_len,
const unsigned char commitment33[33],
const unsigned char * proof,
size_t proof_len )
static

◆ purify_bppp_verify_norm_arg_with_resources()

int purify_bppp_verify_norm_arg_with_resources ( purify_bppp_backend_resources * resources,
const unsigned char rho32[32],
const unsigned char * c_vec32,
size_t c_vec_len,
size_t n_vec_len,
const unsigned char commitment33[33],
const unsigned char * proof,
size_t proof_len )

◆ purify_bridge_checked_add_size()

◆ purify_bridge_checked_mul_size()

◆ purify_bridge_secure_clear()

◆ purify_build_bulletproof_assignment()

◆ purify_build_bulletproof_circuit()

◆ purify_build_row_family()

◆ purify_bulletproof_add_scratch_frame()

int purify_bulletproof_add_scratch_frame ( size_t * total,
size_t bytes,
size_t objects )
static

◆ purify_bulletproof_backend_resources_clone()

◆ purify_bulletproof_backend_resources_create()

◆ purify_bulletproof_backend_resources_destroy()

◆ purify_bulletproof_circuit_evaluate()

◆ purify_bulletproof_circuit_evaluate_sum_row()

void purify_bulletproof_circuit_evaluate_sum_row ( secp256k1_scalar * acc,
const secp256k1_bulletproof_wmatrix_row * row,
const secp256k1_scalar * assn )
static

◆ purify_bulletproof_circuit_scratch_size()

◆ purify_bulletproof_prove_circuit()

int purify_bulletproof_prove_circuit ( purify_secp_context * context,
const purify_bulletproof_circuit_view * circuit,
const purify_bulletproof_assignment_view * assignment,
const unsigned char * blind32,
const unsigned char value_gen33[33],
const unsigned char nonce32[32],
const unsigned char * extra_commit,
size_t extra_commit_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )

Definition at line 1322 of file bppp_bridge.c.

References purify_bulletproof_prove_circuit_impl().

◆ purify_bulletproof_prove_circuit_assume_valid()

int purify_bulletproof_prove_circuit_assume_valid ( purify_secp_context * context,
const purify_bulletproof_circuit_view * circuit,
const purify_bulletproof_assignment_view * assignment,
const unsigned char * blind32,
const unsigned char value_gen33[33],
const unsigned char nonce32[32],
const unsigned char * extra_commit,
size_t extra_commit_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )

Definition at line 1354 of file bppp_bridge.c.

References purify_bulletproof_prove_circuit_impl().

◆ purify_bulletproof_prove_circuit_assume_valid_with_resources()

int purify_bulletproof_prove_circuit_assume_valid_with_resources ( purify_bulletproof_backend_resources * resources,
const purify_bulletproof_circuit_view * circuit,
const purify_bulletproof_assignment_view * assignment,
const unsigned char * blind32,
const unsigned char value_gen33[33],
const unsigned char nonce32[32],
const unsigned char * extra_commit,
size_t extra_commit_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )

Definition at line 1370 of file bppp_bridge.c.

References purify_bulletproof_prove_circuit_impl().

◆ purify_bulletproof_prove_circuit_impl()

int purify_bulletproof_prove_circuit_impl ( const purify_bulletproof_circuit_view * circuit,
const purify_bulletproof_assignment_view * assignment,
const unsigned char * blind32,
const unsigned char value_gen33[33],
const unsigned char nonce32[32],
const unsigned char * extra_commit,
size_t extra_commit_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len,
int require_valid_assignment,
purify_secp_context * context,
purify_bulletproof_backend_resources * resources )
static

◆ purify_bulletproof_prove_circuit_with_resources()

int purify_bulletproof_prove_circuit_with_resources ( purify_bulletproof_backend_resources * resources,
const purify_bulletproof_circuit_view * circuit,
const purify_bulletproof_assignment_view * assignment,
const unsigned char * blind32,
const unsigned char value_gen33[33],
const unsigned char nonce32[32],
const unsigned char * extra_commit,
size_t extra_commit_len,
unsigned char commitment_out33[33],
unsigned char * proof_out,
size_t * proof_len )

Definition at line 1338 of file bppp_bridge.c.

References purify_bulletproof_prove_circuit_impl().

◆ purify_bulletproof_required_proof_size()

size_t purify_bulletproof_required_proof_size ( size_t n_gates)

◆ purify_bulletproof_reserve_circuit_scratch()

◆ purify_bulletproof_verify_circuit()

int purify_bulletproof_verify_circuit ( purify_secp_context * context,
const purify_bulletproof_circuit_view * circuit,
const unsigned char commitment33[33],
const unsigned char value_gen33[33],
const unsigned char * extra_commit,
size_t extra_commit_len,
const unsigned char * proof,
size_t proof_len )

◆ purify_bulletproof_verify_circuit_impl()

◆ purify_bulletproof_verify_circuit_with_resources()

int purify_bulletproof_verify_circuit_with_resources ( purify_bulletproof_backend_resources * resources,
const purify_bulletproof_circuit_view * circuit,
const unsigned char commitment33[33],
const unsigned char value_gen33[33],
const unsigned char * extra_commit,
size_t extra_commit_len,
const unsigned char * proof,
size_t proof_len )

◆ purify_calloc_array()

void * purify_calloc_array ( size_t count,
size_t elem_size )
static

Definition at line 228 of file bppp_bridge.c.

References purify_bridge_checked_mul_size().

Referenced by purify_build_bulletproof_circuit().

◆ purify_context_handle()

◆ purify_copy_vectors_into_scratch()

int purify_copy_vectors_into_scratch ( const secp256k1_context * ctx,
secp256k1_scratch_space * scratch,
secp256k1_scalar ** ns,
secp256k1_scalar ** ls,
secp256k1_scalar ** cs,
secp256k1_ge ** gs,
const secp256k1_scalar * n_vec,
const secp256k1_scalar * l_vec,
const secp256k1_scalar * c_vec,
const secp256k1_ge * gens_vec,
size_t g_len,
size_t h_len )
static

◆ purify_fixed_nonce_function()

int purify_fixed_nonce_function ( unsigned char * nonce32,
const unsigned char * msg,
size_t msglen,
const unsigned char * key32,
const unsigned char * xonly_pk32,
const unsigned char * algo,
size_t algolen,
void * data )
static

Definition at line 778 of file bppp_bridge.c.

Referenced by purify_bip340_sign_with_fixed_nonce().

◆ purify_free_bulletproof_assignment()

◆ purify_free_bulletproof_circuit()

◆ purify_hmac_sha256()

void purify_hmac_sha256 ( unsigned char output32[32],
const unsigned char * key,
size_t key_len,
const unsigned char * data,
size_t data_len )
Parameters
output32Output MAC buffer.
keyPointer to key bytes, or NULL when key_len is zero.
key_lenKey length in bytes.
dataPointer to message bytes, or NULL when data_len is zero.
data_lenMessage length in bytes.

Definition at line 595 of file bppp_bridge.c.

Referenced by purify::hmac_sha256(), and purify_core_hkdf_sha256().

◆ purify_malloc_array()

◆ purify_norm_arg_commit_initial_data()

int purify_norm_arg_commit_initial_data ( secp256k1_sha256 * transcript,
const secp256k1_scalar * rho,
const secp256k1_bppp_generators * gens_vec,
size_t g_len,
const secp256k1_scalar * c_vec,
size_t c_vec_len,
const secp256k1_ge * commit )
static

◆ purify_parse_fast_scalar()

int purify_parse_fast_scalar ( const unsigned char input32[32],
secp256k1_fast_scalar * scalar )
static

◆ purify_parse_generator_as_ge()

int purify_parse_generator_as_ge ( const secp256k1_context * ctx,
const unsigned char generator33[33],
secp256k1_ge * out )
static

◆ purify_parse_point_as_ge()

int purify_parse_point_as_ge ( const unsigned char point33[33],
secp256k1_ge * out )
static

◆ purify_parse_scalar()

◆ purify_parse_scalar_array()

int purify_parse_scalar_array ( const unsigned char * input32,
size_t count,
secp256k1_scalar * out )
static

◆ purify_pedersen_commit_char()

int purify_pedersen_commit_char ( purify_secp_context * context,
const unsigned char blind32[32],
const unsigned char value32[32],
const unsigned char value_gen33[33],
const unsigned char blind_gen33[33],
unsigned char commitment_out33[33] )
Parameters
blind32Blinding factor in big-endian scalar form.
value32Committed value in big-endian scalar form.
value_gen33Compressed generator for the value term.
blind_gen33Compressed generator for the blind term.
commitment_out33Serialized compressed commitment output.
Returns
Nonzero on success.

Definition at line 1669 of file bppp_bridge.c.

References purify_context_handle(), purify_parse_scalar(), and purify_serialize_point().

Referenced by purify::bppp::pedersen_commit_char().

◆ purify_point_add()

int purify_point_add ( purify_secp_context * context,
const unsigned char lhs33[33],
const unsigned char rhs33[33],
unsigned char out33[33] )

◆ purify_point_scale()

int purify_point_scale ( purify_secp_context * context,
const unsigned char point33[33],
const unsigned char scalar32[32],
unsigned char out33[33] )

◆ purify_scalar_add()

int purify_scalar_add ( purify_scalar * out,
const purify_scalar * lhs,
const purify_scalar * rhs )

Definition at line 533 of file bppp_bridge.c.

References purify_scalar_cast(), and purify_scalar_cast_const().

Referenced by purify::FieldElement::operator+, and purify_fe_add().

◆ purify_scalar_cast()

◆ purify_scalar_cast_const()

◆ purify_scalar_cmov()

void purify_scalar_cmov ( purify_scalar * dst,
const purify_scalar * src,
int flag )

◆ purify_scalar_eq()

int purify_scalar_eq ( const purify_scalar * lhs,
const purify_scalar * rhs )

Definition at line 517 of file bppp_bridge.c.

References purify_scalar_cast_const().

Referenced by purify::FieldElement::operator==, and purify_fe_eq().

◆ purify_scalar_get_b32()

void purify_scalar_get_b32 ( unsigned char output32[32],
const purify_scalar * value )

Definition at line 501 of file bppp_bridge.c.

References purify_scalar_cast_const().

Referenced by purify_fe_get_b32(), and purify::FieldElement::to_bytes_be().

◆ purify_scalar_inverse()

void purify_scalar_inverse ( purify_scalar * out,
const purify_scalar * value )

◆ purify_scalar_inverse_var()

void purify_scalar_inverse_var ( purify_scalar * out,
const purify_scalar * value )

◆ purify_scalar_is_even()

int purify_scalar_is_even ( const purify_scalar * value)

Definition at line 513 of file bppp_bridge.c.

References purify_scalar_cast_const().

Referenced by purify::FieldElement::is_odd(), and purify_fe_is_odd().

◆ purify_scalar_is_one()

int purify_scalar_is_one ( const purify_scalar * value)

Definition at line 509 of file bppp_bridge.c.

References purify_scalar_cast_const().

Referenced by purify::FieldElement::is_one(), and purify_fe_is_one().

◆ purify_scalar_is_zero()

int purify_scalar_is_zero ( const purify_scalar * value)

Definition at line 505 of file bppp_bridge.c.

References purify_scalar_cast_const().

Referenced by purify::FieldElement::is_zero(), and purify_fe_is_zero().

◆ purify_scalar_mul()

void purify_scalar_mul ( purify_scalar * out,
const purify_scalar * lhs,
const purify_scalar * rhs )

Definition at line 537 of file bppp_bridge.c.

References purify_scalar_cast(), and purify_scalar_cast_const().

Referenced by purify::FieldElement::operator*, and purify_fe_mul().

◆ purify_scalar_negate()

void purify_scalar_negate ( purify_scalar * out,
const purify_scalar * value )

◆ purify_scalar_set_b32()

void purify_scalar_set_b32 ( purify_scalar * out,
const unsigned char input32[32],
int * overflow )

◆ purify_scalar_set_int()

void purify_scalar_set_int ( purify_scalar * out,
unsigned int value )

Definition at line 489 of file bppp_bridge.c.

References purify_scalar_cast().

Referenced by purify::FieldElement::FieldElement(), and purify_fe_set_zero().

◆ purify_scalar_set_u64()

void purify_scalar_set_u64 ( purify_scalar * out,
uint64_t value )

Definition at line 493 of file bppp_bridge.c.

References purify_scalar_cast().

Referenced by purify::FieldElement::from_u64(), and purify_fe_set_u64().

◆ purify_secp_context_create()

purify_secp_context * purify_secp_context_create ( void )

◆ purify_secp_context_destroy()

void purify_secp_context_destroy ( purify_secp_context * context)

Definition at line 69 of file bppp_bridge.c.

References purify_secp_context::ctx.

Referenced by purify::SecpContextDeleter::operator()().

◆ purify_serialize_point()

◆ purify_sha256()

void purify_sha256 ( unsigned char output32[32],
const unsigned char * data,
size_t data_len )
Parameters
output32Output digest buffer.
dataPointer to message bytes, or NULL when data_len is zero.
data_lenMessage length in bytes.

Definition at line 545 of file bppp_bridge.c.

Referenced by purify::bppp::generator_backend_cache_key(), purify_curve_tag_hash(), and purify::TaggedHash::TaggedHash().

◆ purify_sha256_many()

int purify_sha256_many ( unsigned char output32[32],
const unsigned char *const * items,
const size_t * item_lens,
size_t items_count )
Parameters
output32Output digest buffer.
itemsArray of item pointers. Each item may be NULL only when the corresponding length is zero.
item_lensArray of item lengths in bytes.
items_countNumber of items in both arrays.
Returns
Nonzero on success, zero on invalid input.

Definition at line 562 of file bppp_bridge.c.

Referenced by purify::TaggedHash::digest_many(), and purify_curve_hash_to_int_tagged_u320().

◆ purify_total_row_entries()

size_t purify_total_row_entries ( const purify_bulletproof_row_view * rows,
size_t count,
int * ok )
static

Definition at line 969 of file bppp_bridge.c.

References purify_bridge_checked_add_size().

Referenced by purify_build_bulletproof_circuit().

Variable Documentation

◆ purify_bulletproof_msm_scratch_size

const size_t purify_bulletproof_msm_scratch_size = (size_t)1u << 24
static