mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-17 15:11:21 +00:00
Add more tests for de/en-coding public and private keys
This commit is contained in:
88
encode_test.go
Normal file
88
encode_test.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package crypto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
data "github.com/tendermint/go-data"
|
||||||
|
)
|
||||||
|
|
||||||
|
type byter interface {
|
||||||
|
Bytes() []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// go to wire encoding and back
|
||||||
|
func checkWire(t *testing.T, in byter, reader interface{}, typ byte) {
|
||||||
|
// test to and from binary
|
||||||
|
bin, err := data.ToWire(in)
|
||||||
|
require.Nil(t, err, "%+v", err)
|
||||||
|
assert.Equal(t, typ, bin[0])
|
||||||
|
// make sure this is compatible with current (Bytes()) encoding
|
||||||
|
assert.Equal(t, in.Bytes(), bin)
|
||||||
|
|
||||||
|
err = data.FromWire(bin, reader)
|
||||||
|
require.Nil(t, err, "%+v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// go to json encoding and back
|
||||||
|
func checkJSON(t *testing.T, in interface{}, reader interface{}, typ string) {
|
||||||
|
// test to and from binary
|
||||||
|
js, err := data.ToJSON(in)
|
||||||
|
require.Nil(t, err, "%+v", err)
|
||||||
|
styp := `"` + typ + `"`
|
||||||
|
assert.True(t, strings.Contains(string(js), styp))
|
||||||
|
|
||||||
|
err = data.FromJSON(js, reader)
|
||||||
|
require.Nil(t, err, "%+v", err)
|
||||||
|
|
||||||
|
// also check text format
|
||||||
|
text, err := data.ToText(in)
|
||||||
|
require.Nil(t, err, "%+v", err)
|
||||||
|
parts := strings.Split(text, ":")
|
||||||
|
require.Equal(t, 2, len(parts))
|
||||||
|
// make sure the first part is the typ string
|
||||||
|
assert.Equal(t, typ, parts[0])
|
||||||
|
// and the data is also present in the json
|
||||||
|
assert.True(t, strings.Contains(string(js), parts[1]))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestKeyEncodings(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
privKey PrivKeyS
|
||||||
|
keyType byte
|
||||||
|
keyName string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
privKey: PrivKeyS{GenPrivKeyEd25519()},
|
||||||
|
keyType: PrivKeyTypeEd25519,
|
||||||
|
keyName: PrivKeyNameEd25519,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
privKey: PrivKeyS{GenPrivKeySecp256k1()},
|
||||||
|
keyType: PrivKeyTypeSecp256k1,
|
||||||
|
keyName: PrivKeyNameSecp256k1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
// check (de/en)codings of private key
|
||||||
|
priv2 := PrivKeyS{}
|
||||||
|
checkWire(t, tc.privKey, &priv2, tc.keyType)
|
||||||
|
assert.EqualValues(t, tc.privKey, priv2)
|
||||||
|
priv3 := PrivKeyS{}
|
||||||
|
checkJSON(t, tc.privKey, &priv3, tc.keyName)
|
||||||
|
assert.EqualValues(t, tc.privKey, priv3)
|
||||||
|
|
||||||
|
// check (de/en)codings of public key
|
||||||
|
pubKey := PubKeyS{tc.privKey.PubKey()}
|
||||||
|
pub2 := PubKeyS{}
|
||||||
|
checkWire(t, pubKey, &pub2, tc.keyType)
|
||||||
|
assert.EqualValues(t, pubKey, pub2)
|
||||||
|
pub3 := PubKeyS{}
|
||||||
|
checkJSON(t, pubKey, &pub3, tc.keyName)
|
||||||
|
assert.EqualValues(t, pubKey, pub3)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user