#ifndef __EM_ERROR_H
#define __EM_ERROR_H

/*
 * ==============================================================
 * Error Structure
 *
 * 0xF0000000
 * F000 : Function Number
 * 0000 : Error Number
 *  - 0x0000 ~ 0x000F : Reserved for parameter on function
 *
 * ==============================================================
 */

#define EM_SUCCESS                                           0
#define EM_SUCCESS_RECOVERY_COUNTER                          1
#define EM_DEV_OK                                            0xFFFF1025

#define EM_ERR_TA_MAIN_TEEGRIS                               0xF0010000
/* EM_TA_MAIN */
#define EM_ERR_TA_MAIN_REQ_BUF_NULL                          0xF0010010
#define EM_ERR_TA_MAIN_RSP_BUF_NULL                          0xF0010011
#define EM_ERR_TA_MAIN_REQ_BUF_LEN                           0xF0010012
#define EM_ERR_TA_MAIN_RSP_BUF_LEN                           0xF0010013
#define EM_ERR_TA_MAIN_REQ_BUF_MEM_ACCESS                    0xF0010014
#define EM_ERR_TA_MAIN_REQ_BUF_MEM_ALLOC                     0xF0010015
#define EM_ERR_TA_MAIN_RSP_BUF_MEM_ACCESS                    0xF0010016
#define EM_ERR_TA_MAIN_CTX_MEM_ALLOC                         0xF0010017
#define EM_ERR_TA_MAIN_REQ_INVALID_ARG                       0xF0010018
#define EM_ERR_TA_MAIN_RSP_INVALID_ARG                       0xF0010019
#define EM_ERR_TA_MAIN_RSP_BUF_MEM_ALLOC                     0xF0010020

/* EM_APP_MAIN */
#define EM_ERR_APP_MAIN                                      0xF0020000

/* KINIBI */
#define EM_ERR_TL_MAIN_INVALID_TCI_BUFFER                    0xF0030010
#define EM_ERR_TL_MAIN_INVALID_ARG                           0xF0030011
#define EM_ERR_TL_MAIN_CTX_MEM_ALLOC                         0xF0030012
#define EM_ERR_TL_MAIN_REQ_BUF_NULL                          0xF0030013
#define EM_ERR_TL_MAIN_RSP_BUF_NULL                          0xF0030014

/* EM_CMD_PROCESSING */
#define EM_ERR_CMD_HANDLER                                   0xF0040000

/* EM_CONTEXT_MAKE_REQUEST() */
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST                       0xF0050000
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST_VERSION               0xF0050010
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST_LEN_MESSAGE           0xF0050011
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST_LEN_CERT              0xF0050012
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST_LEN_ESS_PREFIXBODY    0xF0050013
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST_LEN_RECOVERY_MESSAGE  0xF0050014
#define EM_ERR_EM_CONTEXT_MAKE_REQUEST_ALLOC_REQ             0xF0050015

/* EM_ESI_INITIALIZE */
#define EM_ERR_EM_ESI_INIT                                   0xF0060000
#define EM_ERR_EM_ESI_INIT_UNKNOWN_VERSION                   0xF0060010

/* EM_ESI_GET_ALL_ITEM */
#define EM_ERR_EM_ESI_GET_ALL_ITEM                           0xF0070000
#define EM_ERR_EM_ESI_GET_ALL_ITEM_META_DATA                 0xF0070010
#define EM_ERR_EM_ESI_GET_ALL_ITEM_BUF_SIZE                  0xF0070011
#define EM_ERR_EM_ESI_GET_ALL_ITEM_ALLOC_ITEM_BUF            0xF0070012

/* EM_ESI_UPDATE */
#define EM_ERR_EM_ESI_UPDATE                                 0XF0080000

/* EM_ESI_UPDATE_ITEM */
#define EM_ERR_EM_ESI_UPDATE_ITEM                            0xF0090000
#define EM_ERR_EM_ESI_UPDATE_BUFFER_SIZE                     0xF0090010
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_ITEMS                0XF0090011
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_STATE_BUFFER         0xF0090012
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_TUC_BUFFER           0xF0090013
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_TUC_BUFFER2          0xF0090014
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_P                    0xF0090015
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_DATA_BUFFER          0xF0090016
#define EM_ERR_EM_ESI_UPDATE_ITEM_UNKNOWN_TYPE               0xF0090017
#define EM_ERR_EM_ESI_UPDATE_ITEM_UNKNOWN_TYPE2              0xF0090018
#define EM_ERR_EM_ESI_UPDATE_ITEM_ALLOC_DATA_BUF_2           0xF0090019

#define EM_ERR_EM_ESI_REMOVE_ITEM                            0xF00A0000
#define EM_ERR_EM_ESI_REMOVE_ITEM_ALLOC_ITEM_BUFFER          0xF00A0010
#define EM_ERR_EM_ESI_REMOVE_ITEM_NOT_EXISTS_TYPE            0xF00A0011
#define EM_ERR_EM_ESI_REMOVE_ITEM_NO_ITEM                    0xF00A0012
#define EM_ERR_EM_ESI_REMOVE_ITEM_ALLOC_NEW_BUFFER           0xF00A0013
#define EM_ERR_EM_ESI_REMOVE_ITEM_ALLOC_DATA_BUFFER          0xF00A0014

#define EM_ERR_EM_ESI_GET_ITEM                               0xF00B0000
#define EM_ERR_EM_ESI_GET_ITEM_ITEM_IS_NOT_EXISTS            0xF00B0010
#define EM_ERR_EM_ESI_GET_ITEM_ALLOC_ITEM_BUFFER             0xF00B0011
#define EM_ERR_EM_ESI_GET_ITEM_BUFFER_NOT_ENOUGH             0xF00B0012

#define EM_ERR_EM_ESI_GET_TUC_TABLE                          0xF00C0000
#define EM_ERR_EM_ESI_GET_TUC_TABLE_UNKNOWN_VERSION          0xF00C0010
#define EM_ERR_EM_ESI_GET_TUC_TABLE_NOT_ENOUGH               0xF00C0011
#define EM_ERR_EM_ESI_GET_TUC_ALLOC_BUFFER                   0xF00C0012

#define EM_ERR_EM_ESI_CHECK_VALIDATION_V20                   0xF00D0000
#define EM_ERR_EM_ESI_CHECK_VALIDATION_V20_CORE              0xF00D0010
#define EM_ERR_EM_ESI_CHECK_VALIDATION_V20_CORE_MG           0xF00D0011
#define EM_ERR_EM_ESI_CHECK_VALIDATION_V20_HMAC              0xF00D0012
#define EM_ERR_EM_ESI_CHECK_VALIDATION_V20_COUNTER           0xF00D0013

