8 #include <boost/filesystem.hpp> 10 #include "storage_config.h" 11 #include "uptane/tuf.h" 24 using store_data_t = void (
INvStorage::*)(
const std::string&);
25 using load_data_t = bool (
INvStorage::*)(std::string*);
27 typedef std::pair<std::string, bool> InstalledVersion;
29 typedef std::vector<std::pair<Uptane::EcuSerial, Uptane::HardwareIdentifier>> EcuSerials;
31 enum class EcuState { kOld = 0, kNotRegistered };
35 : serial(std::move(serial_in)), hardware_id(std::move(hardware_id_in)), state(state_in) {}
45 explicit WriteError(
const std::string& what) : std::runtime_error(what) {}
48 virtual size_t wfeed(
const uint8_t* buf,
size_t size) = 0;
49 virtual void wcommit() = 0;
50 virtual void wabort() = 0;
51 size_t getWrittenSize() {
return written_size_; }
54 std::array<uint8_t, 256> arr{};
56 is.read(reinterpret_cast<char*>(arr.data()), arr.size());
57 handle.wfeed(arr.data(),
static_cast<size_t>(is.gcount()));
63 size_t written_size_{0};
70 explicit ReadError(
const std::string& what) : std::runtime_error(what) {}
73 virtual size_t rsize()
const = 0;
74 virtual size_t rread(uint8_t* buf,
size_t size) = 0;
75 virtual void rclose() = 0;
78 std::array<uint8_t, 256> arr{};
80 while (written < handle.rsize()) {
81 size_t nread = handle.rread(arr.data(), arr.size());
83 os.write(reinterpret_cast<char*>(arr.data()), static_cast<std::streamsize>(nread));
97 virtual StorageType type() = 0;
98 virtual void storePrimaryKeys(
const std::string& public_key,
const std::string& private_key) = 0;
99 virtual bool loadPrimaryKeys(std::string* public_key, std::string* private_key) = 0;
100 virtual bool loadPrimaryPublic(std::string* public_key) = 0;
101 virtual bool loadPrimaryPrivate(std::string* private_key) = 0;
102 virtual void clearPrimaryKeys() = 0;
104 virtual void storeTlsCreds(
const std::string& ca,
const std::string& cert,
const std::string& pkey) = 0;
105 virtual void storeTlsCa(
const std::string& ca) = 0;
106 virtual void storeTlsCert(
const std::string& cert) = 0;
107 virtual void storeTlsPkey(
const std::string& pkey) = 0;
108 virtual bool loadTlsCreds(std::string* ca, std::string* cert, std::string* pkey) = 0;
109 virtual bool loadTlsCa(std::string* ca) = 0;
110 virtual bool loadTlsCert(std::string* cert) = 0;
111 virtual bool loadTlsPkey(std::string* cert) = 0;
112 virtual void clearTlsCreds() = 0;
122 virtual void clearMetadata() = 0;
124 virtual void storeDeviceId(
const std::string& device_id) = 0;
125 virtual bool loadDeviceId(std::string* device_id) = 0;
126 virtual void clearDeviceId() = 0;
128 virtual void storeEcuSerials(
const EcuSerials& serials) = 0;
129 virtual bool loadEcuSerials(EcuSerials* serials) = 0;
130 virtual void clearEcuSerials() = 0;
132 virtual void storeMisconfiguredEcus(
const std::vector<MisconfiguredEcu>& ecus) = 0;
133 virtual bool loadMisconfiguredEcus(std::vector<MisconfiguredEcu>* ecus) = 0;
134 virtual void clearMisconfiguredEcus() = 0;
136 virtual void storeEcuRegistered() = 0;
137 virtual bool loadEcuRegistered() = 0;
138 virtual void clearEcuRegistered() = 0;
140 virtual void storeInstalledVersions(
const std::vector<Uptane::Target>& installed_versions,
141 const std::string& current_hash) = 0;
142 virtual std::string loadInstalledVersions(std::vector<Uptane::Target>* installed_versions) = 0;
143 virtual void clearInstalledVersions() = 0;
147 virtual void clearInstallationResult() = 0;
150 virtual std::unique_ptr<StorageTargetWHandle> allocateTargetFile(
bool from_director,
const std::string& filename,
152 virtual std::unique_ptr<StorageTargetRHandle> openTargetFile(
const std::string& filename) = 0;
153 virtual void removeTargetFile(
const std::string& filename) = 0;
155 virtual void cleanUp() = 0;
158 static std::shared_ptr<INvStorage> newStorage(
const StorageConfig& config,
bool readonly =
false);
160 static std::string fsReadInstalledVersions(
const boost::filesystem::path& filename,
161 std::vector<Uptane::Target>* installed_versions);
168 void importSimple(
const boost::filesystem::path& base_path, store_data_t store_func, load_data_t load_func,
170 void importUpdateSimple(
const boost::filesystem::path& base_path, store_data_t store_func, load_data_t load_func,
172 void importPrimaryKeys(
const boost::filesystem::path& base_path,
const BasedPath& import_pubkey_path,
174 void importInstalledVersions(
const boost::filesystem::path& base_path);
180 #endif // INVSTORAGE_H_
Metadata version numbers.
RepositoryType
This must match the repo_type table in sqlstorage.