Implement delete_key and delete_all_keys in SoftKeymasterDevice.
Bug: 22294523
Change-Id: Ifab60b904e37c7ecca0b8138817af3d3b48199c0
diff --git a/soft_keymaster_device.cpp b/soft_keymaster_device.cpp
index dba91ee..69499e5 100644
--- a/soft_keymaster_device.cpp
+++ b/soft_keymaster_device.cpp
@@ -59,7 +59,8 @@
namespace keymaster {
SoftKeymasterDevice::SoftKeymasterDevice(keymaster0_device_t* keymaster0_device)
- : impl_(new AndroidKeymaster(new SoftKeymasterContext(keymaster0_device), 16)) {
+ : wrapped_device_(keymaster0_device),
+ impl_(new AndroidKeymaster(new SoftKeymasterContext(keymaster0_device), 16)) {
initialize(keymaster0_device);
}
@@ -790,14 +791,30 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::delete_key(const struct keymaster1_device* /* dev */,
- const keymaster_key_blob_t* /* key */) {
- return KM_ERROR_UNIMPLEMENTED;
+keymaster_error_t SoftKeymasterDevice::delete_key(const struct keymaster1_device* dev,
+ const keymaster_key_blob_t* key) {
+ if (!dev || !key || !key->key_material)
+ return KM_ERROR_UNEXPECTED_NULL_POINTER;
+
+ keymaster0_device_t* wrapped = convert_device(dev)->wrapped_device_;
+
+ if (wrapped && wrapped->delete_keypair)
+ if (wrapped->delete_keypair(wrapped, key->key_material, key->key_material_size) < 0)
+ return KM_ERROR_UNKNOWN_ERROR;
+ return KM_ERROR_OK;
}
/* static */
-keymaster_error_t SoftKeymasterDevice::delete_all_keys(const struct keymaster1_device* /* dev */) {
- return KM_ERROR_UNIMPLEMENTED;
+keymaster_error_t SoftKeymasterDevice::delete_all_keys(const struct keymaster1_device* dev) {
+ if (!dev)
+ return KM_ERROR_UNEXPECTED_NULL_POINTER;
+
+ keymaster0_device_t* wrapped = convert_device(dev)->wrapped_device_;
+
+ if (wrapped && wrapped->delete_all)
+ if (wrapped->delete_all(wrapped) < 0)
+ return KM_ERROR_UNKNOWN_ERROR;
+ return KM_ERROR_OK;
}
/* static */