mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-11-24 06:25: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)
|
ctrl := gomock.NewController(t)
|
||||||
mk := assettestutils.NewMockMachineKeeper(ctrl)
|
mk := assettestutils.NewMockMachineKeeper(ctrl)
|
||||||
mk.EXPECT().GetMachine(ctx, "pubkey").Return(sample.Machine(), true).AnyTimes()
|
sk, pk := sample.KeyPair()
|
||||||
mk.EXPECT().GetMachine(ctx, "privkey").Return(sample.Machine(), false).AnyTimes()
|
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(
|
k := keeper.NewKeeper(
|
||||||
cdc,
|
cdc,
|
||||||
|
|||||||
@ -7,12 +7,14 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// // KeyPair returns a sample private / public keypair
|
// KeyPair returns a sample private / public keypair
|
||||||
// func KeyPair() (ed25519.PrivKey, cryptotypes.PubKey) {
|
func KeyPair() (string, string) {
|
||||||
// sk := ed25519.GenPrivKey()
|
secret := "Hello World!"
|
||||||
// pk := sk.PubKey()
|
sk := ed25519.GenPrivKeyFromSecret([]byte(secret))
|
||||||
// return sk.Key, pk
|
pk := sk.PubKey()
|
||||||
// }
|
|
||||||
|
return sk.String(), pk.String()
|
||||||
|
}
|
||||||
|
|
||||||
// AccAddress returns a sample account address
|
// AccAddress returns a sample account address
|
||||||
func AccAddress() string {
|
func AccAddress() string {
|
||||||
@ -21,14 +23,14 @@ func AccAddress() string {
|
|||||||
return sdk.AccAddress(addr).String()
|
return sdk.AccAddress(addr).String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Machine() machinetypes.Machine {
|
func Machine(pkPM string, pkL string) machinetypes.Machine {
|
||||||
m := machinetypes.Machine{
|
m := machinetypes.Machine{
|
||||||
Name: "machine",
|
Name: "machine",
|
||||||
Ticker: "PM",
|
Ticker: "PM",
|
||||||
Issued: 1,
|
Issued: 1,
|
||||||
Precision: 8,
|
Precision: 8,
|
||||||
IssuerPlanetmint: "pubkey",
|
IssuerPlanetmint: pkPM,
|
||||||
IssuerLiquid: "pubkey",
|
IssuerLiquid: pkL,
|
||||||
Cid: "Cid",
|
Cid: "Cid",
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
|
|||||||
@ -2,10 +2,13 @@ package keeper
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"planetmint-go/x/asset/types"
|
"planetmint-go/x/asset/types"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
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")
|
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{
|
var asset = types.Asset{
|
||||||
Hash: msg.CidHash,
|
Hash: msg.CidHash,
|
||||||
@ -30,3 +36,21 @@ func (k msgServer) NotarizeAsset(goCtx context.Context, msg *types.MsgNotarizeAs
|
|||||||
|
|
||||||
return &types.MsgNotarizeAssetResponse{}, nil
|
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"
|
"testing"
|
||||||
|
|
||||||
keepertest "planetmint-go/testutil/keeper"
|
keepertest "planetmint-go/testutil/keeper"
|
||||||
|
"planetmint-go/testutil/sample"
|
||||||
"planetmint-go/x/asset/keeper"
|
"planetmint-go/x/asset/keeper"
|
||||||
"planetmint-go/x/asset/types"
|
"planetmint-go/x/asset/types"
|
||||||
|
|
||||||
@ -18,7 +19,8 @@ func setupMsgServer(t testing.TB) (types.MsgServer, context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestMsgServerNotarizeAsset(t *testing.T) {
|
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)
|
msgServer, ctx := setupMsgServer(t)
|
||||||
res, err := msgServer.NotarizeAsset(ctx, msg)
|
res, err := msgServer.NotarizeAsset(ctx, msg)
|
||||||
if assert.NoError(t, err) {
|
if assert.NoError(t, err) {
|
||||||
@ -27,8 +29,17 @@ func TestMsgServerNotarizeAsset(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestMsgServerNotarizeAssetMachineNotFound(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)
|
msgServer, ctx := setupMsgServer(t)
|
||||||
_, err := msgServer.NotarizeAsset(ctx, msg)
|
_, err := msgServer.NotarizeAsset(ctx, msg)
|
||||||
assert.EqualError(t, err, "machine not found")
|
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