summaryrefslogtreecommitdiffstats
path: root/keystore/keystore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'keystore/keystore.cpp')
-rw-r--r--keystore/keystore.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/keystore/keystore.cpp b/keystore/keystore.cpp
index 6bcbace..3504843 100644
--- a/keystore/keystore.cpp
+++ b/keystore/keystore.cpp
@@ -106,23 +106,31 @@ struct PKCS8_PRIV_KEY_INFO_Delete {
};
typedef UniquePtr<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_Delete> Unique_PKCS8_PRIV_KEY_INFO;
-static int keymaster_device_initialize(keymaster0_device_t** dev) {
+static int keymaster_device_initialize(keymaster1_device_t** dev) {
int rc;
const hw_module_t* mod;
+ keymaster::SoftKeymasterDevice* softkeymaster = NULL;
rc = hw_get_module_by_class(KEYSTORE_HARDWARE_MODULE_ID, NULL, &mod);
if (rc) {
ALOGE("could not find any keystore module");
goto out;
}
- rc = keymaster0_open(mod, dev);
+ rc = mod->methods->open(mod, KEYSTORE_KEYMASTER, reinterpret_cast<struct hw_device_t**>(dev));
if (rc) {
ALOGE("could not open keymaster device in %s (%s)",
KEYSTORE_HARDWARE_MODULE_ID, strerror(-rc));
goto out;
}
+ // Wrap older hardware modules with a softkeymaster adapter.
+ if ((*dev)->common.module->module_api_version >= KEYMASTER_MODULE_API_VERSION_1_0) {
+ return 0;
+ }
+ softkeymaster =
+ new keymaster::SoftKeymasterDevice(reinterpret_cast<keymaster0_device_t*>(*dev));
+ *dev = softkeymaster->keymaster_device();
return 0;
out:
@@ -142,8 +150,8 @@ static int fallback_keymaster_device_initialize(keymaster1_device_t** dev) {
return 0;
}
-static void keymaster_device_release(keymaster0_device_t* dev) {
- keymaster0_close(dev);
+static void keymaster_device_release(keymaster1_device_t* dev) {
+ dev->common.close(&dev->common);
}
/***************
@@ -3026,7 +3034,7 @@ int main(int argc, char* argv[]) {
return 1;
}
- keymaster0_device_t* dev;
+ keymaster1_device_t* dev;
if (keymaster_device_initialize(&dev)) {
ALOGE("keystore keymaster could not be initialized; exiting");
return 1;
@@ -3051,7 +3059,7 @@ int main(int argc, char* argv[]) {
ALOGI("SELinux: Keystore SELinux is disabled.\n");
}
- KeyStore keyStore(&entropy, reinterpret_cast<keymaster1_device_t*>(dev), fallback);
+ KeyStore keyStore(&entropy, dev, fallback);
keyStore.initialize();
android::sp<android::IServiceManager> sm = android::defaultServiceManager();
android::sp<android::KeyStoreProxy> proxy = new android::KeyStoreProxy(&keyStore);