From 67c56648e380881baebbc21f9659caeea016f9b8 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Wed, 1 Jul 2015 14:33:18 +0200 Subject: [PATCH] CryConfigLoader asks for cipher to use when creating a new config --- src/CryConfig.cpp | 10 ++++++++++ src/CryConfig.h | 4 ++++ src/CryConfigLoader.cpp | 15 +++++++++++++++ src/CryConfigLoader.h | 6 ++++-- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/CryConfig.cpp b/src/CryConfig.cpp index f0dd0e9b..e69d7bd4 100644 --- a/src/CryConfig.cpp +++ b/src/CryConfig.cpp @@ -24,6 +24,7 @@ void CryConfig::load() { _rootBlob = pt.get("cryfs.rootblob", ""); _encKey = pt.get("cryfs.key", ""); + _cipher = pt.get("cryfs.cipher", ""); } void CryConfig::save() const { @@ -31,6 +32,7 @@ void CryConfig::save() const { pt.put("cryfs.rootblob", _rootBlob); pt.put("cryfs.key", _encKey); + pt.put("cryfs.cipher", _cipher); write_json(_configfile.native(), pt); } @@ -51,6 +53,14 @@ void CryConfig::SetEncryptionKey(const std::string &value) { _encKey = value; } +const std::string &CryConfig::Cipher() const { + return _cipher; +}; + +void CryConfig::SetCipher(const std::string &value) { + _cipher = value; +} + CryConfig::~CryConfig() { save(); } diff --git a/src/CryConfig.h b/src/CryConfig.h index 32df8379..2329a953 100644 --- a/src/CryConfig.h +++ b/src/CryConfig.h @@ -19,6 +19,9 @@ public: const std::string &EncryptionKey() const; void SetEncryptionKey(const std::string &value); + const std::string &Cipher() const; + void SetCipher(const std::string &value); + void save() const; private: @@ -28,6 +31,7 @@ private: std::string _rootBlob; std::string _encKey; + std::string _cipher; DISALLOW_COPY_AND_ASSIGN(CryConfig); }; diff --git a/src/CryConfigLoader.cpp b/src/CryConfigLoader.cpp index be5de770..8c0bd71a 100644 --- a/src/CryConfigLoader.cpp +++ b/src/CryConfigLoader.cpp @@ -1,11 +1,14 @@ #include "CryConfigLoader.h" #include +#include "utils/Console.h" namespace bf = boost::filesystem; using cpputils::unique_ref; using cpputils::make_unique_ref; using boost::optional; using boost::none; +using std::vector; +using std::string; namespace cryfs { @@ -25,15 +28,27 @@ unique_ref CryConfigLoader::createNew(const bf::path &filename) { } void CryConfigLoader::_initializeConfig(CryConfig *config) { + _generateCipher(config); _generateEncKey(config); _generateRootBlobKey(config); } void CryConfigLoader::_initializeConfigWithWeakKey(CryConfig *config) { + _generateTestCipher(config); _generateWeakEncKey(config); _generateRootBlobKey(config); } +void CryConfigLoader::_generateCipher(CryConfig *config) { + vector ciphers = {"aes-256-gcm", "aes-256-cfb"}; + int cipherIndex = Console().ask("Which block cipher do you want to use?", ciphers); + config->SetCipher(ciphers[cipherIndex]); +} + +void CryConfigLoader::_generateTestCipher(CryConfig *config) { + config->SetCipher("aes-256-gcm"); +} + void CryConfigLoader::_generateEncKey(CryConfig *config) { printf("Generating secure encryption key..."); fflush(stdout); diff --git a/src/CryConfigLoader.h b/src/CryConfigLoader.h index f70aaa5c..90e94275 100644 --- a/src/CryConfigLoader.h +++ b/src/CryConfigLoader.h @@ -24,11 +24,13 @@ public: private: static void _initializeConfig(CryConfig *config); + static void _generateCipher(CryConfig *config); static void _generateEncKey(CryConfig *config); static void _generateRootBlobKey(CryConfig *config); - static void _initializeConfigWithWeakKey(CryConfig *config); - static void _generateWeakEncKey(CryConfig *config); + static void _initializeConfigWithWeakKey(CryConfig *config); // TODO Rename to _initializeConfigForTest + static void _generateWeakEncKey(CryConfig *config); // TODO Rename to _generateTestEncKey + static void _generateTestCipher(CryConfig *config); }; }