mirror of
https://github.com/logos-messaging/go-rln.git
synced 2026-01-07 15:33:11 +00:00
refactor: return errors instead of bools and add String funcs
This commit is contained in:
parent
e9ce4db29a
commit
b09dd99607
31
rln/rln.go
31
rln/rln.go
@ -192,7 +192,7 @@ func (r *RLN) Verify(data []byte, proof RateLimitProof) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InsertMember adds the member to the tree
|
// InsertMember adds the member to the tree
|
||||||
func (r *RLN) InsertMember(idComm IDCommitment) bool {
|
func (r *RLN) InsertMember(idComm IDCommitment) error {
|
||||||
buf := toBuffer(idComm[:])
|
buf := toBuffer(idComm[:])
|
||||||
|
|
||||||
size := int(unsafe.Sizeof(buf))
|
size := int(unsafe.Sizeof(buf))
|
||||||
@ -200,15 +200,22 @@ func (r *RLN) InsertMember(idComm IDCommitment) bool {
|
|||||||
*in = buf
|
*in = buf
|
||||||
|
|
||||||
res := C.update_next_member(r.ptr, in)
|
res := C.update_next_member(r.ptr, in)
|
||||||
return bool(res)
|
|
||||||
|
if !bool(res) {
|
||||||
|
return errors.New("couldn't insert member")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteMember removes an IDCommitment key from the tree. The index
|
// DeleteMember removes an IDCommitment key from the tree. The index
|
||||||
// parameter is the position of the id commitment key to be deleted from the tree.
|
// parameter is the position of the id commitment key to be deleted from the tree.
|
||||||
// The deleted id commitment key is replaced with a zero leaf
|
// The deleted id commitment key is replaced with a zero leaf
|
||||||
func (r *RLN) DeleteMember(index MembershipIndex) bool {
|
func (r *RLN) DeleteMember(index MembershipIndex) error {
|
||||||
deletionSuccess := bool(C.delete_member(r.ptr, C.ulong(index)))
|
deletionSuccess := bool(C.delete_member(r.ptr, C.ulong(index)))
|
||||||
return deletionSuccess
|
if !bool(deletionSuccess) {
|
||||||
|
return errors.New("couldn't delete member")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMerkleRoot reads the Merkle Tree root after insertion
|
// GetMerkleRoot reads the Merkle Tree root after insertion
|
||||||
@ -233,13 +240,13 @@ func (r *RLN) GetMerkleRoot() (MerkleNode, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddAll adds members to the Merkle tree
|
// AddAll adds members to the Merkle tree
|
||||||
func (r *RLN) AddAll(list []IDCommitment) bool {
|
func (r *RLN) AddAll(list []IDCommitment) error {
|
||||||
for _, member := range list {
|
for _, member := range list {
|
||||||
if !r.InsertMember(member) {
|
if err := r.InsertMember(member); err != nil {
|
||||||
return false
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CalcMerkleRoot returns the root of the Merkle tree that is computed from the supplied list
|
// CalcMerkleRoot returns the root of the Merkle tree that is computed from the supplied list
|
||||||
@ -251,8 +258,8 @@ func CalcMerkleRoot(list []IDCommitment, params []byte) (MerkleNode, error) {
|
|||||||
|
|
||||||
// create a Merkle tree
|
// create a Merkle tree
|
||||||
for _, c := range list {
|
for _, c := range list {
|
||||||
if !rln.InsertMember(c) {
|
if err := rln.InsertMember(c); err != nil {
|
||||||
return MerkleNode{}, errors.New("could not add member")
|
return MerkleNode{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,8 +287,8 @@ func CreateMembershipList(n int, params []byte) ([]MembershipKeyPair, MerkleNode
|
|||||||
output = append(output, *keypair)
|
output = append(output, *keypair)
|
||||||
|
|
||||||
// insert the key to the Merkle tree
|
// insert the key to the Merkle tree
|
||||||
if !rln.InsertMember(keypair.IDCommitment) {
|
if err := rln.InsertMember(keypair.IDCommitment); err != nil {
|
||||||
return nil, MerkleNode{}, errors.New("could not insert member")
|
return nil, MerkleNode{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -74,16 +74,16 @@ func (s *RLNSuite) TestInsertMember() {
|
|||||||
keypair, err := rln.MembershipKeyGen()
|
keypair, err := rln.MembershipKeyGen()
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
inserted := rln.InsertMember(keypair.IDCommitment)
|
err = rln.InsertMember(keypair.IDCommitment)
|
||||||
s.True(inserted)
|
s.NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RLNSuite) TestRemoveMember() {
|
func (s *RLNSuite) TestRemoveMember() {
|
||||||
rln, err := NewRLNWithDepth(32, s.parameters)
|
rln, err := NewRLNWithDepth(32, s.parameters)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
deleted := rln.DeleteMember(MembershipIndex(0))
|
err = rln.DeleteMember(MembershipIndex(0))
|
||||||
s.True(deleted)
|
s.NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RLNSuite) TestMerkleTreeConsistenceBetweenDeletionAndInsertion() {
|
func (s *RLNSuite) TestMerkleTreeConsistenceBetweenDeletionAndInsertion() {
|
||||||
@ -97,8 +97,8 @@ func (s *RLNSuite) TestMerkleTreeConsistenceBetweenDeletionAndInsertion() {
|
|||||||
keypair, err := rln.MembershipKeyGen()
|
keypair, err := rln.MembershipKeyGen()
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
inserted := rln.InsertMember(keypair.IDCommitment)
|
err = rln.InsertMember(keypair.IDCommitment)
|
||||||
s.True(inserted)
|
s.NoError(err)
|
||||||
|
|
||||||
// read the Merkle Tree root after insertion
|
// read the Merkle Tree root after insertion
|
||||||
root2, err := rln.GetMerkleRoot()
|
root2, err := rln.GetMerkleRoot()
|
||||||
@ -107,8 +107,8 @@ func (s *RLNSuite) TestMerkleTreeConsistenceBetweenDeletionAndInsertion() {
|
|||||||
|
|
||||||
// delete the first member
|
// delete the first member
|
||||||
deleted_member_index := MembershipIndex(0)
|
deleted_member_index := MembershipIndex(0)
|
||||||
deleted := rln.DeleteMember(deleted_member_index)
|
err = rln.DeleteMember(deleted_member_index)
|
||||||
s.True(deleted)
|
s.NoError(err)
|
||||||
|
|
||||||
// read the Merkle Tree root after the deletion
|
// read the Merkle Tree root after the deletion
|
||||||
root3, err := rln.GetMerkleRoot()
|
root3, err := rln.GetMerkleRoot()
|
||||||
@ -180,18 +180,18 @@ func (s *RLNSuite) TestValidProof() {
|
|||||||
|
|
||||||
// Create a Merkle tree with random members
|
// Create a Merkle tree with random members
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
memberIsAdded := false
|
var err error
|
||||||
if i == index {
|
if i == index {
|
||||||
// insert the current peer's pk
|
// insert the current peer's pk
|
||||||
memberIsAdded = rln.InsertMember(memKeys.IDCommitment)
|
err = rln.InsertMember(memKeys.IDCommitment)
|
||||||
} else {
|
} else {
|
||||||
// create a new key pair
|
// create a new key pair
|
||||||
memberKeys, err := rln.MembershipKeyGen()
|
memberKeys, err := rln.MembershipKeyGen()
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
memberIsAdded = rln.InsertMember(memberKeys.IDCommitment)
|
err = rln.InsertMember(memberKeys.IDCommitment)
|
||||||
}
|
}
|
||||||
s.True(memberIsAdded)
|
s.NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// prepare the message
|
// prepare the message
|
||||||
@ -222,18 +222,18 @@ func (s *RLNSuite) TestInvalidProof() {
|
|||||||
|
|
||||||
// Create a Merkle tree with random members
|
// Create a Merkle tree with random members
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
memberIsAdded := false
|
var err error
|
||||||
if i == index {
|
if i == index {
|
||||||
// insert the current peer's pk
|
// insert the current peer's pk
|
||||||
memberIsAdded = rln.InsertMember(memKeys.IDCommitment)
|
err = rln.InsertMember(memKeys.IDCommitment)
|
||||||
} else {
|
} else {
|
||||||
// create a new key pair
|
// create a new key pair
|
||||||
memberKeys, err := rln.MembershipKeyGen()
|
memberKeys, err := rln.MembershipKeyGen()
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
memberIsAdded = rln.InsertMember(memberKeys.IDCommitment)
|
err = rln.InsertMember(memberKeys.IDCommitment)
|
||||||
}
|
}
|
||||||
s.True(memberIsAdded)
|
s.NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// prepare the message
|
// prepare the message
|
||||||
|
|||||||
21
rln/types.go
21
rln/types.go
@ -3,22 +3,43 @@ package rln
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"encoding/hex"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// IDKey is an identity key as defined in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Membership
|
// IDKey is an identity key as defined in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Membership
|
||||||
type IDKey [32]byte
|
type IDKey [32]byte
|
||||||
|
|
||||||
|
func (i IDKey) String() string {
|
||||||
|
return hex.EncodeToString(i[:])
|
||||||
|
}
|
||||||
|
|
||||||
// IDCommintment is hash of identity key as defined in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Membership
|
// IDCommintment is hash of identity key as defined in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Membership
|
||||||
type IDCommitment [32]byte
|
type IDCommitment [32]byte
|
||||||
|
|
||||||
|
func (i IDCommitment) String() string {
|
||||||
|
return hex.EncodeToString(i[:])
|
||||||
|
}
|
||||||
|
|
||||||
// Each node of the Merkle tee is a Poseidon hash which is a 32 byte value
|
// Each node of the Merkle tee is a Poseidon hash which is a 32 byte value
|
||||||
type MerkleNode [32]byte
|
type MerkleNode [32]byte
|
||||||
|
|
||||||
|
func (m MerkleNode) String() string {
|
||||||
|
return hex.EncodeToString(m[:])
|
||||||
|
}
|
||||||
|
|
||||||
type Nullifier [32]byte
|
type Nullifier [32]byte
|
||||||
|
|
||||||
|
func (n Nullifier) String() string {
|
||||||
|
return hex.EncodeToString(n[:])
|
||||||
|
}
|
||||||
|
|
||||||
type ZKSNARK [256]byte
|
type ZKSNARK [256]byte
|
||||||
|
|
||||||
|
func (z ZKSNARK) String() string {
|
||||||
|
return hex.EncodeToString(z[:])
|
||||||
|
}
|
||||||
|
|
||||||
// Custom data types defined for waku rln relay -------------------------
|
// Custom data types defined for waku rln relay -------------------------
|
||||||
|
|
||||||
type MembershipKeyPair struct {
|
type MembershipKeyPair struct {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user