updated build system
This commit is contained in:
@@ -28,11 +28,24 @@
|
||||
#include "utils/hash.hpp"
|
||||
#include "utils/path.hpp"
|
||||
|
||||
namespace {
|
||||
constexpr auto resize_by(repertory::data_span &data, std::size_t /* size */)
|
||||
-> repertory::data_span & {
|
||||
return data;
|
||||
}
|
||||
|
||||
auto resize_by(repertory::data_buffer &data, std::size_t size)
|
||||
-> repertory::data_buffer & {
|
||||
data.resize(data.size() + size);
|
||||
return data;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace repertory::utils::encryption {
|
||||
auto kdf_config::to_header() const -> data_buffer {
|
||||
kdf_config tmp{*this};
|
||||
tmp.checksum = boost::endian::native_to_big(tmp.checksum);
|
||||
tmp.magic = boost::endian::native_to_big(tmp.magic);
|
||||
tmp.unique_id = boost::endian::native_to_big(tmp.unique_id);
|
||||
|
||||
data_buffer ret(size());
|
||||
std::memcpy(ret.data(), &tmp, ret.size());
|
||||
@@ -49,24 +62,15 @@ auto kdf_config::generate_checksum() const -> std::uint64_t {
|
||||
return *reinterpret_cast<std::uint64_t *>(hash.data());
|
||||
}
|
||||
|
||||
void kdf_config::generate_salt() {
|
||||
randombytes_buf(salt.data(), salt.size());
|
||||
checksum = generate_checksum();
|
||||
}
|
||||
|
||||
auto kdf_config::from_header(std::span<const unsigned char> data,
|
||||
kdf_config &cfg) -> bool {
|
||||
auto kdf_config::from_header(data_cspan data, kdf_config &cfg) -> bool {
|
||||
if (data.size() < kdf_config::size()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::memcpy(&cfg, data.data(), kdf_config::size());
|
||||
cfg.magic = boost::endian::big_to_native(cfg.magic);
|
||||
if (cfg.magic != repertory_magic) {
|
||||
return false;
|
||||
}
|
||||
|
||||
cfg.checksum = boost::endian::big_to_native(cfg.checksum);
|
||||
cfg.unique_id = boost::endian::big_to_native(cfg.unique_id);
|
||||
return cfg.version == kdf_version::v1 && cfg.kdf == kdf_type::argon2id &&
|
||||
cfg.memlimit >= memlimit_level::level1 &&
|
||||
cfg.memlimit <= memlimit_level::level4 &&
|
||||
@@ -75,6 +79,11 @@ auto kdf_config::from_header(std::span<const unsigned char> data,
|
||||
cfg.checksum == cfg.generate_checksum();
|
||||
}
|
||||
|
||||
void kdf_config::seal() {
|
||||
randombytes_buf(salt.data(), salt.size());
|
||||
checksum = generate_checksum();
|
||||
}
|
||||
|
||||
auto decrypt_file_path(std::string_view encryption_token,
|
||||
std::string &file_path) -> bool {
|
||||
std::vector<std::string> decrypted_parts;
|
||||
@@ -140,16 +149,6 @@ auto decrypt_file_name(std::string_view encryption_token, const kdf_config &cfg,
|
||||
file_name);
|
||||
}
|
||||
|
||||
constexpr auto resize_by(std::span<unsigned char> &data, std::size_t size)
|
||||
-> std::span<unsigned char> & {
|
||||
return data;
|
||||
}
|
||||
|
||||
static auto resize_by(data_buffer &data, std::size_t size) -> data_buffer & {
|
||||
data.resize(data.size() + size);
|
||||
return data;
|
||||
}
|
||||
|
||||
template <typename data_t>
|
||||
[[nodiscard]] auto
|
||||
read_encrypted_range(http_range range, const utils::hash::hash_256_t &key,
|
||||
@@ -215,12 +214,12 @@ read_encrypted_range(http_range range, const utils::hash::hash_256_t &key,
|
||||
|
||||
auto data_size = static_cast<std::size_t>(std::min(
|
||||
remain, static_cast<std::uint64_t>(data_chunk_size - source_offset)));
|
||||
resize_by(data, data_size);
|
||||
std::copy(std::next(source_buffer.begin(),
|
||||
static_cast<std::int64_t>(source_offset)),
|
||||
std::next(source_buffer.begin(),
|
||||
static_cast<std::int64_t>(source_offset + data_size)),
|
||||
std::next(data.begin(), static_cast<std::int64_t>(bytes_read)));
|
||||
std::next(resize_by(data, data_size).begin(),
|
||||
static_cast<std::int64_t>(bytes_read)));
|
||||
remain -= data_size;
|
||||
bytes_read += data_size;
|
||||
source_offset = 0U;
|
||||
@@ -243,8 +242,8 @@ auto read_encrypted_range(const http_range &range,
|
||||
const http_range &range, const utils::hash::hash_256_t &key, bool uses_kdf,
|
||||
reader_func_t reader_func, std::uint64_t total_size, unsigned char *data,
|
||||
std::size_t size, std::size_t &bytes_read) -> bool {
|
||||
std::span dest_buffer(data, size);
|
||||
return read_encrypted_range<std::span<unsigned char>>(
|
||||
data_span dest_buffer(data, size);
|
||||
return read_encrypted_range<data_span>(
|
||||
range, key, reader_func, total_size, dest_buffer,
|
||||
uses_kdf ? kdf_config::size() : 0U, bytes_read);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user