github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/keys/client/verify_test.go (about)

     1  package client
     2  
     3  import (
     4  	"encoding/hex"
     5  	"fmt"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/gnolang/gno/tm2/pkg/commands"
    10  	"github.com/gnolang/gno/tm2/pkg/crypto/keys"
    11  	"github.com/gnolang/gno/tm2/pkg/testutils"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func Test_execVerify(t *testing.T) {
    16  	t.Parallel()
    17  
    18  	// make new test dir
    19  	kbHome, kbCleanUp := testutils.NewTestCaseDir(t)
    20  	assert.NotNil(t, kbHome)
    21  	defer kbCleanUp()
    22  
    23  	// initialize test options
    24  	cfg := &VerifyCfg{
    25  		RootCfg: &BaseCfg{
    26  			BaseOptions: BaseOptions{
    27  				Home:                  kbHome,
    28  				InsecurePasswordStdin: true,
    29  			},
    30  		},
    31  		DocPath: "",
    32  	}
    33  
    34  	io := commands.NewTestIO()
    35  
    36  	fakeKeyName1 := "verifyApp_Key1"
    37  	// encPassword := "12345678"
    38  	encPassword := ""
    39  	testMsg := "some message"
    40  
    41  	// add test account to keybase.
    42  	kb, err := keys.NewKeyBaseFromDir(kbHome)
    43  	assert.NoError(t, err)
    44  	_, err = kb.CreateAccount(fakeKeyName1, testMnemonic, "", encPassword, 0, 0)
    45  	assert.NoError(t, err)
    46  
    47  	// sign test message.
    48  	priv, err := kb.ExportPrivateKeyObject(fakeKeyName1, encPassword)
    49  	assert.NoError(t, err)
    50  	testSig, err := priv.Sign([]byte(testMsg))
    51  	assert.NoError(t, err)
    52  	testSigHex := hex.EncodeToString(testSig)
    53  
    54  	// good signature passes test.
    55  	args := []string{fakeKeyName1, testSigHex}
    56  	io.SetIn(
    57  		strings.NewReader(
    58  			fmt.Sprintf("%s\n", testMsg),
    59  		),
    60  	)
    61  	err = execVerify(cfg, args, io)
    62  	assert.NoError(t, err)
    63  
    64  	// mutated bad signature fails test.
    65  	testBadSig := testutils.MutateByteSlice(testSig)
    66  	testBadSigHex := hex.EncodeToString(testBadSig)
    67  	args = []string{fakeKeyName1, testBadSigHex}
    68  	io.SetIn(
    69  		strings.NewReader(
    70  			fmt.Sprintf("%s\n", testMsg),
    71  		),
    72  	)
    73  	err = execVerify(cfg, args, io)
    74  	assert.Error(t, err)
    75  }