Browse Source

Use MarshalBinaryBare; Fix encode_test; Bump version

pull/1782/head
Jae Kwon 7 years ago
parent
commit
0d4436dea7
8 changed files with 58 additions and 148 deletions
  1. +3
    -3
      Gopkg.lock
  2. +1
    -1
      Gopkg.toml
  3. +41
    -131
      encode_test.go
  4. +2
    -2
      keys/types.go
  5. +4
    -4
      priv_key.go
  6. +3
    -3
      pub_key.go
  7. +3
    -3
      signature.go
  8. +1
    -1
      version.go

+ 3
- 3
Gopkg.lock View File

@ -128,8 +128,8 @@
[[projects]] [[projects]]
name = "github.com/tendermint/go-amino" name = "github.com/tendermint/go-amino"
packages = ["."] packages = ["."]
revision = "8b10adccaa7e4c2edc29c7b762169c34f4a36b32"
version = "0.9.1"
revision = "f55c3351f30e5987500020631f00e87a035ed415"
version = "0.9.3"
[[projects]] [[projects]]
name = "github.com/tendermint/tmlibs" name = "github.com/tendermint/tmlibs"
@ -166,6 +166,6 @@
[solve-meta] [solve-meta]
analyzer-name = "dep" analyzer-name = "dep"
analyzer-version = 1 analyzer-version = 1
inputs-digest = "ff08a2810853f018b3ce056747de63fe4c1782268796f457d3fa28305de2bd1d"
inputs-digest = "9748e96106582387ac49df1db8e4456bd51c8e9362c86992d6ce7011c1783f55"
solver-name = "gps-cdcl" solver-name = "gps-cdcl"
solver-version = 1 solver-version = 1

+ 1
- 1
Gopkg.toml View File

@ -47,7 +47,7 @@
[[constraint]] [[constraint]]
name = "github.com/tendermint/go-amino" name = "github.com/tendermint/go-amino"
version = "0.9.1"
version = "0.9.3"
[[constraint]] [[constraint]]
name = "github.com/tendermint/tmlibs" name = "github.com/tendermint/tmlibs"


+ 41
- 131
encode_test.go View File