#define EM_ERR_EM_GET_RANDOM                                 0xF00E0000
#define EM_ERR_EM_GET_RANDOME_LEN                            0xF00E0010

#define EM_ERR_EM_CRYPTO_KDF_TEEGRIS                         0xF00F0000
#define EM_ERR_EM_CRYPTO_KDF_TEEGRIS_ALL                     0xF00F0010

/* EM_CRYPTO_VERIFY_CERT */
#define EM_ERR_EM_CRYPTO_VERIFY_CERT                         0xF0100000
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_LEN                     0xF0100010
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_READ_CA_PUBKEY          0xF0100011
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_MEMORY_PUB_KEY          0xF0100012
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_SET_RSA_PROP            0xF0100013
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_SERVER_CERT             0xF0100014
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_FAILED_VERIFY           0xF0100015
#define EM_ERR_EM_CRYPTO_VERIFY_DCERT_READ_CA_PUBKEY         0xF0100016
#define EM_ERR_EM_CRYPTO_VERIFY_DCERT_MEMORY_PUB_KEY         0xF0100017
#define EM_ERR_EM_CRYPTO_VERIFY_DCERT_SET_RSA_PROP           0xF0100018
#define EM_ERR_EM_CRYPTO_VERIFY_DCERT_SERVER_CERT            0xF0100019
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_FAILED_UNKNOWN          0xF010001A
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_READ_SERVER_KEY         0xF010001B
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_INVALID_CN              0xF010001C

#define EM_ERR_EM_CRYPTO_VERIFY_SIGN                         0xF0110000
#define EM_ERR_EM_CRYPTO_VERIFY_SIGN_SIGNATURE_LEN           0xF0110010
#define EM_ERR_EM_CRYPTO_VERIFY_SIGN_MD_LEN                  0xF0110011
#define EM_ERR_EM_CRYPTO_VERIFY_SIGN_GET_RSA_KEY             0xF0110012
#define EM_ERR_EM_CRYPTO_VERIFY_SIGN_CHECK_RSA_KEY           0xF0110013
#define EM_ERR_EM_CRYPTO_VERIFY_SIGN_RSA_DECRYPT             0xF0110014
#define EM_ERR_EM_CRYPTO_VERIFY_SIGN_NOT_MATCH_SIGN          0xF0110015

#define EM_ERR_EM_CRYPTO_HMAC                                0xF0120000
#define EM_ERR_EM_CRYPTO_HMAC_FUNC                           0xF0130010

#define EM_ERR_EM_CRYPTO_SHA256                              0xF0140000
#define EM_ERR_EM_CRYPTO_SHA256_CONTEXT                      0xF0140010
#define EM_ERR_EM_CRYPTO_SHA256_DIGEST_INIT                  0xF0140011
#define EM_ERR_EM_CRYPTO_SHA256_DIGEST_UPDATE                0xF0140012
#define EM_ERR_EM_CRYPTO_SHA256_DIGEST_FINAL                 0xF0140013

#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT                     0xF0150000
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_CONTEXT             0xF0150010
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_INIT                0xF0150011
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_CTRL_IV             0xF0150012
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_INIT_KEY_IV         0xF0150013
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_UPDATE              0xF0150014
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_FINAL               0xF0150015
#define EM_ERR_EM_CRYPTO_AES_GCM_ENCRYPT_CTRL_TAG            0xF0150016

#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT                     0xF0160000
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_CONTEXT             0xF0160010
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_INIT                0xF0160011
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_CTRL_IV             0xF0160012
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_INIT_KEY_IV         0xF0160013
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_UPDATE              0xF0160014
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_FINAL               0xF0160015
#define EM_ERR_EM_CRYPTO_AES_GCM_DECRYPT_CTRL_TAG            0xF0160016

#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE                0xF0170000
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_PKEY           0xF0170010

#define EM_ERR_EM_CRYPTO_AES_CTR_ENCRYPT                     0xF0180000
#define EM_ERR_EM_CRYPTO_AES_CTR_ENCRYPT_CTX                 0xF0180010
#define EM_ERR_EM_CRYPTO_AES_CTR_ENCRYPT_INIT                0xF0180011
#define EM_ERR_EM_CRYPTO_AES_CTR_ENCRYPT_UPDATE              0xF0180012
#define EM_ERR_EM_CRYPTO_AES_CTR_ENCRYPT_FINAL               0xF0180013

#define EM_ERR_EM_CRYPTO_AES_CTR_DECRYPT                     0xF0190000
#define EM_ERR_EM_CRYPTO_AES_CTR_DECRYPT_CTX                 0xF0190010
#define EM_ERR_EM_CRYPTO_AES_CTR_DECRYPT_INIT                0xF0190011
#define EM_ERR_EM_CRYPTO_AES_CTR_DECRYPT_UPDATE              0xF0190012
#define EM_ERR_EM_CRYPTO_AES_CTR_DECRYPT_FINAL               0xF0190013
#define EM_ERR_EM_CRYPTO_AES_CTR_DECRYPT_INIT_KEY_IV         0xF0190014

#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT                         0xF01A0000
#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_GET_PUB_KEY             0xF01A0010
#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_CHECK_KEY               0xF01A0011
#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_FAILED                  0xF01A0012

#define EM_ERR_EM_CRYPTO_GET_SUBJECT                         0xF01B0000
#define EM_ERR_EM_CRYPTO_GET_SUBJECT_LEN_CERT                0xF01B0010
#define EM_ERR_EM_CRYPTO_GET_SUBJECT_X509_NAME_ONLINE        0xF01B0011
#define EM_ERR_EM_CRYPTO_GET_SUBJECT_NOT_EXIST               0xF01B0012
#define EM_ERR_EM_CRYPTO_GET_SUBJECT_LEN                     0xF01B0013

#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA                0xF01C0000
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_META           0xF01C0010
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_MAGIC          0xF01C0011
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_OFFSET         0xF01C0012
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_CERT           0xF01C0013
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_SIG            0xF01C0014
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_PARSE          0xF01C0015
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_C_LEN          0xF01C0016
#define EM_ERR_EM_CRYPTO_VERIFY_RECOVERY_DATA_S_LEN          0xF01C0017

#define EM_ERR_EM_ESI_UPDATE_DIGEST                          0xF01D0000
#define EM_ERR_EM_ESI_UPDATE_DIGEST_UNKNOWN_VERSION          0xF01D0010

