diff options
-rw-r--r-- | include/hardware/audio_amplifier.h | 2 | ||||
-rw-r--r-- | include/hardware/bluetooth.h | 14 | ||||
-rw-r--r-- | include/hardware/keymaster1.h | 49 | ||||
-rw-r--r-- | include/hardware/keymaster_defs.h | 21 | ||||
-rw-r--r-- | include/hardware/power.h | 10 | ||||
-rw-r--r-- | modules/sensors/multihal.cpp | 8 |
6 files changed, 99 insertions, 5 deletions
diff --git a/include/hardware/audio_amplifier.h b/include/hardware/audio_amplifier.h index 4305094..e3477d5 100644 --- a/include/hardware/audio_amplifier.h +++ b/include/hardware/audio_amplifier.h @@ -38,6 +38,8 @@ __BEGIN_DECLS #define AMPLIFIER_DEVICE_API_VERSION_2_0 HARDWARE_DEVICE_API_VERSION(2, 0) #define AMPLIFIER_DEVICE_API_VERSION_CURRENT AMPLIFIER_DEVICE_API_VERSION_2_0 +struct str_parms; + typedef struct amplifier_device { /** * Common methods of the amplifier device. This *must* be the first member diff --git a/include/hardware/bluetooth.h b/include/hardware/bluetooth.h index 2cba754..5e8b468 100644 --- a/include/hardware/bluetooth.h +++ b/include/hardware/bluetooth.h @@ -445,7 +445,7 @@ typedef struct { int (*init)(bt_callbacks_t* callbacks ); /** Enable Bluetooth. */ - int (*enable)(void); + int (*enable)(bool guest_mode); /** Disable Bluetooth. */ int (*disable)(void); @@ -564,6 +564,18 @@ typedef struct { /** BT stack Test interface */ const void* (*get_testapp_interface)(int test_app_profile); + + /** + * Clear (reset) the dynamic portion of the device interoperability database. + */ + void (*interop_database_clear)(void); + + /** + * Add a new device interoperability workaround for a remote device whose + * first |len| bytes of the its device address match |addr|. + * NOTE: |feature| has to match an item defined in interop_feature_t (interop.h). + */ + void (*interop_database_add)(uint16_t feature, const bt_bdaddr_t *addr, size_t len); } bt_interface_t; /** TODO: Need to add APIs for Service Discovery, Service authorization and diff --git a/include/hardware/keymaster1.h b/include/hardware/keymaster1.h index afd202c..ac2cc2b 100644 --- a/include/hardware/keymaster1.h +++ b/include/hardware/keymaster1.h @@ -530,6 +530,55 @@ struct keymaster1_device { */ keymaster_error_t (*abort)(const struct keymaster1_device* dev, keymaster_operation_handle_t operation_handle); + + /** + * Generates a pair of ATTK defined in SOTER. Save the private key into RPMB. + * Note that the ATTK generated will never be touched outside the keymaster. + * + * \param[in] dev The keymaster device structure. + * + * \param[in] copy_num The number of copies that will be saved in the RPMB. + */ + keymaster_error_t (*generate_attk_key_pair)(const struct keymaster1_device* dev, + const uint8_t copy_num); + + /** + * Verify the existance ATTK defined in SOTER. + * + * \param[in] dev The keymaster device structure. + * + * Returns: 0 if the ATTK exists. + */ + keymaster_error_t (*verify_attk_key_pair)(const struct keymaster1_device* dev); + + /** + * Export the public key of ATTK in PEM format. + * + * \param[in] dev The keymaster device structure. + * + * \param[out] pub_key_data The public key data in X.509v3 format PEM encoded + * + * \param[out] pub_key_data_length The length of the public key data. + */ + keymaster_error_t (*export_attk_public_key)(const struct keymaster1_device* dev, + const uint8_t* pub_key_data, + const size_t pub_key_data_length); + + /** + * Get Unique device ID. + * + * \param[in] dev The keymaster device structure. + * + * \param[out] device_id The unique id for each device, format as below: + * 1.bytes 0-3: Identify each silicon provider id. + * 2.bytes 4-7: SoC model ID, defined by each silicon provider + * 3.bytes 8-15: Public Chip Serial *Number of SoC, defined by each silicon provider + * + * \param[out] device_id_length The length of the device id. + */ + keymaster_error_t (*get_device_id)(const struct keymaster1_device* dev, + const uint8_t* device_id, + const size_t device_id_length); }; typedef struct keymaster1_device keymaster1_device_t; diff --git a/include/hardware/keymaster_defs.h b/include/hardware/keymaster_defs.h index 5be956d..1a723c9 100644 --- a/include/hardware/keymaster_defs.h +++ b/include/hardware/keymaster_defs.h @@ -124,6 +124,27 @@ typedef enum { authentication has been performed. Structure defined in hw_auth_token_t in hw_auth_token.h. */ KM_TAG_MAC_LENGTH = KM_UINT | 1003, /* MAC or AEAD authentication tag length in bits. */ + + /* Tags used only for SOTER */ + /* Tags used only to check if the key is for SOTER */ + KM_TAG_SOTER_IS_FROM_SOTER = KM_BOOL | 11000, + /* Attach signature signed with ATTK[pri] while exporting public key */ + KM_TAG_SOTER_IS_AUTO_SIGNED_WITH_ATTK_WHEN_GET_PUBLIC_KEY = KM_BOOL | 11001, + /* Attach signature signed with specified private key while exporting public key */ + KM_TAG_SOTER_IS_AUTO_SIGNED_WITH_COMMON_KEY_WHEN_GET_PUBLIC_KEY = KM_BOOL | 11002, + /* keyalias for the keypair of KM_TAG_SOTER_IS_AUTO_SIGNED_WITH_COMMON_KEY_WHEN_GET_PUBLIC_KEY */ + KM_TAG_SOTER_AUTO_SIGNED_COMMON_KEY_WHEN_GET_PUBLIC_KEY = KM_BYTES | 11003, + /* Attach counter while exporting publick key */ + KM_TAG_SOTER_AUTO_ADD_COUNTER_WHEN_GET_PUBLIC_KEY = KM_BOOL | 11004, + /* Attach secmsg(TEE_Name, TEE_Version, Fingerprint_Sensor_Name, Fingerprint_Sensor_Version) + fingerprint_id and counter while signing */ + KM_TAG_SOTER_IS_SECMSG_FID_COUNTER_SIGNED_WHEN_SIGN = KM_BOOL | 11005, + /* use and set ATTK index to next backup ATTK */ + KM_TAG_SOTER_USE_NEXT_ATTK = KM_BOOL | 11006, + /* attach soter uid */ + KM_TAG_SOTER_UID = KM_UINT | 11007, + /* attach key blob of KM_TAG_SOTER_AUTO_SIGNED_COMMON_KEY_WHEN_GET_PUBLIC_KEY if needed */ + KM_TAG_SOTER_AUTO_SIGNED_COMMON_KEY_WHEN_GET_PUBLIC_KEY_BLOB = KM_BYTES | 11008, } keymaster_tag_t; /** diff --git a/include/hardware/power.h b/include/hardware/power.h index c266d8b..2eb98fe 100644 --- a/include/hardware/power.h +++ b/include/hardware/power.h @@ -62,6 +62,15 @@ typedef enum { } feature_t; /** + * Process info, passed as an opaque handle when + * using POWER_HINT_LAUNCH_BOOST. + */ +typedef struct launch_boost_info { + pid_t pid; + const char* packageName; +} launch_boost_info_t; + +/** * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM * and the fields of this data structure must begin with hw_module_t * followed by module specific information. @@ -170,7 +179,6 @@ typedef struct power_module { } power_module_t; - __END_DECLS #endif // ANDROID_INCLUDE_HARDWARE_POWER_H diff --git a/modules/sensors/multihal.cpp b/modules/sensors/multihal.cpp index 5fedd4d..48f2be3 100644 --- a/modules/sensors/multihal.cpp +++ b/modules/sensors/multihal.cpp @@ -36,6 +36,8 @@ #include <dlfcn.h> #include <SensorEventQueue.h> +#include <limits.h> +#include <stdlib.h> static const char* CONFIG_FILENAME = "/system/etc/sensors/hals.conf"; static const int MAX_CONF_LINE_LENGTH = 1024; @@ -488,14 +490,14 @@ static void lazy_init_modules() { pthread_mutex_unlock(&init_modules_mutex); return; } - std::vector<std::string> *so_paths = new std::vector<std::string>(); - get_so_paths(so_paths); + std::vector<std::string> so_paths; + get_so_paths(&so_paths); // dlopen the module files and cache their module symbols in sub_hw_modules sub_hw_modules = new std::vector<hw_module_t *>(); dlerror(); // clear any old errors const char* sym = HAL_MODULE_INFO_SYM_AS_STR; - for (std::vector<std::string>::iterator it = so_paths->begin(); it != so_paths->end(); it++) { + for (std::vector<std::string>::iterator it = so_paths.begin(); it != so_paths.end(); it++) { const char* path = it->c_str(); void* lib_handle = dlopen(path, RTLD_LAZY); if (lib_handle == NULL) { |