Merge "Fix KM3.0 deleteKey behavior inconsistent with VTS test." into oc-dev
diff --git a/keymaster/3.0/default/KeymasterDevice.cpp b/keymaster/3.0/default/KeymasterDevice.cpp
index 9c7c860..219f419 100644
--- a/keymaster/3.0/default/KeymasterDevice.cpp
+++ b/keymaster/3.0/default/KeymasterDevice.cpp
@@ -603,7 +603,13 @@
return ErrorCode::UNIMPLEMENTED;
}
auto kmKeyBlob = hidlVec2KmKeyBlob(keyBlob);
- return legacy_enum_conversion(keymaster_device_->delete_key(keymaster_device_, &kmKeyBlob));
+ auto rc = legacy_enum_conversion(
+ keymaster_device_->delete_key(keymaster_device_, &kmKeyBlob));
+ // Keymaster 3.0 requires deleteKey to return ErrorCode::OK if the key
+ // blob is unusable after the call. This is equally true if the key blob was
+ // unusable before.
+ if (rc == ErrorCode::INVALID_KEY_BLOB) return ErrorCode::OK;
+ return rc;
}
Return<ErrorCode> KeymasterDevice::deleteAllKeys() {