#define EM_ERR_EM_ESI_RECOVERY                               0xF01E0000
#define EM_ERR_EM_ESI_RECOVERY_ITL_PACKET_MAGIC              0xF01E0010
#define EM_ERR_EM_ESI_RECOVERY_ITL_PACKET_VERSION            0xF01E0011
#define EM_ERR_EM_ESI_RECOVERY_ITL_MAGIC                     0xF01E0012
#define EM_ERR_EM_ESI_RECOVERY_ITL_VERSION                   0xF01E0013
#define EM_ERR_EM_ESI_RECOVERY_ITL_MAX_SIZE                  0xF01E0014
#define EM_ERR_EM_ESI_RECOVERY_ITL_MAX_NUM                   0xF01E0015
#define EM_ERR_EM_ESI_RECOVERY_ITL_MAX_SIZE_2                0xF01E0016
#define EM_ERR_EM_ESI_RECOVERY_DID_VERSION                   0xF01E0017
#define EM_ERR_EM_ESI_RECOVERY_MAKE_KEY                      0xF01E0018
#define EM_ERR_EM_ESI_RECOVERY_ITL_PACKET_TYPE               0xF01E0019
#define EM_ERR_EM_ESI_RECOVERY_ITL_MAX_NUM2                  0xF01E001A
#define EM_ERR_EM_ESI_RECOVERY_DID                           0xF01E001B

#define EM_ERR_EM_CMD_VERIFY_ESI_CORE                        0xF01F0000
#define EM_ERR_EM_CMD_VERIFY_ESI_CORE_UNKNOWN_DID            0xF01F0010
#define EM_ERR_EM_CMD_VERIFY_ESI_CORE_ALLOC_CORE             0xF01F0011
#define EM_ERR_EM_CMD_VERIFY_ESI_CORE_CORE_ISNT_NORMAL       0xF01F0012

#define EM_ERR_EM_CMD_PROCESSING                             0xF0200000
#define EM_ERR_EM_CMD_PROCESSING_UNKNOWN_COMMAND             0xF0200010

#define EM_ERR_EM_CMD_POST_PROCESSING                        0xF0210000

#define EM_ERR_EM_TOKEN_VERIFY                               0xF0220000
#define EM_ERR_EM_TOKEN_VERIFY_DID                           0xF0220010

#define EM_ERR_EM_TOKEN_CHECK_EXPIRATION                     0xF0230000
#define EM_ERR_EM_TOKEN_CHECK_EXPIRATION_ATOI                0xF0230010
#define EM_ERR_EM_TOKEN_CHECK_EXPIRATION_EXPIRED             0xF0230011
#define EM_ERR_EM_TOKEN_CHECK_EXPIRATION_ATOI_P              0xF0230012
#define EM_ERR_EM_TOKEN_CHECK_EXPIRATION_EXPIRED_P           0xF0230013

#define EM_ERR_EM_TOKEN_GET_META                             0xF0240000
#define EM_ERR_EM_TOKEN_GET_META_OFFSET                      0xF0240010

#define EM_ERR_EM_TOKEN_GET_ELEMENT                          0xF0250000
#define EM_ERR_EM_TOKEN_GET_ELEMENT_OFFSET                   0xF0250010

#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO                     0xF0260000
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_MAGIC               0xF0260010
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_OFFSET              0xF0260011
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_OFFSET_2            0xF0260012
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_LEN_TOKE_ID         0xF0260013
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_LEN_UNIQUE          0xF0260014
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_LEN_DEVICE          0xF0260015
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_MAX_DEVICE          0xF0260016
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_INFO_LEN_LSEC_TOK        0xF0260017

#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO                    0xF0270000
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_MAX_DEVICE         0xF0270010
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_MAGIC              0xF0270011
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_OFFSET             0xF0270012
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_OFFSET_2           0xF0270013
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_MODEL_NAME         0xF0270014
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_DEVICE_ID          0xF0270015
#define EM_ERR_EM_TOKEN_PARSE_DEVICE_INFO_IMEI               0xF0270016

#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO                    0xF0280000
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_MAGIC              0xF0280010
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_OFFSET             0xF0280011
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_OFFSET_2           0xF0280012
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_SINGLE_ID          0xF0280013
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_OTP                0xF0280014
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_NONCE              0xF0280015
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_SYSTEM_ID          0xF0280016
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_IP                 0xF0280017
#define EM_ERR_EM_TOKEN_PARSE_ISSUER_INFO_MAC                0xF0280018

#define EM_ERR_EM_TOKEN_PARSE_MODE_INFO                      0xF0290000
#define EM_ERR_EM_TOKEN_PARSE_MODE_INFO_MAX_MODE             0xF0290010
#define EM_ERR_EM_TOKEN_PARSE_MODE_INFO_OFFSET               0xF0290011

#define EM_ERR_EM_TOKEN_PARSE_VALIDITY_INFO                  0xF02A0000
#define EM_ERR_EM_TOKEN_PARSE_VALIDITY_INFO_MAGIC            0xF02A0010
#define EM_ERR_EM_TOKEN_PARSE_VALIDITY_INFO_OFFSET           0xF02A0011
#define EM_ERR_EM_TOKEN_PARSE_VALIDITY_INFO_DATE             0xF02A0012
#define EM_ERR_EM_TOKEN_PARSE_VALIDITY_INFO_DATE_2           0xF02A0013
#define EM_ERR_EM_TOKEN_PARSE_VALIDITY_INFO                  0xF02A0000

#define EM_ERR_EM_TOKEN_PARSE_INTEGRITY_INFO                 0xF02B0000
#define EM_ERR_EM_TOKEN_PARSE_INTEGRITY_INFO_MAGIC           0xF02B0010
#define EM_ERR_EM_TOKEN_PARSE_INTEGRITY_INFO_OFFSET          0xF02B0011
#define EM_ERR_EM_TOKEN_PARSE_INTEGRITY_INFO_OFFSET2         0xF02B0012
#define EM_ERR_EM_TOKEN_PARSE_INTEGRITY_INFO_SIGN            0xF02B0013
#define EM_ERR_EM_TOKEN_PARSE_INTEGRITY_INFO_CERT            0xF02B0014

#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO                   0xF02C0000
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_MAGIC             0xF02C0010
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_NUM               0xF02C0011
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_ATTR              0xF02C0012
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_OFFSET            0xF02C0013
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_DUI               0xF02C0014
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_HIDDEN            0xF02C0015
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_MTUC              0xF02C0016
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_MTUC_V            0xF02C0017
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_EXCLUSIVE         0xF02C0018
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_ONCE              0xF02C0019
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_EXTENSION         0xF02C001A
#define EM_ERR_EM_TOKEN_PARSE_MODE_DB_INFO_OFFSET_2          0xF02C001B

