summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYo Chiang <yochiang@google.com>2020-10-26 05:27:36 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-10-26 05:27:36 +0000
commitadb1b891a86ba0755122cdc6a2a3f3d1d23807d6 (patch)
tree16d81d44e82f2a5d3c6db382ed8fa71586a83bff
parentbb1950da878cc077d206603ec240221c06ee1d54 (diff)
parenta69317b3c136e2b9b368c5042c5580be75266752 (diff)
downloadgsid-adb1b891a86ba0755122cdc6a2a3f3d1d23807d6.tar.gz
Merge "Add GetDsuMetadataKeyDir()"
-rw-r--r--include/libgsi/libgsi.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/libgsi/libgsi.h b/include/libgsi/libgsi.h
index ed47767..9a571f9 100644
--- a/include/libgsi/libgsi.h
+++ b/include/libgsi/libgsi.h
@@ -19,6 +19,7 @@
#include <string>
#include <android-base/file.h>
+#include <android-base/strings.h>
namespace android {
namespace gsi {
@@ -35,6 +36,8 @@ static constexpr char kDsuActiveFile[] = DSU_METADATA_PREFIX "active";
static constexpr char kDsuAvbKeyDir[] = DSU_METADATA_PREFIX "avb/";
+static constexpr char kDsuMetadataKeyDirPrefix[] = "/metadata/vold/metadata_encryption/dsu/";
+
static inline std::string DsuLpMetadataFile(const std::string& dsu_slot) {
return DSU_METADATA_PREFIX + dsu_slot + "/lp_metadata";
}
@@ -43,6 +46,24 @@ static inline std::string DsuInstallDirFile(const std::string& dsu_slot) {
return DSU_METADATA_PREFIX + dsu_slot + "/install_dir";
}
+static inline std::string DsuMetadataKeyDirFile(const std::string& dsu_slot) {
+ return DSU_METADATA_PREFIX + dsu_slot + "/metadata_encryption_dir";
+}
+
+static inline std::string DefaultDsuMetadataKeyDir(const std::string& dsu_slot) {
+ return kDsuMetadataKeyDirPrefix + dsu_slot;
+}
+
+static inline std::string GetDsuMetadataKeyDir(const std::string& dsu_slot) {
+ auto key_dir_file = DsuMetadataKeyDirFile(dsu_slot);
+ std::string key_dir;
+ if (android::base::ReadFileToString(key_dir_file, &key_dir) &&
+ android::base::StartsWith(key_dir, kDsuMetadataKeyDirPrefix)) {
+ return key_dir;
+ }
+ return DefaultDsuMetadataKeyDir(dsu_slot);
+}
+
// install_dir "/data/gsi/dsu/dsu" has a slot name "dsu"
// install_dir "/data/gsi/dsu/dsu2" has a slot name "dsu2"
std::string GetDsuSlot(const std::string& install_dir);