Implement secure key via KDF for transparent data encryption/decryption #60
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
* \#54 Remove 'default' as initial bucket name for Sia
|
* \#54 Remove 'default' as initial bucket name for Sia
|
||||||
* \#58 Create macOS bundle for simplified installation
|
* \#58 Create macOS bundle for simplified installation
|
||||||
* \#59 [bug] [ui] UI is hanging after launching repertory mount in background
|
* \#59 [bug] [ui] UI is hanging after launching repertory mount in background
|
||||||
|
* \#60 Implement secure key via KDF for transparent data encryption/decryption
|
||||||
* \#61 [ui] UI theme should match repertory blue
|
* \#61 [ui] UI theme should match repertory blue
|
||||||
|
|
||||||
## v2.0.7-release
|
## v2.0.7-release
|
||||||
|
@@ -84,6 +84,50 @@ void kdf_config::seal() {
|
|||||||
checksum = generate_checksum();
|
checksum = generate_checksum();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto decrypt_file_name(std::string_view encryption_token,
|
||||||
|
std::string &file_name) -> bool {
|
||||||
|
data_buffer buffer;
|
||||||
|
if (not utils::collection::from_hex_string(file_name, buffer)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
file_name.clear();
|
||||||
|
return utils::encryption::decrypt_data(encryption_token, buffer, file_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto decrypt_file_name(std::string_view encryption_token, const kdf_config &cfg,
|
||||||
|
std::string &file_name) -> bool {
|
||||||
|
data_buffer buffer;
|
||||||
|
if (not utils::collection::from_hex_string(file_name, buffer)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
file_name.clear();
|
||||||
|
return utils::encryption::decrypt_data(encryption_token, cfg, buffer,
|
||||||
|
file_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto decrypt_file_name(const utils::hash::hash_256_t &master_key,
|
||||||
|
std::string &file_name) -> bool {
|
||||||
|
data_buffer buffer;
|
||||||
|
if (not utils::collection::from_hex_string(file_name, buffer)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
utils::encryption::kdf_config path_cfg;
|
||||||
|
if (not utils::encryption::kdf_config::from_header(buffer, path_cfg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto path_key = path_cfg.recreate_subkey(utils::encryption::kdf_context::path,
|
||||||
|
master_key);
|
||||||
|
|
||||||
|
file_name.clear();
|
||||||
|
return utils::encryption::decrypt_data(
|
||||||
|
path_key, &buffer[utils::encryption::kdf_config::size()],
|
||||||
|
buffer.size() - utils::encryption::kdf_config::size(), file_name);
|
||||||
|
}
|
||||||
|
|
||||||
auto decrypt_file_path(std::string_view encryption_token,
|
auto decrypt_file_path(std::string_view encryption_token,
|
||||||
std::string &file_path) -> bool {
|
std::string &file_path) -> bool {
|
||||||
std::vector<std::string> decrypted_parts;
|
std::vector<std::string> decrypted_parts;
|
||||||
@@ -147,49 +191,6 @@ auto decrypt_file_path(const utils::hash::hash_256_t &master_key,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto decrypt_file_name(std::string_view encryption_token,
|
|
||||||
std::string &file_name) -> bool {
|
|
||||||
data_buffer buffer;
|
|
||||||
if (not utils::collection::from_hex_string(file_name, buffer)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
file_name.clear();
|
|
||||||
return utils::encryption::decrypt_data(encryption_token, buffer, file_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto decrypt_file_name(std::string_view encryption_token, const kdf_config &cfg,
|
|
||||||
std::string &file_name) -> bool {
|
|
||||||
data_buffer buffer;
|
|
||||||
if (not utils::collection::from_hex_string(file_name, buffer)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
file_name.clear();
|
|
||||||
return utils::encryption::decrypt_data(encryption_token, cfg, buffer,
|
|
||||||
file_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto decrypt_file_name(const utils::hash::hash_256_t &master_key,
|
|
||||||
std::string &file_name) -> bool {
|
|
||||||
data_buffer buffer;
|
|
||||||
if (not utils::collection::from_hex_string(file_name, buffer)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
utils::encryption::kdf_config path_cfg;
|
|
||||||
if (not utils::encryption::kdf_config::from_header(buffer, path_cfg)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto path_key = path_cfg.recreate_subkey(utils::encryption::kdf_context::path,
|
|
||||||
master_key);
|
|
||||||
|
|
||||||
file_name.clear();
|
|
||||||
return utils::encryption::decrypt_data(
|
|
||||||
path_key, &buffer[utils::encryption::kdf_config::size()], file_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename data_t>
|
template <typename data_t>
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto
|
||||||
read_encrypted_range(http_range range, const utils::hash::hash_256_t &key,
|
read_encrypted_range(http_range range, const utils::hash::hash_256_t &key,
|
||||||
|
Reference in New Issue
Block a user