#define EM_ERR_EM_TOKEN_PARSE                                0xF02D0000
#define EM_ERR_EM_TOKEN_PARSE_HEDAER_MAGIC                   0xF02D0010
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_HEADER                   0xF02D0011
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_VERSION                  0xF02D0012
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_GROUP_DB                 0xF02D0013
#define EM_ERR_EM_TOKEN_PARSE_TOKEN_OFFSET_INFO              0xF02D0014

#define EM_ERR_EM_TOKEN_GET_STATUS                           0xF02E0000
#define EM_ERR_EM_TOKEN_GET_STATUS_ALLOC_PAR_TOKEN           0xF02E0010
#define EM_ERR_EM_TOKEN_GET_STATUS_TOKEN_ID                  0xF02E0011
#define EM_ERR_EM_TOKEN_GET_STATUS_NOT_ALLOWED_MODE          0xF02E0012
#define EM_ERR_EM_TOKEN_GET_STATUS_TUC_ZERO                  0xF02E0013
#define EM_ERR_EM_TOKEN_GET_STATUS_ALLOCATE_BUFFER           0xF02E0014
#define EM_ERR_EM_TOKEN_GET_STATUS_NOT_ALLOWED_CERT          0xF02E0015

#define EM_ERR_EM_TOKEN_MAKE_TUC_V20                         0xF02F0000
#define EM_ERR_EM_TOKEN_MAKE_TUC_V20_MAX_MODE                0xF02F0010
#define EM_ERR_EM_TOKEN_MAKE_TUC_V20_OFFSET                  0xF02F0011

#define EM_ERR_EM_TOKEN_MAKE_TUC                             0xF0300000
#define EM_ERR_EM_TOKEN_MAKE_TUC_MAX_MODE                    0xF0300010
#define EM_ERR_EM_TOKEN_MAKE_TUC_OFFSET                      0xF0300011

#define EM_ERR_EM_TOKEN_RESTORE_TUC                          0xF0310000
#define EM_ERR_EM_TOKEN_RESTORE_TUC_TABLE                    0xF0310010

#define EM_ERR_EM_TEEGRIS_RPMB_READ                          0xF0320000
#define EM_ERR_EM_TEEGRIS_RPMB_READ_BLOCK_INDEX              0xF0320010
#define EM_ERR_EM_TEEGRIS_RPMB_READ_SECTOR                   0xF0320011
#define EM_ERR_EM_TEEGRIS_RPMB_READ_OPEN_FAIL                0xF0320012

#define EM_ERR_EM_TEEGRIS_RPMB_WRITE                         0xF0320000
#define EM_ERR_EM_TEEGRIS_RPMB_WRITE_BLOCK_INDEX             0xF0320010
#define EM_ERR_EM_TEEGRIS_RPMB_WRITE_SECTOR                  0xF0320011
#define EM_ERR_EM_TEEGRIS_RPMB_WRITE_OPEN_FAIL               0xF0320012
#define EM_ERR_EM_TEEGRIS_RPMB_WRITE_SECTOR_BACKUP           0xF0320013

#define EM_ERR_EM_TEEGRIS_READ_CORE                          0xF0330000
#define EM_ERR_EM_TEEGRIS_READ_CORE_LEN_BUF                  0xF0330010
#define EM_ERR_EM_TEEGRIS_READ_CORE_DECRYPT                  0xF0330011

#define EM_ERR_EM_TEEGRIS_WRITE_CORE                         0xF0340000
#define EM_ERR_EM_TEEGRIS_WRITE_CORE_LEN_BUF                 0xF0340010
#define EM_ERR_EM_TEEGRIS_WRITE_CORE_ENCRYPT                 0xF0340011

#define EM_ERR_EM_CHECK_PROVISION                            0xF0350000
#define EM_ERR_EM_CHECK_PROVISION_NOT_PROVISION              0xF0350010
#define EM_ERR_EM_CHECK_PROVISION_UNKNOWN_ERROR              0xF0350011

#define EM_ERR_EM_INIT_V20                                   0xF0360000
#define EM_ERR_EM_INIT_V20_ESI                               0xF0360010
#define EM_ERR_EM_INIT_V20_CORE                              0xF0360011
#define EM_ERR_EM_INIT_V20_CORE_MAGIC                        0xF0360012
#define EM_ERR_EM_INIT_V20_ESI_ALL_ZERO                      0xF0360013
#define EM_ERR_EM_INIT_V20_SHARED_BUT_NOT_PROVISION          0xF0360014
#define EM_ERR_EM_INIT_V20_ALREADY_SHARED                    0xF0360015
#define EM_ERR_EM_INIT_V20_KEY                               0xF0360016
#define EM_ERR_EM_INIT_V20_INVALID_CORE                      0xF0360017
#define EM_ERR_EM_INIT_V20_DID                               0xF0360019

#define EM_ERR_EM_TOKEN_INSTALL                              0xF0370000
#define EM_ERR_EM_TOKEN_INSTALL_KEEPING_ITEM                 0xF0370010
#define EM_ERR_EM_TOKEN_INSTALL_SINGLE_ID                    0xF0370011
#define EM_ERR_EM_TOKEN_INSTALL_MODEL_NAME                   0xF0370012
#define EM_ERR_EM_TOKEN_INSTALL_NONCE                        0xF0370013
#define EM_ERR_EM_TOKEN_INSTALL_NONCE_ESS                    0xF0370014
#define EM_ERR_EM_TOKEN_INSTALL_DID                          0xF0370015
#define EM_ERR_EM_TOKEN_INSTALL_ALREADY_USED                 0xF0370016
#define EM_ERR_EM_TOKEN_INSTALL_ALLOC_CORE                   0xF0370017
#define EM_ERR_EM_TOKEN_INSTALL_NOT_SUPPORT_TYPE             0xF0370018
#define EM_ERR_EM_TOKEN_INSTALL_NOT_SUPPORT_TYPE_2           0xF0370019
#define EM_ERR_EM_TOKEN_INSTALL_ALREADY_USED_FAC             0xF037001A

#define EM_ERR_EM_ESI_CHECK_INIT_STATE_UNKNOWN               0xF0380010

#define EM_ERR_EM_TOKEN_IS_FROM_FAC                          0xF0390000
#define EM_ERR_EM_TOKEN_IS_FROM_FAC_FROM_FAC                 0xF0390010

#define EM_ERR_EM_TOKEN_GET_USAGE_COUNT                      0xF03A0000

#define EM_ERR_EM_TOKEN_GET_MODE_INFORMATION                 0xF03B0000

