PIVX Core  5.6.99
P2P Digital Currency
librustzcash.h
Go to the documentation of this file.
1 #ifndef PIVX_RUST_INCLUDE_LIBRUSTZCASH_H
2 #define PIVX_RUST_INCLUDE_LIBRUSTZCASH_H
3 
4 #include <stdint.h>
5 
6 extern "C" {
7 #ifdef WIN32
8  typedef uint16_t codeunit;
9 #else
10  typedef uint8_t codeunit;
11 #endif
12 
13  void librustzcash_to_scalar(const unsigned char *input, unsigned char *result);
14 
15  void librustzcash_ask_to_ak(const unsigned char *ask, unsigned char *result);
16 
17  void librustzcash_nsk_to_nk(const unsigned char *nsk, unsigned char *result);
18 
19  void librustzcash_crh_ivk(const unsigned char *ak, const unsigned char *nk, unsigned char *result);
20 
21  bool librustzcash_check_diversifier(const unsigned char *diversifier);
22 
23  bool librustzcash_ivk_to_pkd(const unsigned char *ivk, const unsigned char *diversifier, unsigned char *result);
24 
28  const codeunit* spend_path,
29  size_t spend_path_len,
30  const char* spend_hash,
31  const codeunit* output_path,
32  size_t output_path_len,
33  const char* output_hash,
34  const codeunit* sprout_path,
35  size_t sprout_path_len,
36  const char* sprout_hash
37  );
38 
42  uint32_t n,
43  uint32_t k,
44  const unsigned char* input,
45  size_t input_len,
46  const unsigned char* nonce,
47  size_t nonce_len,
48  const unsigned char* soln,
49  size_t soln_len
50  );
51 
56  unsigned char *result
57  );
58 
69  size_t depth,
70  const unsigned char *a,
71  const unsigned char *b,
72  unsigned char *result
73  );
74 
81  const unsigned char *ask,
82  const unsigned char *ar,
83  const unsigned char *sighash,
84  unsigned char *result
85  );
86 
89 
95  void *ctx,
96  const unsigned char *ak,
97  const unsigned char *nsk,
98  const unsigned char *diversifier,
99  const unsigned char *rcm,
100  const unsigned char *ar,
101  const uint64_t value,
102  const unsigned char *anchor,
103  const unsigned char *witness,
104  unsigned char *cv,
105  unsigned char *rk,
106  unsigned char *zkproof
107  );
108 
113  void *ctx,
114  const unsigned char *esk,
115  const unsigned char *payment_address,
116  const unsigned char *rcm,
117  const uint64_t value,
118  unsigned char *cv,
119  unsigned char *zkproof
120  );
121 
126  const void *ctx,
127  int64_t valueBalance,
128  const unsigned char *sighash,
129  unsigned char *result
130  );
131 
135 
139 
143  void *ctx,
144  const unsigned char *cv,
145  const unsigned char *anchor,
146  const unsigned char *nullifier,
147  const unsigned char *rk,
148  const unsigned char *zkproof,
149  const unsigned char *spendAuthSig,
150  const unsigned char *sighashValue
151  );
152 
156  void *ctx,
157  const unsigned char *cv,
158  const unsigned char *cm,
159  const unsigned char *ephemeralKey,
160  const unsigned char *zkproof
161  );
162 
166  void *ctx,
167  int64_t valueBalance,
168  const unsigned char *bindingSig,
169  const unsigned char *sighashValue
170  );
171 
175 
183  const unsigned char *diversifier,
184  const unsigned char *pk_d,
185  const uint64_t value,
186  const unsigned char *r,
187  const unsigned char *ak,
188  const unsigned char *nk,
189  const uint64_t position,
190  unsigned char *result
191  );
192 
200  const unsigned char *diversifier,
201  const unsigned char *pk_d,
202  const uint64_t value,
203  const unsigned char *r,
204  unsigned char *result
205  );
206 
213  const unsigned char *p,
214  const unsigned char *sk,
215  unsigned char *result
216  );
217 
224  const unsigned char *diversifier,
225  const unsigned char *esk,
226  unsigned char *result
227  );
228 
232  unsigned char *result
233  );
234 
237  unsigned char *proof_out,
238 
239  const unsigned char *phi,
240  const unsigned char *rt,
241  const unsigned char *h_sig,
242 
243  const unsigned char *in_sk1,
244  uint64_t in_value1,
245  const unsigned char *in_rho1,
246  const unsigned char *in_r1,
247  const unsigned char *in_auth1,
248 
249  const unsigned char *in_sk2,
250  uint64_t in_value2,
251  const unsigned char *in_rho2,
252  const unsigned char *in_r2,
253  const unsigned char *in_auth2,
254 
255  const unsigned char *out_pk1,
256  uint64_t out_value1,
257  const unsigned char *out_r1,
258 
259  const unsigned char *out_pk2,
260  uint64_t out_value2,
261  const unsigned char *out_r2,
262 
263  uint64_t vpub_old,
264  uint64_t vpub_new
265  );
266 
269  const unsigned char *proof,
270  const unsigned char *rt,
271  const unsigned char *h_sig,
272  const unsigned char *mac1,
273  const unsigned char *mac2,
274  const unsigned char *nf1,
275  const unsigned char *nf2,
276  const unsigned char *cm1,
277  const unsigned char *cm2,
278  uint64_t vpub_old,
279  uint64_t vpub_new
280  );
281 
284  const unsigned char *seed,
285  size_t seedlen,
286  unsigned char *xsk_master
287  );
288 
291  const unsigned char *xsk_parent,
292  uint32_t i,
293  unsigned char *xsk_i
294  );
295 
298  const unsigned char *xfvk_parent,
299  uint32_t i,
300  unsigned char *xfvk_i
301  );
302 
305  const unsigned char *xfvk,
306  const unsigned char *j,
307  unsigned char *j_ret,
308  unsigned char *addr_ret
309  );
310 }
311 
312 #endif // PIVX_RUST_INCLUDE_LIBRUSTZCASH_H
bool librustzcash_sapling_ka_agree(const unsigned char *p, const unsigned char *sk, unsigned char *result)
Compute [sk] [8] P for some 32-byte point P, and 32-byte Fs.
void librustzcash_sapling_verification_ctx_free(void *)
Frees a Sapling verification context returned from librustzcash_sapling_verification_ctx_init.
bool librustzcash_sapling_binding_sig(const void *ctx, int64_t valueBalance, const unsigned char *sighash, unsigned char *result)
This function (using the proving context) constructs a binding signature.
bool librustzcash_zip32_xfvk_address(const unsigned char *xfvk, const unsigned char *j, unsigned char *j_ret, unsigned char *addr_ret)
Derive a PaymentAddress from an ExtendedFullViewingKey.
bool librustzcash_check_diversifier(const unsigned char *diversifier)
bool librustzcash_sapling_compute_cm(const unsigned char *diversifier, const unsigned char *pk_d, const uint64_t value, const unsigned char *r, unsigned char *result)
Compute a Sapling commitment.
bool librustzcash_sprout_verify(const unsigned char *proof, const unsigned char *rt, const unsigned char *h_sig, const unsigned char *mac1, const unsigned char *mac2, const unsigned char *nf1, const unsigned char *nf2, const unsigned char *cm1, const unsigned char *cm2, uint64_t vpub_old, uint64_t vpub_new)
Sprout JoinSplit proof verification.
bool librustzcash_sapling_spend_sig(const unsigned char *ask, const unsigned char *ar, const unsigned char *sighash, unsigned char *result)
Computes the signature for each Spend description, given the key ask, the re-randomization ar,...
bool librustzcash_sapling_check_output(void *ctx, const unsigned char *cv, const unsigned char *cm, const unsigned char *ephemeralKey, const unsigned char *zkproof)
Check the validity of a Sapling Output description, accumulating the value commitment into the contex...
void librustzcash_sprout_prove(unsigned char *proof_out, const unsigned char *phi, const unsigned char *rt, const unsigned char *h_sig, const unsigned char *in_sk1, uint64_t in_value1, const unsigned char *in_rho1, const unsigned char *in_r1, const unsigned char *in_auth1, const unsigned char *in_sk2, uint64_t in_value2, const unsigned char *in_rho2, const unsigned char *in_r2, const unsigned char *in_auth2, const unsigned char *out_pk1, uint64_t out_value1, const unsigned char *out_r1, const unsigned char *out_pk2, uint64_t out_value2, const unsigned char *out_r2, uint64_t vpub_old, uint64_t vpub_new)
Sprout JoinSplit proof generation.
void librustzcash_zip32_xsk_master(const unsigned char *seed, size_t seedlen, unsigned char *xsk_master)
Derive the master ExtendedSpendingKey from a seed.
bool librustzcash_sapling_output_proof(void *ctx, const unsigned char *esk, const unsigned char *payment_address, const unsigned char *rcm, const uint64_t value, unsigned char *cv, unsigned char *zkproof)
This function (using the proving context) constructs an Output proof given the necessary witness info...
void librustzcash_merkle_hash(size_t depth, const unsigned char *a, const unsigned char *b, unsigned char *result)
Computes a merkle tree hash for a given depth.
void librustzcash_crh_ivk(const unsigned char *ak, const unsigned char *nk, unsigned char *result)
void librustzcash_zip32_xsk_derive(const unsigned char *xsk_parent, uint32_t i, unsigned char *xsk_i)
Derive a child ExtendedSpendingKey from a parent.
void librustzcash_sapling_proving_ctx_free(void *)
Frees a Sapling proving context returned from librustzcash_sapling_proving_ctx_init.
void librustzcash_to_scalar(const unsigned char *input, unsigned char *result)
bool librustzcash_zip32_xfvk_derive(const unsigned char *xfvk_parent, uint32_t i, unsigned char *xfvk_i)
Derive a child ExtendedFullViewingKey from a parent.
void librustzcash_init_zksnark_params(const codeunit *spend_path, size_t spend_path_len, const char *spend_hash, const codeunit *output_path, size_t output_path_len, const char *output_hash, const codeunit *sprout_path, size_t sprout_path_len, const char *sprout_hash)
Loads the zk-SNARK parameters into memory and saves paths as necessary.
uint8_t codeunit
Definition: librustzcash.h:10
bool librustzcash_sapling_spend_proof(void *ctx, const unsigned char *ak, const unsigned char *nsk, const unsigned char *diversifier, const unsigned char *rcm, const unsigned char *ar, const uint64_t value, const unsigned char *anchor, const unsigned char *witness, unsigned char *cv, unsigned char *rk, unsigned char *zkproof)
This function (using the proving context) constructs a Spend proof given the necessary witness inform...
void librustzcash_ask_to_ak(const unsigned char *ask, unsigned char *result)
bool librustzcash_sapling_ka_derivepublic(const unsigned char *diversifier, const unsigned char *esk, unsigned char *result)
Compute g_d = GH(diversifier) and returns false if the diversifier is invalid.
void librustzcash_sapling_generate_r(unsigned char *result)
Generate uniformly random scalar in Jubjub.
void * librustzcash_sapling_verification_ctx_init()
Creates a Sapling verification context.
bool librustzcash_sapling_final_check(void *ctx, int64_t valueBalance, const unsigned char *bindingSig, const unsigned char *sighashValue)
Finally checks the validity of the entire Sapling transaction given valueBalance and the binding sign...
void librustzcash_nsk_to_nk(const unsigned char *nsk, unsigned char *result)
bool librustzcash_eh_isvalid(uint32_t n, uint32_t k, const unsigned char *input, size_t input_len, const unsigned char *nonce, size_t nonce_len, const unsigned char *soln, size_t soln_len)
Validates the provided Equihash solution against the given parameters, input and nonce.
bool librustzcash_sapling_compute_nf(const unsigned char *diversifier, const unsigned char *pk_d, const uint64_t value, const unsigned char *r, const unsigned char *ak, const unsigned char *nk, const uint64_t position, unsigned char *result)
Compute a Sapling nullifier.
bool librustzcash_sapling_check_spend(void *ctx, const unsigned char *cv, const unsigned char *anchor, const unsigned char *nullifier, const unsigned char *rk, const unsigned char *zkproof, const unsigned char *spendAuthSig, const unsigned char *sighashValue)
Check the validity of a Sapling Spend description, accumulating the value commitment into the context...
void * librustzcash_sapling_proving_ctx_init()
Creates a Sapling proving context. Please free this when you're done.
void librustzcash_tree_uncommitted(unsigned char *result)
Writes the "uncommitted" note value for empty leaves of the merkle tree.
bool librustzcash_ivk_to_pkd(const unsigned char *ivk, const unsigned char *diversifier, unsigned char *result)
unsigned int nonce
Definition: miner_tests.cpp:28