1 #define LOG_TAG "javacard.strongbox.keymint.operation-impl" 2 #include "JavacardSharedSecret.h" 3 4 #include <android-base/logging.h> 5 6 #include <KeyMintUtils.h> 7 8 namespace aidl::android::hardware::security::sharedsecret { 9 using ::keymint::javacard::Instruction; 10 getSharedSecretParameters(SharedSecretParameters * params)11ScopedAStatus JavacardSharedSecret::getSharedSecretParameters(SharedSecretParameters* params) { 12 auto error = card_->initializeJavacard(); 13 if (error != KM_ERROR_OK) { 14 LOG(ERROR) << "Error in initializing javacard."; 15 return keymint::km_utils::kmError2ScopedAStatus(error); 16 } 17 auto [item, err] = card_->sendRequest(Instruction::INS_GET_SHARED_SECRET_PARAM_CMD); 18 if (err != KM_ERROR_OK) { 19 LOG(ERROR) << "Error in sending in getSharedSecretParameters."; 20 return keymint::km_utils::kmError2ScopedAStatus(err); 21 } 22 auto optSSParams = cbor_.getSharedSecretParameters(item, 1); 23 if (!optSSParams) { 24 LOG(ERROR) << "Error in sending in getSharedSecretParameters."; 25 return keymint::km_utils::kmError2ScopedAStatus(KM_ERROR_UNKNOWN_ERROR); 26 } 27 *params = std::move(optSSParams.value()); 28 return ScopedAStatus::ok(); 29 } 30 31 ScopedAStatus computeSharedSecret(const std::vector<SharedSecretParameters> & params,std::vector<uint8_t> * secret)32JavacardSharedSecret::computeSharedSecret(const std::vector<SharedSecretParameters>& params, 33 std::vector<uint8_t>* secret) { 34 card_->sendPendingEvents(); 35 auto error = card_->initializeJavacard(); 36 if (error != KM_ERROR_OK) { 37 LOG(ERROR) << "Error in initializing javacard."; 38 return keymint::km_utils::kmError2ScopedAStatus(error); 39 } 40 cppbor::Array request; 41 cbor_.addSharedSecretParameters(request, params); 42 auto [item, err] = card_->sendRequest(Instruction::INS_COMPUTE_SHARED_SECRET_CMD, request); 43 if (err != KM_ERROR_OK) { 44 LOG(ERROR) << "Error in sending in computeSharedSecret."; 45 return keymint::km_utils::kmError2ScopedAStatus(err); 46 } 47 auto optSecret = cbor_.getByteArrayVec(item, 1); 48 if (!optSecret) { 49 LOG(ERROR) << "Error in decoding the response in computeSharedSecret."; 50 return keymint::km_utils::kmError2ScopedAStatus(KM_ERROR_UNKNOWN_ERROR); 51 } 52 *secret = std::move(optSecret.value()); 53 return ScopedAStatus::ok(); 54 } 55 56 } // namespace aidl::android::hardware::security::sharedsecret 57