#define EM_ERR_EM_TOKEN_GET_MODE_BIT                         0xF03C0000
#define EM_ERR_EM_TOKEN_GET_MODE_BIT_TOKEN_ID                0xF03C0010
#define EM_ERR_EM_TOKEN_GET_MODE_BIT_DID                     0xF03C0011
#define EM_ERR_EM_TOKEN_GET_MODE_BIT_MODE                    0xF03C0012
#define EM_ERR_EM_TOKEN_GET_MODE_BIT_BUF                     0xF03C0013

#define EM_ERR_EM_ESS_MAKE_TOKEN_MESSAGE                     0xF03D0000
#define EM_ERR_EM_ESS_MAKE_TOKEN_MESSAGE_IIN                 0xF03D0010
#define EM_ERR_EM_ESS_MAKE_TOKEN_MESSAGE_NONCE               0xF03D0011

#define EM_ERR_EM_ESS_MAKE_DELETE_MESSAGE                    0xF03E0000
#define EM_ERR_EM_ESS_MAKE_DELETE_MESSAGE_IIN                0xF03E0010

#define EM_ERR_EM_ESS_MAKE_RECOVERY_MESSAGE                  0xF03F0000
#define EM_ERR_EM_ESS_MAKE_RECOVERY_MESSAGE_NONCE            0xF03F0010

#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST                     0xF0400000
#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST_CERTIFICATE         0xF0400010
#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST_PREFIXBODY          0xF0400011
#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST_BUF_LEN             0xF0400012
#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST_ESI                 0xF0400013
#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST_IMEI                0xF0400014
#define EM_ERR_EM_ESS_MAKE_TOKEN_REQUEST_MODEL_NAME          0xF0400015

#define EM_ERR_EM_ENCRYPT_MESSAGE                            0xF0410000
#define EM_ERR_EM_ENCRYPT_MESSAGE_SESSION_KEY                0xF0410010
#define EM_ERR_EM_ENCRYPT_MESSAGE_SESSION_IV                 0xF0410011
#define EM_ERR_EM_ENCRYPT_MESSAGE_SESSION_WB_IV              0xF0410012
#define EM_ERR_EM_ENCRYPT_MESSAGE_SESSION_WB_ENCRYPT         0xF0410013
#define EM_ERR_EM_ENCRYPT_MESSAGE_ESK_LENGTH                 0xF0410014
#define EM_ERR_EM_ENCRYPT_MESSAGE_ERM_LENGTH                 0xF0410015

#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST                    0xF0420000
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_ESI                0xF0420010
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_CERT               0xF0420011
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_PREFIXBODY         0xF0420012
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_BUF_LEN            0xF0420013
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_ALLOC_CORE         0xF0420014
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_IMEI               0xF0420015
#define EM_ERR_EM_ESS_MAKE_DELETE_REQUEST_MODEL_NAME         0xF0420016

#define EM_ERR_EM_ESS_MAKE_RECOVERY_REQUEST                  0xF0430000
#define EM_ERR_EM_ESS_MAKE_RECOVERY_REQUEST_BUF_LEN          0xF0430010
#define EM_ERR_EM_ESS_MAKE_RECOVERY_REQUEST_DID              0xF0430011

#define EM_ERR_EM_ESS_INIT_CTX                               0xF0440000
#define EM_ERR_EM_ESS_INIT_CTX_ALLOC                         0xF0440010

#define EM_ERR_EM_REQUEST_TOKEN                              0xF0450000
#define EM_ERR_EM_REQUEST_TOKEN_MODEL_NAME                   0xF0450010
#define EM_ERR_EM_REQUEST_TOKEN_SINGLE_ID                    0xF0450011
#define EM_ERR_EM_REQUEST_TOKEN_NONCE                        0xF0450012
#define EM_ERR_EM_REQUEST_TOKEN_MODE                         0xF0450013

#define EM_ERR_EM_REQUEST_TIME                               0xF0460000
#define EM_ERR_EM_REQUEST_TIME_NONCE                         0xF0460010
#define EM_ERR_EM_REQUEST_TIME_MODE                          0xF0460011
#define EM_ERR_EM_REQUEST_TIME_M_LEN                         0xF0460012
#define EM_ERR_EM_REQUEST_TIME_BUF                           0xF0460013
#define EM_ERR_EM_REQUEST_TIME_INVAILD_ISSUER_ID             0xF0460014

#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG                       0xF0470000
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_MAGIC                 0xF0470010
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_TYPE                  0xF0470011
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_VERSION               0xF0470012
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_IV                    0xF0470013
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_DEL_CMD               0xF0470014
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_NONCE_LEN             0xF0470015
#define EM_ERR_EM_TOKEN_CHECK_TIME_MSG_RTD_ACK_LEN           0xF0470016

#define EM_ERR_EM_ESS_INIT                                   0xF0480000
#define EM_ERR_EM_ESS_INIT_CMD                               0xF0480010
#define EM_ERR_EM_ESS_INIT_UNKNOWN_VERSION                   0xF0480011

#define EM_ERR_EM_ESS_PARSE_COMMAND_V1                       0xF0490000
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_CMD_ALLOC             0xF0490010
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_UNKNOWN_CMD           0xF0490011
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_IMPROPER_PRM          0xF0490012
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_PARAM_SIZE            0xF0490013
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_PARAM_TYPE            0xF0490014
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_SBODY_ALLOC           0xF0490015
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_HASH                  0xF0490016
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_CERT_ALLOC            0xF0490017
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_CERT_LEN              0xF0490018
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_PREFIX_ALLOC          0xF0490019
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_RXIV_ALLOC            0xF049001A
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_ETOKEN_ALLOC          0xF049001B
#define EM_ERR_EM_ESS_PARSE_COMMAND_V1_ERSD_ALLOC            0xF049001C

#define EM_ERR_EM_ESS_DELETE_TOKEN_OFFLINE                   0xF0500000
#define EM_ERR_EM_ESS_DELETE_TOKEN_OFFLINE_BUF_LEN           0xF0500010

