Fix pass-through of deletion on wrapped KM0 and KM1.
SoftKeymasterDevice was incorrectly directly sending deletion requests
to wrapped hardware. In some cases the key blob passed in by
SoftKeymasterDevice is a hardware blob encapsulated by a wrapper, and we
need to remove the encapsulation before passing it on.
Bug: 25676862
Change-Id: Ic315c6b08d9ec15aa0be8f28f485a221bc7f1135
diff --git a/keymaster0_engine.cpp b/keymaster0_engine.cpp
index d752ae2..bcd64e5 100644
--- a/keymaster0_engine.cpp
+++ b/keymaster0_engine.cpp
@@ -147,6 +147,19 @@
return true;
}
+bool Keymaster0Engine::DeleteKey(const KeymasterKeyBlob& blob) const {
+ if (!keymaster0_device_->delete_keypair)
+ return true;
+ return (keymaster0_device_->delete_keypair(keymaster0_device_, blob.key_material,
+ blob.key_material_size) == 0);
+}
+
+bool Keymaster0Engine::DeleteAllKeys() const {
+ if (!keymaster0_device_->delete_all)
+ return true;
+ return (keymaster0_device_->delete_all(keymaster0_device_) == 0);
+}
+
static keymaster_key_blob_t* duplicate_blob(const uint8_t* key_data, size_t key_data_size) {
unique_ptr<uint8_t[]> key_material_copy(dup_buffer(key_data, key_data_size));
if (!key_material_copy)