Implement secure key via KDF for transparent data encryption/decryption #60
This commit is contained in:
@@ -133,10 +133,20 @@ struct kdf_config final {
|
||||
[[nodiscard]] auto create_subkey(kdf_context ctx, std::size_t unique_id_,
|
||||
const hash_t &master_key) const
|
||||
-> std::pair<hash_t, kdf_config> {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
hash_t sub_key;
|
||||
crypto_kdf_derive_from_key(sub_key.data(), sub_key.size(), unique_id_,
|
||||
get_kdf_context_name(ctx).data(),
|
||||
master_key.data());
|
||||
auto res = crypto_kdf_derive_from_key(
|
||||
sub_key.data(), sub_key.size(), unique_id_,
|
||||
get_kdf_context_name(ctx).data(), master_key.data());
|
||||
if (res != 0) {
|
||||
throw repertory::utils::error::create_exception(
|
||||
function_name, {
|
||||
"failed to create sub-key",
|
||||
std::to_string(res),
|
||||
});
|
||||
}
|
||||
|
||||
auto cfg = *this;
|
||||
cfg.unique_id = unique_id_;
|
||||
cfg.checksum = cfg.generate_checksum();
|
||||
@@ -146,10 +156,20 @@ struct kdf_config final {
|
||||
template <typename hash_t>
|
||||
[[nodiscard]] auto recreate_subkey(kdf_context ctx,
|
||||
const hash_t &master_key) const -> hash_t {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
hash_t sub_key;
|
||||
crypto_kdf_derive_from_key(sub_key.data(), sub_key.size(), unique_id,
|
||||
get_kdf_context_name(ctx).data(),
|
||||
master_key.data());
|
||||
auto res = crypto_kdf_derive_from_key(
|
||||
sub_key.data(), sub_key.size(), unique_id,
|
||||
get_kdf_context_name(ctx).data(), master_key.data());
|
||||
if (res != 0) {
|
||||
throw repertory::utils::error::create_exception(
|
||||
function_name, {
|
||||
"failed to recreate sub-key",
|
||||
std::to_string(res),
|
||||
});
|
||||
}
|
||||
|
||||
return sub_key;
|
||||
}
|
||||
|
||||
|
@@ -41,13 +41,13 @@ namespace repertory::utils::file {
|
||||
[[nodiscard]] auto create_temp_name(std::string_view file_part) -> std::string;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
create_temp_name(std::wstring_view file_part) -> std::wstring;
|
||||
[[nodiscard]] auto create_temp_name(std::wstring_view file_part)
|
||||
-> std::wstring;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] inline auto
|
||||
directory_exists_in_path(std::string_view path,
|
||||
std::string_view sub_directory) -> bool;
|
||||
directory_exists_in_path(std::string_view path, std::string_view sub_directory)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] inline auto
|
||||
@@ -55,45 +55,46 @@ directory_exists_in_path(std::wstring_view path,
|
||||
std::wstring_view sub_directory) -> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] inline auto
|
||||
file_exists_in_path(std::string_view path, std::string_view file_name) -> bool;
|
||||
[[nodiscard]] inline auto file_exists_in_path(std::string_view path,
|
||||
std::string_view file_name)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] inline auto
|
||||
file_exists_in_path(std::wstring_view path,
|
||||
std::wstring_view file_name) -> bool;
|
||||
[[nodiscard]] inline auto file_exists_in_path(std::wstring_view path,
|
||||
std::wstring_view file_name)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
get_free_drive_space(std::string_view path) -> std::optional<std::uint64_t>;
|
||||
[[nodiscard]] auto get_free_drive_space(std::string_view path)
|
||||
-> std::optional<std::uint64_t>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
get_free_drive_space(std::wstring_view path) -> std::optional<std::uint64_t>;
|
||||
[[nodiscard]] auto get_free_drive_space(std::wstring_view path)
|
||||
-> std::optional<std::uint64_t>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto get_time(std::string_view path,
|
||||
time_type type) -> std::optional<std::uint64_t>;
|
||||
[[nodiscard]] auto get_time(std::string_view path, time_type type)
|
||||
-> std::optional<std::uint64_t>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto get_time(std::wstring_view path,
|
||||
time_type type) -> std::optional<std::uint64_t>;
|
||||
[[nodiscard]] auto get_time(std::wstring_view path, time_type type)
|
||||
-> std::optional<std::uint64_t>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
get_times(std::string_view path) -> std::optional<file_times>;
|
||||
[[nodiscard]] auto get_times(std::string_view path)
|
||||
-> std::optional<file_times>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
get_times(std::wstring_view path) -> std::optional<file_times>;
|
||||
[[nodiscard]] auto get_times(std::wstring_view path)
|
||||
-> std::optional<file_times>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
get_total_drive_space(std::string_view path) -> std::optional<std::uint64_t>;
|
||||
[[nodiscard]] auto get_total_drive_space(std::string_view path)
|
||||
-> std::optional<std::uint64_t>;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
get_total_drive_space(std::wstring_view path) -> std::optional<std::uint64_t>;
|
||||
[[nodiscard]] auto get_total_drive_space(std::wstring_view path)
|
||||
-> std::optional<std::uint64_t>;
|
||||
|
||||
#if defined(PROJECT_ENABLE_LIBDSM)
|
||||
[[nodiscard]] auto
|
||||
@@ -101,20 +102,20 @@ smb_create_and_validate_relative_path(std::string_view smb_path,
|
||||
std::string_view rel_path) -> std::string;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
smb_create_relative_path(std::string_view smb_path) -> std::string;
|
||||
[[nodiscard]] auto smb_create_relative_path(std::string_view smb_path)
|
||||
-> std::string;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
smb_create_search_path(std::string_view smb_path) -> std::string;
|
||||
[[nodiscard]] auto smb_create_search_path(std::string_view smb_path)
|
||||
-> std::string;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto
|
||||
smb_create_smb_path(std::string_view smb_path,
|
||||
std::string_view rel_path) -> std::string;
|
||||
[[nodiscard]] auto smb_create_smb_path(std::string_view smb_path,
|
||||
std::string_view rel_path)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto
|
||||
smb_get_parent_path(std::string_view smb_path) -> std::string;
|
||||
[[nodiscard]] auto smb_get_parent_path(std::string_view smb_path)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto smb_get_root_path(std::string_view smb_path) -> std::string;
|
||||
|
||||
@@ -143,27 +144,30 @@ read_json_file(std::string_view path, nlohmann::json &data,
|
||||
std::optional<std::string_view> password = std::nullopt) -> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto read_json_file(
|
||||
std::wstring_view path, nlohmann::json &data,
|
||||
std::optional<std::wstring_view> password = std::nullopt) -> bool;
|
||||
[[nodiscard]] auto
|
||||
read_json_file(std::wstring_view path, nlohmann::json &data,
|
||||
std::optional<std::wstring_view> password = std::nullopt)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto write_json_file(
|
||||
std::string_view path, const nlohmann::json &data,
|
||||
std::optional<std::string_view> password = std::nullopt) -> bool;
|
||||
[[nodiscard]] auto
|
||||
write_json_file(std::string_view path, const nlohmann::json &data,
|
||||
std::optional<std::string_view> password = std::nullopt)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto write_json_file(
|
||||
std::wstring_view path, const nlohmann::json &data,
|
||||
std::optional<std::wstring_view> password = std::nullopt) -> bool;
|
||||
[[nodiscard]] auto
|
||||
write_json_file(std::wstring_view path, const nlohmann::json &data,
|
||||
std::optional<std::wstring_view> password = std::nullopt)
|
||||
-> bool;
|
||||
#else // !defined(PROJECT_ENABLE_LIBSODIUM) && defined(PROJECT_ENABLE_BOOST)
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto read_json_file(std::string_view path,
|
||||
nlohmann::json &data) -> bool;
|
||||
[[nodiscard]] auto read_json_file(std::string_view path, nlohmann::json &data)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto read_json_file(std::wstring_view path,
|
||||
nlohmann::json &data) -> bool;
|
||||
[[nodiscard]] auto read_json_file(std::wstring_view path, nlohmann::json &data)
|
||||
-> bool;
|
||||
|
||||
// INFO: has test
|
||||
[[nodiscard]] auto write_json_file(std::string_view path,
|
||||
|
Reference in New Issue
Block a user