From 1340b2e4ba306ad2102b07978f82672b09040cea Mon Sep 17 00:00:00 2001 From: Dean Eigenmann <7621705+decanus@users.noreply.github.com> Date: Tue, 14 Sep 2021 14:56:23 +0200 Subject: [PATCH] enhancement/rln-hash-test (#3) * started hash test * playing around * fix * fix * fix --- rln/rln.go | 14 +++++++++----- rln/rln_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/rln/rln.go b/rln/rln.go index dae79f5..3945039 100644 --- a/rln/rln.go +++ b/rln/rln.go @@ -66,12 +66,16 @@ func (r *RLN) GenerateKey() (*KeyPair, error) { // Hash hashes a given input using the underlying function. func (r *RLN) Hash(input []byte) ([]byte, error) { - size := int(unsafe.Sizeof(C.Buffer{})) - in := (*C.Buffer)(C.malloc(C.size_t(size))) - *in = toBuffer(input) - out := (*C.Buffer)(C.malloc(C.size_t(size))) - if !bool(C.hash(r.ptr, in, in.len, out)) { + buf := toBuffer(input) + size := int(unsafe.Sizeof(buf)) + in := (*C.Buffer)(C.malloc(C.size_t(size))) + *in = buf + + var output []byte + out := toBuffer(output) + + if !bool(C.hash(r.ptr, in, 1, &out)) { return nil, errors.New("failed to hash") } diff --git a/rln/rln_test.go b/rln/rln_test.go index 94f269e..884c360 100644 --- a/rln/rln_test.go +++ b/rln/rln_test.go @@ -1,6 +1,7 @@ package rln_test import ( + "encoding/hex" "io/ioutil" "reflect" "testing" @@ -44,3 +45,40 @@ func TestGenerateKey(t *testing.T) { t.Fatal("k.Commitment was empty") } } + +func TestRLN_Hash(t *testing.T) { + // This test is based on tests from: + // https://github.com/status-im/nim-waku/blob/b7998de09d1ef04599a699938da69aecfa63cc6f/tests/v2/test_waku_rln_relay.nim#L527 + + params, err := ioutil.ReadFile("./testdata/parameters.key") + if err != nil { + t.Fatal(err) + } + + r, err := rln.New(32, params) + if err != nil { + t.Fatal(err) + } + + input := byteArray(32, 1) + + output, err := r.Hash(input) + if err != nil { + t.Fatal(err) + } + + expected := "53a6338cdbf02f0563cec1898e354d0d272c8f98b606c538945c6f41ef101828" + if expected != hex.EncodeToString(output) { + t.Fatalf("value %x did not match expected %s", output, expected) + } +} + +func byteArray(length int, value byte) []byte { + arr := make([]byte, length) + + for i := 0; i < length; i++ { + arr[i] = value + } + + return arr +}