From ea1e3168520c5fe274336f6f0e72b40a04a34f15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Eckel?= Date: Tue, 12 Sep 2023 14:49:25 +0200 Subject: [PATCH] adjusted signing to work with ext pub keys being commited within the cid notarization message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jürgen Eckel --- util/validate_signature.go | 14 ++++++++++++++ x/asset/keeper/msg_server_notarize_asset.go | 11 +++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/util/validate_signature.go b/util/validate_signature.go index e27fbeb..fbe8b12 100644 --- a/util/validate_signature.go +++ b/util/validate_signature.go @@ -3,6 +3,7 @@ package util import ( "encoding/hex" + "github.com/btcsuite/btcd/btcutil/hdkeychain" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" ) @@ -20,3 +21,16 @@ func ValidateSignature(message string, signature string, publicKey string) bool return isValid } + +func GetHexPubKey(ext_pub_key string) (string, error) { + xpubKey, err := hdkeychain.NewKeyFromString(ext_pub_key) + if err != nil { + return "", err + } + pubKey, err := xpubKey.ECPubKey() + if err != nil { + return "", err + } + byte_key := pubKey.SerializeCompressed() + return hex.EncodeToString(byte_key), nil +} diff --git a/x/asset/keeper/msg_server_notarize_asset.go b/x/asset/keeper/msg_server_notarize_asset.go index 3f2ed10..e089b73 100644 --- a/x/asset/keeper/msg_server_notarize_asset.go +++ b/x/asset/keeper/msg_server_notarize_asset.go @@ -18,8 +18,11 @@ func (k msgServer) NotarizeAsset(goCtx context.Context, msg *types.MsgNotarizeAs if !found { return nil, errors.New("machine not found") } - - valid := util.ValidateSignature(msg.Hash, msg.Signature, msg.PubKey) + hex_pub_key, err := util.GetHexPubKey(msg.PubKey) + if err != nil { + return nil, errors.New("could not convert xpub key to hex pub key") + } + valid := util.ValidateSignature(msg.Hash, msg.Signature, hex_pub_key) if !valid { return nil, errors.New("invalid signature") } @@ -34,3 +37,7 @@ func (k msgServer) NotarizeAsset(goCtx context.Context, msg *types.MsgNotarizeAs return &types.MsgNotarizeAssetResponse{}, nil } + +func getHexPubKey(s string) { + panic("unimplemented") +}