Legacy passthrough device implementations

This patch adds AndroidKeymaster implementations based on
Keymaster 0, 1, and 2 legacy devices. It also adds
Factory functions that create Keymaster3 hal implementations
based on these legacy devices.

Test: VtsHalKeymasterV3_0TargetTest (for coverage of the
      wrappers run on devices with lecacy hal implementations)
Bug: 67358942
Change-Id: I7e35b7f22b124ce56427b5780241bc13ab541181
diff --git a/ng/AndroidKeymaster3Device.cpp b/ng/AndroidKeymaster3Device.cpp
index 0dcb442..c95db0c 100644
--- a/ng/AndroidKeymaster3Device.cpp
+++ b/ng/AndroidKeymaster3Device.cpp
@@ -26,6 +26,9 @@
 #include <keymaster/android_keymaster.h>
 #include <keymaster/android_keymaster_messages.h>
 #include <keymaster/contexts/soft_keymaster_context.h>
+#include <keymaster/contexts/keymaster0_passthrough_context.h>
+#include <keymaster/contexts/keymaster1_passthrough_context.h>
+#include <keymaster/contexts/keymaster2_passthrough_context.h>
 #include <keymaster/contexts/pure_soft_keymaster_context.h>
 #include <keymaster/keymaster_configuration.h>
 #include <keymaster/keymaster_enforcement.h>
@@ -493,6 +496,22 @@
 IKeymasterDevice* CreateKeymasterDevice() {
     return new AndroidKeymaster3Device();
 }
+IKeymasterDevice* CreateKeymasterDevice(keymaster2_device_t* km2_device) {
+    if (ConfigureDevice(km2_device) != KM_ERROR_OK) return nullptr;
+    auto context = new Keymaster2PassthroughContext(km2_device);
+    context->SetSystemVersion(GetOsVersion(), GetOsPatchlevel());
+    return new AndroidKeymaster3Device(context, KeymasterHardwareProfile::KM2);
+}
+IKeymasterDevice* CreateKeymasterDevice(keymaster1_device_t* km1_device) {
+    auto context = new Keymaster1PassthroughContext(km1_device);
+    context->SetSystemVersion(GetOsVersion(), GetOsPatchlevel());
+    return new AndroidKeymaster3Device(context, KeymasterHardwareProfile::KM1);
+}
+IKeymasterDevice* CreateKeymasterDevice(keymaster0_device_t* km0_device) {
+    auto context = new Keymaster0PassthroughContext(km0_device);
+    context->SetSystemVersion(GetOsVersion(), GetOsPatchlevel());
+    return new AndroidKeymaster3Device(context, KeymasterHardwareProfile::KM0);
+}
 
 }  // namespace ng
 }  // namespace keymaster