#define EM_ERR_EM_ESS_COMMAND                                0xF04A0000
#define EM_ERR_EM_ESS_COMMAND_GET_PREFIX_1                   0xF04A0010
#define EM_ERR_EM_ESS_COMMAND_GET_CERT_1                     0xF04A0011
#define EM_ERR_EM_ESS_COMMAND_GET_RXIV_1                     0xF04A0012
#define EM_ERR_EM_ESS_COMMAND_GET_ETOKEN_1                   0xF04A0013
#define EM_ERR_EM_ESS_COMMAND_GET_RXIV                       0xF04A0014
#define EM_ERR_EM_ESS_COMMAND_GET_PREFIX_2                   0xF04A0015
#define EM_ERR_EM_ESS_COMMAND_GET_CERT_2                     0xF04A0016
#define EM_ERR_EM_ESS_COMMAND_UNKNOWN_COMMAND                0xF04A0017
#define EM_ERR_EM_ESS_COMMAND_MODEL_NAME                     0xF04A0018
#define EM_ERR_EM_ESS_COMMAND_KEEPING_ITEM                   0xF04A0019
#define EM_ERR_EM_ESS_COMMAND_MODEL_NAME_2                   0xF04A001A
#define EM_ERR_EM_ESS_COMMAND_UNKNOWN_COMMAND_PREFIX         0xF04A001B
#define EM_ERR_EM_ESS_COMMAND_GET_ERSD_B64                   0xF04A001C
#define EM_ERR_EM_ESS_UPDATE_INVALID_INPUT                   0xF04A001D

#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1                       0xF04B0000
#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1_RXIV_B64              0xF04B0010
#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1_ETOKEN_B64            0xF04B0011
#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1_KEEP                  0xF04B0012
#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1_ESI                   0xF04B0013
#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1_CORE                  0xF04B0014
#define EM_ERR_EM_ESS_INSTALL_TOKEN_V1_BUF_LEN               0xF04B0015

#define EM_ERR_EM_ESS_RECOVERY_ESI_V1                        0xF04C0000
#define EM_ERR_EM_ESS_RECOVERY_ESI_V1_KEEPING_ITEM           0xF04C0010
#define EM_ERR_EM_ESS_RECOVERY_ESI_V1_ERSD                   0xF04C0011
#define EM_ERR_EM_ESS_RECOVERY_ESI_V1_RXIV                   0xF04C0012
#define EM_ERR_EM_ESS_RECOVERY_ESI_V1_NOT_SUPPORT            0xF04C0013

#define EM_ERR_EM_TOKEN_GET_ONLY_MODE                        0xF04D0000
#define EM_ERR_EM_TOKEN_GET_ONLY_MODE_T_ID                   0xF04D0010
#define EM_ERR_EM_TOKEN_GET_ONLY_MODE_MODE                   0xF04D0011
#define EM_ERR_EM_TOKEN_GET_ONLY_MODE_DID                    0xF04D0012
#define EM_ERR_EM_TOKEN_GET_ONLY_MODE_M_LEN                  0xF04D0013
#define EM_ERR_EM_TOKEN_GET_ONLY_MODE_BUF                    0xF04D0014

#define EM_ERR_EM_ESS_GET_COMMAND_TYPE                       0xF04E0000

#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME                    0xF04F0000
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_BEYOND             0xF04F0010
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_SET_COUNT          0xF04F0011
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_DATE               0xF04F0012
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_DATE_FORMAT        0xF04F0013
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_NO_PRIORITY_TIME   0xF04F0014
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_ALL_ZERO           0xF04F0015
#define EM_ERR_EM_TOKEN_SET_PRIORITY_TIME_MAKE_NOTOKEN       0xF04F0016

#define EM_ERR_EM_TOKEN_GET_PRIORITY_TIME                    0xF0500000
#define EM_ERR_EM_TOKEN_GET_PRIORITY_TIME_MAKE_NOTOKEN       0xF0500010

#define EM_ERR_EM_TOKEN_GET_EXPIRY_DATE                      0xF0510000
#define EM_ERR_EM_TOKEN_GET_EXPIRY_DATE_TOKEN_ID             0xF0510010

#define EM_ERR_EM_CLIENT_VERIFY                              0xF0520000
#define EM_ERR_EM_CLIENT_VERIFY_INVALID_CLIENT_TYPE          0xF0520010
#define EM_ERR_EM_CLIENT_VERIFY_EMPTY_DATA                   0xF0520011
#define EM_ERR_EM_CLIENT_VERIFY_ALLOC_TYPE_ITEM_DATA         0xF0520012
#define EM_ERR_EM_CLIENT_VERIFY_ALLOC_CLIENT_DATA            0xF0520013
#define EM_ERR_EM_CLIENT_VERIFY_NO_PERMISSION                0xF0520014

#define EM_ERR_EM_GET_FROM_EXTENSION                         0xF0530000
#define EM_ERR_EM_GET_FROM_EXTENSION_MAX_MODE                0xF0530010
#define EM_ERR_EM_GET_FROM_EXTENSION_NOT_EXIST               0xF0530011
#define EM_ERR_EM_GET_FROM_EXTENSION_NO_EXT_DATA             0xF0530012
#define EM_ERR_EM_GET_FROM_EXTENSION_THIS_IS_NOT_EXT         0xF0530013
#define EM_ERR_EM_GET_FROM_EXTENSION_TYPE                    0xF0530014
#define EM_ERR_EM_GET_FROM_EXTENSION_ALLOC_TYPE_DATA         0xF0530015
#define EM_ERR_EM_GET_FROM_EXTENSION_TYPE_DATA_IS_NULL       0xF0530016
#define EM_ERR_EM_GET_FROM_EXTENSION_ALLOC_HEAD_DATA         0xF0530017
#define EM_ERR_EM_GET_FROM_EXTENSION_HEADER_IS_NULL          0xF0530018
#define EM_ERR_EM_GET_FROM_EXTENSION_MAGIC_IS_NULL           0xF0530019
#define EM_ERR_EM_GET_FROM_EXTENSION_VERSION_IS_NULL         0xF053001A
#define EM_ERR_EM_GET_FROM_EXTENSION_NUM_IS_NULL             0xF053001B
#define EM_ERR_EM_GET_FROM_EXTENSION_NO_PERMISSION           0xF053001C
#define EM_ERR_EM_GET_FROM_EXTENSION_TYPE_IS_NULL            0xF053001D

#define EM_ERR_EM_TA_CHECK_RP                                0xF0540000
#define EM_ERR_EM_TA_CHECK_RP_BLOCKED_TA                     0xF0540010

#define EM_ERR_EM_QSEE_RPMB_INIT                             0xF0550010
#define EM_ERR_EM_QSEE_RPMB_ADD_PARTITION                    0xF0550011
#define EM_ERR_EM_QSEE_RPMB_OPEN_PART                        0xF0550012
#define EM_ERR_EM_QSEE_RPMB_NOT_OPENED                       0xF0550013
#define EM_ERR_EM_QSEE_RPMB_READ_SECTOR                      0xF0550014
#define EM_ERR_EM_QSEE_RPMB_WRITE_SECTOR_BACKUP              0xF0550015
#define EM_ERR_EM_QSEE_RPMB_WRITE_SECTOR                     0xF0550016
#define EM_ERR_EM_QSEE_RPMB_SECURE_STATE                     0xF0550017

