#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "extensions/browser/computed_hashes.h"
#include <memory>
#include <set>
#include <utility>
#include "base/base64.h"
#include "base/files/file_enumerator.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/timer/elapsed_timer.h"
#include "base/values.h"
#include "build/build_config.h"
#include "crypto/secure_hash.h"
#include "crypto/sha2.h"
namespace extensions {
namespace computed_hashes {
const char kBlockHashesKey[] = …;
const char kBlockSizeKey[] = …;
const char kFileHashesKey[] = …;
const char kPathKey[] = …;
const char kVersionKey[] = …;
const int kVersion = …;
}
namespace {
SortedFilePathSet;
}
ComputedHashes::Data::Data() = default;
ComputedHashes::Data::~Data() = default;
ComputedHashes::Data::Data(ComputedHashes::Data&& data) = default;
ComputedHashes::Data& ComputedHashes::Data::operator=(
ComputedHashes::Data&& data) = default;
ComputedHashes::Data::HashInfo::HashInfo(int block_size,
std::vector<std::string> hashes,
base::FilePath relative_unix_path)
: … { … }
ComputedHashes::Data::HashInfo::~HashInfo() = default;
ComputedHashes::Data::HashInfo::HashInfo(ComputedHashes::Data::HashInfo&&) =
default;
ComputedHashes::Data::HashInfo& ComputedHashes::Data::HashInfo::operator=(
ComputedHashes::Data::HashInfo&&) = default;
const ComputedHashes::Data::HashInfo* ComputedHashes::Data::GetItem(
const base::FilePath& relative_path) const { … }
void ComputedHashes::Data::Add(const base::FilePath& relative_path,
int block_size,
std::vector<std::string> hashes) { … }
void ComputedHashes::Data::Remove(const base::FilePath& relative_path) { … }
const std::map<CanonicalRelativePath, ComputedHashes::Data::HashInfo>&
ComputedHashes::Data::items() const { … }
ComputedHashes::ComputedHashes(Data&& data) : … { … }
ComputedHashes::~ComputedHashes() = default;
ComputedHashes::ComputedHashes(ComputedHashes&&) = default;
ComputedHashes& ComputedHashes::operator=(ComputedHashes&&) = default;
std::optional<ComputedHashes> ComputedHashes::CreateFromFile(
const base::FilePath& path,
Status* status) { … }
std::optional<ComputedHashes::Data> ComputedHashes::Compute(
const base::FilePath& extension_root,
int block_size,
const IsCancelledCallback& is_cancelled,
const ShouldComputeHashesCallback& should_compute_hashes_for_resource) { … }
bool ComputedHashes::GetHashes(const base::FilePath& relative_path,
int* block_size,
std::vector<std::string>* hashes) const { … }
bool ComputedHashes::WriteToFile(const base::FilePath& path) const { … }
std::vector<std::string> ComputedHashes::GetHashesForContent(
const std::string& contents,
size_t block_size) { … }
std::optional<std::vector<std::string>>
ComputedHashes::ComputeAndCheckResourceHash(const base::FilePath& full_path,
int block_size) { … }
}