44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
package crypto
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"github.com/anyproto/go-slip10"
|
|
"github.com/stretchr/testify/require"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestMnemonic(t *testing.T) {
|
|
phrase, err := NewMnemonicGenerator().WithWordCount(12)
|
|
require.NoError(t, err)
|
|
parts := strings.Split(string(phrase), " ")
|
|
require.Equal(t, 12, len(parts))
|
|
res, err := phrase.DeriveKeys(0)
|
|
require.NoError(t, err)
|
|
bytes := make([]byte, 64)
|
|
_, err = rand.Read(bytes)
|
|
require.NoError(t, err)
|
|
|
|
// testing signing with keys
|
|
for _, k := range []PrivKey{res.MasterKey, res.Identity, res.OldAccountKey} {
|
|
sign, err := k.Sign(bytes)
|
|
require.NoError(t, err)
|
|
res, err := k.GetPublic().Verify(bytes, sign)
|
|
require.NoError(t, err)
|
|
require.True(t, res)
|
|
}
|
|
|
|
// testing derivation
|
|
masterKey, err := genKey(res.MasterNode)
|
|
require.NoError(t, err)
|
|
require.True(t, res.MasterKey.Equals(masterKey))
|
|
identityNode, err := res.MasterNode.Derive(slip10.FirstHardenedIndex)
|
|
require.NoError(t, err)
|
|
identityKey, err := genKey(identityNode)
|
|
require.NoError(t, err)
|
|
require.True(t, res.Identity.Equals(identityKey))
|
|
oldAccountRes, err := phrase.deriveForPath(true, 0, anytypeAccountOldPrefix)
|
|
require.NoError(t, err)
|
|
require.True(t, res.OldAccountKey.Equals(oldAccountRes.MasterKey))
|
|
}
|