mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-18 19:01:24 +00:00
29d69b98cb
* entirely replaces the prior rln header, the var variables are changed to ptr * updates the unittest of key_gen * adds test for update_next_member * updates membershipKeyGen internals and prototype * adds createRLNInstance * adds helpers methods * adds generateKeyPairBuffer * cleans up the test and adds comments * renames merkleTreeDepth to d * fixes a buf re decoding the keys into sk and pk * adds getSKPK proc * unifies key gen helper procs, adds todos * comments out the createRLNInstance * refactors the code based on the updated createRLNInstance interface * adds the test for the verify proc * fixes a variable name and replaces random key gen with the real key gen * tests a simple hash * adds get_root method * fixes the data pointer issue and adds the proof breakdown * adds rln * adds unit tests for Merkle tree * deletes unnecessary comments * updates createRLNInstance to return bool indicating the success of call * updates create RLN Instance interface * minor * clean up * removes unused imports * adds documentation * adds comments * adds byteutils * removes extra spaces * updates rln submodule * deletes genSKPK * fixes a bug in membershipKeyGen * unsafeAddr to addr * Update waku/v2/protocol/waku_rln_relay/rln.nim Co-authored-by: Oskar Thorén <ot@oskarthoren.com> * clean up Co-authored-by: Oskar Thorén <ot@oskarthoren.com>
42 lines
1.5 KiB
Nim
42 lines
1.5 KiB
Nim
# this module contains the Nim wrappers for the rln library https://github.com/kilic/rln/blob/3bbec368a4adc68cd5f9bfae80b17e1bbb4ef373/src/ffi.rs
|
|
|
|
import os
|
|
|
|
|
|
const libPath = "vendor/rln/target/debug/"
|
|
when defined(Windows):
|
|
const libName* = libPath / "rln.dll"
|
|
elif defined(Linux):
|
|
const libName* = libPath / "librln.so"
|
|
elif defined(MacOsX):
|
|
const libName* = libPath / "librln.dylib"
|
|
|
|
# all the following procedures are Nim wrappers for the functions defined in libName
|
|
{.push dynlib: libName.}
|
|
|
|
type RLN*[E] {.incompleteStruct.} = object
|
|
type Bn256* = pointer
|
|
|
|
## Buffer struct is taken from
|
|
# https://github.com/celo-org/celo-threshold-bls-rs/blob/master/crates/threshold-bls-ffi/src/ffi.rs
|
|
type Buffer* = object
|
|
`ptr`*: ptr uint8
|
|
len*: uint
|
|
|
|
proc key_gen*(ctx: ptr RLN[Bn256], keypair_buffer: ptr Buffer): bool {.importc: "key_gen".}
|
|
|
|
proc new_circuit_from_params*(merkle_depth: uint,
|
|
parameters_buffer: ptr Buffer,
|
|
ctx: ptr (ptr RLN[Bn256])): bool {.importc: "new_circuit_from_params".}
|
|
|
|
#------------------------------Merkle Tree operations -----------------------------------------
|
|
proc update_next_member*(ctx: ptr RLN[Bn256],
|
|
input_buffer: ptr Buffer): bool {.importc: "update_next_member".}
|
|
|
|
proc delete_member*(ctx: ptr RLN[Bn256], index: uint): bool {.importc: "delete_member".}
|
|
|
|
proc get_root*(ctx: ptr RLN[Bn256], output_buffer: ptr Buffer): bool {.importc: "get_root".}
|
|
#----------------------------------------------------------------------------------------------
|
|
|
|
{.pop.}
|