Delegate RSA keys to keymaster0 in SoftKeymasterDevice.

Bug: 20912868
Change-Id: I515a125f1247357d2cd9b4633c3b223590848093
diff --git a/soft_keymaster_device.cpp b/soft_keymaster_device.cpp
index 3e92061..78dce57 100644
--- a/soft_keymaster_device.cpp
+++ b/soft_keymaster_device.cpp
@@ -58,19 +58,14 @@
 
 namespace keymaster {
 
-SoftKeymasterDevice::SoftKeymasterDevice()
-    : impl_(new AndroidKeymaster(new SoftKeymasterContext, 16)) {
-#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
+SoftKeymasterDevice::SoftKeymasterDevice(keymaster0_device_t* keymaster0_device)
+    : impl_(new AndroidKeymaster(new SoftKeymasterContext(keymaster0_device), 16)) {
     static_assert(std::is_standard_layout<SoftKeymasterDevice>::value,
                   "SoftKeymasterDevice must be standard layout");
     static_assert(offsetof(SoftKeymasterDevice, device_) == 0,
-                  "device_ must be the first member of KeymasterOpenSsl");
+                  "device_ must be the first member of SoftKeymasterDevice");
     static_assert(offsetof(SoftKeymasterDevice, device_.common) == 0,
                   "common must be the first member of keymaster_device");
-#else
-    assert(reinterpret_cast<keymaster_device*>(this) == &device_);
-    assert(reinterpret_cast<hw_device_t*>(this) == &(device_.common));
-#endif
     LOG_I("Creating device", 0);
     LOG_D("Device address: %p", this);
 
@@ -84,16 +79,16 @@
     device_.flags =
         KEYMASTER_SOFTWARE_ONLY | KEYMASTER_BLOBS_ARE_STANDALONE | KEYMASTER_SUPPORTS_EC;
 
-    // V0.3 APIs
+    // keymaster0 APIs
     device_.generate_keypair = generate_keypair;
     device_.import_keypair = import_keypair;
     device_.get_keypair_public = get_keypair_public;
-    device_.delete_keypair = NULL;
-    device_.delete_all = NULL;
+    device_.delete_keypair = delete_keypair;
+    device_.delete_all = delete_all;
     device_.sign_data = sign_data;
     device_.verify_data = verify_data;
 
-    // V0.4 APIs
+    // keymaster1 APIs
     device_.get_supported_algorithms = get_supported_algorithms;
     device_.get_supported_block_modes = get_supported_block_modes;
     device_.get_supported_padding_modes = get_supported_padding_modes;
@@ -105,8 +100,8 @@
     device_.get_key_characteristics = get_key_characteristics;
     device_.import_key = import_key;
     device_.export_key = export_key;
-    device_.delete_key = NULL;
-    device_.delete_all_keys = NULL;
+    device_.delete_key = delete_key;
+    device_.delete_all_keys = delete_all_keys;
     device_.begin = begin;
     device_.update = update;
     device_.finish = finish;
@@ -328,6 +323,18 @@
 }
 
 /* static */
+int SoftKeymasterDevice::delete_keypair(const struct keymaster1_device* /* dev */,
+                                        const uint8_t* /* key_blob */,
+                                        const size_t /* key_blob_length */) {
+    return KM_ERROR_UNIMPLEMENTED;
+}
+
+/* static */
+int SoftKeymasterDevice::delete_all(const struct keymaster1_device* /* dev */) {
+    return KM_ERROR_UNIMPLEMENTED;
+}
+
+/* static */
 int SoftKeymasterDevice::sign_data(const keymaster1_device_t* dev, const void* params,
                                    const uint8_t* key_blob, const size_t key_blob_length,
                                    const uint8_t* data, const size_t data_length,
@@ -740,6 +747,17 @@
 }
 
 /* static */
+keymaster_error_t SoftKeymasterDevice::delete_key(const struct keymaster1_device* /* dev */,
+                                                  const keymaster_key_blob_t* /* key */) {
+    return KM_ERROR_UNIMPLEMENTED;
+}
+
+/* static */
+keymaster_error_t SoftKeymasterDevice::delete_all_keys(const struct keymaster1_device* /* dev */) {
+    return KM_ERROR_UNIMPLEMENTED;
+}
+
+/* static */
 keymaster_error_t SoftKeymasterDevice::begin(
     const keymaster1_device_t* dev, keymaster_purpose_t purpose, const keymaster_key_blob_t* key,
     const keymaster_key_param_t* params, size_t params_count, keymaster_key_param_t** out_params,