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;
53 std::array<uint8_t, 256> arr{};
55 is.read(reinterpret_cast<char*>(arr.data()), arr.size());
57 handle.wfeed(arr.data(),
static_cast<size_t>(is.gcount()));
69 explicit ReadError(
const std::string& what) : std::runtime_error(what) {}
72 virtual size_t rsize()
const = 0;
73 virtual size_t rread(uint8_t* buf,
size_t size) = 0;
74 virtual void rclose() = 0;
77 std::array<uint8_t, 256> arr{};
79 while (written < handle.rsize()) {
80 size_t nread = handle.rread(arr.data(), arr.size());
82 os.write(reinterpret_cast<char*>(arr.data()), static_cast<std::streamsize>(nread));
96 virtual StorageType type() = 0;
97 virtual void storePrimaryKeys(
const std::string& public_key,
const std::string& private_key) = 0;
98 virtual bool loadPrimaryKeys(std::string* public_key, std::string* private_key) = 0;
99 virtual bool loadPrimaryPublic(std::string* public_key) = 0;
100 virtual bool loadPrimaryPrivate(std::string* private_key) = 0;
101 virtual void clearPrimaryKeys() = 0;
103 virtual void storeTlsCreds(
const std::string& ca,
const std::string& cert,
const std::string& pkey) = 0;
104 virtual void storeTlsCa(
const std::string& ca) = 0;
105 virtual void storeTlsCert(
const std::string& cert) = 0;
106 virtual void storeTlsPkey(
const std::string& pkey) = 0;
107 virtual bool loadTlsCreds(std::string* ca, std::string* cert, std::string* pkey) = 0;
108 virtual bool loadTlsCa(std::string* ca) = 0;
109 virtual bool loadTlsCert(std::string* cert) = 0;
110 virtual bool loadTlsPkey(std::string* cert) = 0;
111 virtual void clearTlsCreds() = 0;
121 virtual void clearMetadata() = 0;
123 virtual void storeDeviceId(
const std::string& device_id) = 0;
124 virtual bool loadDeviceId(std::string* device_id) = 0;
125 virtual void clearDeviceId() = 0;
127 virtual void storeEcuSerials(
const EcuSerials& serials) = 0;
128 virtual bool loadEcuSerials(EcuSerials* serials) = 0;
129 virtual void clearEcuSerials() = 0;
131 virtual void storeMisconfiguredEcus(
const std::vector<MisconfiguredEcu>& ecus) = 0;
132 virtual bool loadMisconfiguredEcus(std::vector<MisconfiguredEcu>* ecus) = 0;
133 virtual void clearMisconfiguredEcus() = 0;
135 virtual void storeEcuRegistered() = 0;
136 virtual bool loadEcuRegistered() = 0;
137 virtual void clearEcuRegistered() = 0;
139 virtual void storeInstalledVersions(
const std::vector<Uptane::Target>& installed_versions,
140 const std::string& current_hash) = 0;
141 virtual std::string loadInstalledVersions(std::vector<Uptane::Target>* installed_versions) = 0;
142 virtual void clearInstalledVersions() = 0;
146 virtual void clearInstallationResult() = 0;
149 virtual std::unique_ptr<StorageTargetWHandle> allocateTargetFile(
bool from_director,
const std::string& filename,
151 virtual std::unique_ptr<StorageTargetRHandle> openTargetFile(
const std::string& filename) = 0;
152 virtual void removeTargetFile(
const std::string& filename) = 0;
154 virtual void cleanUp() = 0;
157 static std::shared_ptr<INvStorage> newStorage(
const StorageConfig& config,
bool readonly =
false);
165 void importSimple(
const boost::filesystem::path& base_path, store_data_t store_func, load_data_t load_func,
167 void importUpdateSimple(
const boost::filesystem::path& base_path, store_data_t store_func, load_data_t load_func,
169 void importPrimaryKeys(
const boost::filesystem::path& base_path,
const BasedPath& import_pubkey_path,
176 #endif // INVSTORAGE_H_
Metadata version numbers.
RepositoryType
This must match the repo_type table in sqlstorage.