diff options
author | David Zeuthen <zeuthen@google.com> | 2020-06-03 13:24:52 -0400 |
---|---|---|
committer | David Zeuthen <zeuthen@google.com> | 2020-06-04 16:46:54 -0400 |
commit | ef7395127f2166dfd0a2bd5cfbb334f3695f2c96 (patch) | |
tree | fe189542607488b2207c5ceff3e8d1ff4ef0aea7 /identity/aidl/default/WritableIdentityCredential.cpp | |
parent | a2a6a33ea94633d8ab75414e571ae0a71cc6a761 (diff) |
Update Identity Credential VTS tests.
These updates are based on input/experiences implementing this
HAL. There are no API changes.
- Specify that the validity for credentialKey certificate shall be
from current time and expire at the same time as the attestation
batch certificate.
- Require challenge passed to getAttestationCertificate() is
non-empty.
- Fix bug in VTS tests where the startPersonlization() result was not
checked.
- Remove verifyStartPersonalizationZero test since it cannot be
completed.
- Ensure secureUserId is non-zero if user authentication is needed.
- Specify format for signingKeyBlob in generateSigningKeyPair() same
way we do for credentialData in finishAddingEntries().
- Modify EndToEndTest to decrypt/unpack credentialData to obtain
credentialPrivKey and storageKey and do cross-checks on these.
- Modify EndToEndTest to decrypt/unpack signingKeyBlob to obtain
signingKeyPriv and check it matches the public key in the returned
certificate.
- Add new VTS tests for user and reader authentication.
- Relax unnecessary requirements about SessionTranscript structure -
just require it has X and Y of the ephemeral key created earlier.
- Allow calls in VTS tests to v2 HAL to fail - this should allow
these VTS tests to pass on a compliant v1 HAL.
Bug: 156911917
Bug: 158107945
Test: atest VtsHalIdentityTargetTest
Test: atest android.security.identity.cts
Change-Id: I11b79dbd57b1830609c70301fea9c99f9e5080cb
Diffstat (limited to 'identity/aidl/default/WritableIdentityCredential.cpp')
-rw-r--r-- | identity/aidl/default/WritableIdentityCredential.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/identity/aidl/default/WritableIdentityCredential.cpp b/identity/aidl/default/WritableIdentityCredential.cpp index 8bc4b49a79..fea289b9ef 100644 --- a/identity/aidl/default/WritableIdentityCredential.cpp +++ b/identity/aidl/default/WritableIdentityCredential.cpp @@ -65,6 +65,10 @@ ndk::ScopedAStatus WritableIdentityCredential::getAttestationCertificate( IIdentityCredentialStore::STATUS_FAILED, "Error attestation certificate previously generated")); } + if (attestationChallenge.empty()) { + return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage( + IIdentityCredentialStore::STATUS_INVALID_DATA, "Challenge can not be empty")); + } vector<uint8_t> challenge(attestationChallenge.begin(), attestationChallenge.end()); vector<uint8_t> appId(attestationApplicationId.begin(), attestationApplicationId.end()); @@ -165,6 +169,13 @@ ndk::ScopedAStatus WritableIdentityCredential::addAccessControlProfile( "userAuthenticationRequired is false but timeout is non-zero")); } + // If |userAuthenticationRequired| is true, then |secureUserId| must be non-zero. + if (userAuthenticationRequired && secureUserId == 0) { + return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage( + IIdentityCredentialStore::STATUS_INVALID_DATA, + "userAuthenticationRequired is true but secureUserId is zero")); + } + profile.id = id; profile.readerCertificate = readerCertificate; profile.userAuthenticationRequired = userAuthenticationRequired; |