added keypair sample and ValidateSignature to msg server

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2023-06-14 14:15:06 +02:00
parent f176335354
commit ec07bb075e
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
4 changed files with 52 additions and 14 deletions

View File

@ -47,8 +47,9 @@ func AssetKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) {
ctrl := gomock.NewController(t)
mk := assettestutils.NewMockMachineKeeper(ctrl)
mk.EXPECT().GetMachine(ctx, "pubkey").Return(sample.Machine(), true).AnyTimes()
mk.EXPECT().GetMachine(ctx, "privkey").Return(sample.Machine(), false).AnyTimes()
sk, pk := sample.KeyPair()
mk.EXPECT().GetMachine(ctx, pk).Return(sample.Machine(pk, pk), true).AnyTimes()
mk.EXPECT().GetMachine(ctx, sk).Return(sample.Machine(pk, pk), false).AnyTimes()
k := keeper.NewKeeper(
cdc,

View File

@ -7,12 +7,14 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
)
// // KeyPair returns a sample private / public keypair
// func KeyPair() (ed25519.PrivKey, cryptotypes.PubKey) {
// sk := ed25519.GenPrivKey()
// pk := sk.PubKey()
// return sk.Key, pk
// }
// KeyPair returns a sample private / public keypair
func KeyPair() (string, string) {
secret := "Hello World!"
sk := ed25519.GenPrivKeyFromSecret([]byte(secret))
pk := sk.PubKey()
return sk.String(), pk.String()
}
// AccAddress returns a sample account address
func AccAddress() string {
@ -21,14 +23,14 @@ func AccAddress() string {
return sdk.AccAddress(addr).String()
}
func Machine() machinetypes.Machine {
func Machine(pkPM string, pkL string) machinetypes.Machine {
m := machinetypes.Machine{
Name: "machine",
Ticker: "PM",
Issued: 1,
Precision: 8,
IssuerPlanetmint: "pubkey",
IssuerLiquid: "pubkey",
IssuerPlanetmint: pkPM,
IssuerLiquid: pkL,
Cid: "Cid",
}
return m

View File

@ -2,10 +2,13 @@ package keeper
import (
"context"
"crypto/sha256"
"encoding/hex"
"errors"
"planetmint-go/x/asset/types"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
sdk "github.com/cosmos/cosmos-sdk/types"
)
@ -18,7 +21,10 @@ func (k msgServer) NotarizeAsset(goCtx context.Context, msg *types.MsgNotarizeAs
return &types.MsgNotarizeAssetResponse{}, errors.New("machine not found")
}
// TODO: validate signature
valid := ValidateSignature(msg.CidHash, msg.Sign, msg.Creator)
if !valid {
return &types.MsgNotarizeAssetResponse{}, errors.New("invalid signature")
}
var asset = types.Asset{
Hash: msg.CidHash,
@ -30,3 +36,21 @@ func (k msgServer) NotarizeAsset(goCtx context.Context, msg *types.MsgNotarizeAs
return &types.MsgNotarizeAssetResponse{}, nil
}
func ValidateSignature(message string, signature string, publicKey string) bool {
// Convert the message, signature, and public key from hex to bytes
messageBytes, _ := hex.DecodeString(message)
signatureBytes, _ := hex.DecodeString(signature)
publicKeyBytes, _ := hex.DecodeString(publicKey)
// Hash the message
hash := sha256.Sum256(messageBytes)
// Create a secp256k1 public key object
pubKey := &secp256k1.PubKey{Key: publicKeyBytes}
// Verify the signature
isValid := pubKey.VerifySignature(hash[:], signatureBytes)
return isValid
}

View File

@ -5,6 +5,7 @@ import (
"testing"
keepertest "planetmint-go/testutil/keeper"
"planetmint-go/testutil/sample"
"planetmint-go/x/asset/keeper"
"planetmint-go/x/asset/types"
@ -18,7 +19,8 @@ func setupMsgServer(t testing.TB) (types.MsgServer, context.Context) {
}
func TestMsgServerNotarizeAsset(t *testing.T) {
msg := types.NewMsgNotarizeAsset("pubkey", "cid", "sign", "pubkey")
_, pk := sample.KeyPair()
msg := types.NewMsgNotarizeAsset(pk, "cid", "sign", "pubkey")
msgServer, ctx := setupMsgServer(t)
res, err := msgServer.NotarizeAsset(ctx, msg)
if assert.NoError(t, err) {
@ -27,8 +29,17 @@ func TestMsgServerNotarizeAsset(t *testing.T) {
}
func TestMsgServerNotarizeAssetMachineNotFound(t *testing.T) {
msg := types.NewMsgNotarizeAsset("privkey", "cid", "sign", "pubkey")
sk, _ := sample.KeyPair()
msg := types.NewMsgNotarizeAsset(sk, "cid", "sign", "pubkey")
msgServer, ctx := setupMsgServer(t)
_, err := msgServer.NotarizeAsset(ctx, msg)
assert.EqualError(t, err, "machine not found")
}
func TestMsgServerNotarizeAssetInvalidAsset(t *testing.T) {
_, pk := sample.KeyPair()
msg := types.NewMsgNotarizeAsset(pk, "cid", "sign", "pubkey")
msgServer, ctx := setupMsgServer(t)
_, err := msgServer.NotarizeAsset(ctx, msg)
assert.EqualError(t, err, "invalid signature")
}