Commit 07b0cda3 authored by Chad Brubaker's avatar Chad Brubaker
Browse files

Implement keymaster 1.0 export_key method

Change-Id: I2a87cb61c340a099cc98d1a2db9e7390fb001b5d
parent 4c353cb9
......@@ -2639,10 +2639,35 @@ public:
return mKeyStore->put(filename.string(), &keyBlob, uid);
}
void exportKey(const String16& /*name*/, keymaster_key_format_t /*format*/,
const keymaster_blob_t& /*clientId*/,
const keymaster_blob_t& /*appData*/, ExportResult* result) {
result->resultCode = KM_ERROR_UNIMPLEMENTED;
void exportKey(const String16& name, keymaster_key_format_t format,
const keymaster_blob_t& clientId,
const keymaster_blob_t& appData, ExportResult* result) {
uid_t callingUid = IPCThreadState::self()->getCallingUid();
Blob keyBlob;
String8 name8(name);
int rc;
ResponseCode responseCode = mKeyStore->getKeyForName(&keyBlob, name8, callingUid,
TYPE_KEYMASTER_10);
if (responseCode != ::NO_ERROR) {
result->resultCode = responseCode;
return;
}
keymaster_key_blob_t key;
key.key_material_size = keyBlob.getLength();
key.key_material = keyBlob.getValue();
keymaster1_device_t* dev = mKeyStore->getDeviceForBlob(keyBlob);
if (!dev->export_key) {
result->resultCode = KM_ERROR_UNIMPLEMENTED;
return;
}
uint8_t* ptr = NULL;
rc = dev->export_key(dev, format, &key, &clientId, &appData,
&ptr, &result->dataLength);
result->exportData.reset(ptr);
result->resultCode = rc ? rc : ::NO_ERROR;
}
void begin(const sp<IBinder>& /*appToken*/, const String16& /*name*/,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment