From 320b2aea1681b4e7dbc501b04b28a917503299de Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Tue, 5 Jul 2022 15:33:54 -0400 Subject: [PATCH] refactor: parameters as an input value --- rln/rln.go | 29 +++++++---------------------- rln/rln_test.go | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/rln/rln.go b/rln/rln.go index ea50320..141b81c 100644 --- a/rln/rln.go +++ b/rln/rln.go @@ -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 } diff --git a/rln/rln_test.go b/rln/rln_test.go index bc70e84..461ca88 100644 --- a/rln/rln_test.go +++ b/rln/rln_test.go @@ -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()