Multi-threaded keystore
This patches changes the keystore to use the asychronous api model for
begin, update, finish, and abort.
Also removes unused class KeystoreArguments (aidl and implementation).
Test: Keystore CTS tests
Bug: 111443219
Change-Id: Icc6def9ff6dbe32193272d7d015079a006ebc430
diff --git a/keystore/legacy_keymaster_device_wrapper.cpp b/keystore/legacy_keymaster_device_wrapper.cpp
index 1f1aa96..4073b42 100644
--- a/keystore/legacy_keymaster_device_wrapper.cpp
+++ b/keystore/legacy_keymaster_device_wrapper.cpp
@@ -132,14 +132,18 @@
}
inline static hidl_vec<uint8_t> kmBlob2hidlVec(const keymaster_key_blob_t& blob) {
- hidl_vec<uint8_t> result;
- result.setToExternal(const_cast<unsigned char*>(blob.key_material), blob.key_material_size);
- return result;
+ if (blob.key_material == nullptr || blob.key_material_size == 0) {
+ return {};
+ } else {
+ return hidl_vec<uint8_t>(blob.key_material, blob.key_material + blob.key_material_size);
+ }
}
inline static hidl_vec<uint8_t> kmBlob2hidlVec(const keymaster_blob_t& blob) {
- hidl_vec<uint8_t> result;
- result.setToExternal(const_cast<unsigned char*>(blob.data), blob.data_length);
- return result;
+ if (blob.data == nullptr || blob.data_length == 0) {
+ return {};
+ } else {
+ return hidl_vec<uint8_t>(blob.data, blob.data + blob.data_length);
+ }
}
inline static hidl_vec<hidl_vec<uint8_t>>
@@ -186,8 +190,7 @@
break;
case KM_BIGNUM:
case KM_BYTES:
- result[i].blob.setToExternal(const_cast<unsigned char*>(params[i].blob.data),
- params[i].blob.data_length);
+ result[i].blob = kmBlob2hidlVec(params[i].blob);
break;
case KM_INVALID:
default: