mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-10 15:07:24 +00:00
Add test for cryptostore working with ledger
This commit is contained in:
@@ -3,6 +3,7 @@ package cryptostore_test
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -14,6 +15,7 @@ import (
|
||||
"github.com/tendermint/go-crypto/keys"
|
||||
"github.com/tendermint/go-crypto/keys/cryptostore"
|
||||
"github.com/tendermint/go-crypto/keys/storage/memstorage"
|
||||
"github.com/tendermint/go-crypto/nano"
|
||||
)
|
||||
|
||||
// TestKeyManagement makes sure we can manipulate these keys well
|
||||
@@ -150,6 +152,59 @@ func TestSignVerify(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestSignWithLedger makes sure we have ledger compatibility with
|
||||
// the crypto store.
|
||||
//
|
||||
// This test will only succeed with a ledger attached to the computer
|
||||
// and the cosmos app open
|
||||
func TestSignWithLedger(t *testing.T) {
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
if os.Getenv("WITH_LEDGER") == "" {
|
||||
t.Skip("Set WITH_LEDGER to run code on real ledger")
|
||||
}
|
||||
|
||||
// make the storage with reasonable defaults
|
||||
cstore := cryptostore.New(
|
||||
cryptostore.SecretBox,
|
||||
memstorage.New(),
|
||||
keys.MustLoadCodec("english"),
|
||||
)
|
||||
n := "nano-s"
|
||||
p := "hard2hack"
|
||||
|
||||
// create a nano user
|
||||
c, _, err := cstore.Create(n, p, nano.NameLedger)
|
||||
require.Nil(err, "%+v", err)
|
||||
assert.Equal(c.Name, n)
|
||||
_, ok := c.PubKey.Unwrap().(nano.PubKeyLedger)
|
||||
require.True(ok)
|
||||
|
||||
// make sure we can get it back
|
||||
info, err := cstore.Get(n)
|
||||
require.Nil(err, "%+v", err)
|
||||
assert.Equal(info.Name, n)
|
||||
key := info.PubKey
|
||||
require.False(key.Empty())
|
||||
|
||||
// let's try to sign some messages
|
||||
d1 := []byte("welcome to cosmos")
|
||||
d2 := []byte("please turn on the app")
|
||||
|
||||
// try signing both data with the ledger...
|
||||
s1 := keys.NewMockSignable(d1)
|
||||
err = cstore.Sign(n, p, s1)
|
||||
require.Nil(err)
|
||||
s2 := keys.NewMockSignable(d2)
|
||||
err = cstore.Sign(n, p, s2)
|
||||
require.Nil(err)
|
||||
|
||||
// now, let's check those signatures work
|
||||
assert.True(key.VerifyBytes(d1, s1.Signature))
|
||||
assert.True(key.VerifyBytes(d2, s2.Signature))
|
||||
// and mismatched signatures don't
|
||||
assert.False(key.VerifyBytes(d1, s2.Signature))
|
||||
}
|
||||
|
||||
func assertPassword(assert *assert.Assertions, cstore cryptostore.Manager, name, pass, badpass string) {
|
||||
err := cstore.Update(name, badpass, pass)
|
||||
assert.NotNil(err)
|
||||
|
||||
Reference in New Issue
Block a user