@ -1,185 +1,95 @@
package crypto package crypto
/*
XXX Needs to be refactored to not use go-amino/data
import ( import (
"fmt"
"strings"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
amino "github.com/tendermint/go-amino"
data "github.com/tendermint/go-amino/data"
) )
type byter interface { type byter interface {
Bytes() []byte Bytes() []byte
} }
// go to amino encoding and back
func checkWire(t *testing.T, in byter, reader interface{}, typ byte, size int) {
// test to and from binary
bin, err := data.ToWire(in)
func checkAminoBinary(t *testing.T, src byter, dst interface{}, size int) {
// Marshal to binary bytes.
bz, err := cdc.MarshalBinaryBare(src)
require.Nil(t, err, "%+v", err) 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)
// make sure we have the expected length
assert.Equal(t, size, len(bin))
err = data.FromWire(bin, reader)
// Make sure this is compatible with current (Bytes()) encoding.
assert.Equal(t, src.Bytes(), bz, "Amino binary vs Bytes() mismatch")
// Make sure we have the expected length.
assert.Equal(t, size, len(bz), "Amino binary size mismatch")
// Unmarshal.
err = cdc.UnmarshalBinaryBare(bz, dst)
require.Nil(t, err, "%+v", err) 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)
func checkAminoJSON(t *testing.T, src interface{}, dst interface{}, isNil bool) {
// Marshal to JSON bytes.
js, err := cdc.MarshalJSON(src)
require.Nil(t, err, "%+v", err) 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]))
}
// make sure go-amino json can still figure this out...
func checkWireJSON(t *testing.T, in interface{}, reader interface{}, typ byte) {
// test to and from binary
var err error
js := amino.JSONBytes(in)
btyp := fmt.Sprintf("[%d,", typ)
assert.True(t, strings.HasPrefix(string(js), btyp), string(js), btyp)
amino.ReadJSON(reader, js, &err)
if isNil {
assert.Equal(t, string(js), `null`)
} else {
assert.Contains(t, string(js), `"type":`)
assert.Contains(t, string(js), `"value":`)
}
// Unmarshal.
err = cdc.UnmarshalJSON(js, dst)
require.Nil(t, err, "%+v", err) require.Nil(t, err, "%+v", err)
} }
func TestKeyEncodings(t *testing.T) { func TestKeyEncodings(t *testing.T) {
cases := []struct { cases := []struct {
privKey PrivKey privKey PrivKey
keyType byte
keyName string
// 1 (type byte) + size of byte array // 1 (type byte) + size of byte array
privSize, pubSize int privSize, pubSize int
}{ }{
{ {
privKey: GenPrivKeyEd25519().Wrap(),
keyType: TypeEd25519,
keyName: NameEd25519,
privSize: 65,
pubSize: 33,
privKey: GenPrivKeyEd25519(),
privSize: 69,
pubSize: 37,
}, },
{ {
privKey: GenPrivKeySecp256k1().Wrap(),
keyType: TypeSecp256k1,
keyName: NameSecp256k1,
privSize: 33,
pubSize: 34,
privKey: GenPrivKeySecp256k1(),
privSize: 37,
pubSize: 38,
}, },
} }
for _, tc := range cases { for _, tc := range cases {
// check (de/en)codings of private key
var priv2, priv3, priv4 PrivKey
checkWire(t, tc.privKey, &priv2, tc.keyType, tc.privSize)
// Check (de/en)codings of PrivKeys.
var priv2, priv3 PrivKey
checkAminoBinary(t, tc.privKey, &priv2, tc.privSize)
assert.EqualValues(t, tc.privKey, priv2) assert.EqualValues(t, tc.privKey, priv2)
checkJSON(t, tc.privKey, &priv3, tc.keyName)
checkAminoJSON(t, tc.privKey, &priv3, false) // TODO also check Prefix bytes.
assert.EqualValues(t, tc.privKey, priv3) assert.EqualValues(t, tc.privKey, priv3)
checkWireJSON(t, tc.privKey, &priv4, tc.keyType)
assert.EqualValues(t, tc.privKey, priv4)
// check (de/en)codings of public key
// Check (de/en)codings of PubKeys.
pubKey := tc.privKey.PubKey() pubKey := tc.privKey.PubKey()
var pub2, pub3, pub4 PubKey
checkWire(t, pubKey, &pub2, tc.keyType, tc.pubSize)
var pub2, pub3 PubKey
checkAminoBinary(t, pubKey, &pub2, tc.pubSize)
assert.EqualValues(t, pubKey, pub2) assert.EqualValues(t, pubKey, pub2)
checkJSON(t, pubKey, &pub3, tc.keyName)
checkAminoJSON(t, pubKey, &pub3, false) // TODO also check Prefix bytes.
assert.EqualValues(t, pubKey, pub3) assert.EqualValues(t, pubKey, pub3)
checkWireJSON(t, pubKey, &pub4, tc.keyType)
assert.EqualValues(t, pubKey, pub4)
} }
} }
func toFromJSON(t *testing.T, in interface{}, recvr interface{}) {
js, err := data.ToJSON(in)
require.Nil(t, err, "%+v", err)
err = data.FromJSON(js, recvr)
require.Nil(t, err, "%+v", err)
}
func TestNilEncodings(t *testing.T) { func TestNilEncodings(t *testing.T) {
// make sure sigs are okay with nil
// Check nil Signature.
var a, b Signature var a, b Signature
toFromJSON(t, a, &b)
checkAminoJSON(t, &a, &b, true)
assert.EqualValues(t, a, b) assert.EqualValues(t, a, b)
// make sure sigs are okay with nil
// Check nil PubKey.
var c, d PubKey var c, d PubKey
toFromJSON(t, c, &d)
checkAminoJSON(t, &c, &d, true)
assert.EqualValues(t, c, d) assert.EqualValues(t, c, d)
// make sure sigs are okay with nil
// Check nil PrivKey.
var e, f PrivKey var e, f PrivKey
toFromJSON(t, e, &f)
checkAminoJSON(t, &e, &f, true)
assert.EqualValues(t, e, f) assert.EqualValues(t, e, f)
} }
type SigMessage struct {
Key PubKey
Sig Signature
}
func (s SigMessage) Bytes() []byte {
return amino.BinaryBytes(s)
}
func TestEmbededWireEncodings(t *testing.T) {
cases := []struct {
privKey PrivKey
keyType byte
keyName string
size int // pub + sig size
}{
{
privKey: GenPrivKeyEd25519().Wrap(),
keyType: TypeEd25519,
keyName: NameEd25519,
size: 2 + 32 + 64,
},
// {
// privKey: GenPrivKeySecp256k1().Wrap(),
// keyType: TypeSecp256k1,
// keyName: NameSecp256k1,
// size: 2 + 33 + 72, // ugh, either 72 or 73 depending....
// },
}
payload := randBytes(20)
for i, tc := range cases {
pubKey := tc.privKey.PubKey()
sig := tc.privKey.Sign(payload)
assert.True(t, pubKey.VerifyBytes(payload, sig), "%d", i)
msg := SigMessage{
Key: pubKey,
Sig: sig,
}
var msg2 SigMessage
checkWire(t, msg, &msg2, tc.keyType, tc.size)
}
}
*/

+ 2
- 2
keys/types.go View File

