diff options
Diffstat (limited to 'identity/aidl/default/WritableIdentityCredential.cpp')
-rw-r--r-- | identity/aidl/default/WritableIdentityCredential.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/identity/aidl/default/WritableIdentityCredential.cpp b/identity/aidl/default/WritableIdentityCredential.cpp index b3924447b2..8bc4b49a79 100644 --- a/identity/aidl/default/WritableIdentityCredential.cpp +++ b/identity/aidl/default/WritableIdentityCredential.cpp @@ -22,6 +22,7 @@ #include <android/hardware/identity/support/IdentityCredentialSupport.h> #include <android-base/logging.h> +#include <android-base/stringprintf.h> #include <cppbor/cppbor.h> #include <cppbor/cppbor_parse.h> @@ -34,6 +35,7 @@ namespace aidl::android::hardware::identity { +using ::android::base::StringPrintf; using ::std::optional; using namespace ::android::hardware::identity; @@ -105,6 +107,12 @@ ndk::ScopedAStatus WritableIdentityCredential::getAttestationCertificate( return ndk::ScopedAStatus::ok(); } +ndk::ScopedAStatus WritableIdentityCredential::setExpectedProofOfProvisioningSize( + int32_t expectedProofOfProvisioningSize) { + expectedProofOfProvisioningSize_ = expectedProofOfProvisioningSize; + return ndk::ScopedAStatus::ok(); +} + ndk::ScopedAStatus WritableIdentityCredential::startPersonalization( int32_t accessControlProfileCount, const vector<int32_t>& entryCounts) { if (startPersonalizationCalled_) { @@ -382,6 +390,16 @@ ndk::ScopedAStatus WritableIdentityCredential::finishAddingEntries( .add(testCredential_); vector<uint8_t> encodedCbor = popArray.encode(); + if (encodedCbor.size() != expectedProofOfProvisioningSize_) { + LOG(ERROR) << "CBOR for proofOfProvisioning is " << encodedCbor.size() << " bytes, " + << "was expecting " << expectedProofOfProvisioningSize_; + return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage( + IIdentityCredentialStore::STATUS_INVALID_DATA, + StringPrintf("Unexpected CBOR size %zd for proofOfProvisioning, was expecting %zd", + encodedCbor.size(), expectedProofOfProvisioningSize_) + .c_str())); + } + optional<vector<uint8_t>> signature = support::coseSignEcDsa(credentialPrivKey_, encodedCbor, // payload {}, // additionalData |