#define EM_ERR_EM_GET_RANDOM_QSEE                            0xF0560000
#define EM_ERR_EM_GET_RANDOM_QSEE_INVALID_ARG                0xF0560010

#define EM_ERR_EM_READ_CORE                                  0xF0570000
#define EM_ERR_EM_READ_CORE_QSEE_INVALID_ARG                 0xF0570010
#define EM_ERR_EM_READ_CORE_QSEE_MISMATCH_LEN                0xF0570011
#define EM_ERR_EM_READ_CORE_ALL_ZERO                         0xF0570012

#define EM_ERR_EM_WRITE_CORE                                 0xF0580000
#define EM_ERR_EM_WRITE_CORE_QSEE_INVALID_ARG                0xF0580010
#define EM_ERR_EM_WRITE_CORE_QSEE_MISMATCH_LEN               0xF0580011

#define EM_ERR_EM_CRYPTO_KDF_QSEE_KEY                        0xF0590010
#define EM_ERR_EM_CRYPTO_KDF_QSEE_IV                         0xF0590011

#define EM_ERR_EM_REQUEST_RECOVERY                           0xF06A0000
#define EM_ERR_EM_REQUEST_RECOVERY_NONCE                     0xF06A0010
#define EM_ERR_EM_REQUEST_RECOVERY_SINGLE_ID                 0xF06A0011
#define EM_ERR_EM_REQUEST_RECOVERY_DID                       0xF06A0012

#define EM_ERR_EM_ESI_CHECK_INIT_STATE                       0xF06B0000

#define EM_ERR_EM_TOKEN_DO_INIT_CORE                         0xF06C0000
#define EM_ERR_EM_TOKEN_DO_INIT_CORE_ALLOC_PAR_TOKEN         0xF06C0010

#define EM_ERR_EM_GET_RANDOM_KINIBI                          0xF06D0000
#define EM_ERR_EM_GET_RANDOM_KINIBI_INVALID_ARG              0xF06D0010
#define EM_ERR_EM_GET_RANDOM_KINIBI_RANDOM_DATA              0xF06D0011

#define EM_ERR_EM_CRYPTO_KDF_KINIBI_MEM_ALLOC_KEY            0xF06E0010
#define EM_ERR_EM_CRYPTO_KDF_KINIBI_KEY                      0xF06E0011
#define EM_ERR_EM_CRYPTO_KDF_KINIBI_MEM_ALLOC_IV             0xF06E0012
#define EM_ERR_EM_CRYPTO_KDF_KINIBI_IV                       0xF06E0013

#define EM_ERR_EM_KINIBI_RPMB_READ                           0xF0700000
#define EM_ERR_EM_KINIBI_RPMB_READ_BLOCK_INDEX               0xF0700010
#define EM_ERR_EM_KINIBI_RPMB_READ_SECTOR                    0xF0700011
#define EM_ERR_EM_KINIBI_RPMB_READ_ZERO                      0xF0700012
#define EM_ERR_EM_KINIBI_RPMB_WRITE_SECTOR1                  0xF0700013
#define EM_ERR_EM_KINIBI_RPMB_WRITE_SECTOR2                  0xF0700014

#define EM_ERR_EM_READ_CORE_KINIBI                           0xF0710000
#define EM_ERR_EM_READ_CORE_KINIBI_INVALID_ARG               0xF0710010
#define EM_ERR_EM_READ_CORE_KINIBI_MISMATCH_LEN              0xF0710011

#define EM_ERR_EM_WRITE_CORE_KINIBI                          0xF0720000
#define EM_ERR_EM_WRITE_CORE_KINIBI_INVALID_ARG              0xF0720010
#define EM_ERR_EM_WRITE_CORE_KINIBI_MISMATCH_LEN             0xF0720011

#define EM_ERR_EM_FT_TOKEN_MODE                              0xF0730000
#define EM_ERR_EM_FT_TOKEN_MODE_TOKEN_ID                     0xF0730010
#define EM_ERR_EM_FT_TOKEN_MODE_DID                          0xF0730011
#define EM_ERR_EM_FT_TOKEN_MODE_MAX_MODE                     0xF0730012

#define EM_ERR_EM_ESS_GET_INFO                               0xF0740000
#define EM_ERR_EM_ESS_GET_INFO_BUF_LEN                       0xF0740010

#define EM_ERR_EM_TOKEN_GET_INFO                             0xF0750000
#define EM_ERR_EM_TOKEN_GET_INFO_ALLOC_PAR_TOKEN             0xF0750010
#define EM_ERR_EM_TOKEN_GET_INFO_TOKEN_ID                    0xF0750011
#define EM_ERR_EM_TOKEN_GET_INFO_INVAILD_MODEL               0xF0750012
#define EM_ERR_EM_TOKEN_GET_INFO_INVAILD_ISSUER_ID           0xF0750013
#define EM_ERR_EM_TOKEN_GET_INFO_STR_MODE                    0xF0750014
#define EM_ERR_EM_TOKEN_GET_INFO_STR_COUNT                   0xF0750015
#define EM_ERR_EM_TOKEN_GET_INFO_INVALID_LEN                 0xF0750016
#define EM_ERR_EM_TOKEN_GET_INFO_NO_MESSAGE                  0xF0750017
#define EM_ERR_EM_TOKEN_GET_INFO_MODE_INFO_OFFSET            0xF0750018

#define EM_ERR_EM_CMD_SET_VERSION                            0xF0760000
#define EM_ERR_EM_CMD_SET_VERSION_DID_ALL_ZERO               0xF0760010
#define EM_ERR_EM_CMD_SET_VERSION_FAIL                       0xF0760011
#define EM_ERR_EM_CMD_SET_VERSION_UNKNOWN_META_VERSION       0xF0760012
#define EM_ERR_EM_CMD_SET_VERSION_UNKNOWN_DID_VERSION        0xF0760013
#define EM_ERR_EM_CMD_SET_VERSION_UNKNOWN_BL_DID_VERSION     0xF0760014

#define EM_ERR_EM_TOKEN_IS_INSTALLED                         0xF0770000
#define EM_ERR_EM_TOKEN_IS_INSTALLED_TOKEN_ID                0xF0770010

#define EM_ERR_EM_ESI_CHECK_META                             0xF0780000
#define EM_ERR_EM_ESI_CHECK_META_ESI_MAGIC                   0xF0780010
#define EM_ERR_EM_ESI_CHECK_META_INVALID                     0xF0780011