@ -42,7 +42,7 @@ func (i Info) Address() []byte {
} }
func (i Info) bytes() []byte { func (i Info) bytes() []byte {
bz, err := cdc.MarshalBinary(i)
bz, err := cdc.MarshalBinaryBare(i)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -50,6 +50,6 @@ func (i Info) bytes() []byte {
} }
func readInfo(bz []byte) (info Info, err error) { func readInfo(bz []byte) (info Info, err error) {
err = cdc.UnmarshalBinary(bz, &info)
err = cdc.UnmarshalBinaryBare(bz, &info)
return return
} }

+ 4
- 4
priv_key.go View File

@ -10,7 +10,7 @@ import (
) )
func PrivKeyFromBytes(privKeyBytes []byte) (privKey PrivKey, err error) { func PrivKeyFromBytes(privKeyBytes []byte) (privKey PrivKey, err error) {
err = cdc.UnmarshalBinary(privKeyBytes, &privKey)
err = cdc.UnmarshalBinaryBare(privKeyBytes, &privKey)
return return
} }
@ -31,7 +31,7 @@ var _ PrivKey = PrivKeyEd25519{}
type PrivKeyEd25519 [64]byte type PrivKeyEd25519 [64]byte
func (privKey PrivKeyEd25519) Bytes() []byte { func (privKey PrivKeyEd25519) Bytes() []byte {
bz, err := cdc.MarshalBinary(privKey)
bz, err := cdc.MarshalBinaryBare(privKey)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -75,7 +75,7 @@ func (privKey PrivKeyEd25519) String() string {
// Deterministically generates new priv-key bytes from key. // Deterministically generates new priv-key bytes from key.
func (privKey PrivKeyEd25519) Generate(index int) PrivKeyEd25519 { func (privKey PrivKeyEd25519) Generate(index int) PrivKeyEd25519 {
bz, err := cdc.MarshalBinary(struct {
bz, err := cdc.MarshalBinaryBare(struct {
PrivKey [64]byte PrivKey [64]byte
Index int Index int
}{privKey, index}) }{privKey, index})
@ -113,7 +113,7 @@ var _ PrivKey = PrivKeySecp256k1{}
type PrivKeySecp256k1 [32]byte type PrivKeySecp256k1 [32]byte
func (privKey PrivKeySecp256k1) Bytes() []byte { func (privKey PrivKeySecp256k1) Bytes() []byte {
bz, err := cdc.MarshalBinary(privKey)
bz, err := cdc.MarshalBinaryBare(privKey)
if err != nil { if err != nil {
panic(err) panic(err)
} }


+ 3
- 3
pub_key.go View File

@ -18,7 +18,7 @@ import (
type Address = cmn.HexBytes type Address = cmn.HexBytes
func PubKeyFromBytes(pubKeyBytes []byte) (pubKey PubKey, err error) { func PubKeyFromBytes(pubKeyBytes []byte) (pubKey PubKey, err error) {
err = cdc.UnmarshalBinary(pubKeyBytes, &pubKey)
err = cdc.UnmarshalBinaryBare(pubKeyBytes, &pubKey)
return return
} }
@ -46,7 +46,7 @@ func (pubKey PubKeyEd25519) Address() Address {
} }
func (pubKey PubKeyEd25519) Bytes() []byte { func (pubKey PubKeyEd25519) Bytes() []byte {
bz, err := cdc.MarshalBinary(pubKey)
bz, err := cdc.MarshalBinaryBare(pubKey)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -108,7 +108,7 @@ func (pubKey PubKeySecp256k1) Address() Address {
} }
func (pubKey PubKeySecp256k1) Bytes() []byte { func (pubKey PubKeySecp256k1) Bytes() []byte {
bz, err := cdc.MarshalBinary(pubKey)
bz, err := cdc.MarshalBinaryBare(pubKey)
if err != nil { if err != nil {
panic(err) panic(err)
} }


+ 3
- 3
signature.go View File

@ -8,7 +8,7 @@ import (
) )
func SignatureFromBytes(pubKeyBytes []byte) (pubKey Signature, err error) { func SignatureFromBytes(pubKeyBytes []byte) (pubKey Signature, err error) {
err = cdc.UnmarshalBinary(pubKeyBytes, &pubKey)
err = cdc.UnmarshalBinaryBare(pubKeyBytes, &pubKey)
return return
} }
@ -28,7 +28,7 @@ var _ Signature = SignatureEd25519{}
type SignatureEd25519 [64]byte type SignatureEd25519 [64]byte
func (sig SignatureEd25519) Bytes() []byte { func (sig SignatureEd25519) Bytes() []byte {
bz, err := cdc.MarshalBinary(sig)
bz, err := cdc.MarshalBinaryBare(sig)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -61,7 +61,7 @@ var _ Signature = SignatureSecp256k1{}
type SignatureSecp256k1 []byte type SignatureSecp256k1 []byte
func (sig SignatureSecp256k1) Bytes() []byte { func (sig SignatureSecp256k1) Bytes() []byte {
bz, err := cdc.MarshalBinary(sig)
bz, err := cdc.MarshalBinaryBare(sig)
if err != nil { if err != nil {
panic(err) panic(err)
} }


+ 1
- 1
version.go View File

@ -1,3 +1,3 @@
package crypto package crypto
const Version = "0.6.0"
const Version = "0.6.1"

Loading…
Cancel
Save