mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-11-24 14:35:47 +00:00
added keypair sample and ValidateSignature to msg server
Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
parent
f176335354
commit
ec07bb075e
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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")
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user