diff options
Diffstat (limited to 'internal')
-rw-r--r-- | internal/configfile/config_file.go | 1 | ||||
-rw-r--r-- | internal/tlog/log.go | 37 |
2 files changed, 38 insertions, 0 deletions
diff --git a/internal/configfile/config_file.go b/internal/configfile/config_file.go index c856ad0..1e48c97 100644 --- a/internal/configfile/config_file.go +++ b/internal/configfile/config_file.go @@ -104,6 +104,7 @@ func Create(filename string, password []byte, plaintextNames bool, } else { key = cryptocore.RandBytes(cryptocore.KeyLen) } + tlog.PrintMasterkeyReminder(key) // Encrypt it using the password // This sets ScryptObject and EncryptedKey // Note: this looks at the FeatureFlags, so call it AFTER setting them. diff --git a/internal/tlog/log.go b/internal/tlog/log.go index 1c80911..9277abd 100644 --- a/internal/tlog/log.go +++ b/internal/tlog/log.go @@ -3,6 +3,7 @@ package tlog import ( + "encoding/hex" "encoding/json" "fmt" "log" @@ -144,3 +145,39 @@ func SwitchLoggerToSyslog(p syslog.Priority) { log.SetOutput(w) } } + +// PrintMasterkeyReminder reminds the user that he should store the master key in +// a safe place. +func PrintMasterkeyReminder(key []byte) { + if !Info.Enabled { + // Quiet mode + return + } + if !terminal.IsTerminal(int(os.Stdout.Fd())) { + // We don't want the master key to end up in a log file + Info.Printf("Not running on a terminal, suppressing master key display\n") + return + } + h := hex.EncodeToString(key) + var hChunked string + // Try to make it less scary by splitting it up in chunks + for i := 0; i < len(h); i += 8 { + hChunked += h[i : i+8] + if i < 52 { + hChunked += "-" + } + if i == 24 { + hChunked += "\n " + } + } + Info.Printf(` +Your master key is: + + %s + +If the gocryptfs.conf file becomes corrupted or you ever forget your password, +there is only one hope for recovery: The master key. Print it to a piece of +paper and store it in a drawer. This message is only printed once. + +`, ColorGrey+hChunked+ColorReset) +} |