mirror of https://github.com/ethereum/go-ethereum
cmd/ethkey: fix formatting, review nits (#15807)
This commit: - Adds a --msgfile option to read the message to sign from a file instead of command line argument. - Adds a unit test for signing subcommands. - Removes some weird whitespace in the code.pull/15902/head
parent
216e584899
commit
f08cd94fb7
@ -0,0 +1,70 @@ |
|||||||
|
// Copyright 2017 The go-ethereum Authors
|
||||||
|
// This file is part of go-ethereum.
|
||||||
|
//
|
||||||
|
// go-ethereum is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// go-ethereum is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"io/ioutil" |
||||||
|
"os" |
||||||
|
"path/filepath" |
||||||
|
"testing" |
||||||
|
) |
||||||
|
|
||||||
|
func TestMessageSignVerify(t *testing.T) { |
||||||
|
tmpdir, err := ioutil.TempDir("", "ethkey-test") |
||||||
|
if err != nil { |
||||||
|
t.Fatal("Can't create temporary directory:", err) |
||||||
|
} |
||||||
|
defer os.RemoveAll(tmpdir) |
||||||
|
|
||||||
|
keyfile := filepath.Join(tmpdir, "the-keyfile") |
||||||
|
message := "test message" |
||||||
|
|
||||||
|
// Create the key.
|
||||||
|
generate := runEthkey(t, "generate", keyfile) |
||||||
|
generate.Expect(` |
||||||
|
!! Unsupported terminal, password will be echoed. |
||||||
|
Passphrase: {{.InputLine "foobar"}} |
||||||
|
Repeat passphrase: {{.InputLine "foobar"}} |
||||||
|
`) |
||||||
|
_, matches := generate.ExpectRegexp(`Address: (0x[0-9a-fA-F]{40})\n`) |
||||||
|
address := matches[1] |
||||||
|
generate.ExpectExit() |
||||||
|
|
||||||
|
// Sign a message.
|
||||||
|
sign := runEthkey(t, "signmessage", keyfile, message) |
||||||
|
sign.Expect(` |
||||||
|
!! Unsupported terminal, password will be echoed. |
||||||
|
Passphrase: {{.InputLine "foobar"}} |
||||||
|
`) |
||||||
|
_, matches = sign.ExpectRegexp(`Signature: ([0-9a-f]+)\n`) |
||||||
|
signature := matches[1] |
||||||
|
sign.ExpectExit() |
||||||
|
|
||||||
|
// Verify the message.
|
||||||
|
verify := runEthkey(t, "verifymessage", address, signature, message) |
||||||
|
_, matches = verify.ExpectRegexp(` |
||||||
|
Signature verification successful! |
||||||
|
Recovered public key: [0-9a-f]+ |
||||||
|
Recovered address: (0x[0-9a-fA-F]{40}) |
||||||
|
`) |
||||||
|
recovered := matches[1] |
||||||
|
verify.ExpectExit() |
||||||
|
|
||||||
|
if recovered != address { |
||||||
|
t.Error("recovered address doesn't match generated key") |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
// Copyright 2017 The go-ethereum Authors
|
||||||
|
// This file is part of go-ethereum.
|
||||||
|
//
|
||||||
|
// go-ethereum is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// go-ethereum is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"os" |
||||||
|
"testing" |
||||||
|
|
||||||
|
"github.com/docker/docker/pkg/reexec" |
||||||
|
"github.com/ethereum/go-ethereum/internal/cmdtest" |
||||||
|
) |
||||||
|
|
||||||
|
type testEthkey struct { |
||||||
|
*cmdtest.TestCmd |
||||||
|
} |
||||||
|
|
||||||
|
// spawns ethkey with the given command line args.
|
||||||
|
func runEthkey(t *testing.T, args ...string) *testEthkey { |
||||||
|
tt := new(testEthkey) |
||||||
|
tt.TestCmd = cmdtest.NewTestCmd(t, tt) |
||||||
|
tt.Run("ethkey-test", args...) |
||||||
|
return tt |
||||||
|
} |
||||||
|
|
||||||
|
func TestMain(m *testing.M) { |
||||||
|
// Run the app if we've been exec'd as "ethkey-test" in runEthkey.
|
||||||
|
reexec.Register("ethkey-test", func() { |
||||||
|
if err := app.Run(os.Args); err != nil { |
||||||
|
fmt.Fprintln(os.Stderr, err) |
||||||
|
os.Exit(1) |
||||||
|
} |
||||||
|
os.Exit(0) |
||||||
|
}) |
||||||
|
// check if we have been reexec'd
|
||||||
|
if reexec.Init() { |
||||||
|
return |
||||||
|
} |
||||||
|
os.Exit(m.Run()) |
||||||
|
} |
Loading…
Reference in new issue