Allow caller to specify key CN in generate_attestation_from_EVP().
This is needed to generate attestations in the default Identity
Credential HAL implementation which uses software KM.
Test: atest VtsHalIdentityTargetTest
Bug: 171745570
Change-Id: Ic96d1d2362851edca562c5defa1e48bdd0e6e060
Merged-In: I93b6cb939972c214dc67250dd62aa4fdd76273d6
diff --git a/include/keymaster/km_openssl/attestation_utils.h b/include/keymaster/km_openssl/attestation_utils.h
index e30d90f..3c3ed3b 100644
--- a/include/keymaster/km_openssl/attestation_utils.h
+++ b/include/keymaster/km_openssl/attestation_utils.h
@@ -62,6 +62,7 @@
const uint keymaster_version, // input
const keymaster_cert_chain_t& attestation_chain, // input
const keymaster_key_blob_t& attestation_signing_key, // input
+ const char* key_subject_common_name, // input
CertChainPtr* cert_chain_out); // Output.
} // namespace keymaster
diff --git a/km_openssl/attestation_utils.cpp b/km_openssl/attestation_utils.cpp
index 6b60fe8..e1be08b 100644
--- a/km_openssl/attestation_utils.cpp
+++ b/km_openssl/attestation_utils.cpp
@@ -311,6 +311,7 @@
const AttestationRecordContext& context, // input
const keymaster_cert_chain_t& attestation_chain, // input
const keymaster_key_blob_t& attestation_signing_key, // input
+ const char* key_subject_common_name, // input
CertChainPtr* cert_chain_out) { // Output.
if (!cert_chain_out) {
@@ -335,7 +336,7 @@
!X509_NAME_add_entry_by_txt(subjectName.get(), //
"CN", //
MBSTRING_ASC,
- reinterpret_cast<const uint8_t*>("Android Keystore Key"),
+ reinterpret_cast<const uint8_t*>(key_subject_common_name),
-1, // len
-1, // loc
0 /* set */) ||
@@ -469,10 +470,11 @@
uint64_t usageExpireDateTime = UINT64_MAX;
key.authorizations().GetTagValue(TAG_USAGE_EXPIRE_DATETIME, &usageExpireDateTime);
- return generate_attestation_common(pkey.get(), key.sw_enforced(), key.hw_enforced(),
- attest_params, activeDateTime, usageExpireDateTime,
- kCurrentKeymasterVersion, context, attestation_chain,
- attestation_signing_key, cert_chain_out);
+ const char* key_subject_common_name = "Android Keystore Key";
+ return generate_attestation_common(
+ pkey.get(), key.sw_enforced(), key.hw_enforced(), attest_params, activeDateTime,
+ usageExpireDateTime, kCurrentKeymasterVersion, context, attestation_chain,
+ attestation_signing_key, key_subject_common_name, cert_chain_out);
}
// Generate attestation certificate base on the EVP key and other parameters
@@ -491,6 +493,7 @@
const uint keymaster_version, // input
const keymaster_cert_chain_t& attestation_chain, // input
const keymaster_key_blob_t& attestation_signing_key, // input
+ const char* key_subject_common_name, // input
CertChainPtr* cert_chain_out) { // Output.
uint64_t activeDateTime = 0;
@@ -499,9 +502,10 @@
uint64_t usageExpireDateTime = UINT64_MAX;
attest_params.GetTagValue(TAG_USAGE_EXPIRE_DATETIME, &usageExpireDateTime);
- return generate_attestation_common(
- evp_key, sw_enforced, hw_enforced, attest_params, activeDateTime, usageExpireDateTime,
- keymaster_version, context, attestation_chain, attestation_signing_key, cert_chain_out);
+ return generate_attestation_common(evp_key, sw_enforced, hw_enforced, attest_params,
+ activeDateTime, usageExpireDateTime, keymaster_version,
+ context, attestation_chain, attestation_signing_key,
+ key_subject_common_name, cert_chain_out);
}
} // namespace keymaster