1 #ifndef PIVX_RUST_INCLUDE_LIBRUSTZCASH_H
2 #define PIVX_RUST_INCLUDE_LIBRUSTZCASH_H
29 size_t spend_path_len,
30 const char* spend_hash,
32 size_t output_path_len,
33 const char* output_hash,
35 size_t sprout_path_len,
36 const char* sprout_hash
44 const unsigned char* input,
46 const unsigned char*
nonce,
48 const unsigned char* soln,
70 const unsigned char *a,
71 const unsigned char *b,
81 const unsigned char *ask,
82 const unsigned char *ar,
83 const unsigned char *sighash,
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,
106 unsigned char *zkproof
114 const unsigned char *esk,
115 const unsigned char *payment_address,
116 const unsigned char *rcm,
117 const uint64_t value,
119 unsigned char *zkproof
127 int64_t valueBalance,
128 const unsigned char *sighash,
129 unsigned char *result
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
157 const unsigned char *cv,
158 const unsigned char *cm,
159 const unsigned char *ephemeralKey,
160 const unsigned char *zkproof
167 int64_t valueBalance,
168 const unsigned char *bindingSig,
169 const unsigned char *sighashValue
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
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
213 const unsigned char *p,
214 const unsigned char *sk,
215 unsigned char *result
224 const unsigned char *diversifier,
225 const unsigned char *esk,
226 unsigned char *result
232 unsigned char *result
237 unsigned char *proof_out,
239 const unsigned char *phi,
240 const unsigned char *rt,
241 const unsigned char *h_sig,
243 const unsigned char *in_sk1,
245 const unsigned char *in_rho1,
246 const unsigned char *in_r1,
247 const unsigned char *in_auth1,
249 const unsigned char *in_sk2,
251 const unsigned char *in_rho2,
252 const unsigned char *in_r2,
253 const unsigned char *in_auth2,
255 const unsigned char *out_pk1,
257 const unsigned char *out_r1,
259 const unsigned char *out_pk2,
261 const unsigned char *out_r2,
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,
284 const unsigned char *seed,
286 unsigned char *xsk_master
291 const unsigned char *xsk_parent,
298 const unsigned char *xfvk_parent,
300 unsigned char *xfvk_i
305 const unsigned char *xfvk,
306 const unsigned char *j,
307 unsigned char *j_ret,
308 unsigned char *addr_ret
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.
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)