Revert "Revert "Add keymaster VTS tests.""
This reverts commit 8e10baee45a1bfab4094869159b8ede270b6d416.
Test: Tests pass, except known failures with in-progress vendor fixes
Change-Id: Ia95c1444100e123fa65d095b001878cf9040d0c4
diff --git a/keymaster/3.0/default/KeymasterDevice.cpp b/keymaster/3.0/default/KeymasterDevice.cpp
index 720b946..6b4524b 100644
--- a/keymaster/3.0/default/KeymasterDevice.cpp
+++ b/keymaster/3.0/default/KeymasterDevice.cpp
@@ -698,14 +698,21 @@
return legacy_enum_conversion(keymaster_device_->abort(keymaster_device_, operationHandle));
}
-IKeymasterDevice* HIDL_FETCH_IKeymasterDevice(const char* /* name */) {
+IKeymasterDevice* HIDL_FETCH_IKeymasterDevice(const char* name) {
keymaster2_device_t* dev = nullptr;
- uint32_t version;
- bool supports_ec;
- bool supports_all_digests;
- auto rc = keymaster_device_initialize(&dev, &version, &supports_ec, &supports_all_digests);
- if (rc) return nullptr;
+ ALOGI("Fetching keymaster device name %s", name);
+
+ uint32_t version = -1;
+ bool supports_ec = false;
+ bool supports_all_digests = false;
+
+ if (name && strcmp(name, "softwareonly") == 0) {
+ dev = (new SoftKeymasterDevice(new SoftwareOnlyHidlKeymasterContext))->keymaster2_device();
+ } else if (name && strcmp(name, "default") == 0) {
+ auto rc = keymaster_device_initialize(&dev, &version, &supports_ec, &supports_all_digests);
+ if (rc) return nullptr;
+ }
auto kmrc = ::keymaster::ConfigureDevice(dev);
if (kmrc != KM_ERROR_OK) {