diff options
Diffstat (limited to 'keymaster/keymaster_qcom.h')
| -rw-r--r-- | keymaster/keymaster_qcom.h | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/keymaster/keymaster_qcom.h b/keymaster/keymaster_qcom.h deleted file mode 100644 index c6dd4e5..0000000 --- a/keymaster/keymaster_qcom.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You may - * obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -#ifndef ANDROID_HARDWARE_QCOM_KEYMASTER_H -#define ANDROID_HARDWARE_QCOM_KEYMASTER_H - -#include <stdint.h> -#include <sys/cdefs.h> -#include <sys/types.h> - -__BEGIN_DECLS - -#ifdef _ION_HEAP_MASK_COMPATIBILITY_WA -#define ION_HEAP_MASK heap_mask -#else -#define ION_HEAP_MASK heap_id_mask -#endif - -/** - * The id of this module - */ -#define QCOM_KEYSTORE_KEYMASTER "qcom_keymaster" -/** - * Operation result - */ -#define KEYMATER_SUCCESS 0 -#define KEYMASTER_FAILURE -1 - -/** - * The API level of this version of the header. The allows the implementing - * module to recognize which API level of the client it is dealing with in - * the case of pre-compiled binary clients. - */ -#define QCOM_KEYMASTER_API_VERSION KEYMASTER_MODULE_API_VERSION_0_3 - -#define KM_MAGIC_NUM (0x4B4D4B42) /* "KMKB" Key Master Key Blob in hex */ -#define KM_KEY_SIZE_MAX (512) /* 4096 bits */ -#define KM_IV_LENGTH (16) /* AES128 CBC IV */ -#define KM_HMAC_LENGTH (32) /* SHA2 will be used for HMAC */ - -struct qcom_km_key_blob { - uint32_t magic_num; - uint32_t version_num; - uint8_t modulus[KM_KEY_SIZE_MAX]; - uint32_t modulus_size; - uint8_t public_exponent[KM_KEY_SIZE_MAX]; - uint32_t public_exponent_size; - uint8_t iv[KM_IV_LENGTH]; - uint8_t encrypted_private_exponent[KM_KEY_SIZE_MAX]; - uint32_t encrypted_private_exponent_size; - uint8_t hmac[KM_HMAC_LENGTH]; -}; -typedef struct qcom_km_key_blob qcom_km_key_blob_t; -/** - * Commands supported - */ -enum keymaster_cmd_t { - /* - * List the commands supportedin by the hardware. - */ - KEYMASTER_GENERATE_KEYPAIR = 0x00000001, - KEYMASTER_IMPORT_KEYPAIR = 0x00000002, - KEYMASTER_SIGN_DATA = 0x00000003, - KEYMASTER_VERIFY_DATA = 0x00000004, -}; - - -/** - * Command to Generate a public and private key. The key data returned - * (by secure app) is in shared buffer at offset of "key_blob" and is opaque - * - * cmd_id : Command issue to secure app - * key_type : Currently on RSA_TYPE is supported - * rsa_params : Parameters needed to generate an RSA key - */ - struct keymaster_gen_keypair_cmd { - keymaster_cmd_t cmd_id; - keymaster_keypair_t key_type; - keymaster_rsa_keygen_params_t rsa_params; -}; -typedef struct keymaster_gen_keypair_cmd keymaster_gen_keypair_cmd_t; - -/** - * Response to Generate a public and private key. The key data returned - * (by secure app) is in shared buffer at offset of "key_blob" and is opaque - * - * cmd_id : Command issue to secure app - * key_blob : key blob data - * key_blob_len : Total length of key blob information - * status : Result (success 0, or failure -1) - */ -struct keymaster_gen_keypair_resp { - keymaster_cmd_t cmd_id; - qcom_km_key_blob_t key_blob; - uint32_t key_blob_len; - int32_t status; -}; -typedef struct keymaster_gen_keypair_resp keymaster_gen_keypair_resp_t; - - -/** - * Command to import a public and private key pair. The imported keys - * will be in PKCS#8 format with DER encoding (Java standard). The key - * data returned (by secure app) is in shared buffer at offset of - * "key_blob" and is opaque - * - * cmd_id : Command issue to secure app - * pkcs8_key : Pointer to pkcs8 formatted key information - * pkcs8_key_len: PKCS8 formatted key length - */ -struct keymaster_import_keypair_cmd { - keymaster_cmd_t cmd_id; - uint32_t pkcs8_key; - uint32_t pkcs8_key_len; -}; -typedef struct keymaster_import_keypair_cmd keymaster_import_keypair_cmd_t; - -/** - * Response to import a public and private key. The key data returned - * (by secure app) is in shared buffer at offset of "key_blob" and is opaque - * - * cmd_id : Command issue to secure app - * key_blob : key blob data - * key_blob_len : Total length of key blob information - * status : Result (success 0, or failure -1) - */ -struct keymaster_import_keypair_resp { - keymaster_cmd_t cmd_id; - qcom_km_key_blob_t key_blob; - uint32_t key_blob_len; - int32_t status; -}; -typedef struct keymaster_import_keypair_resp keymaster_import_keypair_resp_t; - -/** - * Command to sign data using a key info generated before. This can use either - * an asymmetric key or a secret key. - * The signed data is returned (by secure app) at offset of data + dlen. - * - * cmd_id : Command issue to secure app - * sign_param : - * key_blob : Key data information (in shared buffer) - * data : Pointer to plain data buffer - * dlen : Plain data length - */ -struct keymaster_sign_data_cmd { - keymaster_cmd_t cmd_id; - keymaster_rsa_sign_params_t sign_param; - qcom_km_key_blob_t key_blob; - uint32_t data; - uint32_t dlen; -}; -typedef struct keymaster_sign_data_cmd keymaster_sign_data_cmd_t; - -/** - * Response to sign data response - * - * cmd_id : Command issue to secure app - * signed_data : signature - * sig_len : Signed data length - * status : Result (success 0, or failure -1) - */ -struct keymaster_sign_data_resp { - keymaster_cmd_t cmd_id; - uint8_t signed_data[KM_KEY_SIZE_MAX]; - uint32_t sig_len; - int32_t status; -}; - -typedef struct keymaster_sign_data_resp keymaster_sign_data_resp_t; - -/** - * Command to verify data using a key info generated before. This can use either - * an asymmetric key or a secret key. - * - * cmd_id : Command issue to secure app - * sign_param : - * key_blob : Key data information (in shared buffer) - * key_blob_len: Total key length - * signed_data : Pointer to signed data buffer - * signed_dlen : Signed data length - * signature : Offset to the signature data buffer (from signed data buffer) - * slen : Signature data length - */ -struct keymaster_verify_data_cmd { - keymaster_cmd_t cmd_id; - keymaster_rsa_sign_params_t sign_param; - qcom_km_key_blob_t key_blob; - uint32_t signed_data; - uint32_t signed_dlen; - uint32_t signature; - uint32_t slen; -}; -typedef struct keymaster_verify_data_cmd keymaster_verify_data_cmd_t; -/** - * Response to verify data - * - * cmd_id : Command issue to secure app - * status : Result (success 0, or failure -1) - */ -struct keymaster_verify_data_resp { - keymaster_cmd_t cmd_id; - int32_t status; -}; -typedef struct keymaster_verify_data_resp keymaster_verify_data_resp_t; - -__END_DECLS - -#endif // ANDROID_HARDWARE_QCOM_KEYMASTER_H |
