3 #include "crypto/keymanager.h"
7 std::string Manifest::filepath()
const {
return (*
this)[
"signed"][
"installed_image"][
"filepath"].asString(); }
9 Hash Manifest::installedImageHash()
const {
12 (*
this)[
"signed"][
"installed_image"][
"fileinfo"][
"hashes"][
"sha256"].asString());
15 std::string Manifest::signature()
const {
17 return (*
this)[
"signatures"][0][
"sig"].asString();
20 std::string Manifest::signedBody()
const {
22 return Utils::jsonToCanonicalStr((*
this)[
"signed"]);
25 bool Manifest::verifySignature(
const PublicKey &pub_key)
const {
26 if (!(isMember(
"signatures") && isMember(
"signed"))) {
27 LOG_ERROR <<
"Missing either signature or the signing body/subject: " << *
this;
34 Manifest ManifestIssuer::sign(
const Manifest &manifest,
const std::string &report_counter)
const {
35 Manifest manifest_to_sign = manifest;
36 if (!report_counter.empty()) {
37 manifest_to_sign[
"report_counter"] = report_counter;
39 return key_mngr_->signTuf(manifest_to_sign);
42 Manifest ManifestIssuer::assembleManifest(
const InstalledImageInfo &installed_image_info,
44 Json::Value installed_image;
45 installed_image[
"filepath"] = installed_image_info.name;
46 installed_image[
"fileinfo"][
"length"] = Json::UInt64(installed_image_info.len);
47 installed_image[
"fileinfo"][
"hashes"][
"sha256"] = installed_image_info.hash;
49 Json::Value unsigned_ecu_version;
50 unsigned_ecu_version[
"attacks_detected"] =
"";
51 unsigned_ecu_version[
"installed_image"] = installed_image;
52 unsigned_ecu_version[
"ecu_serial"] = ecu_serial.ToString();
53 unsigned_ecu_version[
"previous_timeserver_time"] =
"1970-01-01T00:00:00Z";
54 unsigned_ecu_version[
"timeserver_time"] =
"1970-01-01T00:00:00Z";
55 return unsigned_ecu_version;
58 Hash ManifestIssuer::generateVersionHash(
const std::string &
data) {
return Hash::generate(Hash::Type::kSha256,
data); }
60 std::string ManifestIssuer::generateVersionHashStr(
const std::string &
data) {
62 return boost::algorithm::to_lower_copy(generateVersionHash(
data).HashString());
65 Manifest ManifestIssuer::assembleManifest(
const InstalledImageInfo &installed_image_info)
const {
66 return assembleManifest(installed_image_info, ecu_serial_);
69 Manifest ManifestIssuer::assembleManifest(
const Uptane::Target &target)
const {
70 return assembleManifest(target.getTargetImageInfo());
73 Manifest ManifestIssuer::assembleAndSignManifest(
const InstalledImageInfo &installed_image_info)
const {
74 return key_mngr_->signTuf(assembleManifest(installed_image_info));