Update softkeymaster for KM4.1

Test: VtsHalKeymasterV4_1TargetTest
Change-Id: Iaf4d6265c546bfadddaa6efff3f8316eb98dc889
Merged-In: Iaf4d6265c546bfadddaa6efff3f8316eb98dc889
diff --git a/ng/AndroidKeymaster41Device.cpp b/ng/AndroidKeymaster41Device.cpp
index 295d3f5..8d57fd2 100644
--- a/ng/AndroidKeymaster41Device.cpp
+++ b/ng/AndroidKeymaster41Device.cpp
@@ -15,12 +15,47 @@
  ** limitations under the License.
  */
 
+#define LOG_TAG "android.hardware.keymaster@4.1 ref impl"
+#include <log/log.h>
+
 #include "include/AndroidKeymaster41Device.h"
 
+#include <keymaster/android_keymaster.h>
+
 namespace keymaster::V4_1 {
 
+using V4_0::ng::hidlKeyParams2Km;
+
+namespace {
+
+inline V41ErrorCode legacy_enum_conversion(const keymaster_error_t value) {
+    return static_cast<V41ErrorCode>(value);
+}
+
+}  // namespace
+
 IKeymasterDevice* CreateKeymasterDevice(SecurityLevel securityLevel) {
     return new AndroidKeymaster41Device(securityLevel);
 }
 
+Return<V41ErrorCode>
+AndroidKeymaster41Device::deviceLocked(bool passwordOnly,
+                                       const VerificationToken& verificationToken) {
+    keymaster::VerificationToken serializableToken;
+    serializableToken.challenge = verificationToken.challenge;
+    serializableToken.timestamp = verificationToken.timestamp;
+    serializableToken.parameters_verified.Reinitialize(
+        hidlKeyParams2Km(verificationToken.parametersVerified));
+    serializableToken.security_level =
+        static_cast<keymaster_security_level_t>(verificationToken.securityLevel);
+    serializableToken.mac =
+        KeymasterBlob(verificationToken.mac.data(), verificationToken.mac.size());
+    return legacy_enum_conversion(
+        impl_->DeviceLocked(DeviceLockedRequest(passwordOnly, std::move(serializableToken))).error);
+}
+
+Return<V41ErrorCode> AndroidKeymaster41Device::earlyBootEnded() {
+    return legacy_enum_conversion(impl_->EarlyBootEnded().error);
+}
+
 }  // namespace keymaster::V4_1