#include #include #include #include #define TEST_PARAMETERS_INDEX 2 typedef struct RLN RLN; /** * Buffer struct is taken from * https://github.com/celo-org/celo-threshold-bls-rs/blob/master/crates/threshold-bls-ffi/src/ffi.rs * * Also heavily inspired by https://github.com/kilic/rln/blob/master/src/ffi.rs */ typedef struct Buffer { const uint8_t *ptr; uintptr_t len; } Buffer; bool new(uintptr_t tree_height, const struct Buffer *input_buffer, struct RLN **ctx); bool new_with_params(uintptr_t tree_height, const struct Buffer *circom_buffer, const struct Buffer *zkey_buffer, const struct Buffer *vk_buffer, struct RLN **ctx); bool set_tree(struct RLN *ctx, uintptr_t tree_height); bool delete_leaf(struct RLN *ctx, uintptr_t index); bool set_leaf(struct RLN *ctx, uintptr_t index, const struct Buffer *input_buffer); bool set_next_leaf(struct RLN *ctx, const struct Buffer *input_buffer); bool set_leaves(struct RLN *ctx, const struct Buffer *input_buffer); bool get_root(const struct RLN *ctx, struct Buffer *output_buffer); bool get_proof(const struct RLN *ctx, uintptr_t index, struct Buffer *output_buffer); bool prove(struct RLN *ctx, const struct Buffer *input_buffer, struct Buffer *output_buffer); bool verify(const struct RLN *ctx, const struct Buffer *proof_buffer, bool *proof_is_valid_ptr); bool generate_rln_proof(struct RLN *ctx, const struct Buffer *input_buffer, struct Buffer *output_buffer); bool verify_rln_proof(const struct RLN *ctx, const struct Buffer *proof_buffer, bool *proof_is_valid_ptr); bool key_gen(const struct RLN *ctx, struct Buffer *output_buffer); bool seeded_key_gen(const struct RLN *ctx, const struct Buffer *input_buffer, struct Buffer *output_buffer); bool hash(struct RLN *ctx, const struct Buffer *input_buffer, struct Buffer *output_buffer);