Refactor export to use new key infrastructure, and work with all key types.

Change-Id: Ie1f621f9db855665d57cde93c24881415de33ca2
diff --git a/google_keymaster.cpp b/google_keymaster.cpp
index e04a1e5..bd2adb1 100644
--- a/google_keymaster.cpp
+++ b/google_keymaster.cpp
@@ -293,47 +293,18 @@
         return;
 
     keymaster_error_t blob_error;
-    UniquePtr<KeyBlob> to_export(
-        LoadKeyBlob(request.key_blob, request.additional_params, &response->error));
+    UniquePtr<Key> to_export(
+        LoadKey(request.key_blob, request.additional_params, &response->error));
     if (to_export.get() == NULL)
         return;
 
-    Unique_EVP_PKEY pkey(EVP_PKEY_new());
-    if (pkey.get() == NULL) {
-        response->error = KM_ERROR_MEMORY_ALLOCATION_FAILED;
-        return;
+    UniquePtr<uint8_t[]> out_key;
+    size_t size;
+    response->error = to_export->formatted_key_material(request.key_format, &out_key, &size);
+    if (response->error == KM_ERROR_OK) {
+        response->key_data = out_key.release();
+        response->key_data_length = size;
     }
-
-    EVP_PKEY* pkey_tmp = pkey.get();
-    const uint8_t* km_tmp = to_export->key_material();
-    if (d2i_PrivateKey(EVP_PKEY_RSA, &pkey_tmp, &km_tmp, to_export->key_material_length()) ==
-        NULL) {
-        response->error = KM_ERROR_INVALID_KEY_BLOB;
-        return;
-    }
-
-    int len = i2d_PUBKEY(pkey.get(), NULL);
-    if (len <= 0) {
-        response->error = KM_ERROR_UNKNOWN_ERROR;
-        return;
-    }
-
-    UniquePtr<uint8_t[]> out_key(new uint8_t[len]);
-    if (out_key.get() == NULL) {
-        response->error = KM_ERROR_MEMORY_ALLOCATION_FAILED;
-        return;
-    }
-
-    uint8_t* tmp = out_key.get();
-    if (i2d_PUBKEY(pkey.get(), &tmp) != len) {
-        fprintf(stderr, "i2d_pubkey(x, len) failed.\n");
-        response->error = KM_ERROR_INVALID_KEY_BLOB;
-
-        return;
-    }
-
-    response->key_data = out_key.release();
-    response->error = KM_ERROR_OK;
 }
 
 void GoogleKeymaster::ImportKey(const ImportKeyRequest& request, ImportKeyResponse* response) {