summaryrefslogtreecommitdiff
path: root/identity/aidl/default/EicOpsImpl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'identity/aidl/default/EicOpsImpl.cc')
-rw-r--r--identity/aidl/default/EicOpsImpl.cc57
1 files changed, 19 insertions, 38 deletions
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) {