3 #include "crypto/keymanager.h"
7 std::string Manifest::filepath()
const {
return (*
this)[
"signed"][
"installed_image"][
"filepath"].asString(); }
9 Hash Manifest::installedImageHash()
const {
11 return Hash(Hash::Type::kSha256, (*
this)[
"signed"][
"installed_image"][
"fileinfo"][
"hashes"][
"sha256"].asString());
14 std::string Manifest::signature()
const {
16 return (*
this)[
"signatures"][0][
"sig"].asString();
19 std::string Manifest::signedBody()
const {
21 return Utils::jsonToCanonicalStr((*
this)[
"signed"]);
24 bool Manifest::verifySignature(
const PublicKey &pub_key)
const {
25 if (!(isMember(
"signatures") && isMember(
"signed"))) {
26 LOG_ERROR <<
"Missing either signature or the signing body/subject: " << *
this;
33 Manifest ManifestIssuer::sign(
const Manifest &manifest,
const std::string &report_counter)
const {
34 Manifest manifest_to_sign = manifest;
35 if (!report_counter.empty()) {
36 manifest_to_sign[
"report_counter"] = report_counter;
38 return key_mngr_->signTuf(manifest_to_sign);
41 Manifest ManifestIssuer::assembleManifest(
const InstalledImageInfo &installed_image_info,
43 Json::Value installed_image;
44 installed_image[
"filepath"] = installed_image_info.name;
45 installed_image[
"fileinfo"][
"length"] = Json::UInt64(installed_image_info.len);
46 installed_image[
"fileinfo"][
"hashes"][
"sha256"] = installed_image_info.hash;
48 Json::Value unsigned_ecu_version;
49 unsigned_ecu_version[
"attacks_detected"] =
"";
50 unsigned_ecu_version[
"installed_image"] = installed_image;
51 unsigned_ecu_version[
"ecu_serial"] = ecu_serial.ToString();
52 unsigned_ecu_version[
"previous_timeserver_time"] =
"1970-01-01T00:00:00Z";
53 unsigned_ecu_version[
"timeserver_time"] =
"1970-01-01T00:00:00Z";
54 return unsigned_ecu_version;
57 Hash ManifestIssuer::generateVersionHash(
const std::string &
data) {
return Hash::generate(Hash::Type::kSha256,
data); }
59 std::string ManifestIssuer::generateVersionHashStr(
const std::string &
data) {
61 return boost::algorithm::to_lower_copy(generateVersionHash(
data).HashString());
64 Manifest ManifestIssuer::assembleManifest(
const InstalledImageInfo &installed_image_info)
const {
65 return assembleManifest(installed_image_info, ecu_serial_);
68 Manifest ManifestIssuer::assembleManifest(
const Uptane::Target &target)
const {
69 return assembleManifest(target.getTargetImageInfo());
72 Manifest ManifestIssuer::assembleAndSignManifest(
const InstalledImageInfo &installed_image_info)
const {
73 return key_mngr_->signTuf(assembleManifest(installed_image_info));