updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
This commit is contained in:
@@ -140,14 +140,51 @@ 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>
|
||||
auto read_encrypted_range(const http_range &range,
|
||||
const utils::hash::hash_256_t &key,
|
||||
reader_func_t reader_func, std::uint64_t total_size,
|
||||
data_t &data, std::uint8_t file_header_size,
|
||||
std::size_t &bytes_read) -> bool {
|
||||
[[nodiscard]] auto
|
||||
read_encrypted_range(http_range range, const utils::hash::hash_256_t &key,
|
||||
reader_func_t reader_func, std::uint64_t total_size,
|
||||
data_t &data, std::uint8_t file_header_size,
|
||||
std::size_t &bytes_read) -> bool {
|
||||
bytes_read = 0U;
|
||||
|
||||
{
|
||||
if (total_size == 0U) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::uint64_t begin = range.begin;
|
||||
std::uint64_t end = range.end;
|
||||
|
||||
if (begin >= total_size) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::uint64_t last = total_size - 1U;
|
||||
if (end > last) {
|
||||
end = last;
|
||||
}
|
||||
|
||||
if (end < begin) {
|
||||
return true;
|
||||
}
|
||||
|
||||
range = http_range{
|
||||
.begin = begin,
|
||||
.end = end,
|
||||
};
|
||||
}
|
||||
|
||||
auto encrypted_chunk_size =
|
||||
utils::encryption::encrypting_reader::get_encrypted_chunk_size();
|
||||
auto data_chunk_size =
|
||||
@@ -159,25 +196,26 @@ auto read_encrypted_range(const http_range &range,
|
||||
auto source_offset = static_cast<std::size_t>(range.begin % data_chunk_size);
|
||||
|
||||
for (std::size_t chunk = start_chunk; chunk <= end_chunk; chunk++) {
|
||||
data_buffer cypher;
|
||||
data_buffer cipher;
|
||||
auto start_offset = (chunk * encrypted_chunk_size) + file_header_size;
|
||||
auto end_offset = std::min(
|
||||
start_offset + (total_size - (chunk * data_chunk_size)) +
|
||||
encryption_header_size - 1U,
|
||||
static_cast<std::uint64_t>(start_offset + encrypted_chunk_size - 1U));
|
||||
|
||||
if (not reader_func(cypher, start_offset, end_offset)) {
|
||||
if (not reader_func(cipher, start_offset, end_offset)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
data_buffer source_buffer;
|
||||
if (not utils::encryption::decrypt_data(key, cypher, source_buffer)) {
|
||||
if (not utils::encryption::decrypt_data(key, cipher, source_buffer)) {
|
||||
return false;
|
||||
}
|
||||
cypher.clear();
|
||||
cipher.clear();
|
||||
|
||||
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(),
|
||||
|
Reference in New Issue
Block a user