mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
* Don't use pointer receivers for PubKeyMultisigThreshold * test that showcases panic when PubKeyMultisigThreshold are used in sdk: - deserialization will fail in `readInfo` which tries to read a `crypto.PubKey` into a `localInfo` (called by cosmos-sdk/client/keys.GetKeyInfo) * Update changelog * Rename routeTable to nameTable, multisig key is no longer a pointer * sed -i 's/PubKeyAminoRoute/PubKeyAminoName/g' `grep -lrw PubKeyAminoRoute .` upon Jae's request * AminoRoutes -> AminoNames * sed -e 's/PrivKeyAminoRoute/PrivKeyAminoName/g' * Update crypto/encoding/amino/amino.go Co-Authored-By: alessio <quadrispro@ubuntu.com>
72 lines
2.5 KiB
Go
72 lines
2.5 KiB
Go
package cryptoAmino
|
|
|
|
import (
|
|
"reflect"
|
|
|
|
amino "github.com/tendermint/go-amino"
|
|
"github.com/tendermint/tendermint/crypto"
|
|
"github.com/tendermint/tendermint/crypto/ed25519"
|
|
"github.com/tendermint/tendermint/crypto/multisig"
|
|
"github.com/tendermint/tendermint/crypto/secp256k1"
|
|
)
|
|
|
|
var cdc = amino.NewCodec()
|
|
|
|
// nameTable is used to map public key concrete types back
|
|
// to their registered amino names. This should eventually be handled
|
|
// by amino. Example usage:
|
|
// nameTable[reflect.TypeOf(ed25519.PubKeyEd25519{})] = ed25519.PubKeyAminoName
|
|
var nameTable = make(map[reflect.Type]string, 3)
|
|
|
|
func init() {
|
|
// NOTE: It's important that there be no conflicts here,
|
|
// as that would change the canonical representations,
|
|
// and therefore change the address.
|
|
// TODO: Remove above note when
|
|
// https://github.com/tendermint/go-amino/issues/9
|
|
// is resolved
|
|
RegisterAmino(cdc)
|
|
|
|
// TODO: Have amino provide a way to go from concrete struct to route directly.
|
|
// Its currently a private API
|
|
nameTable[reflect.TypeOf(ed25519.PubKeyEd25519{})] = ed25519.PubKeyAminoName
|
|
nameTable[reflect.TypeOf(secp256k1.PubKeySecp256k1{})] = secp256k1.PubKeyAminoName
|
|
nameTable[reflect.TypeOf(multisig.PubKeyMultisigThreshold{})] = multisig.PubKeyMultisigThresholdAminoRoute
|
|
}
|
|
|
|
// PubkeyAminoName returns the amino route of a pubkey
|
|
// cdc is currently passed in, as eventually this will not be using
|
|
// a package level codec.
|
|
func PubkeyAminoName(cdc *amino.Codec, key crypto.PubKey) (string, bool) {
|
|
route, found := nameTable[reflect.TypeOf(key)]
|
|
return route, found
|
|
}
|
|
|
|
// RegisterAmino registers all crypto related types in the given (amino) codec.
|
|
func RegisterAmino(cdc *amino.Codec) {
|
|
// These are all written here instead of
|
|
cdc.RegisterInterface((*crypto.PubKey)(nil), nil)
|
|
cdc.RegisterConcrete(ed25519.PubKeyEd25519{},
|
|
ed25519.PubKeyAminoName, nil)
|
|
cdc.RegisterConcrete(secp256k1.PubKeySecp256k1{},
|
|
secp256k1.PubKeyAminoName, nil)
|
|
cdc.RegisterConcrete(multisig.PubKeyMultisigThreshold{},
|
|
multisig.PubKeyMultisigThresholdAminoRoute, nil)
|
|
|
|
cdc.RegisterInterface((*crypto.PrivKey)(nil), nil)
|
|
cdc.RegisterConcrete(ed25519.PrivKeyEd25519{},
|
|
ed25519.PrivKeyAminoName, nil)
|
|
cdc.RegisterConcrete(secp256k1.PrivKeySecp256k1{},
|
|
secp256k1.PrivKeyAminoName, nil)
|
|
}
|
|
|
|
func PrivKeyFromBytes(privKeyBytes []byte) (privKey crypto.PrivKey, err error) {
|
|
err = cdc.UnmarshalBinaryBare(privKeyBytes, &privKey)
|
|
return
|
|
}
|
|
|
|
func PubKeyFromBytes(pubKeyBytes []byte) (pubKey crypto.PubKey, err error) {
|
|
err = cdc.UnmarshalBinaryBare(pubKeyBytes, &pubKey)
|
|
return
|
|
}
|