refactor: parameters as an input value

This commit is contained in:
Richard Ramos 2022-07-05 15:33:54 -04:00
parent ae2ac86b70
commit 320b2aea16
No known key found for this signature in database
GPG Key ID: BD36D48BC9FFC88C
2 changed files with 38 additions and 32 deletions

View File

@ -8,7 +8,6 @@ import "C"
import (
"encoding/binary"
"errors"
"io/ioutil"
"unsafe"
)
@ -18,29 +17,15 @@ type RLN struct {
}
// New returns a new RLN generated using the default merkle tree depth
func NewRLN() (*RLN, error) {
return NewRLNWithDepth(MERKLE_TREE_DEPTH)
func NewRLN(params []byte) (*RLN, error) {
return NewRLNWithDepth(MERKLE_TREE_DEPTH, params)
}
// NewRLNWithDepth generates an instance of RLN. An instance supports both zkSNARKs logics
// and Merkle tree data structure and operations. The parameter `depth`` indicates the depth of Merkle tree
func NewRLNWithDepth(depth int) (*RLN, error) {
func NewRLNWithDepth(depth int, params []byte) (*RLN, error) {
r := &RLN{}
// parameters.key contains the prover and verifier keys
// 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 are function of tree depth and poseidon hasher
// to generate parameters for a different tree depth, change the tree size in the following line of rln library
// https://github.com/kilic/rln/blob/3bbec368a4adc68cd5f9bfae80b17e1bbb4ef373/examples/export_test_keys/main.rs#L4
// and then proceed as explained above
params, err := ioutil.ReadFile("./testdata/parameters.key")
if err != nil {
return nil, err
}
if len(params) == 0 {
return nil, errors.New("error in parameters.key")
}
@ -258,8 +243,8 @@ func (r *RLN) AddAll(list []IDCommitment) bool {
}
// CalcMerkleRoot returns the root of the Merkle tree that is computed from the supplied list
func CalcMerkleRoot(list []IDCommitment) (MerkleNode, error) {
rln, err := NewRLN()
func CalcMerkleRoot(list []IDCommitment, params []byte) (MerkleNode, error) {
rln, err := NewRLN(params)
if err != nil {
return MerkleNode{}, err
}
@ -277,9 +262,9 @@ func CalcMerkleRoot(list []IDCommitment) (MerkleNode, error) {
// CreateMembershipList produces a list of membership key pairs and also returns the root of a Merkle tree constructed
// out of the identity commitment keys of the generated list. The output of this function is used to initialize a static
// group keys (to test waku-rln-relay in the off-chain mode)
func CreateMembershipList(n int) ([]MembershipKeyPair, MerkleNode, error) {
func CreateMembershipList(n int, params []byte) ([]MembershipKeyPair, MerkleNode, error) {
// initialize a Merkle tree
rln, err := NewRLN()
rln, err := NewRLN(params)
if err != nil {
return nil, MerkleNode{}, err
}

View File

@ -3,6 +3,7 @@ package rln
import (
"bytes"
"encoding/hex"
"io/ioutil"
"math"
"testing"
@ -15,10 +16,30 @@ func TestWakuRLNRelaySuite(t *testing.T) {
type WakuRLNRelaySuite struct {
suite.Suite
parameters []byte
}
func (s *WakuRLNRelaySuite) SetupTest() {
// parameters.key contains the prover and verifier keys
// 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 are function of tree depth and poseidon hasher
// to generate parameters for a different tree depth, change the tree size in the following line of rln library
// https://github.com/kilic/rln/blob/3bbec368a4adc68cd5f9bfae80b17e1bbb4ef373/examples/export_test_keys/main.rs#L4
// and then proceed as explained above
params, err := ioutil.ReadFile("./testdata/parameters.key")
if err != nil {
s.Fail("could not read parameters")
}
s.parameters = params
}
func (s *WakuRLNRelaySuite) TestMembershipKeyGen() {
rln, err := NewRLNWithDepth(32)
rln, err := NewRLNWithDepth(32, s.parameters)
s.NoError(err)
key, err := rln.MembershipKeyGen()
@ -32,7 +53,7 @@ func (s *WakuRLNRelaySuite) TestMembershipKeyGen() {
}
func (s *WakuRLNRelaySuite) TestGetMerkleRoot() {
rln, err := NewRLNWithDepth(32)
rln, err := NewRLNWithDepth(32, s.parameters)
s.NoError(err)
root1, err := rln.GetMerkleRoot()
@ -47,7 +68,7 @@ func (s *WakuRLNRelaySuite) TestGetMerkleRoot() {
}
func (s *WakuRLNRelaySuite) TestInsertMember() {
rln, err := NewRLNWithDepth(32)
rln, err := NewRLNWithDepth(32, s.parameters)
s.NoError(err)
keypair, err := rln.MembershipKeyGen()
@ -58,7 +79,7 @@ func (s *WakuRLNRelaySuite) TestInsertMember() {
}
func (s *WakuRLNRelaySuite) TestRemoveMember() {
rln, err := NewRLNWithDepth(32)
rln, err := NewRLNWithDepth(32, s.parameters)
s.NoError(err)
deleted := rln.DeleteMember(MembershipIndex(0))
@ -66,7 +87,7 @@ func (s *WakuRLNRelaySuite) TestRemoveMember() {
}
func (s *WakuRLNRelaySuite) TestMerkleTreeConsistenceBetweenDeletionAndInsertion() {
rln, err := NewRLNWithDepth(32)
rln, err := NewRLNWithDepth(32, s.parameters)
s.NoError(err)
root1, err := rln.GetMerkleRoot()
@ -103,7 +124,7 @@ func (s *WakuRLNRelaySuite) TestMerkleTreeConsistenceBetweenDeletionAndInsertion
}
func (s *WakuRLNRelaySuite) TestHash() {
rln, err := NewRLNWithDepth(32)
rln, err := NewRLNWithDepth(32, s.parameters)
s.NoError(err)
// prepare the input
@ -118,7 +139,7 @@ func (s *WakuRLNRelaySuite) TestHash() {
func (s *WakuRLNRelaySuite) TestCreateListMembershipKeysAndCreateMerkleTreeFromList() {
groupSize := 100
list, root, err := CreateMembershipList(groupSize)
list, root, err := CreateMembershipList(groupSize, s.parameters)
s.NoError(err)
s.Len(list, groupSize)
s.Len(root, HASH_HEX_SIZE) // check the size of the calculated tree root
@ -138,7 +159,7 @@ func (s *WakuRLNRelaySuite) TestCheckCorrectness() {
}
// calculate the Merkle tree root out of the extracted id commitments
root, err := CalcMerkleRoot(groupIDCommitments)
root, err := CalcMerkleRoot(groupIDCommitments, s.parameters)
s.NoError(err)
expectedRoot, _ := hex.DecodeString(STATIC_GROUP_MERKLE_ROOT)
@ -148,7 +169,7 @@ func (s *WakuRLNRelaySuite) TestCheckCorrectness() {
}
func (s *WakuRLNRelaySuite) TestValidProof() {
rln, err := NewRLN()
rln, err := NewRLN(s.parameters)
s.NoError(err)
memKeys, err := rln.MembershipKeyGen()
@ -190,7 +211,7 @@ func (s *WakuRLNRelaySuite) TestValidProof() {
}
func (s *WakuRLNRelaySuite) TestInvalidProof() {
rln, err := NewRLN()
rln, err := NewRLN(s.parameters)
s.NoError(err)
memKeys, err := rln.MembershipKeyGen()