summaryrefslogtreecommitdiff
path: root/keymaster/3.0/default/KeymasterDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'keymaster/3.0/default/KeymasterDevice.cpp')
-rw-r--r--keymaster/3.0/default/KeymasterDevice.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/keymaster/3.0/default/KeymasterDevice.cpp b/keymaster/3.0/default/KeymasterDevice.cpp
index 25f16b57df..8b416c3f9a 100644
--- a/keymaster/3.0/default/KeymasterDevice.cpp
+++ b/keymaster/3.0/default/KeymasterDevice.cpp
@@ -22,6 +22,7 @@
#include <log/log.h>
#include <AndroidKeymaster3Device.h>
+#include <hardware/keymaster1.h>
#include <hardware/keymaster2.h>
#include <hardware/keymaster_defs.h>
@@ -31,6 +32,18 @@ namespace keymaster {
namespace V3_0 {
namespace implementation {
+static int get_keymaster1_dev(keymaster1_device_t** dev, const hw_module_t* mod) {
+ int rc = keymaster1_open(mod, dev);
+ if (rc) {
+ ALOGE("Error %d opening keystore keymaster1 device", rc);
+ if (*dev) {
+ (*dev)->common.close(&(*dev)->common);
+ *dev = nullptr;
+ }
+ }
+ return rc;
+}
+
static int get_keymaster2_dev(keymaster2_device_t** dev, const hw_module_t* mod) {
int rc = keymaster2_open(mod, dev);
if (rc) {
@@ -50,8 +63,14 @@ static IKeymasterDevice* createKeymaster3Device() {
return ::keymaster::ng::CreateKeymasterDevice();
}
- if (mod->module_api_version < KEYMASTER_MODULE_API_VERSION_2_0) {
+ if (mod->module_api_version < KEYMASTER_MODULE_API_VERSION_1_0) {
return nullptr;
+ } else if (mod->module_api_version == KEYMASTER_MODULE_API_VERSION_1_0) {
+ keymaster1_device_t* dev = nullptr;
+ if (get_keymaster1_dev(&dev, mod)) {
+ return nullptr;
+ }
+ return ::keymaster::ng::CreateKeymasterDevice(dev);
} else {
keymaster2_device_t* dev = nullptr;
if (get_keymaster2_dev(&dev, mod)) {