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