|
package common
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"testing"
|
|
|
|
"github.com/iden3/go-merkletree"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBJJFromStringWithChecksum(t *testing.T) {
|
|
s := "21b0a1688b37f77b1d1d5539ec3b826db5ac78b2513f574a04c50a7d4f8246d7"
|
|
pkComp, err := BJJFromStringWithChecksum(s)
|
|
assert.NoError(t, err)
|
|
sBytes, err := hex.DecodeString(s)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, hex.EncodeToString(SwapEndianness(sBytes)), pkComp.String())
|
|
|
|
pk, err := pkComp.Decompress()
|
|
assert.NoError(t, err)
|
|
|
|
// expected values computed with js implementation
|
|
assert.Equal(t, "2492816973395423007340226948038371729989170225696553239457870892535792679622", pk.X.String())
|
|
assert.Equal(t, "15238403086306505038849621710779816852318505119327426213168494964113886299863", pk.Y.String())
|
|
}
|
|
|
|
func TestRmEndingZeroes(t *testing.T) {
|
|
s0, err := merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000000")
|
|
require.NoError(t, err)
|
|
s1, err := merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000001")
|
|
require.NoError(t, err)
|
|
s2, err := merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000002")
|
|
require.NoError(t, err)
|
|
|
|
// expect cropped last zeroes
|
|
circomSiblings := []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2, s0, s0, s0, s0}
|
|
siblings := RmEndingZeroes(circomSiblings)
|
|
expected := []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2}
|
|
assert.Equal(t, expected, siblings)
|
|
|
|
// expect empty array when input is an empty array
|
|
siblings = RmEndingZeroes([]*merkletree.Hash{})
|
|
assert.Equal(t, []*merkletree.Hash{}, siblings)
|
|
// expect nil when input is nil
|
|
siblings = RmEndingZeroes(nil)
|
|
assert.Nil(t, siblings)
|
|
|
|
// cases when inputs are [x], [x,0], [0,x]
|
|
circomSiblings = []*merkletree.Hash{s1}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, []*merkletree.Hash{s1}, siblings)
|
|
circomSiblings = []*merkletree.Hash{s1, s0}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, []*merkletree.Hash{s1}, siblings)
|
|
circomSiblings = []*merkletree.Hash{s0, s1}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, []*merkletree.Hash{s0, s1}, siblings)
|
|
|
|
// expect empty array when input is all zeroes
|
|
circomSiblings = []*merkletree.Hash{s0}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, []*merkletree.Hash{}, siblings)
|
|
circomSiblings = []*merkletree.Hash{s0, s0}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, []*merkletree.Hash{}, siblings)
|
|
circomSiblings = []*merkletree.Hash{s0, s0, s0, s0, s0}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, []*merkletree.Hash{}, siblings)
|
|
|
|
// expect input equal to output when last element!=0
|
|
circomSiblings = []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2, s0, s0, s0, s0, s2}
|
|
siblings = RmEndingZeroes(circomSiblings)
|
|
assert.Equal(t, circomSiblings, siblings)
|
|
}
|