github.com/Finschia/finschia-sdk@v0.48.1/x/auth/signing/verify_test.go (about) 1 package signing_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 8 9 "github.com/Finschia/finschia-sdk/codec" 10 kmultisig "github.com/Finschia/finschia-sdk/crypto/keys/multisig" 11 cryptotypes "github.com/Finschia/finschia-sdk/crypto/types" 12 "github.com/Finschia/finschia-sdk/crypto/types/multisig" 13 "github.com/Finschia/finschia-sdk/simapp" 14 "github.com/Finschia/finschia-sdk/testutil/testdata" 15 sdk "github.com/Finschia/finschia-sdk/types" 16 "github.com/Finschia/finschia-sdk/x/auth/ante" 17 "github.com/Finschia/finschia-sdk/x/auth/legacy/legacytx" 18 "github.com/Finschia/finschia-sdk/x/auth/signing" 19 "github.com/Finschia/finschia-sdk/x/auth/types" 20 ) 21 22 func TestVerifySignature(t *testing.T) { 23 priv, pubKey, addr := testdata.KeyTestPubAddr() 24 priv1, pubKey1, addr1 := testdata.KeyTestPubAddr() 25 26 const ( 27 memo = "testmemo" 28 chainId = "test-chain" 29 ) 30 31 app, ctx := createTestApp(false) 32 ctx = ctx.WithBlockHeight(1) 33 34 cdc := codec.NewLegacyAmino() 35 sdk.RegisterLegacyAminoCodec(cdc) 36 types.RegisterLegacyAminoCodec(cdc) 37 cdc.RegisterConcrete(testdata.TestMsg{}, "cosmos-sdk/Test", nil) 38 39 acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr) 40 _ = app.AccountKeeper.NewAccountWithAddress(ctx, addr1) 41 app.AccountKeeper.SetAccount(ctx, acc1) 42 balances := sdk.NewCoins(sdk.NewInt64Coin("atom", 200)) 43 require.NoError(t, simapp.FundAccount(app, ctx, addr, balances)) 44 acc, err := ante.GetSignerAcc(ctx, app.AccountKeeper, addr) 45 require.NoError(t, simapp.FundAccount(app, ctx, addr, balances)) 46 47 msgs := []sdk.Msg{testdata.NewTestMsg(addr)} 48 fee := legacytx.NewStdFee(50000, sdk.Coins{sdk.NewInt64Coin("atom", 150)}) 49 signerData := signing.SignerData{ 50 ChainID: chainId, 51 AccountNumber: acc.GetAccountNumber(), 52 Sequence: acc.GetSequence(), 53 } 54 signBytes := legacytx.StdSignBytes(signerData.ChainID, signerData.AccountNumber, signerData.Sequence, 10, fee, msgs, memo) 55 signature, err := priv.Sign(signBytes) 56 require.NoError(t, err) 57 58 stdSig := legacytx.StdSignature{PubKey: pubKey, Signature: signature} 59 sigV2, err := legacytx.StdSignatureToSignatureV2(cdc, stdSig) 60 require.NoError(t, err) 61 62 handler := MakeTestHandlerMap() 63 stdTx := legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig}, memo) 64 stdTx.TimeoutHeight = 10 65 err = signing.VerifySignature(pubKey, signerData, sigV2.Data, handler, stdTx) 66 require.NoError(t, err) 67 68 pkSet := []cryptotypes.PubKey{pubKey, pubKey1} 69 multisigKey := kmultisig.NewLegacyAminoPubKey(2, pkSet) 70 multisignature := multisig.NewMultisig(2) 71 msgs = []sdk.Msg{testdata.NewTestMsg(addr, addr1)} 72 multiSignBytes := legacytx.StdSignBytes(signerData.ChainID, signerData.AccountNumber, signerData.Sequence, 10, fee, msgs, memo) 73 74 sig1, err := priv.Sign(multiSignBytes) 75 require.NoError(t, err) 76 stdSig1 := legacytx.StdSignature{PubKey: pubKey, Signature: sig1} 77 sig1V2, err := legacytx.StdSignatureToSignatureV2(cdc, stdSig1) 78 require.NoError(t, err) 79 80 sig2, err := priv1.Sign(multiSignBytes) 81 require.NoError(t, err) 82 stdSig2 := legacytx.StdSignature{PubKey: pubKey, Signature: sig2} 83 sig2V2, err := legacytx.StdSignatureToSignatureV2(cdc, stdSig2) 84 require.NoError(t, err) 85 86 err = multisig.AddSignatureFromPubKey(multisignature, sig1V2.Data, pkSet[0], pkSet) 87 require.NoError(t, err) 88 err = multisig.AddSignatureFromPubKey(multisignature, sig2V2.Data, pkSet[1], pkSet) 89 require.NoError(t, err) 90 91 stdTx = legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig1, stdSig2}, memo) 92 stdTx.TimeoutHeight = 10 93 94 err = signing.VerifySignature(multisigKey, signerData, multisignature, handler, stdTx) 95 require.NoError(t, err) 96 } 97 98 // returns context and app with params set on account keeper 99 func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { 100 app := simapp.Setup(isCheckTx) 101 ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) 102 app.AccountKeeper.SetParams(ctx, types.DefaultParams()) 103 104 return app, ctx 105 }