Baseline update from LYNQ_SDK_ASR_T108_V05.03.01.00(kernel build error.)

Change-Id: I56fc72cd096e82c589920026553170e5cb9692eb
diff --git a/mbtk/include/ql_v2/ql_tee_service.h b/mbtk/include/ql_v2/ql_tee_service.h
new file mode 100755
index 0000000..7b724c1
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_service.h
@@ -0,0 +1,306 @@
+#ifndef QL_TEE_SERVICE_H
+#define QL_TEE_SERVICE_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+
+#define SINGLE_OBJ_MAX_SIZE (512 * 1024)
+#define OPERATION_BUF_MAX_SIZE 4096
+
+
+typedef enum {
+    QL_TEE_OK = 0,
+
+    QL_KM_ERROR_ROOT_OF_TRUST_ALREADY_SET = -1,
+    QL_KM_ERROR_UNSUPPORTED_PURPOSE = -2,
+    QL_KM_ERROR_INCOMPATIBLE_PURPOSE = -3,
+    QL_KM_ERROR_UNSUPPORTED_ALGORITHM = -4,
+    QL_KM_ERROR_INCOMPATIBLE_ALGORITHM = -5,
+    QL_KM_ERROR_UNSUPPORTED_KEY_SIZE = -6,
+    QL_KM_ERROR_UNSUPPORTED_BLOCK_MODE = -7,
+    QL_KM_ERROR_INCOMPATIBLE_BLOCK_MODE = -8,
+    QL_KM_ERROR_UNSUPPORTED_MAC_LENGTH = -9,
+    QL_KM_ERROR_UNSUPPORTED_PADDING_MODE = -10,
+    QL_KM_ERROR_INCOMPATIBLE_PADDING_MODE = -11,
+    QL_KM_ERROR_UNSUPPORTED_DIGEST = -12,
+    QL_KM_ERROR_INCOMPATIBLE_DIGEST = -13,
+    QL_KM_ERROR_INVALID_EXPIRATION_TIME = -14,
+    QL_KM_ERROR_INVALID_USER_ID = -15,
+    QL_KM_ERROR_INVALID_AUTHORIZATION_TIMEOUT = -16,
+    QL_KM_ERROR_UNSUPPORTED_KEY_FORMAT = -17,
+    QL_KM_ERROR_INCOMPATIBLE_KEY_FORMAT = -18,
+    QL_KM_ERROR_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM = -19,   /* For PKCS8 & PKCS12 */
+    QL_KM_ERROR_UNSUPPORTED_KEY_VERIFICATION_ALGORITHM = -20, /* For PKCS8 & PKCS12 */
+    QL_KM_ERROR_INVALID_INPUT_LENGTH = -21,
+    QL_KM_ERROR_KEY_EXPORT_OPTIONS_INVALID = -22,
+    QL_KM_ERROR_DELEGATION_NOT_ALLOWED = -23,
+    QL_KM_ERROR_KEY_NOT_YET_VALID = -24,
+    QL_KM_ERROR_KEY_EXPIRED = -25,
+    QL_KM_ERROR_KEY_USER_NOT_AUTHENTICATED = -26,
+    QL_KM_ERROR_OUTPUT_PARAMETER_NULL = -27,
+    QL_KM_ERROR_INVALID_OPERATION_HANDLE = -28,
+    QL_KM_ERROR_INSUFFICIENT_BUFFER_SPACE = -29,
+    QL_KM_ERROR_VERIFICATION_FAILED = -30,
+    QL_KM_ERROR_TOO_MANY_OPERATIONS = -31,
+    QL_KM_ERROR_UNEXPECTED_NULL_POINTER = -32,
+    QL_KM_ERROR_INVALID_KEY_BLOB = -33,
+    QL_KM_ERROR_IMPORTED_KEY_NOT_ENCRYPTED = -34,
+    QL_KM_ERROR_IMPORTED_KEY_DECRYPTION_FAILED = -35,
+    QL_KM_ERROR_IMPORTED_KEY_NOT_SIGNED = -36,
+    QL_KM_ERROR_IMPORTED_KEY_VERIFICATION_FAILED = -37,
+    QL_KM_ERROR_INVALID_ARGUMENT = -38,
+    QL_KM_ERROR_UNSUPPORTED_TAG = -39,
+    QL_KM_ERROR_INVALID_TAG = -40,
+    QL_KM_ERROR_MEMORY_ALLOCATION_FAILED = -41,
+    QL_KM_ERROR_IMPORT_PARAMETER_MISMATCH = -44,
+    QL_KM_ERROR_SECURE_HW_ACCESS_DENIED = -45,
+    QL_KM_ERROR_OPERATION_CANCELLED = -46,
+    QL_KM_ERROR_CONCURRENT_ACCESS_CONFLICT = -47,
+    QL_KM_ERROR_SECURE_HW_BUSY = -48,
+    QL_KM_ERROR_SECURE_HW_COMMUNICATION_FAILED = -49,
+    QL_KM_ERROR_UNSUPPORTED_EC_FIELD = -50,
+    QL_KM_ERROR_MISSING_NONCE = -51,
+    QL_KM_ERROR_INVALID_NONCE = -52,
+    QL_KM_ERROR_MISSING_MAC_LENGTH = -53,
+    QL_KM_ERROR_KEY_RATE_LIMIT_EXCEEDED = -54,
+    QL_KM_ERROR_CALLER_NONCE_PROHIBITED = -55,
+    QL_KM_ERROR_KEY_MAX_OPS_EXCEEDED = -56,
+    QL_KM_ERROR_INVALID_MAC_LENGTH = -57,
+    QL_KM_ERROR_MISSING_MIN_MAC_LENGTH = -58,
+    QL_KM_ERROR_UNSUPPORTED_MIN_MAC_LENGTH = -59,
+    QL_KM_ERROR_UNSUPPORTED_KDF = -60,
+    QL_KM_ERROR_UNSUPPORTED_EC_CURVE = -61,
+    QL_KM_ERROR_KEY_REQUIRES_UPGRADE = -62,
+    QL_KM_ERROR_ATTESTATION_CHALLENGE_MISSING = -63,
+    QL_KM_ERROR_KEYMASTER_NOT_CONFIGURED = -64,
+    QL_KM_ERROR_ATTESTATION_APPLICATION_ID_MISSING = -65,
+
+    QL_KM_ERROR_UNIMPLEMENTED = -100,
+    QL_KM_ERROR_VERSION_MISMATCH = -101,
+
+    QL_KM_ERROR_UNKNOWN_ERROR = -1000,
+
+    QL_SS_ERROR_GENERIC = -200,
+    QL_SS_ERROR_ACCESS_DENIED = -201,
+    QL_SS_ERROR_CANCEL = -202,
+    QL_SS_ERROR_ACCESS_CONFLICT = -203,
+    QL_SS_ERROR_EXCESS_DATA = -204,
+    QL_SS_ERROR_BAD_FORMAT = -205,
+    QL_SS_ERROR_BAD_PARAMETERS = -206,
+    QL_SS_ERROR_BAD_STATE = -207,
+    QL_SS_ERROR_ITEM_NOT_FOUND = -208,
+    QL_SS_ERROR_NOT_IMPLEMENTED = -209,
+    QL_SS_ERROR_NOT_SUPPORTED = -210,
+    QL_SS_ERROR_NO_DATA = -211,
+    QL_SS_ERROR_OUT_OF_MEMORY = -212,
+    QL_SS_ERROR_BUSY = -213,
+    QL_SS_ERROR_COMMUNICATION = -214,
+    QL_SS_ERROR_SECURITY = -215,
+    QL_SS_ERROR_SHORT_BUFFER = -216,
+    QL_SS_ERROR_EXTERNAL_CANCEL = -217,
+
+    QL_SS_ERROR_TARGET_DEAD = -2000,
+    QL_SS_ERROR_UNKNOWN_ERROR = -2001,
+} ql_tee_error_t;
+
+
+typedef enum {
+    QL_SS_SEEK_SET = 0,
+    QL_SS_SEEK_CUR = 1,
+    QL_SS_SEEK_END = 2
+} ql_ss_whence_t;
+
+
+
+typedef enum {
+    QL_KM_ALGO_RSA = 1,
+    QL_KM_ALGO_EC = 3,
+    QL_KM_ALGO_AES = 32,
+} ql_km_algo_t;
+
+typedef enum {
+    QL_KM_MODE_ECB = 1,
+    QL_KM_MODE_CBC = 2,
+    QL_KM_MODE_CTR = 3,
+    QL_KM_MODE_GCM = 32,
+} ql_km_aes_mode_t;
+
+
+typedef enum {
+    QL_KM_PAD_RSA_NONE = 1, 
+    QL_KM_PAD_RSA_OAEP = 2,
+    QL_KM_PAD_RSA_PSS = 3,
+    QL_KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
+    QL_KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
+} ql_km_rsa_padding_t;
+
+
+typedef enum {
+    QL_KM_DIGEST_NONE = 0,
+    QL_KM_DIGEST_MD5 = 1, 
+    QL_KM_DIGEST_SHA1 = 2,
+    QL_KM_DIGEST_SHA_2_224 = 3,
+    QL_KM_DIGEST_SHA_2_256 = 4,
+    QL_KM_DIGEST_SHA_2_384 = 5,
+    QL_KM_DIGEST_SHA_2_512 = 6,
+} ql_km_digest_t;
+
+
+typedef enum {
+    QL_KM_EC_CURVE_P_224 = 0,
+    QL_KM_EC_CURVE_P_256 = 1,
+    QL_KM_EC_CURVE_P_384 = 2,
+    QL_KM_EC_CURVE_P_521 = 3,
+} ql_km_ec_curve_t;
+
+
+typedef enum {
+	QL_KM_PURPOSE_ENCRYPT = 0,    /* Usable with RSA, EC and AES keys. */
+	QL_KM_PURPOSE_DECRYPT = 1,    /* Usable with RSA, EC and AES keys. */
+	QL_KM_PURPOSE_SIGN = 2,       /* Usable with RSA, EC keys. */
+	QL_KM_PURPOSE_VERIFY = 3,     /* Usable with RSA, EC keys. */
+} ql_km_purpose_t;
+
+
+typedef struct {
+    uint8_t *key_blob;
+    uint32_t key_blob_size;
+} ql_km_key_t;
+
+
+typedef struct {
+    ql_km_algo_t algo;
+    union {
+        struct {
+            ql_km_aes_mode_t mode;
+            uint32_t bits;
+            uint32_t min_mac_len;
+        } aes_args;
+        struct {
+            uint64_t exponent;
+            uint32_t bits;
+        } rsa_args;
+        struct {
+            ql_km_ec_curve_t curve;
+        } ec_args;
+    };
+} ql_km_key_args_t;
+
+
+typedef struct {
+    uint8_t *data;
+    uint32_t data_size;
+} ql_km_blob_t;
+
+
+typedef struct {
+    ql_km_algo_t algo;
+    ql_km_purpose_t purpose;
+    uint64_t handle;
+} ql_km_operation_handle_t;
+
+
+typedef struct {
+    ql_km_algo_t algo;
+    ql_km_purpose_t purpose;
+    union {
+        struct {
+            ql_km_aes_mode_t mode;
+            ql_km_blob_t iv;
+        } aes_args;
+        struct {
+            ql_km_rsa_padding_t padding;
+            ql_km_digest_t digest;
+        } rsa_args;
+    };
+} ql_km_operation_args_t;
+
+
+/*
+ * Secure Storage APIs
+ */
+ql_tee_error_t ql_ss_initialize();
+
+void ql_ss_deinitialize();
+
+ql_tee_error_t ql_ss_open(const void *id, uint32_t id_size, uint32_t *object);
+
+ql_tee_error_t ql_ss_create(const void *id, uint32_t id_size,
+                            void *data, uint32_t data_size,
+                            uint32_t *object, bool overwrite);
+
+ql_tee_error_t ql_ss_close(uint32_t object);
+
+ql_tee_error_t ql_ss_read(uint32_t object, void *data, uint32_t data_size, uint32_t *count);
+
+ql_tee_error_t ql_ss_write(uint32_t object, void *data, uint32_t data_size);
+
+ql_tee_error_t ql_ss_seek(uint32_t object, int32_t offset, ql_ss_whence_t whence);
+
+ql_tee_error_t ql_ss_unlink(uint32_t object);
+
+ql_tee_error_t ql_ss_trunc(uint32_t object, uint32_t len);
+
+ql_tee_error_t ql_ss_rename(uint32_t object, const void *id, uint32_t id_size);
+
+ql_tee_error_t ql_ss_get_info(uint32_t object, uint32_t *obj_size, uint32_t *cur_pos);
+
+
+/*
+ * Key Master APIs
+ */
+
+ql_tee_error_t ql_km_initialize();
+
+void ql_km_deinitialize();
+
+ql_tee_error_t ql_km_gen_key(const ql_km_key_args_t *key_args, ql_km_key_t *key);
+
+ql_tee_error_t ql_km_import_key(const ql_km_key_args_t *key_args, const ql_km_blob_t *rawkey, ql_km_key_t *key);
+
+ql_tee_error_t ql_km_destroy_key(ql_km_key_t *key);
+
+ql_tee_error_t ql_km_destroy_blob(ql_km_blob_t *blob);
+
+ql_tee_error_t ql_km_operation_begin(const ql_km_key_t *key, 
+                                     ql_km_operation_args_t *op_args,
+                                     ql_km_operation_handle_t *op_handle);
+
+
+ql_tee_error_t ql_km_operation_update(ql_km_operation_handle_t *op_handle, 
+                                      uint8_t *input, uint32_t input_size,
+                                      ql_km_blob_t *output, uint32_t *consumed);
+
+/*
+ * ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle, 
+ *                                       uint8_t *input, uint32_t input_size, 
+ *                                       ql_km_blob_t *output);
+ * 
+ * ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle, 
+ *                                       uint8_t *input, uint32_t input_size, 
+ *                                       ql_km_blob_t *output, uint8_t *signature, uint32_t sig_size);
+ * 
+ */
+ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle, 
+                                      uint8_t *input, uint32_t input_size, 
+                                      ql_km_blob_t *output, ...);
+
+
+ql_tee_error_t ql_km_export_key(ql_km_key_t *keypair, ql_km_blob_t *pubkey);
+
+
+ql_tee_error_t ql_km_get_key_algo(ql_km_key_t *keyblob, ql_km_algo_t *algo);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* QL_TEE_SERVICE_H */
\ No newline at end of file