mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-21 02:01:23 +02:00
* refactor(crypto): deprecate custom sha256 in favor of OpenSSL libcrypto - Remove standalone src/foundation/sha256.cc, include/mocktail/sha256.h, and tests/sha256_test.cc - Remove mocktail_crypto_foundation library and sha256_test targets from CMake - Export clean FileDigest and HashText helpers via include/update/payload_integrity.h - Deduplicate byte-to-hex formatting across host ABI loader and updater modules - Support direct generation hash sizing to avoid repetitive string slicing - Validate all EVP return codes across streaming downloads and asset tree hashing * fix(compat): abort candidate canary registration when profile hashing fails - Return Failure before profile validation and registration if ComputeSha256Hex fails - Propagate canary attestation hashing failures in ValidateCanaryAttestation - Add SetHostAbiProfileHashingFaultForTesting hook and regression test in host_abi_profile_test --------- Co-authored-by: glook9001 <310372091+glook9001@users.noreply.github.com>
62 lines
2.0 KiB
C++
62 lines
2.0 KiB
C++
#ifndef MOCKTAIL_COMPAT_HOST_ABI_PROFILE_LOADER_H_
|
|
#define MOCKTAIL_COMPAT_HOST_ABI_PROFILE_LOADER_H_
|
|
|
|
#include <string>
|
|
|
|
#include "compat/host_abi_profile.h"
|
|
|
|
namespace mocktail::compat {
|
|
|
|
struct FileSha256Result {
|
|
std::string sha256;
|
|
std::string error;
|
|
|
|
explicit operator bool() const noexcept { return error.empty(); }
|
|
};
|
|
|
|
// Approval receipts bind the profile, manifest, and payload to this digest.
|
|
// Runtime identity uses its Build ID because installation may rewrite RPATH.
|
|
FileSha256Result ComputeFileSha256(const std::string& path);
|
|
|
|
struct ExternalHostAbiProfileRequest {
|
|
std::string profile_file;
|
|
std::string payload_path;
|
|
std::string compatibility_manifest_path;
|
|
std::string expected_build_id;
|
|
std::string approval_receipt_path;
|
|
bool candidate_canary = false;
|
|
bool candidate_process_authorization = false;
|
|
bool explicit_unverified_authorization = false;
|
|
};
|
|
|
|
struct ExternalHostAbiProfileResult {
|
|
const HostAbiProfile* profile = nullptr;
|
|
std::string payload_sha256;
|
|
std::string profile_sha256;
|
|
std::string error;
|
|
|
|
explicit operator bool() const noexcept { return error.empty(); }
|
|
};
|
|
|
|
// Candidates require canary authorization; normal launches require an
|
|
// approval receipt. Built-in profiles always win.
|
|
ExternalHostAbiProfileResult LoadExternalHostAbiProfile(
|
|
const ExternalHostAbiProfileRequest& request);
|
|
|
|
// An unset profile is a no-op. Candidates require both canary flags and the
|
|
// research CLI marker; approved profiles require a receipt and no canary flag.
|
|
ExternalHostAbiProfileResult InitializeHostAbiProfileFromEnvironment(
|
|
const std::string& payload_path,
|
|
const std::string& compatibility_manifest_path,
|
|
const std::string& expected_build_id,
|
|
bool explicit_unverified_authorization);
|
|
|
|
const HostAbiProfile* FindLoadedExternalHostAbiProfile(
|
|
std::string_view build_id) noexcept;
|
|
|
|
void SetHostAbiProfileHashingFaultForTesting(bool enabled) noexcept;
|
|
|
|
} // namespace mocktail::compat
|
|
|
|
#endif // MOCKTAIL_COMPAT_HOST_ABI_PROFILE_LOADER_H_
|