summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Moore <sethmo@google.com>2022-01-25 22:44:24 +0000
committerSeth Moore <sethmo@google.com>2022-01-25 22:44:24 +0000
commitbe32113307d67f54e594e5322f85b65e4e2c4fdb (patch)
treea9b8786c217a28e6c47f127ae518109cc98c3a41
parentb5b69f0e009388fccb000a9a8aac5a38dbbd2726 (diff)
Revert "Add remote key provisioning to the IC HAL"
Revert "Add dependency on keymint cpp lib" Revert "Allow default identity service to call keymint" Revert submission 1956689-add rkp to identity-default Reason for revert: Broke git-master. Will resubmit later. Reverted Changes: I96dcf3027:Add remote key provisioning to the IC HAL Id686ac33a:Add dependency on keymint cpp lib Ib368a2a00:Log to logd in the default identity service I7d2906de0:Refactor IC support for RKP Iae0f14f1c:Fix formatting of identity credential aidl I01d086a4b:Allow default identity service to call keymint Change-Id: I76a898c04090c5befe5fb5a5d07ec2e397fdd8b3
-rw-r--r--identity/aidl/Android.bp2
-rw-r--r--identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/HardwareInformation.aidl1
-rw-r--r--identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IIdentityCredentialStore.aidl1
-rw-r--r--identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IWritableIdentityCredential.aidl1
-rw-r--r--identity/aidl/android/hardware/identity/HardwareInformation.aidl15
-rw-r--r--identity/aidl/android/hardware/identity/IIdentityCredentialStore.aidl20
-rw-r--r--identity/aidl/android/hardware/identity/IWritableIdentityCredential.aidl32
-rw-r--r--identity/aidl/default/Android.bp4
-rw-r--r--identity/aidl/default/EicOpsImpl.cc57
-rw-r--r--identity/aidl/default/FakeSecureHardwareProxy.cpp23
-rw-r--r--identity/aidl/default/FakeSecureHardwareProxy.h5
-rw-r--r--identity/aidl/default/common/IdentityCredential.cpp4
-rw-r--r--identity/aidl/default/common/IdentityCredential.h5
-rw-r--r--identity/aidl/default/common/IdentityCredentialStore.cpp52
-rw-r--r--identity/aidl/default/common/IdentityCredentialStore.h15
-rw-r--r--identity/aidl/default/common/PresentationSession.cpp4
-rw-r--r--identity/aidl/default/common/PresentationSession.h8
-rw-r--r--identity/aidl/default/common/SecureHardwareProxy.h12
-rw-r--r--identity/aidl/default/common/WritableIdentityCredential.cpp53
-rw-r--r--identity/aidl/default/common/WritableIdentityCredential.h17
-rw-r--r--identity/aidl/default/libeic/EicOps.h24
-rw-r--r--identity/aidl/default/libeic/EicProvisioning.c9
-rw-r--r--identity/aidl/default/libeic/EicProvisioning.h5
-rw-r--r--identity/aidl/default/service.cpp7
-rw-r--r--identity/aidl/vts/Android.bp6
-rw-r--r--identity/aidl/vts/Util.cpp80
-rw-r--r--identity/aidl/vts/Util.h4
-rw-r--r--identity/aidl/vts/VtsIWritableIdentityCredentialTests.cpp101
-rw-r--r--security/keymint/aidl/Android.bp7
-rw-r--r--security/keymint/aidl/vts/functional/Android.bp3
30 files changed, 59 insertions, 518 deletions
diff --git a/identity/aidl/Android.bp b/identity/aidl/Android.bp
index e3b819125a..dad3b8d74c 100644
--- a/identity/aidl/Android.bp
+++ b/identity/aidl/Android.bp
@@ -15,7 +15,6 @@ aidl_interface {
],
imports: [
"android.hardware.keymaster",
- "android.hardware.security.keymint",
],
stability: "vintf",
backend: {
@@ -26,7 +25,6 @@ aidl_interface {
vndk: {
enabled: true,
},
- apps_enabled: false,
},
},
versions: [
diff --git a/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/HardwareInformation.aidl b/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/HardwareInformation.aidl
index 9b96ea8a68..cd8d56b5bd 100644
--- a/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/HardwareInformation.aidl
+++ b/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/HardwareInformation.aidl
@@ -39,5 +39,4 @@ parcelable HardwareInformation {
int dataChunkSize;
boolean isDirectAccess;
@utf8InCpp String[] supportedDocTypes;
- boolean isRemoteKeyProvisioningSupported = false;
}
diff --git a/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IIdentityCredentialStore.aidl b/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IIdentityCredentialStore.aidl
index 31ca8b10f3..c912c526ab 100644
--- a/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IIdentityCredentialStore.aidl
+++ b/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IIdentityCredentialStore.aidl
@@ -38,7 +38,6 @@ interface IIdentityCredentialStore {
android.hardware.identity.IWritableIdentityCredential createCredential(in @utf8InCpp String docType, in boolean testCredential);
android.hardware.identity.IIdentityCredential getCredential(in android.hardware.identity.CipherSuite cipherSuite, in byte[] credentialData);
android.hardware.identity.IPresentationSession createPresentationSession(in android.hardware.identity.CipherSuite cipherSuite);
- android.hardware.security.keymint.IRemotelyProvisionedComponent getRemotelyProvisionedComponent();
const int STATUS_OK = 0;
const int STATUS_FAILED = 1;
const int STATUS_CIPHER_SUITE_NOT_SUPPORTED = 2;
diff --git a/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IWritableIdentityCredential.aidl b/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IWritableIdentityCredential.aidl
index 5377349a52..9a0fa9e9e5 100644
--- a/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IWritableIdentityCredential.aidl
+++ b/identity/aidl/aidl_api/android.hardware.identity/current/android/hardware/identity/IWritableIdentityCredential.aidl
@@ -41,5 +41,4 @@ interface IWritableIdentityCredential {
byte[] addEntryValue(in byte[] content);
@SuppressWarnings(value={"out-array"}) void finishAddingEntries(out byte[] credentialData, out byte[] proofOfProvisioningSignature);
void setExpectedProofOfProvisioningSize(in int expectedProofOfProvisioningSize);
- void setRemotelyProvisionedAttestationKey(in byte[] attestationKeyBlob, in byte[] attestationCertificate);
}
diff --git a/identity/aidl/android/hardware/identity/HardwareInformation.aidl b/identity/aidl/android/hardware/identity/HardwareInformation.aidl
index acd13b6da6..d67739d94a 100644
--- a/identity/aidl/android/hardware/identity/HardwareInformation.aidl
+++ b/identity/aidl/android/hardware/identity/HardwareInformation.aidl
@@ -51,19 +51,4 @@ parcelable HardwareInformation {
*
*/
@utf8InCpp String[] supportedDocTypes;
-
- /**
- * isRemoteKeyProvisioningSupported indicates whether or not the underlying implementation
- * supports a remotely provisioned key for attestation or not. If this field is false, then
- * the implementation only uses a factory-installed, fixed attestation key. If this field is
- * true, then an IRemotelyProvisionedComponent is associated with the IIdentityCredentialStore,
- * and a remotely provisioned key blob may be provided for credential key attestation.
- *
- * Note that remote provisioning is not required, even when it is supported. Implementations
- * MUST use a factory-installed attestation key as a fallback for when there are no
- * remotely provisioned keys available. This behavior mirrors keystore key attestation.
- *
- * This field was added in API version 4.
- */
- boolean isRemoteKeyProvisioningSupported = false;
}
diff --git a/identity/aidl/android/hardware/identity/IIdentityCredentialStore.aidl b/identity/aidl/android/hardware/identity/IIdentityCredentialStore.aidl
index d3e4da04a0..959ee02b9d 100644
--- a/identity/aidl/android/hardware/identity/IIdentityCredentialStore.aidl
+++ b/identity/aidl/android/hardware/identity/IIdentityCredentialStore.aidl
@@ -21,7 +21,6 @@ import android.hardware.identity.HardwareInformation;
import android.hardware.identity.IIdentityCredential;
import android.hardware.identity.IPresentationSession;
import android.hardware.identity.IWritableIdentityCredential;
-import android.hardware.security.keymint.IRemotelyProvisionedComponent;
/**
* IIdentityCredentialStore provides an interface to a secure store for user identity documents.
@@ -264,23 +263,4 @@ interface IIdentityCredentialStore {
* @return an IPresentationSession interface.
*/
IPresentationSession createPresentationSession(in CipherSuite cipherSuite);
-
- /**
- * Fetch the IRemotelyProvisionedComponent that is used to generate attestation keys for
- * remote provisionining. Keys generated by this component are to be certified by a remote
- * provisionined authority, then used to attest to credential keys via
- * IWritableIdentityCredential.setRemotelyProvisionedAttestationKey.
- *
- * Support for this method is indicated by HardwareInformation. If the
- * |isRemoteKeyProvisioningSupported| field is false, this method will fail with
- * EX_UNSUPPORTED_OPERATION.
- *
- * This method was added in API version 4.
- *
- * @see
- * android.hardware.identity.IWritableIdentityCredential#setRemotelyProvisionedAttestationKey
- *
- * @return an IRemotelyProvisionedComponent that is used to generate attestation keys.
- */
- IRemotelyProvisionedComponent getRemotelyProvisionedComponent();
}
diff --git a/identity/aidl/android/hardware/identity/IWritableIdentityCredential.aidl b/identity/aidl/android/hardware/identity/IWritableIdentityCredential.aidl
index 756b008aa5..9dec3122c7 100644
--- a/identity/aidl/android/hardware/identity/IWritableIdentityCredential.aidl
+++ b/identity/aidl/android/hardware/identity/IWritableIdentityCredential.aidl
@@ -335,36 +335,4 @@ interface IWritableIdentityCredential {
* @param expectedProofOfProvisioningSize the expected size of ProofOfProvisioning.
*/
void setExpectedProofOfProvisioningSize(in int expectedProofOfProvisioningSize);
-
- /**
- * Sets the attestation key used to sign the credentialKey certificate. This method is used to
- * support remotely provisioned attestation keys, removing the credential's dependency on any
- * factory-provisioned attestation key.
- *
- * This method must be called before getAttestationCertificate. After this method is called,
- * the certificate chain returned by getAttestationCertificate will contain a leaf certificate
- * signed by attestationKeyBlob and the chain in attestationCertificate will make up the rest
- * of the returned chain.
- *
- * Returns EX_UNSUPPORTED_FUNCTION if remote provisioning is not supported
- * (see IIdentityCredentialStore.getHardwareInformation()).
- *
- * This method was added in API version 4.
- *
- * @param attestationKeyBlob is a key blob generated by the IRemotelyProvisionedComponent that
- * is returned by ICredentialStore.getRemotelyProvisionedComponent. The format is vendor-
- * specified, and matches the key blob returned by IKeyMintDevice.generateKey.
- *
- * @param attestationCertificate contains the X.509 certificate chain that certifies the
- * attestationKeyBlob. This certificate is expected to have been remotely provisioned
- * by a trusted authority. This parameter must contain a concatenated chain of DER-encoded
- * X.509 certificates. The certificates must be ordered such that the attestation key
- * certificate is first (starting at byte 0). The issuer certificate for the attestation
- * certificate immediately follows, continuing this chain to the final, root certificate.
- *
- * @see getAttestationCertificate
- * @see android.hardware.identity.ICredentialStore#getRemotelyProvisionedComponent
- */
- void setRemotelyProvisionedAttestationKey(
- in byte[] attestationKeyBlob, in byte[] attestationCertificate);
}
diff --git a/identity/aidl/default/Android.bp b/identity/aidl/default/Android.bp
index 32b35439ef..ca24afa6cc 100644
--- a/identity/aidl/default/Android.bp
+++ b/identity/aidl/default/Android.bp
@@ -42,7 +42,6 @@ cc_library_static {
"android.hardware.identity-support-lib",
"android.hardware.identity-V4-ndk",
"android.hardware.keymaster-V4-ndk",
- "android.hardware.security.keymint-V2-ndk",
],
}
@@ -82,9 +81,6 @@ cc_binary {
init_rc: ["identity-default.rc"],
vintf_fragments: ["identity-default.xml"],
vendor: true,
- defaults: [
- "keymint_use_latest_hal_aidl_ndk_static",
- ],
cflags: [
"-Wall",
"-Wextra",
diff --git a/identity/aidl/default/EicOpsImpl.cc b/identity/aidl/default/EicOpsImpl.cc
index 3fd9f1dcee..c98a91ebc3 100644
--- a/identity/aidl/default/EicOpsImpl.cc
+++ b/identity/aidl/default/EicOpsImpl.cc
@@ -267,42 +267,25 @@ bool eicOpsCreateEcKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
bool eicOpsCreateCredentialKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE], const uint8_t* challenge,
size_t challengeSize, const uint8_t* applicationId,
- size_t applicationIdSize, bool testCredential,
- const uint8_t* attestationKeyBlob, size_t attestationKeyBlobSize,
- const uint8_t* attestationKeyCert, size_t attestationKeyCertSize,
- uint8_t* cert, size_t* certSize) {
- vector<uint8_t> flatChain;
- vector<uint8_t> keyPair;
- vector<uint8_t> challengeVec(challenge, challenge + challengeSize);
- vector<uint8_t> applicationIdVec(applicationId, applicationId + applicationIdSize);
- if (attestationKeyBlob && attestationKeyBlobSize > 0 && attestationKeyCert &&
- attestationKeyCertSize > 0) {
- vector<uint8_t> attestationKeyBlobVec(attestationKeyBlob,
- attestationKeyBlob + attestationKeyBlobSize);
- vector<uint8_t> attestationKeyCertVec(attestationKeyCert,
- attestationKeyCert + attestationKeyCertSize);
- optional<std::pair<vector<uint8_t>, vector<uint8_t>>> keyAndCert =
- android::hardware::identity::support::createEcKeyPairWithAttestationKey(
- challengeVec, applicationIdVec, attestationKeyBlobVec,
- attestationKeyCertVec, testCredential);
- if (!keyAndCert) {
- eicDebug("Error generating CredentialKey and attestation");
- return false;
- }
- keyPair = std::move(keyAndCert->first);
- flatChain = std::move(keyAndCert->second);
- } else {
- optional<std::pair<vector<uint8_t>, vector<vector<uint8_t>>>> ret =
- android::hardware::identity::support::createEcKeyPairAndAttestation(
- challengeVec, applicationIdVec, testCredential);
- if (!ret) {
- eicDebug("Error generating CredentialKey and attestation");
- return false;
- }
- keyPair = std::move(ret->first);
- flatChain = android::hardware::identity::support::certificateChainJoin(ret->second);
+ size_t applicationIdSize, bool testCredential, uint8_t* cert,
+ size_t* certSize) {
+ vector<uint8_t> challengeVec(challengeSize);
+ memcpy(challengeVec.data(), challenge, challengeSize);
+
+ vector<uint8_t> applicationIdVec(applicationIdSize);
+ memcpy(applicationIdVec.data(), applicationId, applicationIdSize);
+
+ optional<std::pair<vector<uint8_t>, vector<vector<uint8_t>>>> ret =
+ android::hardware::identity::support::createEcKeyPairAndAttestation(
+ challengeVec, applicationIdVec, testCredential);
+ if (!ret) {
+ eicDebug("Error generating CredentialKey and attestation");
+ return false;
}
+ // Extract certificate chain.
+ vector<uint8_t> flatChain =
+ android::hardware::identity::support::certificateChainJoin(ret.value().second);
if (*certSize < flatChain.size()) {
eicDebug("Buffer for certificate is only %zd bytes long, need %zd bytes", *certSize,
flatChain.size());
@@ -313,7 +296,7 @@ bool eicOpsCreateCredentialKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE], const
// Extract private key.
optional<vector<uint8_t>> privKey =
- android::hardware::identity::support::ecKeyPairGetPrivateKey(keyPair);
+ android::hardware::identity::support::ecKeyPairGetPrivateKey(ret.value().first);
if (!privKey) {
eicDebug("Error extracting private key");
return false;
@@ -537,12 +520,10 @@ bool eicOpsHkdf(const uint8_t* sharedSecret, size_t sharedSecretSize, const uint
#ifdef EIC_DEBUG
void eicPrint(const char* format, ...) {
- char buf[1024];
va_list args;
va_start(args, format);
- vsnprintf(buf, sizeof(buf), format, args);
+ vfprintf(stderr, format, args);
va_end(args);
- LOG(INFO) << buf;
}
void eicHexdump(const char* message, const uint8_t* data, size_t dataSize) {
diff --git a/identity/aidl/default/FakeSecureHardwareProxy.cpp b/identity/aidl/default/FakeSecureHardwareProxy.cpp
index 9b9a749427..91e634c0c3 100644
--- a/identity/aidl/default/FakeSecureHardwareProxy.cpp
+++ b/identity/aidl/default/FakeSecureHardwareProxy.cpp
@@ -155,11 +155,7 @@ optional<vector<uint8_t>> FakeSecureHardwareProvisioningProxy::createCredentialK
size_t publicKeyCertSize = sizeof publicKeyCert;
if (!eicProvisioningCreateCredentialKey(&ctx_, challenge.data(), challenge.size(),
applicationId.data(), applicationId.size(),
- /*attestationKeyBlob=*/nullptr,
- /*attestationKeyBlobSize=*/0,
- /*attestationKeyCert=*/nullptr,
- /*attestationKeyCertSize=*/0, publicKeyCert,
- &publicKeyCertSize)) {
+ publicKeyCert, &publicKeyCertSize)) {
return std::nullopt;
}
vector<uint8_t> pubKeyCert(publicKeyCertSize);
@@ -167,23 +163,6 @@ optional<vector<uint8_t>> FakeSecureHardwareProvisioningProxy::createCredentialK
return pubKeyCert;
}
-optional<vector<uint8_t>> FakeSecureHardwareProvisioningProxy::createCredentialKeyUsingRkp(
- const vector<uint8_t>& challenge, const vector<uint8_t>& applicationId,
- const vector<uint8_t>& attestationKeyBlob, const vector<uint8_t>& attstationKeyCert) {
- size_t publicKeyCertSize = 4096;
- vector<uint8_t> publicKeyCert(publicKeyCertSize);
- if (!eicProvisioningCreateCredentialKey(&ctx_, challenge.data(), challenge.size(),
- applicationId.data(), applicationId.size(),
- attestationKeyBlob.data(), attestationKeyBlob.size(),
- attstationKeyCert.data(), attstationKeyCert.size(),
- publicKeyCert.data(), &publicKeyCertSize)) {
- LOG(ERROR) << "error creating credential key";
- return std::nullopt;
- }
- publicKeyCert.resize(publicKeyCertSize);
- return publicKeyCert;
-}
-
bool FakeSecureHardwareProvisioningProxy::startPersonalization(
int accessControlProfileCount, const vector<int>& entryCounts, const string& docType,
size_t expectedProofOfProvisioningSize) {
diff --git a/identity/aidl/default/FakeSecureHardwareProxy.h b/identity/aidl/default/FakeSecureHardwareProxy.h
index 2512074b5f..df98c7a121 100644
--- a/identity/aidl/default/FakeSecureHardwareProxy.h
+++ b/identity/aidl/default/FakeSecureHardwareProxy.h
@@ -43,11 +43,6 @@ class FakeSecureHardwareProvisioningProxy : public SecureHardwareProvisioningPro
optional<vector<uint8_t>> createCredentialKey(const vector<uint8_t>& challenge,
const vector<uint8_t>& applicationId) override;
- optional<vector<uint8_t>> createCredentialKeyUsingRkp(
- const vector<uint8_t>& challenge, const vector<uint8_t>& applicationId,
- const vector<uint8_t>& attestationKeyBlob,
- const vector<uint8_t>& attestationKeyCert) override;
-
bool startPersonalization(int accessControlProfileCount, const vector<int>& entryCounts,
const string& docType,
size_t expectedProofOfProvisioningSize) override;
diff --git a/identity/aidl/default/common/IdentityCredential.cpp b/identity/aidl/default/common/IdentityCredential.cpp
index ff80752ee7..7678ecb918 100644
--- a/identity/aidl/default/common/IdentityCredential.cpp
+++ b/identity/aidl/default/common/IdentityCredential.cpp
@@ -1012,8 +1012,8 @@ ndk::ScopedAStatus IdentityCredential::updateCredential(
IIdentityCredentialStore::STATUS_FAILED, "Error creating provisioning proxy"));
}
shared_ptr<WritableIdentityCredential> wc =
- ndk::SharedRefBase::make<WritableIdentityCredential>(
- provisioningHwProxy, docType_, testCredential_, hardwareInformation_);
+ ndk::SharedRefBase::make<WritableIdentityCredential>(provisioningHwProxy, docType_,
+ testCredential_);
if (!wc->initializeForUpdate(encryptedCredentialKeys_)) {
return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
IIdentityCredentialStore::STATUS_FAILED,
diff --git a/identity/aidl/default/common/IdentityCredential.h b/identity/aidl/default/common/IdentityCredential.h
index 592982991d..2935fb80a7 100644
--- a/identity/aidl/default/common/IdentityCredential.h
+++ b/identity/aidl/default/common/IdentityCredential.h
@@ -48,13 +48,11 @@ class IdentityCredential : public BnIdentityCredential {
public:
IdentityCredential(sp<SecureHardwareProxyFactory> hwProxyFactory,
const vector<uint8_t>& credentialData,
- std::shared_ptr<PresentationSession> session,
- HardwareInformation hardwareInformation)
+ std::shared_ptr<PresentationSession> session)
: hwProxyFactory_(hwProxyFactory),
credentialData_(credentialData),
session_(std::move(session)),
numStartRetrievalCalls_(0),
- hardwareInformation_(std::move(hardwareInformation)),
expectedDeviceNameSpacesSize_(0) {}
// Parses and decrypts credentialData_, return a status code from
@@ -105,7 +103,6 @@ class IdentityCredential : public BnIdentityCredential {
vector<uint8_t> credentialData_;
shared_ptr<PresentationSession> session_;
int numStartRetrievalCalls_;
- HardwareInformation hardwareInformation_;
// Set by initialize()
string docType_;
diff --git a/identity/aidl/default/common/IdentityCredentialStore.cpp b/identity/aidl/default/common/IdentityCredentialStore.cpp
index bbc2cefb8f..4703ffe646 100644
--- a/identity/aidl/default/common/IdentityCredentialStore.cpp
+++ b/identity/aidl/default/common/IdentityCredentialStore.cpp
@@ -17,7 +17,6 @@
#define LOG_TAG "IdentityCredentialStore"
#include <android-base/logging.h>
-#include <android/binder_manager.h>
#include "IdentityCredential.h"
#include "IdentityCredentialStore.h"
@@ -26,24 +25,15 @@
namespace aidl::android::hardware::identity {
-using ::aidl::android::hardware::security::keymint::IRemotelyProvisionedComponent;
-
-IdentityCredentialStore::IdentityCredentialStore(sp<SecureHardwareProxyFactory> hwProxyFactory,
- optional<string> remotelyProvisionedComponent)
- : hwProxyFactory_(hwProxyFactory),
- remotelyProvisionedComponentName_(remotelyProvisionedComponent) {
- hardwareInformation_.credentialStoreName = "Identity Credential Reference Implementation";
- hardwareInformation_.credentialStoreAuthorName = "Google";
- hardwareInformation_.dataChunkSize = kGcmChunkSize;
- hardwareInformation_.isDirectAccess = false;
- hardwareInformation_.supportedDocTypes = {};
- hardwareInformation_.isRemoteKeyProvisioningSupported =
- remotelyProvisionedComponentName_.has_value();
-}
-
ndk::ScopedAStatus IdentityCredentialStore::getHardwareInformation(
HardwareInformation* hardwareInformation) {
- *hardwareInformation = hardwareInformation_;
+ HardwareInformation hw;
+ hw.credentialStoreName = "Identity Credential Reference Implementation";
+ hw.credentialStoreAuthorName = "Google";
+ hw.dataChunkSize = kGcmChunkSize;
+ hw.isDirectAccess = false;
+ hw.supportedDocTypes = {};
+ *hardwareInformation = hw;
return ndk::ScopedAStatus::ok();
}
@@ -52,8 +42,7 @@ ndk::ScopedAStatus IdentityCredentialStore::createCredential(
shared_ptr<IWritableIdentityCredential>* outWritableCredential) {
sp<SecureHardwareProvisioningProxy> hwProxy = hwProxyFactory_->createProvisioningProxy();
shared_ptr<WritableIdentityCredential> wc =
- ndk::SharedRefBase::make<WritableIdentityCredential>(hwProxy, docType, testCredential,
- hardwareInformation_);
+ ndk::SharedRefBase::make<WritableIdentityCredential>(hwProxy, docType, testCredential);
if (!wc->initialize()) {
return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
IIdentityCredentialStore::STATUS_FAILED,
@@ -74,7 +63,7 @@ ndk::ScopedAStatus IdentityCredentialStore::getCredential(
}
shared_ptr<IdentityCredential> credential = ndk::SharedRefBase::make<IdentityCredential>(
- hwProxyFactory_, credentialData, nullptr /* session */, hardwareInformation_);
+ hwProxyFactory_, credentialData, nullptr /* session */);
auto ret = credential->initialize();
if (ret != IIdentityCredentialStore::STATUS_OK) {
return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
@@ -94,8 +83,8 @@ ndk::ScopedAStatus IdentityCredentialStore::createPresentationSession(
}
sp<SecureHardwareSessionProxy> hwProxy = hwProxyFactory_->createSessionProxy();
- shared_ptr<PresentationSession> session = ndk::SharedRefBase::make<PresentationSession>(
- hwProxyFactory_, hwProxy, hardwareInformation_);
+ shared_ptr<PresentationSession> session =
+ ndk::SharedRefBase::make<PresentationSession>(hwProxyFactory_, hwProxy);
auto ret = session->initialize();
if (ret != IIdentityCredentialStore::STATUS_OK) {
return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
@@ -105,23 +94,4 @@ ndk::ScopedAStatus IdentityCredentialStore::createPresentationSession(
return ndk::ScopedAStatus::ok();
}
-ndk::ScopedAStatus IdentityCredentialStore::getRemotelyProvisionedComponent(
- shared_ptr<IRemotelyProvisionedComponent>* outRemotelyProvisionedComponent) {
- if (!remotelyProvisionedComponentName_) {
- return ndk::ScopedAStatus(AStatus_fromExceptionCodeWithMessage(
- EX_UNSUPPORTED_OPERATION, "Remote key provisioning is not supported"));
- }
-
- ndk::SpAIBinder binder(
- AServiceManager_waitForService(remotelyProvisionedComponentName_->c_str()));
- if (binder.get() == nullptr) {
- return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
- IIdentityCredentialStore::STATUS_FAILED,
- "Unable to get remotely provisioned component"));
- }
-
- *outRemotelyProvisionedComponent = IRemotelyProvisionedComponent::fromBinder(binder);
- return ndk::ScopedAStatus::ok();
-}
-
} // namespace aidl::android::hardware::identity
diff --git a/identity/aidl/default/common/IdentityCredentialStore.h b/identity/aidl/default/common/IdentityCredentialStore.h
index dd1261b750..77b894dbd6 100644
--- a/identity/aidl/default/common/IdentityCredentialStore.h
+++ b/identity/aidl/default/common/IdentityCredentialStore.h
@@ -18,7 +18,6 @@
#define ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIALSTORE_H
#include <aidl/android/hardware/identity/BnIdentityCredentialStore.h>
-#include <aidl/android/hardware/security/keymint/IRemotelyProvisionedComponent.h>
#include "SecureHardwareProxy.h"
@@ -26,18 +25,14 @@ namespace aidl::android::hardware::identity {
using ::android::sp;
using ::android::hardware::identity::SecureHardwareProxyFactory;
-using ::std::optional;
using ::std::shared_ptr;
using ::std::string;
using ::std::vector;
class IdentityCredentialStore : public BnIdentityCredentialStore {
public:
- // If remote key provisioning is supported, pass the service name for the correct
- // IRemotelyProvisionedComponent to the remotelyProvisionedComponent parameter. Else
- // pass std::nullopt to indicate remote key provisioning is not supported.
- IdentityCredentialStore(sp<SecureHardwareProxyFactory> hwProxyFactory,
- optional<string> remotelyProvisionedComponent);
+ IdentityCredentialStore(sp<SecureHardwareProxyFactory> hwProxyFactory)
+ : hwProxyFactory_(hwProxyFactory) {}
// The GCM chunk size used by this implementation is 64 KiB.
static constexpr size_t kGcmChunkSize = 64 * 1024;
@@ -55,14 +50,8 @@ class IdentityCredentialStore : public BnIdentityCredentialStore {
ndk::ScopedAStatus createPresentationSession(
CipherSuite cipherSuite, shared_ptr<IPresentationSession>* outSession) override;
- ndk::ScopedAStatus getRemotelyProvisionedComponent(
- shared_ptr<::aidl::android::hardware::security::keymint::IRemotelyProvisionedComponent>*
- outRemotelyProvisionedComponent) override;
-
private:
sp<SecureHardwareProxyFactory> hwProxyFactory_;
- optional<string> remotelyProvisionedComponentName_;
- HardwareInformation hardwareInformation_;
};
} // namespace aidl::android::hardware::identity
diff --git a/identity/aidl/default/common/PresentationSession.cpp b/identity/aidl/default/common/PresentationSession.cpp
index 2eb7f2ea16..fbd897281a 100644
--- a/identity/aidl/default/common/PresentationSession.cpp
+++ b/identity/aidl/default/common/PresentationSession.cpp
@@ -122,8 +122,8 @@ ndk::ScopedAStatus PresentationSession::setSessionTranscript(
ndk::ScopedAStatus PresentationSession::getCredential(
const vector<uint8_t>& credentialData, shared_ptr<IIdentityCredential>* outCredential) {
shared_ptr<PresentationSession> p = ref<PresentationSession>();
- shared_ptr<IdentityCredential> credential = ndk::SharedRefBase::make<IdentityCredential>(
- hwProxyFactory_, credentialData, p, hardwareInformation_);
+ shared_ptr<IdentityCredential> credential =
+ ndk::SharedRefBase::make<IdentityCredential>(hwProxyFactory_, credentialData, p);
int ret = credential->initialize();
if (ret != IIdentityCredentialStore::STATUS_OK) {
return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
diff --git a/identity/aidl/default/common/PresentationSession.h b/identity/aidl/default/common/PresentationSession.h
index 4cb174a82c..76ca67b675 100644
--- a/identity/aidl/default/common/PresentationSession.h
+++ b/identity/aidl/default/common/PresentationSession.h
@@ -38,11 +38,8 @@ using ::std::vector;
class PresentationSession : public BnPresentationSession {
public:
PresentationSession(sp<SecureHardwareProxyFactory> hwProxyFactory,
- sp<SecureHardwareSessionProxy> hwProxy,
- HardwareInformation hardwareInformation)
- : hwProxyFactory_(std::move(hwProxyFactory)),
- hwProxy_(std::move(hwProxy)),
- hardwareInformation_(std::move(hardwareInformation)) {}
+ sp<SecureHardwareSessionProxy> hwProxy)
+ : hwProxyFactory_(std::move(hwProxyFactory)), hwProxy_(std::move(hwProxy)) {}
virtual ~PresentationSession();
@@ -68,7 +65,6 @@ class PresentationSession : public BnPresentationSession {
// Set by constructor
sp<SecureHardwareProxyFactory> hwProxyFactory_;
sp<SecureHardwareSessionProxy> hwProxy_;
- HardwareInformation hardwareInformation_;
// Set by initialize()
uint64_t id_;
diff --git a/identity/aidl/default/common/SecureHardwareProxy.h b/identity/aidl/default/common/SecureHardwareProxy.h
index 9f63ad809b..a580444230 100644
--- a/identity/aidl/default/common/SecureHardwareProxy.h
+++ b/identity/aidl/default/common/SecureHardwareProxy.h
@@ -82,18 +82,6 @@ class SecureHardwareProvisioningProxy : public RefBase {
virtual optional<vector<uint8_t>> createCredentialKey(const vector<uint8_t>& challenge,
const vector<uint8_t>& applicationId) = 0;
- // Returns public key certificate with a remotely provisioned attestation key.
- //
- // This returns a single certificate that is signed by the given |attestationKeyBlob|.
- // The implementation of eicOpsCreateCredentialKey() on the TA side must coordinate
- // with its corresponding keymint implementation to sign using the attestation key. The
- // |attestationKeyCert| parameter is the certificates for |attestationKeyBlob|,
- // formatted as concatenated, DER-encoded, X.509 certificates.
- virtual optional<vector<uint8_t>> createCredentialKeyUsingRkp(
- const vector<uint8_t>& challenge, const vector<uint8_t>& applicationId,
- const vector<uint8_t>& attestationKeyBlob,
- const vector<uint8_t>& attestationKeyCert) = 0;
-
virtual bool startPersonalization(int accessControlProfileCount, const vector<int>& entryCounts,
const string& docType,
size_t expectedProofOfProvisioningSize) = 0;
diff --git a/identity/aidl/default/common/WritableIdentityCredential.cpp b/identity/aidl/default/common/WritableIdentityCredential.cpp
index e420a7b74b..200ee61df4 100644
--- a/identity/aidl/default/common/WritableIdentityCredential.cpp
+++ b/identity/aidl/default/common/WritableIdentityCredential.cpp
@@ -79,15 +79,8 @@ ndk::ScopedAStatus WritableIdentityCredential::getAttestationCertificate(
IIdentityCredentialStore::STATUS_INVALID_DATA, "Challenge can not be empty"));
}
- optional<vector<uint8_t>> certChain;
- if (attestationKeyBlob_ && attestationCertificateChain_) {
- certChain = hwProxy_->createCredentialKeyUsingRkp(
- attestationChallenge, attestationApplicationId, *attestationKeyBlob_,
- attestationCertificateChain_->at(0));
- } else {
- certChain = hwProxy_->createCredentialKey(attestationChallenge, attestationApplicationId);
- }
-
+ optional<vector<uint8_t>> certChain =
+ hwProxy_->createCredentialKey(attestationChallenge, attestationApplicationId);
if (!certChain) {
return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
IIdentityCredentialStore::STATUS_FAILED,
@@ -102,14 +95,8 @@ ndk::ScopedAStatus WritableIdentityCredential::getAttestationCertificate(
}
*outCertificateChain = vector<Certificate>();
- for (vector<uint8_t>& cert : certs.value()) {
- Certificate c;
- c.encodedCertificate = std::move(cert);
- outCertificateChain->push_back(std::move(c));
- }
-
- for (const vector<uint8_t>& cert : *attestationCertificateChain_) {
- Certificate c;
+ for (const vector<uint8_t>& cert : certs.value()) {
+ Certificate c = Certificate();
c.encodedCertificate = cert;
outCertificateChain->push_back(std::move(c));
}
@@ -415,36 +402,4 @@ ndk::ScopedAStatus WritableIdentityCredential::finishAddingEntries(
return ndk::ScopedAStatus::ok();
}
-ndk::ScopedAStatus WritableIdentityCredential::setRemotelyProvisionedAttestationKey(
- const vector<uint8_t>& attestationKeyBlob,
- const vector<uint8_t>& attestationCertificateChain) {
- if (!hardwareInformation_.isRemoteKeyProvisioningSupported) {
- return ndk::ScopedAStatus(AStatus_fromExceptionCodeWithMessage(
- EX_UNSUPPORTED_OPERATION, "Remote key provisioning is not supported"));
- }
-
- if (attestationKeyBlob.empty() || attestationCertificateChain.empty()) {
- return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
- IIdentityCredentialStore::STATUS_FAILED,
- "Empty data passed to setRemotlyProvisionedAttestationKey"));
- }
-
- if (attestationKeyBlob_.has_value()) {
- return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
- IIdentityCredentialStore::STATUS_FAILED, "Attestation key already set"));
- }
-
- optional<vector<vector<uint8_t>>> certs =
- support::certificateChainSplit(attestationCertificateChain);
- if (!certs) {
- return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
- IIdentityCredentialStore::STATUS_FAILED,
- "Error splitting chain into separate certificates"));
- }
-
- attestationKeyBlob_ = attestationKeyBlob;
- attestationCertificateChain_ = *certs;
- return ndk::ScopedAStatus::ok();
-}
-
} // namespace aidl::android::hardware::identity
diff --git a/identity/aidl/default/common/WritableIdentityCredential.h b/identity/aidl/default/common/WritableIdentityCredential.h
index 39d32c9dc7..36ad4300d1 100644
--- a/identity/aidl/default/common/WritableIdentityCredential.h
+++ b/identity/aidl/default/common/WritableIdentityCredential.h
@@ -30,7 +30,6 @@ namespace aidl::android::hardware::identity {
using ::android::sp;
using ::android::hardware::identity::SecureHardwareProvisioningProxy;
-using ::std::optional;
using ::std::set;
using ::std::string;
using ::std::vector;
@@ -42,11 +41,8 @@ class WritableIdentityCredential : public BnWritableIdentityCredential {
// For an updated credential, call initializeForUpdate() right after construction.
//
WritableIdentityCredential(sp<SecureHardwareProvisioningProxy> hwProxy, const string& docType,
- bool testCredential, HardwareInformation hardwareInformation)
- : hwProxy_(hwProxy),
- docType_(docType),
- testCredential_(testCredential),
- hardwareInformation_(std::move(hardwareInformation)) {}
+ bool testCredential)
+ : hwProxy_(hwProxy), docType_(docType), testCredential_(testCredential) {}
~WritableIdentityCredential();
@@ -82,16 +78,11 @@ class WritableIdentityCredential : public BnWritableIdentityCredential {
vector<uint8_t>* outCredentialData,
vector<uint8_t>* outProofOfProvisioningSignature) override;
- ndk::ScopedAStatus setRemotelyProvisionedAttestationKey(
- const vector<uint8_t>& attestationKeyBlob,
- const vector<uint8_t>& attestationCertificateChain) override;
-
private:
// Set by constructor.
sp<SecureHardwareProvisioningProxy> hwProxy_;
string docType_;
bool testCredential_;
- HardwareInformation hardwareInformation_;
// This is set in initialize().
bool startPersonalizationCalled_;
@@ -118,10 +109,6 @@ class WritableIdentityCredential : public BnWritableIdentityCredential {
vector<int32_t> entryAccessControlProfileIds_;
vector<uint8_t> entryBytes_;
set<string> allNameSpaces_;
-
- // Remotely provisioned attestation data, set via setRemotelyProvisionedAttestationKey
- optional<vector<uint8_t>> attestationKeyBlob_;
- optional<vector<vector<uint8_t>>> attestationCertificateChain_;
};
} // namespace aidl::android::hardware::identity
diff --git a/identity/aidl/default/libeic/EicOps.h b/identity/aidl/default/libeic/EicOps.h
index df96c7db48..aa26e6202a 100644
--- a/identity/aidl/default/libeic/EicOps.h
+++ b/identity/aidl/default/libeic/EicOps.h
@@ -196,19 +196,13 @@ bool eicOpsCreateEcKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
// Generates CredentialKey plus an attestation certificate.
//
-// If |attestationKeyBlob| is non-NULL, the certificate must be signed by the
-// the provided attestation key. Else, the certificate must be signed by the
-// attestation key that the secure area has been factory provisioned with. The
-// given |challenge|, |applicationId|, and |testCredential| must be signed
-// into the attestation.
+// The attestation certificate will be signed by the attestation keys the secure
+// area has been provisioned with. The given |challenge| and |applicationId|
+// will be used as will |testCredential|.
//
-// When |attestationKeyBlob| is non-NULL, then |attestationKeyCert| must
-// also be passed so that the underlying implementation can properly chain up
-// the newly-generated certificate to the existing chain.
-//
-// The generated certificate must be in X.509 format and returned in |cert|
-// and |certSize| must be set to the size of this array. This function must
-// set |certSize| to the size of the certification chain on successfully return.
+// The generated certificate will be in X.509 format and returned in |cert|
+// and |certSize| must be set to the size of this array and this function will
+// set it to the size of the certification chain on successfully return.
//
// This may return either a single certificate or an entire certificate
// chain. If it returns only a single certificate, the implementation of
@@ -217,10 +211,8 @@ bool eicOpsCreateEcKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
//
bool eicOpsCreateCredentialKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE], const uint8_t* challenge,
size_t challengeSize, const uint8_t* applicationId,
- size_t applicationIdSize, bool testCredential,
- const uint8_t* attestationKeyBlob, size_t attestationKeyBlobSize,
- const uint8_t* attestationKeyCert, size_t attestationKeyCertSize,
- uint8_t* /*out*/ cert, size_t* /*inout*/ certSize);
+ size_t applicationIdSize, bool testCredential, uint8_t* cert,
+ size_t* certSize); // inout
// Generate an X.509 certificate for the key identified by |publicKey| which
// must be of the form returned by eicOpsCreateEcKey().
diff --git a/identity/aidl/default/libeic/EicProvisioning.c b/identity/aidl/default/libeic/EicProvisioning.c
index ff009dde6b..a241b71b50 100644
--- a/identity/aidl/default/libeic/EicProvisioning.c
+++ b/identity/aidl/default/libeic/EicProvisioning.c
@@ -133,10 +133,7 @@ bool eicProvisioningGetId(EicProvisioning* ctx, uint32_t* outId) {
bool eicProvisioningCreateCredentialKey(EicProvisioning* ctx, const uint8_t* challenge,
size_t challengeSize, const uint8_t* applicationId,
- size_t applicationIdSize, const uint8_t* attestationKeyBlob,
- size_t attestationKeyBlobSize,
- const uint8_t* attestationKeyCert,
- size_t attestationKeyCertSize, uint8_t* publicKeyCert,
+ size_t applicationIdSize, uint8_t* publicKeyCert,
size_t* publicKeyCertSize) {
if (ctx->isUpdate) {
eicDebug("Cannot create CredentialKey on update");
@@ -145,9 +142,7 @@ bool eicProvisioningCreateCredentialKey(EicProvisioning* ctx, const uint8_t* cha
if (!eicOpsCreateCredentialKey(ctx->credentialPrivateKey, challenge, challengeSize,
applicationId, applicationIdSize, ctx->testCredential,
- attestationKeyBlob, attestationKeyBlobSize, attestationKeyCert,
- attestationKeyCertSize, publicKeyCert, publicKeyCertSize)) {
- eicDebug("Error creating credential key");
+ publicKeyCert, publicKeyCertSize)) {
return false;
}
return true;
diff --git a/identity/aidl/default/libeic/EicProvisioning.h b/identity/aidl/default/libeic/EicProvisioning.h
index 2619bfc45e..d94f8f18c2 100644
--- a/identity/aidl/default/libeic/EicProvisioning.h
+++ b/identity/aidl/default/libeic/EicProvisioning.h
@@ -77,10 +77,7 @@ bool eicProvisioningGetId(EicProvisioning* ctx, uint32_t* outId);
bool eicProvisioningCreateCredentialKey(EicProvisioning* ctx, const uint8_t* challenge,
size_t challengeSize, const uint8_t* applicationId,
- size_t applicationIdSize, const uint8_t* attestationKeyBlob,
- size_t attestationKeyBlobSize,
- const uint8_t* attestationKeyCert,
- size_t attestationKeyCertSize, uint8_t* publicKeyCert,
+ size_t applicationIdSize, uint8_t* publicKeyCert,
size_t* publicKeyCertSize);
bool eicProvisioningStartPersonalization(EicProvisioning* ctx, int accessControlProfileCount,
diff --git a/identity/aidl/default/service.cpp b/identity/aidl/default/service.cpp
index ed3c4cbcce..1ff52f9773 100644
--- a/identity/aidl/default/service.cpp
+++ b/identity/aidl/default/service.cpp
@@ -16,7 +16,6 @@
#define LOG_TAG "android.hardware.identity-service"
-#include <aidl/android/hardware/security/keymint/IRemotelyProvisionedComponent.h>
#include <android-base/logging.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
@@ -33,7 +32,6 @@ using ::android::base::LogSeverity;
using ::android::base::StderrLogger;
using ::aidl::android::hardware::identity::IdentityCredentialStore;
-using ::aidl::android::hardware::security::keymint::IRemotelyProvisionedComponent;
using ::android::hardware::identity::FakeSecureHardwareProxyFactory;
using ::android::hardware::identity::SecureHardwareProxyFactory;
@@ -49,13 +47,10 @@ int main(int /*argc*/, char* argv[]) {
InitLogging(argv, ComboLogger);
sp<SecureHardwareProxyFactory> hwProxyFactory = new FakeSecureHardwareProxyFactory();
- const std::string remotelyProvisionedComponentName =
- std::string(IRemotelyProvisionedComponent::descriptor) + "/default";
ABinderProcess_setThreadPoolMaxThreadCount(0);
std::shared_ptr<IdentityCredentialStore> store =
- ndk::SharedRefBase::make<IdentityCredentialStore>(hwProxyFactory,
- remotelyProvisionedComponentName);
+ ndk::SharedRefBase::make<IdentityCredentialStore>(hwProxyFactory);
const std::string instance = std::string() + IdentityCredentialStore::descriptor + "/default";
binder_status_t status = AServiceManager_addService(store->asBinder().get(), instance.c_str());
diff --git a/identity/aidl/vts/Android.bp b/identity/aidl/vts/Android.bp
index c5b84a16c5..7b6f2c81ee 100644
--- a/identity/aidl/vts/Android.bp
+++ b/identity/aidl/vts/Android.bp
@@ -11,8 +11,6 @@ cc_test {
name: "VtsHalIdentityTargetTest",
defaults: [
"VtsHalTargetTestDefaults",
- "keymint_use_latest_hal_aidl_cpp_static",
- "keymint_use_latest_hal_aidl_ndk_static",
"use_libaidlvintf_gtest_helper_static",
],
cflags: [
@@ -34,15 +32,12 @@ cc_test {
],
shared_libs: [
"libbinder",
- "libbinder_ndk",
"libcrypto",
],
static_libs: [
- "android.hardware.security.secureclock-V1-ndk",
"libcppbor_external",
"libcppcose_rkp",
"libkeymaster_portable",
- "libkeymint_vts_test_utils",
"libpuresoftkeymasterdevice",
"android.hardware.keymaster@4.0",
"android.hardware.identity-support-lib",
@@ -51,7 +46,6 @@ cc_test {
"android.hardware.keymaster-V4-ndk",
"libkeymaster4support",
"libkeymaster4_1support",
- "libkeymint_remote_prov_support",
],
test_suites: [
"general-tests",
diff --git a/identity/aidl/vts/Util.cpp b/identity/aidl/vts/Util.cpp
index f3d7c30548..1148cb0b60 100644
--- a/identity/aidl/vts/Util.cpp
+++ b/identity/aidl/vts/Util.cpp
@@ -20,16 +20,12 @@
#include <android-base/logging.h>
-#include <KeyMintAidlTestBase.h>
#include <aidl/Gtest.h>
-#include <aidl/android/hardware/security/keymint/MacedPublicKey.h>
#include <android-base/stringprintf.h>
#include <keymaster/km_openssl/openssl_utils.h>
#include <keymasterV4_1/attestation_record.h>
-#include <keymint_support/openssl_utils.h>
-#include <openssl/evp.h>
-
#include <charconv>
+
#include <map>
namespace android::hardware::identity::test_utils {
@@ -40,13 +36,10 @@ using std::optional;
using std::string;
using std::vector;
-using ::aidl::android::hardware::security::keymint::test::check_maced_pubkey;
-using ::aidl::android::hardware::security::keymint::test::p256_pub_key;
using ::android::sp;
using ::android::String16;
using ::android::base::StringPrintf;
using ::android::binder::Status;
-using ::android::hardware::security::keymint::MacedPublicKey;
using ::keymaster::X509_Ptr;
bool setupWritableCredential(sp<IWritableIdentityCredential>& writableCredential,
@@ -65,77 +58,6 @@ bool setupWritableCredential(sp<IWritableIdentityCredential>& writableCredential
}
}
-optional<vector<vector<uint8_t>>> createFakeRemotelyProvisionedCertificateChain(
- const MacedPublicKey& macedPublicKey) {
- // The helper library uses the NDK symbols, so play a little trickery here to convert
- // the data into the proper type so we can reuse the helper function to get the pubkey.
- ::aidl::android::hardware::security::keymint::MacedPublicKey ndkMacedPublicKey;
- ndkMacedPublicKey.macedKey = macedPublicKey.macedKey;
-
- vector<uint8_t> publicKeyBits;
- check_maced_pubkey(ndkMacedPublicKey, /*testMode=*/true, &publicKeyBits);
-
- ::aidl::android::hardware::security::keymint::EVP_PKEY_Ptr publicKey;
- p256_pub_key(publicKeyBits, &publicKey);
-
- // Generate an arbitrary root key for our chain
- bssl::UniquePtr<EC_KEY> ecRootKey(EC_KEY_new());
- bssl::UniquePtr<EVP_PKEY> rootKey(EVP_PKEY_new());
- if (ecRootKey.get() == nullptr || rootKey.get() == nullptr) {
- LOG(ERROR) << "Memory allocation failed";
- return {};
- }
-
- bssl::UniquePtr<EC_GROUP> group(EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
- if (group.get() == nullptr) {
- LOG(ERROR) << "Error creating EC group by curve name";
- return {};
- }
-
- if (EC_KEY_set_group(ecRootKey.get(), group.get()) != 1 ||
- EC_KEY_generate_key(ecRootKey.get()) != 1 || EC_KEY_check_key(ecRootKey.get()) < 0) {
- LOG(ERROR) << "Error generating key";
- return {};
- }
-
- if (EVP_PKEY_set1_EC_KEY(rootKey.get(), ecRootKey.get()) != 1) {
- LOG(ERROR) << "Error getting private key";
- return {};
- }
-
- // The VTS test does not fully validate the chain, so we're ok without the proper CA extensions.
- map<string, vector<uint8_t>> extensions;
-
- // Now make a self-signed cert
- optional<vector<uint8_t>> root = support::ecPublicKeyGenerateCertificate(
- rootKey.get(), rootKey.get(),
- /*serialDecimal=*/"31415",
- /*subject=*/"Android IdentityCredential VTS Test Root Certificate",
- /*subject=*/"Android IdentityCredential VTS Test Root Certificate",
- /*validityNotBefore=*/time(nullptr),
- /*validityNotAfter=*/time(nullptr) + 365 * 24 * 3600, extensions);
- if (!root) {
- LOG(ERROR) << "Error generating root cert";
- return std::nullopt;
- }
-
- // Now sign a CA cert so that we have a chain that's good enough to satisfy
- // the VTS tests.
- optional<vector<uint8_t>> intermediate = support::ecPublicKeyGenerateCertificate(
- publicKey.get(), rootKey.get(),
- /*serialDecimal=*/"42",
- /*subject=*/"Android IdentityCredential VTS Test Root Certificate",
- /*subject=*/"Android IdentityCredential VTS Test Attestation Certificate",
- /*validityNotBefore=*/time(nullptr),
- /*validityNotAfter=*/time(nullptr) + 365 * 24 * 3600, extensions);
- if (!intermediate) {
- LOG(ERROR) << "Error generating intermediate cert";
- return std::nullopt;
- }
-
- return vector<vector<uint8_t>>{std::move(*intermediate), std::move(*root)};
-}
-
optional<vector<uint8_t>> generateReaderCertificate(string serialDecimal) {
vector<uint8_t> privKey;
return generateReaderCertificate(serialDecimal, &privKey);
diff --git a/identity/aidl/vts/Util.h b/identity/aidl/vts/Util.h
index b120dc9d19..80e52a21da 100644
--- a/identity/aidl/vts/Util.h
+++ b/identity/aidl/vts/Util.h
@@ -19,7 +19,6 @@
#include <android/hardware/identity/IIdentityCredentialStore.h>
#include <android/hardware/identity/support/IdentityCredentialSupport.h>
-#include <android/hardware/security/keymint/MacedPublicKey.h>
#include <cppbor.h>
#include <cppbor_parse.h>
#include <gtest/gtest.h>
@@ -98,9 +97,6 @@ struct TestProfile {
bool setupWritableCredential(sp<IWritableIdentityCredential>& writableCredential,
sp<IIdentityCredentialStore>& credentialStore, bool testCredential);
-optional<vector<vector<uint8_t>>> createFakeRemotelyProvisionedCertificateChain(
- const ::android::hardware::security::keymint::MacedPublicKey& macedPublicKey);
-
optional<vector<uint8_t>> generateReaderCertificate(string serialDecimal);
optional<vector<uint8_t>> generateReaderCertificate(string serialDecimal,
diff --git a/identity/aidl/vts/VtsIWritableIdentityCredentialTests.cpp b/identity/aidl/vts/VtsIWritableIdentityCredentialTests.cpp
index 94d4c881b8..bc37020293 100644
--- a/identity/aidl/vts/VtsIWritableIdentityCredentialTests.cpp
+++ b/identity/aidl/vts/VtsIWritableIdentityCredentialTests.cpp
@@ -18,8 +18,6 @@
#include <aidl/Gtest.h>
#include <aidl/Vintf.h>
-#include <aidl/android/hardware/security/keymint/IRemotelyProvisionedComponent.h>
-#include <aidl/android/hardware/security/keymint/MacedPublicKey.h>
#include <android-base/logging.h>
#include <android/hardware/identity/IIdentityCredentialStore.h>
#include <android/hardware/identity/support/IdentityCredentialSupport.h>
@@ -44,8 +42,6 @@ using std::vector;
using ::android::sp;
using ::android::String16;
using ::android::binder::Status;
-using ::android::hardware::security::keymint::IRemotelyProvisionedComponent;
-using ::android::hardware::security::keymint::MacedPublicKey;
class IdentityCredentialTests : public testing::TestWithParam<string> {
public:
@@ -105,103 +101,6 @@ TEST_P(IdentityCredentialTests, verifyAttestationSuccessWithChallenge) {
attestationApplicationId, false);
}
-TEST_P(IdentityCredentialTests, verifyAttestationSuccessWithRemoteProvisioning) {
- HardwareInformation hwInfo;
- ASSERT_TRUE(credentialStore_->getHardwareInformation(&hwInfo).isOk());
-
- if (!hwInfo.isRemoteKeyProvisioningSupported) {
- GTEST_SKIP() << "Remote provisioning is not supported";
- }
-
- Status result;
-
- sp<IWritableIdentityCredential> writableCredential;
- ASSERT_TRUE(test_utils::setupWritableCredential(writableCredential, credentialStore_,
- false /* testCredential */));
-
- sp<IRemotelyProvisionedComponent> rpc;
- result = credentialStore_->getRemotelyProvisionedComponent(&rpc);
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- MacedPublicKey macedPublicKey;
- std::vector<uint8_t> attestationKey;
- result = rpc->generateEcdsaP256KeyPair(/*testMode=*/true, &macedPublicKey, &attestationKey);
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- optional<vector<vector<uint8_t>>> remotelyProvisionedCertChain =
- test_utils::createFakeRemotelyProvisionedCertificateChain(macedPublicKey);
- ASSERT_TRUE(remotelyProvisionedCertChain);
-
- vector<uint8_t> concatenatedCerts;
- for (const vector<uint8_t>& cert : *remotelyProvisionedCertChain) {
- concatenatedCerts.insert(concatenatedCerts.end(), cert.begin(), cert.end());
- }
- result = writableCredential->setRemotelyProvisionedAttestationKey(attestationKey,
- concatenatedCerts);
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- string challenge = "NotSoRandomChallenge1NotSoRandomChallenge1NotSoRandomChallenge1";
- vector<uint8_t> attestationChallenge(challenge.begin(), challenge.end());
- vector<Certificate> attestationCertificate;
- vector<uint8_t> attestationApplicationId = {1};
-
- result = writableCredential->getAttestationCertificate(
- attestationApplicationId, attestationChallenge, &attestationCertificate);
-
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- test_utils::validateAttestationCertificate(attestationCertificate, attestationChallenge,
- attestationApplicationId, false);
-
- ASSERT_EQ(remotelyProvisionedCertChain->size() + 1, attestationCertificate.size());
- for (size_t i = 0; i < remotelyProvisionedCertChain->size(); ++i) {
- ASSERT_EQ(remotelyProvisionedCertChain->at(i),
- attestationCertificate[i + 1].encodedCertificate)
- << "Certificate mismatch (cert index " << i + 1 << " out of "
- << attestationCertificate.size() << " total certs)";
- }
-}
-
-TEST_P(IdentityCredentialTests, verifyRemotelyProvisionedKeyMayOnlyBeSetOnce) {
- HardwareInformation hwInfo;
- ASSERT_TRUE(credentialStore_->getHardwareInformation(&hwInfo).isOk());
-
- if (!hwInfo.isRemoteKeyProvisioningSupported) {
- GTEST_SKIP() << "Remote provisioning is not supported";
- }
-
- sp<IRemotelyProvisionedComponent> rpc;
- Status result = credentialStore_->getRemotelyProvisionedComponent(&rpc);
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- MacedPublicKey macedPublicKey;
- std::vector<uint8_t> attestationKey;
- result = rpc->generateEcdsaP256KeyPair(/*testMode=*/true, &macedPublicKey, &attestationKey);
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- optional<vector<vector<uint8_t>>> remotelyProvisionedCertChain =
- test_utils::createFakeRemotelyProvisionedCertificateChain(macedPublicKey);
- ASSERT_TRUE(remotelyProvisionedCertChain);
-
- vector<uint8_t> concatenatedCerts;
- for (const vector<uint8_t>& cert : *remotelyProvisionedCertChain) {
- concatenatedCerts.insert(concatenatedCerts.end(), cert.begin(), cert.end());
- }
-
- sp<IWritableIdentityCredential> writableCredential;
- ASSERT_TRUE(test_utils::setupWritableCredential(writableCredential, credentialStore_,
- /*testCredential=*/false));
-
- result = writableCredential->setRemotelyProvisionedAttestationKey(attestationKey,
- concatenatedCerts);
- ASSERT_TRUE(result.isOk()) << result.exceptionCode() << "; " << result.exceptionMessage();
-
- // Now try again, and verify that the implementation rejects it.
- result = writableCredential->setRemotelyProvisionedAttestationKey(attestationKey,
- concatenatedCerts);
- EXPECT_FALSE(result.isOk());
-}
-
TEST_P(IdentityCredentialTests, verifyAttestationDoubleCallFails) {
Status result;
diff --git a/security/keymint/aidl/Android.bp b/security/keymint/aidl/Android.bp
index bba9f6eb38..dcbe9c14a6 100644
--- a/security/keymint/aidl/Android.bp
+++ b/security/keymint/aidl/Android.bp
@@ -56,13 +56,6 @@ cc_defaults {
],
}
-cc_defaults {
- name: "keymint_use_latest_hal_aidl_cpp_static",
- static_libs: [
- "android.hardware.security.keymint-V2-cpp",
- ],
-}
-
// A rust_defaults that includes the latest KeyMint AIDL library.
// Modules that depend on KeyMint directly can include this cc_defaults to avoid
// managing dependency versions explicitly.
diff --git a/security/keymint/aidl/vts/functional/Android.bp b/security/keymint/aidl/vts/functional/Android.bp
index 91db3c8954..2d2d701588 100644
--- a/security/keymint/aidl/vts/functional/Android.bp
+++ b/security/keymint/aidl/vts/functional/Android.bp
@@ -75,9 +75,6 @@ cc_test_library {
export_include_dirs: [
".",
],
- export_static_lib_headers: [
- "libkeymint_support",
- ],
static_libs: [
"libgmock_ndk",
],