mirror of
https://github.com/FiloSottile/age.git
synced 2026-01-06 04:04:50 +00:00
cmd/age: offer to autogenerate a secure passphrase
As suggested by @tqbf: https://twitter.com/tqbf/status/1210715916381511680
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
||||
"io"
|
||||
_log "log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"filippo.io/age/internal/age"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
@@ -147,7 +148,7 @@ func main() {
|
||||
case decryptFlag:
|
||||
decrypt(identityFlags, in, out)
|
||||
case passFlag:
|
||||
pass, err := passphrasePrompt()
|
||||
pass, err := passphrasePromptWithDefault()
|
||||
if err != nil {
|
||||
logFatalf("Error: %v", err)
|
||||
}
|
||||
@@ -157,13 +158,22 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
func passphrasePrompt() (string, error) {
|
||||
fmt.Fprintf(os.Stderr, "Enter passphrase: ")
|
||||
func passphrasePromptWithDefault() (string, error) {
|
||||
fmt.Fprintf(os.Stderr, "Enter passphrase (leave empty to autogenerate a secure one): ")
|
||||
pass, err := readPassphrase()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not read passphrase: %v", err)
|
||||
}
|
||||
return string(pass), nil
|
||||
p := string(pass)
|
||||
if p == "" {
|
||||
var words []string
|
||||
for i := 0; i < 10; i++ {
|
||||
words = append(words, randomWord())
|
||||
}
|
||||
p = strings.Join(words, "-")
|
||||
fmt.Fprintf(os.Stderr, "Using the autogenerated passphrase %q.\n", p)
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func encryptKeys(keys []string, in io.Reader, out io.Writer, armor bool) {
|
||||
@@ -229,6 +239,15 @@ func decrypt(keys []string, in io.Reader, out io.Writer) {
|
||||
}
|
||||
}
|
||||
|
||||
func passphrasePrompt() (string, error) {
|
||||
fmt.Fprintf(os.Stderr, "Enter passphrase: ")
|
||||
pass, err := readPassphrase()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not read passphrase: %v", err)
|
||||
}
|
||||
return string(pass), nil
|
||||
}
|
||||
|
||||
func logFatalf(format string, v ...interface{}) {
|
||||
_log.Printf(format, v...)
|
||||
_log.Fatalf("[ Did age not do what you expected? Could an error be more useful?" +
|
||||
|
||||
26
cmd/age/wordlist.go
Normal file
26
cmd/age/wordlist.go
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user