3 #include "crypto/keymanager.h"
7 Hash Manifest::installedImageHash()
const {
10 (*
this)[
"signed"][
"installed_image"][
"fileinfo"][
"hashes"][
"sha256"].asString());
13 std::string Manifest::signature()
const {
15 return (*
this)[
"signatures"][0][
"sig"].asString();
18 std::string Manifest::signedBody()
const {
20 return Utils::jsonToCanonicalStr((*
this)[
"signed"]);
23 bool Manifest::verifySignature(
PublicKey &&pub_key)
const {
24 if (!(isMember(
"signatures") && isMember(
"signed"))) {
25 LOG_ERROR <<
"Missing either signature or the signing body/subject: " << *
this;
29 return pub_key.VerifySignature(signature(), signedBody());
32 Manifest ManifestIssuer::sign(
const Manifest &manifest,
const std::string &report_counter)
const {
33 Manifest manifest_to_sign = manifest;
34 if (!report_counter.empty()) {
35 manifest_to_sign[
"report_counter"] = report_counter;
37 return key_mngr_->signTuf(manifest_to_sign);
40 Manifest ManifestIssuer::assembleManifest(
const InstalledImageInfo &installed_image_info,
42 Json::Value installed_image;
43 installed_image[
"filepath"] = installed_image_info.name;
44 installed_image[
"fileinfo"][
"length"] = Json::UInt64(installed_image_info.len);
45 installed_image[
"fileinfo"][
"hashes"][
"sha256"] = installed_image_info.hash;
47 Json::Value unsigned_ecu_version;
48 unsigned_ecu_version[
"attacks_detected"] =
"";
49 unsigned_ecu_version[
"installed_image"] = installed_image;
50 unsigned_ecu_version[
"ecu_serial"] = ecu_serial.ToString();
51 unsigned_ecu_version[
"previous_timeserver_time"] =
"1970-01-01T00:00:00Z";
52 unsigned_ecu_version[
"timeserver_time"] =
"1970-01-01T00:00:00Z";
53 return unsigned_ecu_version;
56 Hash ManifestIssuer::generateVersionHash(
const std::string &
data) {
return Hash::generate(Hash::Type::kSha256,
data); }
58 std::string ManifestIssuer::generateVersionHashStr(
const std::string &
data) {
60 return boost::algorithm::to_lower_copy(generateVersionHash(
data).HashString());
63 Manifest ManifestIssuer::assembleManifest(
const InstalledImageInfo &installed_image_info)
const {
64 return assembleManifest(installed_image_info, ecu_serial_);
67 Manifest ManifestIssuer::assembleManifest(
const Uptane::Target &target)
const {
68 return assembleManifest(target.getTargetImageInfo());
71 Manifest ManifestIssuer::assembleAndSignManifest(
const InstalledImageInfo &installed_image_info)
const {
72 return key_mngr_->signTuf(assembleManifest(installed_image_info));