#define EM_ERR_EM_TOKEN_CHK_LSEC_TOK                         0xF0790000
#define EM_ERR_EM_TOKEN_CHK_LSEC_TOK_NO_FEATURE              0xF0790010

#define EM_ERR_EM_IS_STRING_INT                              0xF0DF0000
#define EM_ERR_EM_IS_STRING_INT_FALSE                        0xF0DF0010

#define EM_ERR_EM_TOKEN_GET_TOKEN_ID                         0xF0E00000

#define EM_ERR_EM_LITE_ENTRY                                 0xF0E10000

#define EM_ERR_EM_CRYPTO_GET_SUBJECT_FROM_CERT_LITE          0xF0E20000
#define EM_ERR_EM_CRYPTO_GET_SUBJECT_FROM_CERT_LITE_PARSE    0xF0E20010
#define EM_ERR_EM_CRYPTO_GET_SUBJECT_FROM_CERT_LITE_LEN      0xF0E20011

#define EM_ERR_EM_CRYPTO_VERIFY_CERT_LITE                    0xF0E30000
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_LITE_SERVER_CERT_PARSE  0xF0E30010
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_LITE_CA_CERT_PARSE      0xF0E30011
#define EM_ERR_EM_CRYPTO_VERIFY_CERT_LITE_VERIFY             0xF0E30012

#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE           0xF0E40000
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_ET_ADD    0xF0E40010
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_DRBG      0xF0E40011
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_CERT      0xF0E40012
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_SHA256    0xF0E40013
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_PK        0xF0E40014
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_DECRYPT   0xF0E40015
#define EM_ERR_EM_CRYPTO_VERIFY_RSA_SIGNATURE_LITE_FAIL      0xF0E40016

#define EM_ERR_EM_GET_RANDOM_LITE                            0xF0E50000
#define EM_ERR_EM_GET_RANDOM_LITE_LEN                        0xF0E50010
#define EM_ERR_EM_GET_RANDOM_LITE_ET_ADD                     0xF0E50011
#define EM_ERR_EM_GET_RANDOM_LITE_DRBG                       0xF0E50012
#define EM_ERR_EM_GET_RANDOM_LITE_DRBG_RANDOM                0xF0E50013

#define EM_ERR_EM_CRYPTO_AES_256_CTR_ENCRYPT_LITE            0xF0E60000
#define EM_ERR_EM_CRYPTO_AES_256_CTR_ENCRYPT_LITE_SET_ENC    0xF0E60010
#define EM_ERR_EM_CRYPTO_AES_256_CTR_ENCRYPT_LITE_CRYPT      0xF0E60011

#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_LITE                    0xF0E70000
#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_LITE_DRBG               0xF0E70010
#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_LITE_CRT                0xF0E80011
#define EM_ERR_EM_CRYPTO_RSA_ENCRYPT_LITE_PKCS_ENCRYPT       0xF0E80012

#define EM_ERR_EM_LITE_ESS_COMMAND                           0xF0E90000
#define EM_ERR_EM_LITE_ESS_COMMAND_LENGTH                    0xF0E90010
#define EM_ERR_EM_LITE_ESS_COMMAND_FAILED_ALLOC_BUFFER       0xF0E90011
#define EM_ERR_EM_LITE_ESS_COMMAND_NO_MESSAGE                0xF0E90012

#define EM_ERR_EM_LITE_GET_STATUS                            0xF0EA0000

#define EM_ERR_EM_LITE_INSTALL_TOKEN                         0xF0EB0000

#define EM_ERR_EM_CMD_PRE_PROCESSING                         0xF0EC0000
#define EM_ERR_EM_CMD_PRE_PROCESSING_NO_TOKEN                0xF0EC0010


/* EM_IS_ALL_ZERO */
#define EM_ERR_EM_IS_ALL_ZERO                                0xF0F00000
#define EM_ERR_EM_IS_ALL_ZERO_NOT_ZERO                       0xF0F00010

/* EM_STRNCASECMP */
#define EM_ERR_EM_STRNCASECMP                                0xF0F10000

#define EM_ERR_EM_CONTEXT_MAKE_RESPONSE                      0xF0F20000
#define EM_ERR_EM_CONTEXT_MAKE_RESPONSE_LEN_MESSAGE          0xF0F20010
#define EM_ERR_EM_CONTEXT_MAKE_RESPONSE_WRITE_CORE           0xF0F20011
#define EM_ERR_EM_CONTEXT_MAKE_RESPONSE_CORE_BUFFER          0xF0F20012
#define EM_ERR_EM_CONTEXT_MAKE_RESPONSE_ALLOC_CORE           0xF0F20013
#define EM_ERR_EM_CONTEXT_MAKE_RESPONSE_ALLOC_RSP            0xF0F20014

#define EM_ERR_EM_CONTEXT_UNMARCHAL_REQ_PAYLOAD              0xF0F30000

#define EM_ERR_EM_CONTEXT_MARCHAL_RSP_PAYLOAD                0xF0F40000

#define EM_ERR_EM_CONTEXT_SET_MAN_FIELD                      0xF0F50000

#define EM_ERR_EM_TOKEN_VERIFY_TOKEN                         0xF0F60000

#define EM_ERR_EM_CRYPTO_HMAC_MBEDTLS                        0xF0F70000
#define EM_ERR_EM_CRYPTO_HMAC_MBEDTLS_MD_HMAC                0xF0F70010

#define EM_ERR_EM_UPDATE_REQ_TIME_MSG                        0xF0F80000
#define EM_ERR_EM_UPDATE_REQ_TIME_MSG_INVALID_INPUT          0xF0F80010

#define EM_OPENSSL_SUCCESS                                   1
#define EM_OPENSSL_FAILED                                    0

#define EM_CHECK_NULL(func_name, default_value, ...)                                                                   \
	do {                                                                                                           \
		const void *_p[] = {__VA_ARGS__};                                                                      \
		size_t _i;                                                                                             \
		for (_i = 0; _i < sizeof(_p) / sizeof(*_p); _i++) {                                                    \
			if (_p[_i] == NULL) {                                                                          \
				LOGE("%s: p(%u) is null.\n", func_name, (uint32_t)(_i + 1));                           \
				ret = default_value + (_i + 1);                                                        \
				goto out;                                                                              \
			}                                                                                              \
		}                                                                                                      \
	} while (0);

/*
 * Legacy error
 */

#define EM_ERR_LEGACY_INVALID_ESI                            0xFFFFFA88

#endif
