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