Merge "Handling `UNIMPLEMENTED` error code from deleteKey API in Keystore VTS Tests." into main
diff --git a/keystore2/test_utils/lib.rs b/keystore2/test_utils/lib.rs
index 825657f..8e74f92 100644
--- a/keystore2/test_utils/lib.rs
+++ b/keystore2/test_utils/lib.rs
@@ -21,7 +21,7 @@
 
 use android_system_keystore2::aidl::android::system::keystore2::{
     IKeystoreService::IKeystoreService,
-    IKeystoreSecurityLevel::IKeystoreSecurityLevel,
+    IKeystoreSecurityLevel::IKeystoreSecurityLevel, KeyDescriptor::KeyDescriptor,
 };
 use android_hardware_security_keymint::aidl::android::hardware::security::keymint::{
     ErrorCode::ErrorCode, IKeyMintDevice::IKeyMintDevice, SecurityLevel::SecurityLevel,
@@ -193,4 +193,18 @@
             0
         }
     }
+
+    /// Delete a key.
+    pub fn delete_key(&self, key: &KeyDescriptor) -> binder::Result<()> {
+        match self.binder.deleteKey(key) {
+            Ok(()) => Ok(()),
+            Err(s)
+                if s.exception_code() == binder::ExceptionCode::SERVICE_SPECIFIC
+                    && s.service_specific_error() == ErrorCode::UNIMPLEMENTED.0 =>
+            {
+                Ok(())
+            }
+            Err(e) => Err(e),
+        }
+    }
 }
diff --git a/keystore2/tests/keystore2_client_delete_key_tests.rs b/keystore2/tests/keystore2_client_delete_key_tests.rs
index a0fb9c2..13f8eef 100644
--- a/keystore2/tests/keystore2_client_delete_key_tests.rs
+++ b/keystore2/tests/keystore2_client_delete_key_tests.rs
@@ -100,7 +100,7 @@
     )
     .unwrap();
 
-    let result = sl.binder.deleteKey(&key_metadata.key);
+    let result = sl.delete_key(&key_metadata.key);
     assert!(result.is_ok());
 }
 
@@ -110,7 +110,7 @@
 fn keystore2_delete_key_fails_with_missing_key_blob() {
     let sl = SecLevel::tee();
 
-    let result = key_generations::map_ks_error(sl.binder.deleteKey(&KeyDescriptor {
+    let result = key_generations::map_ks_error(sl.delete_key(&KeyDescriptor {
         domain: Domain::BLOB,
         nspace: key_generations::SELINUX_SHELL_NAMESPACE,
         alias: None,
@@ -132,7 +132,7 @@
         key_generations::generate_ec_p256_signing_key(&sl, Domain::APP, -1, Some(alias), None)
             .unwrap();
 
-    let result = key_generations::map_ks_error(sl.binder.deleteKey(&key_metadata.key));
+    let result = key_generations::map_ks_error(sl.delete_key(&key_metadata.key));
     assert!(result.is_err());
     assert_eq!(Error::Km(ErrorCode::INVALID_ARGUMENT), result.unwrap_err());
 }
diff --git a/keystore2/tests/keystore2_client_ec_key_tests.rs b/keystore2/tests/keystore2_client_ec_key_tests.rs
index 526a339..17a88e7 100644
--- a/keystore2/tests/keystore2_client_ec_key_tests.rs
+++ b/keystore2/tests/keystore2_client_ec_key_tests.rs
@@ -211,7 +211,7 @@
     assert_eq!(Error::Rc(ResponseCode::INVALID_ARGUMENT), result.unwrap_err());
 
     // Delete the generated key blob.
-    sl.binder.deleteKey(&key_metadata.key).unwrap();
+    sl.delete_key(&key_metadata.key).unwrap();
 }
 
 /// Try to generate a key with invalid Domain. `INVALID_ARGUMENT` error response is expected.
@@ -514,5 +514,5 @@
     );
 
     // Delete the generated key blob.
-    sl.binder.deleteKey(&key_metadata.key).unwrap();
+    sl.delete_key(&key_metadata.key).unwrap();
 }