From 6d5a1fdf604c376a2e6bcde0ec3b0a77682db768 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 30 Apr 2017 23:45:20 +0200 Subject: Extract ask --- ask.go | 51 --------------------------------------------------- ask/ask.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ cmd/signify/main.go | 5 +++-- 3 files changed, 54 insertions(+), 53 deletions(-) delete mode 100644 ask.go create mode 100644 ask/ask.go diff --git a/ask.go b/ask.go deleted file mode 100644 index 574a645..0000000 --- a/ask.go +++ /dev/null @@ -1,51 +0,0 @@ -package signify - -import ( - "errors" - "os" - - "golang.org/x/crypto/ssh/terminal" -) - -var ( - ErrNoPassword = errors.New("please provide a password") - ErrNoMatch = errors.New("passwords don't match") -) - -func AskConfirmed() (string, error) { - pass, err := askPassword(os.Stdin, "passphrase: ") - if err != nil { - return "", err - } - pass2, err := askPassword(os.Stdin, "confirm passphrase: ") - if err != nil { - return "", err - } - if pass != pass2 { - return "", ErrNoMatch - } - return pass, nil -} - -func AskPassword() (string, error) { - return askPassword(os.Stdin, "passphrase: ") -} - -func askPassword(f *os.File, q string) (string, error) { - oldState, err := terminal.MakeRaw(int(f.Fd())) - if err != nil { - return "", err - } - defer terminal.Restore(int(f.Fd()), oldState) - - term := terminal.NewTerminal(f, "") - pass, err := term.ReadPassword(q) - if err != nil { - return "", err - } - if len(pass) == 0 { - return "", ErrNoPassword - } - - return pass, nil -} diff --git a/ask/ask.go b/ask/ask.go new file mode 100644 index 0000000..76a20cc --- /dev/null +++ b/ask/ask.go @@ -0,0 +1,51 @@ +package ask + +import ( + "errors" + "os" + + "golang.org/x/crypto/ssh/terminal" +) + +var ( + ErrNoPassword = errors.New("please provide a password") + ErrNoMatch = errors.New("passwords don't match") +) + +func Confirmed() (string, error) { + pass, err := ask(os.Stdin, "passphrase: ") + if err != nil { + return "", err + } + pass2, err := ask(os.Stdin, "confirm passphrase: ") + if err != nil { + return "", err + } + if pass != pass2 { + return "", ErrNoMatch + } + return pass, nil +} + +func Password() (string, error) { + return ask(os.Stdin, "passphrase: ") +} + +func ask(f *os.File, prompt string) (string, error) { + oldState, err := terminal.MakeRaw(int(f.Fd())) + if err != nil { + return "", err + } + defer terminal.Restore(int(f.Fd()), oldState) + + term := terminal.NewTerminal(f, "") + pass, err := term.ReadPassword(prompt) + if err != nil { + return "", err + } + if len(pass) == 0 { + return "", ErrNoPassword + } + + return pass, nil +} diff --git a/cmd/signify/main.go b/cmd/signify/main.go index 407609a..bad9d65 100644 --- a/cmd/signify/main.go +++ b/cmd/signify/main.go @@ -9,6 +9,7 @@ import ( "path/filepath" "dim13.org/signify" + "dim13.org/signify/ask" ) /* @@ -74,7 +75,7 @@ func Generate(pubFile, secFile, comment string, nopass bool) error { if nopass { encKey.KDFRounds = 0 } - encKey.Kdf(signify.AskConfirmed) + encKey.Kdf(ask.Confirmed) encRaw, err := signify.Marshal(encKey) if err != nil { @@ -113,7 +114,7 @@ func OpenEnc(fname string) (*signify.EncKey, error) { if err := signify.Unmarshal(f.RawKey, encKey); err != nil { return nil, err } - encKey.Kdf(signify.AskPassword) + encKey.Kdf(ask.Password) if err := encKey.Check(); err != nil { return nil, err } -- cgit v1.2.3