Add VerifyAuthorization support.
Test: VtsHalKeymasterV4_0TargetTest
Change-Id: I1f9a952ee2ad3605f67f58c9f57a46df57556f92
diff --git a/ng/AndroidKeymaster4Device.cpp b/ng/AndroidKeymaster4Device.cpp
index 141005a..c6f2925 100644
--- a/ng/AndroidKeymaster4Device.cpp
+++ b/ng/AndroidKeymaster4Device.cpp
@@ -41,17 +41,29 @@
inline keymaster_tag_t legacy_enum_conversion(const Tag value) {
return keymaster_tag_t(value);
}
+
inline Tag legacy_enum_conversion(const keymaster_tag_t value) {
return Tag(value);
}
+
inline keymaster_purpose_t legacy_enum_conversion(const KeyPurpose value) {
- return keymaster_purpose_t(value);
+ return static_cast<keymaster_purpose_t>(value);
}
+
inline keymaster_key_format_t legacy_enum_conversion(const KeyFormat value) {
- return keymaster_key_format_t(value);
+ return static_cast<keymaster_key_format_t>(value);
}
+
+inline SecurityLevel legacy_enum_conversion(const keymaster_security_level_t value) {
+ return static_cast<SecurityLevel>(value);
+}
+
+inline hw_authenticator_type_t legacy_enum_conversion(const HardwareAuthenticatorType value) {
+ return static_cast<hw_authenticator_type_t>(value);
+}
+
inline ErrorCode legacy_enum_conversion(const keymaster_error_t value) {
- return ErrorCode(value);
+ return static_cast<ErrorCode>(value);
}
inline keymaster_tag_type_t typeFromTag(const keymaster_tag_t tag) {
@@ -251,9 +263,32 @@
}
Return<void> AndroidKeymaster4Device::verifyAuthorization(
- uint64_t /* challenge */, const hidl_vec<KeyParameter>& /* parametersToVerify */,
- const HardwareAuthToken& /* authToken */, verifyAuthorization_cb _hidl_cb) {
- _hidl_cb(ErrorCode::UNIMPLEMENTED, {});
+ uint64_t challenge, const hidl_vec<KeyParameter>& parametersToVerify,
+ const ::android::hardware::keymaster::V4_0::HardwareAuthToken& authToken,
+ verifyAuthorization_cb _hidl_cb) {
+
+ VerifyAuthorizationRequest request;
+ request.challenge = challenge;
+ request.parameters_to_verify.Reinitialize(KmParamSet(parametersToVerify));
+ request.auth_token.challenge = authToken.challenge;
+ request.auth_token.user_id = authToken.userId;
+ request.auth_token.authenticator_id = authToken.authenticatorId;
+ request.auth_token.authenticator_type = legacy_enum_conversion(authToken.authenticatorType);
+ request.auth_token.timestamp = authToken.timestamp;
+ KeymasterBlob mac(authToken.mac.data(), authToken.mac.size());
+ request.auth_token.mac = mac;
+
+ auto response = impl_->VerifyAuthorization(request);
+
+ ::android::hardware::keymaster::V4_0::VerificationToken token;
+ token.challenge = response.token.challenge;
+ token.timestamp = response.token.timestamp;
+ token.parametersVerified = kmParamSet2Hidl(response.token.parameters_verified);
+ token.securityLevel = legacy_enum_conversion(response.token.security_level);
+ token.mac = kmBlob2hidlVec(response.token.mac);
+
+ _hidl_cb(legacy_enum_conversion(response.error), token);
+
return Void();
}