purify
C++ Purify implementation with native circuit and BPP support
Loading...
Searching...
No Matches
bppp_bridge.h
Go to the documentation of this file.
1// Copyright (c) 2026 Judica, Inc.
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or https://opensource.org/license/mit/.
4
10#pragma once
11
12#include <stddef.h>
13
14#include "purify/secp_bridge.h"
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
21
28size_t purify_bppp_required_proof_size(size_t n_vec_len, size_t c_vec_len);
29
31int purify_bppp_base_generator(purify_secp_context* context, unsigned char out33[33]);
33int purify_bppp_value_generator_h(purify_secp_context* context, unsigned char out33[33]);
41int purify_bppp_create_generators(purify_secp_context* context, size_t count, unsigned char* out, size_t* out_len);
42
44 const unsigned char* generators33,
45 size_t generators_count);
47 const purify_bppp_backend_resources* resources);
49
51 const unsigned char rho32[32], const unsigned char* generators33, size_t generators_count,
52 const unsigned char* n_vec32, size_t n_vec_len, const unsigned char* l_vec32,
53 size_t l_vec_len, const unsigned char* c_vec32, size_t c_vec_len,
54 unsigned char commitment_out33[33]);
56 const unsigned char rho32[32],
57 const unsigned char* n_vec32, size_t n_vec_len,
58 const unsigned char* l_vec32, size_t l_vec_len,
59 const unsigned char* c_vec32, size_t c_vec_len,
60 unsigned char commitment_out33[33]);
61
63 const unsigned char* generators33, size_t generators_count,
64 const unsigned char* n_vec32, size_t n_vec_len, const unsigned char* l_vec32,
65 size_t l_vec_len, unsigned char commitment_out33[33]);
67 const unsigned char* n_vec32, size_t n_vec_len,
68 const unsigned char* l_vec32, size_t l_vec_len,
69 unsigned char commitment_out33[33]);
70
72 const unsigned char commitment33[33], const unsigned char scalar32[32],
73 unsigned char commitment_out33[33]);
74
76 const unsigned char point33[33], const unsigned char scalar32[32],
77 unsigned char out33[33]);
78
80 const unsigned char lhs33[33], const unsigned char rhs33[33],
81 unsigned char out33[33]);
82
93 const unsigned char blind32[32], const unsigned char value32[32],
94 const unsigned char value_gen33[33], const unsigned char blind_gen33[33],
95 unsigned char commitment_out33[33]);
96
114 const unsigned char rho32[32], const unsigned char* generators33, size_t generators_count,
115 const unsigned char* n_vec32, size_t n_vec_len, const unsigned char* l_vec32,
116 size_t l_vec_len, const unsigned char* c_vec32, size_t c_vec_len,
117 unsigned char commitment_out33[33], unsigned char* proof_out, size_t* proof_len);
119 const unsigned char rho32[32],
120 const unsigned char* n_vec32, size_t n_vec_len,
121 const unsigned char* l_vec32, size_t l_vec_len,
122 const unsigned char* c_vec32, size_t c_vec_len,
123 unsigned char commitment_out33[33], unsigned char* proof_out,
124 size_t* proof_len);
125
127 const unsigned char rho32[32], const unsigned char* generators33, size_t generators_count,
128 const unsigned char* n_vec32, size_t n_vec_len, const unsigned char* l_vec32,
129 size_t l_vec_len, const unsigned char* c_vec32, size_t c_vec_len,
130 const unsigned char commitment33[33], unsigned char* proof_out, size_t* proof_len);
132 const unsigned char rho32[32],
133 const unsigned char* n_vec32, size_t n_vec_len,
134 const unsigned char* l_vec32, size_t l_vec_len,
135 const unsigned char* c_vec32, size_t c_vec_len,
136 const unsigned char commitment33[33],
137 unsigned char* proof_out, size_t* proof_len);
138
153 const unsigned char rho32[32], const unsigned char* generators33, size_t generators_count,
154 const unsigned char* c_vec32, size_t c_vec_len, size_t n_vec_len,
155 const unsigned char commitment33[33], const unsigned char* proof, size_t proof_len);
157 const unsigned char rho32[32],
158 const unsigned char* c_vec32, size_t c_vec_len, size_t n_vec_len,
159 const unsigned char commitment33[33], const unsigned char* proof,
160 size_t proof_len);
161
163 size_t size;
164 const size_t* indices;
165 const unsigned char* scalars32;
167
179
181 size_t n_gates;
182 size_t n_commits;
183 const unsigned char* al32;
184 const unsigned char* ar32;
185 const unsigned char* ao32;
186 const unsigned char* v32;
188
190
192
194 size_t n_gates);
196 const purify_bulletproof_backend_resources* resources);
198
200 const purify_bulletproof_circuit_view* circuit,
201 const purify_bulletproof_assignment_view* assignment,
202 const unsigned char* blind32,
203 const unsigned char value_gen33[33],
204 const unsigned char nonce32[32],
205 const unsigned char* extra_commit,
206 size_t extra_commit_len,
207 unsigned char commitment_out33[33],
208 unsigned char* proof_out,
209 size_t* proof_len);
211 const purify_bulletproof_circuit_view* circuit,
212 const purify_bulletproof_assignment_view* assignment,
213 const unsigned char* blind32,
214 const unsigned char value_gen33[33],
215 const unsigned char nonce32[32],
216 const unsigned char* extra_commit,
217 size_t extra_commit_len,
218 unsigned char commitment_out33[33],
219 unsigned char* proof_out,
220 size_t* proof_len);
221
223 const purify_bulletproof_circuit_view* circuit,
224 const purify_bulletproof_assignment_view* assignment,
225 const unsigned char* blind32,
226 const unsigned char value_gen33[33],
227 const unsigned char nonce32[32],
228 const unsigned char* extra_commit,
229 size_t extra_commit_len,
230 unsigned char commitment_out33[33],
231 unsigned char* proof_out,
232 size_t* proof_len);
234 const purify_bulletproof_circuit_view* circuit,
235 const purify_bulletproof_assignment_view* assignment,
236 const unsigned char* blind32,
237 const unsigned char value_gen33[33],
238 const unsigned char nonce32[32],
239 const unsigned char* extra_commit,
240 size_t extra_commit_len,
241 unsigned char commitment_out33[33],
242 unsigned char* proof_out,
243 size_t* proof_len);
244
246 const purify_bulletproof_circuit_view* circuit,
247 const unsigned char commitment33[33],
248 const unsigned char value_gen33[33],
249 const unsigned char* extra_commit,
250 size_t extra_commit_len,
251 const unsigned char* proof,
252 size_t proof_len);
254 const purify_bulletproof_circuit_view* circuit,
255 const unsigned char commitment33[33],
256 const unsigned char value_gen33[33],
257 const unsigned char* extra_commit,
258 size_t extra_commit_len,
259 const unsigned char* proof,
260 size_t proof_len);
261
262#ifdef __cplusplus
263}
264#endif
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)
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_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_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_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_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_point_scale(purify_secp_context *context, const unsigned char point33[33], const unsigned char scalar32[32], unsigned char out33[33])
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)
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_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_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])
void purify_bppp_backend_resources_destroy(purify_bppp_backend_resources *resources)
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.
purify_bppp_backend_resources * purify_bppp_backend_resources_clone(const purify_bppp_backend_resources *resources)
int purify_point_add(purify_secp_context *context, const unsigned char lhs33[33], const unsigned char rhs33[33], unsigned char out33[33])
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_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.
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)
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)
int purify_bppp_offset_commitment(purify_secp_context *context, const unsigned char commitment33[33], const unsigned char scalar32[32], unsigned char commitment_out33[33])
void purify_bulletproof_backend_resources_destroy(purify_bulletproof_backend_resources *resources)
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_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)
int purify_bppp_base_generator(purify_secp_context *context, unsigned char out33[33])
Serializes the secp256k1 base generator into compressed form.
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])
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.
size_t purify_bulletproof_required_proof_size(size_t n_gates)
purify_bppp_backend_resources * purify_bppp_backend_resources_create(purify_secp_context *context, const unsigned char *generators33, size_t generators_count)
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)
Narrow C ABI exposing secp256k1 scalar and HMAC helpers to the C++ headers.
const purify_bulletproof_row_view * wr
const purify_bulletproof_row_view * wo
const purify_bulletproof_row_view * wl
const purify_bulletproof_row_view * wv
const unsigned char * c32
const unsigned char * scalars32