deploy: 1afcfc318129bcd3de91d15f49754a0aec4c7353

This commit is contained in:
staheri14 2021-02-18 23:19:28 +00:00
parent 64325e0f21
commit 25fd34b449
4 changed files with 78 additions and 3 deletions

View File

@ -1 +1 @@
1613598889
1613689150

BIN
tests/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -2,7 +2,7 @@ import
chronos, chronicles, options, stint, unittest,
web3,
stew/byteutils,
../../waku/v2/protocol/waku_rln_relay/rln,
../../waku/v2/protocol/waku_rln_relay/[rln, waku_rln_relay_utils],
../test_helpers,
test_utils
@ -206,4 +206,16 @@ suite "Waku rln relay":
check:
# the public and secret keys together are 64 bytes
generatedKeys.len == 64
debug "generated keys: ", generatedKeys
debug "generated keys: ", generatedKeys
test "membership Key Gen":
var key = membershipKeyGen()
var empty : array[32,byte]
check:
key.isSome
key.get().secretKey.len == 32
key.get().publicKey.len == 32
key.get().secretKey != empty
key.get().publicKey != empty
debug "the generated membership key pair: ", key

View File

@ -0,0 +1,63 @@
import
chronicles, options, chronos, stint,
stew/byteutils,
rln
type MembershipKeyPair* = object
secretKey*: array[32, byte]
publicKey*: array[32, byte]
proc membershipKeyGen*(): Option[MembershipKeyPair] =
# generates a MembershipKeyPair that can be used for the registration into the rln membership contract
var
merkleDepth: csize_t = 32
# parameters.key contains the parameters related to the Poseidon hasher
# to generate this file, clone this repo https://github.com/kilic/rln
# and run the following command in the root directory of the cloned project
# cargo run --example export_test_keys
# the file is generated separately and copied here
parameters = readFile("waku/v2/protocol/waku_rln_relay/parameters.key")
pbytes = parameters.toBytes()
len : csize_t = uint(pbytes.len)
parametersBuffer = Buffer(`ptr`: unsafeAddr(pbytes[0]), len: len)
# check the parameters.key is not empty
if(pbytes.len == 0):
debug "error in parameters.key"
return none(MembershipKeyPair)
# ctx holds the information that is going to be used for the key generation
var
obj = RLNBn256()
objPtr = unsafeAddr(obj)
ctx = objPtr
let res = newCircuitFromParams(merkleDepth, unsafeAddr parametersBuffer, ctx)
# check whether the circuit parameters are generated successfully
if(res == false):
debug "error in parameters generation"
return none(MembershipKeyPair)
# keysBufferPtr will hold the generated key pairs i.e., secret and public keys
var
keysBufferPtr : Buffer
done = keyGen(ctx, keysBufferPtr)
# check whether the keys are generated successfully
if(done == false):
debug "error in key generation"
return none(MembershipKeyPair)
var generatedKeys = cast[ptr array[64, byte]](keysBufferPtr.`ptr`)[]
# the public and secret keys together are 64 bytes
if (generatedKeys.len != 64):
debug "the generated keys are invalid"
return none(MembershipKeyPair)
var
secret = cast[array[32, byte]](generatedKeys[0..31])
public = cast[array[32, byte]](generatedKeys[31..^1])
keypair = MembershipKeyPair(secretKey: secret, publicKey: public)
return some(keypair)