aboutsummaryrefslogtreecommitdiff
path: root/ready_se/google/keymint/KM300/HAL/JavacardSharedSecret.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ready_se/google/keymint/KM300/HAL/JavacardSharedSecret.cpp')
-rw-r--r--ready_se/google/keymint/KM300/HAL/JavacardSharedSecret.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/ready_se/google/keymint/KM300/HAL/JavacardSharedSecret.cpp b/ready_se/google/keymint/KM300/HAL/JavacardSharedSecret.cpp
new file mode 100644
index 0000000..c5cf9a2
--- /dev/null
+++ b/ready_se/google/keymint/KM300/HAL/JavacardSharedSecret.cpp
@@ -0,0 +1,61 @@
+#define LOG_TAG "javacard.strongbox.keymint.operation-impl"
+#include "JavacardSharedSecret.h"
+
+#include <android-base/logging.h>
+
+#include <KeyMintUtils.h>
+
+namespace aidl::android::hardware::security::sharedsecret {
+using ::keymint::javacard::Instruction;
+
+ScopedAStatus JavacardSharedSecret::getSharedSecretParameters(SharedSecretParameters* params) {
+ auto error = card_->initializeJavacard();
+ if (error != KM_ERROR_OK) {
+ LOG(ERROR) << "Error in initializing javacard.";
+ return keymint::km_utils::kmError2ScopedAStatus(error);
+ }
+ auto [item, err] = card_->sendRequest(Instruction::INS_GET_SHARED_SECRET_PARAM_CMD);
+ if (err != KM_ERROR_OK) {
+ LOG(ERROR) << "Error in sending in getSharedSecretParameters.";
+ return keymint::km_utils::kmError2ScopedAStatus(err);
+ }
+ auto optSSParams = cbor_.getSharedSecretParameters(item, 1);
+ if (!optSSParams) {
+ LOG(ERROR) << "Error in sending in getSharedSecretParameters.";
+ return keymint::km_utils::kmError2ScopedAStatus(KM_ERROR_UNKNOWN_ERROR);
+ }
+ *params = std::move(optSSParams.value());
+ return ScopedAStatus::ok();
+}
+
+ScopedAStatus
+JavacardSharedSecret::computeSharedSecret(const std::vector<SharedSecretParameters>& params,
+ std::vector<uint8_t>* secret) {
+
+ auto error = card_->sendEarlyBootEndedEvent(false);
+ if (error != KM_ERROR_OK) {
+ LOG(ERROR) << "Error in sending earlyBoot event javacard.";
+ return keymint::km_utils::kmError2ScopedAStatus(error);
+ }
+ error = card_->initializeJavacard();
+ if (error != KM_ERROR_OK) {
+ LOG(ERROR) << "Error in initializing javacard.";
+ return keymint::km_utils::kmError2ScopedAStatus(error);
+ }
+ cppbor::Array request;
+ cbor_.addSharedSecretParameters(request, params);
+ auto [item, err] = card_->sendRequest(Instruction::INS_COMPUTE_SHARED_SECRET_CMD, request);
+ if (err != KM_ERROR_OK) {
+ LOG(ERROR) << "Error in sending in computeSharedSecret.";
+ return keymint::km_utils::kmError2ScopedAStatus(err);
+ }
+ auto optSecret = cbor_.getByteArrayVec(item, 1);
+ if (!optSecret) {
+ LOG(ERROR) << "Error in decoding the response in computeSharedSecret.";
+ return keymint::km_utils::kmError2ScopedAStatus(KM_ERROR_UNKNOWN_ERROR);
+ }
+ *secret = std::move(optSecret.value());
+ return ScopedAStatus::ok();
+}
+
+} // namespace aidl::android::hardware::security::sharedsecret