From b97268c94824b8047c8d4f97a68549260e4f6835 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Sun, 5 Jun 2016 11:33:54 +0200 Subject: [PATCH] configfile: bake the "Creator" gocryptfs version into the file This field is added for the convenience of users and may help them to identify which gocryptfs version they need to mount a filesystem. The same information is essentially contained in FeatureFlags, but this is more difficult to decode for humans. It is completely ignored programmatically (also by older gocryptfs versions). --- internal/configfile/config_file.go | 11 ++++++++--- internal/configfile/config_test.go | 2 +- main.go | 3 ++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/configfile/config_file.go b/internal/configfile/config_file.go index e54e84e..d91ce3e 100644 --- a/internal/configfile/config_file.go +++ b/internal/configfile/config_file.go @@ -19,8 +19,10 @@ const ( ) type ConfFile struct { - // File the config is saved to. Not exported to JSON. - filename string + // gocryptfs version string + // This only documents the config file for humans who look at it. The actual + // technical info is contained in FeatureFlags. + Creator string // Encrypted AES key, unlocked using a password hashed with scrypt EncryptedKey []byte // Stores parameters for scrypt hashing (key derivation) @@ -32,14 +34,17 @@ type ConfFile struct { // mounting. This mechanism is analogous to the ext4 feature flags that are // stored in the superblock. FeatureFlags []string + // File the config is saved to. Not exported to JSON. + filename string } // CreateConfFile - create a new config with a random key encrypted with // "password" and write it to "filename". // Uses scrypt with cost parameter logN. -func CreateConfFile(filename string, password string, plaintextNames bool, logN int) error { +func CreateConfFile(filename string, password string, plaintextNames bool, logN int, creator string) error { var cf ConfFile cf.filename = filename + cf.Creator = creator cf.Version = contentenc.CurrentVersion // Generate new random master key diff --git a/internal/configfile/config_test.go b/internal/configfile/config_test.go index 5468b80..c83c4bd 100644 --- a/internal/configfile/config_test.go +++ b/internal/configfile/config_test.go @@ -60,7 +60,7 @@ func TestLoadV2StrangeFeature(t *testing.T) { } func TestCreateConfFile(t *testing.T) { - err := CreateConfFile("config_test/tmp.conf", "test", false, 10) + err := CreateConfFile("config_test/tmp.conf", "test", false, 10, "test") if err != nil { t.Fatal(err) } diff --git a/main.go b/main.go index e365d48..ee3f591 100644 --- a/main.go +++ b/main.go @@ -72,7 +72,8 @@ func initDir(args *argContainer) { toggledlog.Info.Printf("Using password provided via -extpass.") } password := readPasswordTwice(args.extpass) - err = configfile.CreateConfFile(args.config, password, args.plaintextnames, args.scryptn) + creator := toggledlog.ProgramName + " " + GitVersion + err = configfile.CreateConfFile(args.config, password, args.plaintextnames, args.scryptn, creator) if err != nil { fmt.Println(err) os.Exit(ERREXIT_INIT)