Add keymaster VTS tests.
Note: Recent Google devices have keymaster implementations that don't
pass this test suite. See https://goo.gl/6hsGwa for a summary.
Bug: 32022681
Test: This is the test suite.
Change-Id: Ib200b68e0c7844df02eb9f086385d6c36e306d45
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) {