Separate keymaster0 and keymaster1 HALs.
For the moment soft_keymaster_device still supports the keymaster0
APIs. This will change soon.
Change-Id: I5c54282c12d1c4b8b22ed4929b6e6c724a94ede4
diff --git a/soft_keymaster_device.cpp b/soft_keymaster_device.cpp
index b24f540..0f4eda4 100644
--- a/soft_keymaster_device.cpp
+++ b/soft_keymaster_device.cpp
@@ -27,7 +27,7 @@
#include <type_traits>
-#include <hardware/keymaster.h>
+#include <hardware/keymaster1.h>
#define LOG_TAG "SoftKeymasterDevice"
#include <cutils/log.h>
@@ -45,7 +45,7 @@
.common =
{
.tag = HARDWARE_MODULE_TAG,
- .module_api_version = KEYMASTER_MODULE_API_VERSION_0_4,
+ .module_api_version = KEYMASTER_MODULE_API_VERSION_1_0,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = KEYSTORE_HARDWARE_MODULE_ID,
.name = "Keymaster OpenSSL HAL",
@@ -144,8 +144,8 @@
request->additional_params.push_back(TAG_APPLICATION_DATA, *app_data);
}
-static inline SoftKeymasterDevice* convert_device(const keymaster_device* dev) {
- return reinterpret_cast<SoftKeymasterDevice*>(const_cast<keymaster_device*>(dev));
+static inline SoftKeymasterDevice* convert_device(const keymaster1_device_t* dev) {
+ return reinterpret_cast<SoftKeymasterDevice*>(const_cast<keymaster1_device_t*>(dev));
}
/* static */
@@ -155,7 +155,7 @@
}
/* static */
-int SoftKeymasterDevice::generate_keypair(const keymaster_device_t* dev,
+int SoftKeymasterDevice::generate_keypair(const keymaster1_device_t* dev,
const keymaster_keypair_t key_type,
const void* key_params, uint8_t** key_blob,
size_t* key_blob_length) {
@@ -215,7 +215,7 @@
}
/* static */
-int SoftKeymasterDevice::import_keypair(const keymaster_device_t* dev, const uint8_t* key,
+int SoftKeymasterDevice::import_keypair(const keymaster1_device_t* dev, const uint8_t* key,
const size_t key_length, uint8_t** key_blob,
size_t* key_blob_length) {
convert_device(dev)->impl_->logger().debug("Device received import_keypair");
@@ -247,7 +247,7 @@
}
/* static */
-int SoftKeymasterDevice::get_keypair_public(const struct keymaster_device* dev,
+int SoftKeymasterDevice::get_keypair_public(const struct keymaster1_device* dev,
const uint8_t* key_blob, const size_t key_blob_length,
uint8_t** x509_data, size_t* x509_data_length) {
convert_device(dev)->impl_->logger().debug("Device received get_keypair_public");
@@ -276,7 +276,7 @@
}
/* static */
-int SoftKeymasterDevice::sign_data(const keymaster_device_t* dev, const void* params,
+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,
uint8_t** signed_data, size_t* signed_data_length) {
@@ -331,7 +331,7 @@
}
/* static */
-int SoftKeymasterDevice::verify_data(const keymaster_device_t* dev, const void* params,
+int SoftKeymasterDevice::verify_data(const keymaster1_device_t* dev, const void* params,
const uint8_t* key_blob, const size_t key_blob_length,
const uint8_t* signed_data, const size_t signed_data_length,
const uint8_t* signature, const size_t signature_length) {
@@ -380,7 +380,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::get_supported_algorithms(const struct keymaster_device* dev,
+keymaster_error_t SoftKeymasterDevice::get_supported_algorithms(const keymaster1_device_t* dev,
keymaster_algorithm_t** algorithms,
size_t* algorithms_length) {
if (!algorithms || !algorithms_length)
@@ -405,7 +405,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::get_supported_block_modes(const struct keymaster_device* dev,
+keymaster_error_t SoftKeymasterDevice::get_supported_block_modes(const keymaster1_device_t* dev,
keymaster_algorithm_t algorithm,
keymaster_purpose_t purpose,
keymaster_block_mode_t** modes,
@@ -432,9 +432,11 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::get_supported_padding_modes(
- const struct keymaster_device* dev, keymaster_algorithm_t algorithm,
- keymaster_purpose_t purpose, keymaster_padding_t** modes, size_t* modes_length) {
+keymaster_error_t SoftKeymasterDevice::get_supported_padding_modes(const keymaster1_device_t* dev,
+ keymaster_algorithm_t algorithm,
+ keymaster_purpose_t purpose,
+ keymaster_padding_t** modes,
+ size_t* modes_length) {
if (!modes || !modes_length)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
@@ -456,7 +458,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::get_supported_digests(const struct keymaster_device* dev,
+keymaster_error_t SoftKeymasterDevice::get_supported_digests(const keymaster1_device_t* dev,
keymaster_algorithm_t algorithm,
keymaster_purpose_t purpose,
keymaster_digest_t** digests,
@@ -483,7 +485,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::get_supported_import_formats(
- const struct keymaster_device* dev, keymaster_algorithm_t algorithm,
+ const keymaster1_device_t* dev, keymaster_algorithm_t algorithm,
keymaster_key_format_t** formats, size_t* formats_length) {
if (!formats || !formats_length)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
@@ -508,7 +510,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::get_supported_export_formats(
- const struct keymaster_device* dev, keymaster_algorithm_t algorithm,
+ const keymaster1_device_t* dev, keymaster_algorithm_t algorithm,
keymaster_key_format_t** formats, size_t* formats_length) {
if (!formats || !formats_length)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
@@ -532,7 +534,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::add_rng_entropy(const struct keymaster_device* /* dev */,
+keymaster_error_t SoftKeymasterDevice::add_rng_entropy(const keymaster1_device_t* /* dev */,
const uint8_t* /* data */,
size_t /* data_length */) {
return KM_ERROR_UNIMPLEMENTED;
@@ -540,7 +542,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::generate_key(
- const struct keymaster_device* dev, const keymaster_key_param_t* params, size_t params_count,
+ const keymaster1_device_t* dev, const keymaster_key_param_t* params, size_t params_count,
keymaster_key_blob_t* key_blob, keymaster_key_characteristics_t** characteristics) {
if (!key_blob)
@@ -572,7 +574,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::get_key_characteristics(
- const struct keymaster_device* dev, const keymaster_key_blob_t* key_blob,
+ const keymaster1_device_t* dev, const keymaster_key_blob_t* key_blob,
const keymaster_blob_t* client_id, const keymaster_blob_t* app_data,
keymaster_key_characteristics_t** characteristics) {
if (!key_blob)
@@ -598,7 +600,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::rescope(
- const struct keymaster_device* /* dev */, const keymaster_key_param_t* /* new_params */,
+ const keymaster1_device_t* /* dev */, const keymaster_key_param_t* /* new_params */,
size_t /* new_params_count */, const keymaster_key_blob_t* /* key_blob */,
const keymaster_blob_t* /* client_id */, const keymaster_blob_t* /* app_data */,
keymaster_key_blob_t* /* rescoped_key_blob */,
@@ -608,7 +610,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::import_key(
- const struct keymaster_device* dev, const keymaster_key_param_t* params, size_t params_count,
+ const keymaster1_device_t* dev, const keymaster_key_param_t* params, size_t params_count,
keymaster_key_format_t key_format, const uint8_t* key_data, size_t key_data_length,
keymaster_key_blob_t* key_blob, keymaster_key_characteristics_t** characteristics) {
if (!params || !key_data)
@@ -646,7 +648,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::export_key(
- const struct keymaster_device* dev, keymaster_key_format_t export_format,
+ const keymaster1_device_t* dev, keymaster_key_format_t export_format,
const keymaster_key_blob_t* key_to_export, const keymaster_blob_t* client_id,
const keymaster_blob_t* app_data, uint8_t** export_data, size_t* export_data_length) {
if (!key_to_export || !key_to_export->key_material)
@@ -677,12 +679,10 @@
}
/* static */
-keymaster_error_t
-SoftKeymasterDevice::begin(const struct keymaster_device* 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,
- size_t* out_params_count,
- keymaster_operation_handle_t* operation_handle) {
+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,
+ size_t* out_params_count, keymaster_operation_handle_t* operation_handle) {
if (!key || !key->key_material)
return KM_ERROR_INVALID_KEY_BLOB;
@@ -707,7 +707,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::update(const struct keymaster_device* dev,
+keymaster_error_t SoftKeymasterDevice::update(const keymaster1_device_t* dev,
keymaster_operation_handle_t operation_handle,
const keymaster_key_param_t* params,
size_t params_count, const uint8_t* input,
@@ -739,7 +739,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::finish(const struct keymaster_device* dev,
+keymaster_error_t SoftKeymasterDevice::finish(const keymaster1_device_t* dev,
keymaster_operation_handle_t operation_handle,
const keymaster_key_param_t* params,
size_t params_count, const uint8_t* signature,
@@ -768,7 +768,7 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::abort(const struct keymaster_device* dev,
+keymaster_error_t SoftKeymasterDevice::abort(const keymaster1_device_t* dev,
keymaster_operation_handle_t operation_handle) {
return convert_device(dev)->impl_->AbortOperation(operation_handle);
}
@@ -790,7 +790,7 @@
return KM_ERROR_UNSUPPORTED_DIGEST;
if (rsa_params->padding_type != PADDING_NONE)
return KM_ERROR_UNSUPPORTED_PADDING_MODE;
- if (!auth_set->push_back(TAG_DIGEST, DIGEST_NONE) ||
+ if (!auth_set->push_back(TAG_DIGEST, KM_DIGEST_NONE) ||
!auth_set->push_back(TAG_PADDING, KM_PAD_NONE))
return KM_ERROR_MEMORY_ALLOCATION_FAILED;
} break;
@@ -799,7 +799,7 @@
reinterpret_cast<const keymaster_dsa_sign_params_t*>(signing_params);
if (dsa_params->digest_type != DIGEST_NONE)
return KM_ERROR_UNSUPPORTED_DIGEST;
- if (!auth_set->push_back(TAG_DIGEST, DIGEST_NONE))
+ if (!auth_set->push_back(TAG_DIGEST, KM_DIGEST_NONE))
return KM_ERROR_MEMORY_ALLOCATION_FAILED;
} break;
case KM_ALGORITHM_ECDSA: {
@@ -807,7 +807,7 @@
reinterpret_cast<const keymaster_ec_sign_params_t*>(signing_params);
if (ecdsa_params->digest_type != DIGEST_NONE)
return KM_ERROR_UNSUPPORTED_DIGEST;
- if (!auth_set->push_back(TAG_DIGEST, DIGEST_NONE))
+ if (!auth_set->push_back(TAG_DIGEST, KM_DIGEST_NONE))
return KM_ERROR_MEMORY_ALLOCATION_FAILED;
} break;
default:
@@ -825,7 +825,7 @@
uint64_t now = java_time(time(NULL));
auth_set->push_back(TAG_CREATION_DATETIME, now);
auth_set->push_back(TAG_ORIGINATION_EXPIRE_DATETIME, now + HUNDRED_YEARS);
- auth_set->push_back(TAG_DIGEST, DIGEST_NONE);
+ auth_set->push_back(TAG_DIGEST, KM_DIGEST_NONE);
auth_set->push_back(TAG_PADDING, KM_PAD_NONE);
}