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 */