#ifndef __EM_CONSTANTS_H
#define __EM_CONSTANTS_H

#define EM_PAYLOAD_VERSION                       0x01

#define EM_CMD_MIN                               0x00000001
#define EM_CMD_GET_STATUS                        0x00000001
#define EM_CMD_INSTALL_TOKEN                     0x00000002
#define EM_CMD_TOKEN_IS_INSTALLED                0x00000003
#define EM_CMD_REMOVE_TOKEN                      0x00000004
#define EM_CMD_GET_NUM_OF_MODES                  0x00000005
#define EM_CMD_SEND_FUSE_CMD                     0x00000006
#define EM_CMD_GET_VERSION                       0x00000007
#define EM_CMD_GET_EXPIRYDATE                    0x00000008
#define EM_CMD_GET_ID                            0x00000009
#define EM_CMD_GET_REQUESTMSG                    0x0000000A
#define EM_CMD_TOKEN_REQUEST                     0x0000000B
#define EM_CMD_ESS                               0x0000000C
#define EM_CMD_RECOVERY                          0x0000000D
#define EM_CMD_MAKE_ITL_REQ                      0x0000000E
#define EM_CMD_GET_TOKEN                         0x0000000F
#define EM_CMD_GET_TUC                           0x00000010
#define EM_CMD_SET_PRIORITY_TIME_ESS_V1          0x00000011
#define EM_CMD_GET_PRIORITY_TIME_ESS_V1          0x00000012
#define EM_CMD_GET_LAST_TOKEN_STATUS             0x00000013
#define EM_CMD_GET_MODES                         0x00000014
#define EM_CMD_GET_MODES_BIT                     0x00000015
#define EM_CMD_GET_TOKEN_INFO_FOR_JANUS          0x00000016
#define EM_CMD_TIME_REQUEST                      0x00000017
#define EM_CMD_TIME_CHECK                        0x00000018
#define EM_CMD_INIT                              0x00000019
#define EM_CMD_SUPPORT_ESS_V1                    0x0000001A
#define EM_CMD_GET_MODES_ESS_V1                  0x0000001B
#define EM_CMD_REQ_TOKEN_ESS_V1                  0x0000001C
#define EM_CMD_REQ_RECOVERY_ESS_V1               0x0000001D
#define EM_CMD_DELETE_TOKEN_ESS_V1               0x0000001E
#define EM_CMD_INSTALL_TOKEN_ESS_V1              0x0000001F
#define EM_CMD_RECOVERY_ESS_V1                   0x00000020
#define EM_CMD_INIT_CORE                         0x00000021
#define EM_CMD_GET_MODES_FT                      0x00000022
#define EM_CMD_GET_INFO                          0x00000023
#define EM_CMD_GET_INFO_ESS_V1                   0x00000024
#define EM_CMD_MAX                               0x00000024

#define EM_LEN_PAYLOAD_FLAGS                     4
#define EM_LEN_DID                               16
#define EM_LEN_IMEI                              15
#define EM_LEN_SINGLE_ID                         64
#define EM_LEN_MODEL_NAME                        16
#define EM_LEN_OTP                               6
#define EM_LEN_DATE                              8
#define EM_LEN_OMC_ID                            16
#define EM_LEN_CLIENT_PROC_NAME                  256
#define EM_LEN_CLIENT_PKG_NAME                   256
#define EM_LEN_CLIENT_UID                        4
#define EM_LEN_CLIENT_PLATFORM_SIGNATURE         4
#define EM_CLIENT_NNTC_UID                       "NNTC"/* Need not to check */
#define EM_LEN_CERT_UID                          64
#define EM_LEN_CERT_UID_ATTR                     5
#define EM_LEN_MODE_BUFFER                       128
#define EM_LEN_MESSAGE                           51200
#define EM_LEN_OSVERSION                         2
#define EM_LEN_SWVERSION                         32
#define EM_LEN_BLVERSION                         32
#define EM_LEN_UNIQUE                            32
#define EM_LEN_SMSN                              16
#define EM_LEN_IV                                16
#define EM_LEN_FUSE                              4
#define EM_LEN_OPENDAY                           8
#define EM_LEN_CN                                32
#define EM_LEN_MSG_DATA                          4
#define EM_LEN_REQUEST_TIME_MSG                  (EM_LEN_MESSAGE - 10 - EM_LEN_NONCE)

#define EM_LEN_TOKEN                             69632 // 68K
#define EM_LEN_ESI                               11264
#define EM_LEN_CERTIFICATE                       4096
#define EM_LEN_ESS_PREFIX_BODY                   512
#define EM_LEN_NONCE                             32
#define EM_LEN_ESS_IV_B64                        64
#define EM_LEN_ESS_IV                            16
#define EM_LEN_IIN                               32
#define EM_LEN_HMAC                              32
#define EM_LEN_TOKEN_ID                          16
#define EM_LEN_PRIORITY_TIME                     (EM_LEN_DATE + EM_LEN_TOKEN_ID + 1)
#define EM_LEN_PRIORITY_TIME_COUNT               5
#define EM_LEN_MAGIC_CORE_V20                    4
#define EM_LEN_GCM_TAG_CORE_V20                  16
#define EM_LEN_KEY_CORE_V20                      32
#define EM_LEN_SHA256                            32
#define EM_LEN_CORE_V20                          256
#define EM_LEN_SESSION_KEY                       32
#define EM_LEN_SESSION_IV                        16
#define EM_LEN_TSS                               2
#define EM_LEN_ACTIVATED                         2

#define EM_LEN_LAST_TOKEN_STATUS                 3
#define EM_LEN_DEFAULT_MAGIC                     4
#define EM_LEN_ESI_MAGIC                         3
#define EM_LEN_ESI_DIGEST                        32
#define EM_LEN_MODE_STRING_SIZE                  5
#define EM_LEN_MAX_MODE_TUC_V20                  64
#define EM_LEN_MAX_MODE_TUC                      128
#define EM_LEN_MAX_MODE_V20                      64
#define EM_LEN_MAX_MODE                          128
#define EM_LEN_MAX_DEVICE                        500
#define EM_LEN_SIGNATURE                         512
#define EM_LEN_IP_ADDR                           16
#define EM_LEN_MAC_ADDR                          24
#define EM_LEN_SYSTEM_ID                         40
#define EM_LEN_HEADER_FIELD                      3
#define EM_LEN_HEADER_VERSION                    4
#define EM_LEN_MODB_ATTRIBUTE                    8192
#define EM_LEN_MODB_EXTENSEION                   2048
#define EM_LEN_ESI_INIT_STATE                    16
#define EM_LEN_TOKEN_MODE_INFORMATION            512 // 0~9 = 10, 10~99 = 2 * 90, 100~128(EM_LEN_MODE_BUFFER) = 3 * 29 = 367
#define EM_LEN_TOKEN_MODE_STRING                 5
#define EM_LEN_GET_MODES_BIT_BUFFER              4
#define EM_LEN_EXTENSION_DATA_MIN                4
#define EM_LEN_NUM_OF_INFO_IN_TOKEN              8
#define EM_LEN_STR_MODE_INDEX                    4
#define EM_LEN_STR_TUC_COUNT                     8
#define EM_LEN_TRS_DEL_CMD                       1
#define EM_LEN_TRS_SER_NONCE                     32
#define EM_LEN_TRS_WB_IV                         16
#define EM_LEN_TRS_PACKET_BODY                   (EM_LEN_DATE+EM_LEN_TRS_DEL_CMD+EM_LEN_TRS_SER_NONCE+EM_LEN_TRS_WB_IV)
#define EM_LEN_RTD_ACK                           (EM_LEN_DID+EM_LEN_TOKEN_ID+EM_LEN_TRS_SER_NONCE)

// ESS
#define EM_LEN_ESS_VERSION                       2
#define EM_LEN_ERM                               1024
#define EM_LEN_ESS_STR                           4
#define EM_LEN_WB_SS_IV_KEY                      128
#define EM_LEN_ESK                               256
#define EM_LEN_ESK_B64                           512
#define EM_LEN_NONCE_B64                         64
#define EM_LEN_IIN_B64                           64
#define EM_LEN_ESS_V1_MAX_PARAMS                 11
#define EM_LEN_ESS_V1_TRM_NUM_PARAMS             11
#define EM_LEN_ESS_V1_TDM_MAX_PARAMS             5
#define EM_LEN_ESS_V1_INST_MAX_PARAMS            6
#define EM_LEN_ESS_V1_RM_NUM_PARAMS              7
#define EM_LEN_ESS_V1_RECOVERY_MAX_PARAMS        6
#define EM_LEN_ESS_V1_MAX_ESS                    256
#define EM_LEN_ESS_V1_MAX_NUM_MODES              3
#define EM_LEN_ESS_V1_MAX_MODES_SET              128
#define EM_LEN_ESS_V1_MAX_DATE                   8
#define EM_LEN_ESS_V1_MAX_SINGLE_ID              100
#define EM_LEN_ESS_V1_MAX_OTP                    6
#define EM_LEN_ESS_V1_MAX_CERT_LEN               5
#define EM_LEN_ESS_V1_MAX_CERT                   4096
#define EM_LEN_ESS_V1_MAX_IV_LEN                 3
#define EM_LEN_ESS_V1_MAX_IV                     32
#define EM_LEN_ESS_V1_MAX_ETOKEN_LEN             6
#define EM_LEN_ESS_V1_MAX_ETOKEN                 61440
#define EM_LEN_ESS_V1_MAX_HASH                   64
#define EM_LEN_ESS_V1_NUM_CHECK                  1
#define EM_LEN_ESS_V1_MAX_ERSD_LEN               2048
#define EM_LEN_ESS_V1_MAX_ERSD                   2048
#define EM_LEN_ESS_AP_SIDE_OR_BP_SIDE            3
#define EM_LEN_ESS_OS_TYPE                       7

//utils
#define EM_LEN_ESS_MAX_PROPERTY                  256
#define EM_LEN_ESS_MAX_UNIQUE_LEN                32
#define EM_LEN_ESS_MAX_SMSN_LEN                  16
#define EM_PROPERTY_DID                          "ro.boot.em.did"
#define EM_PROPERTY_MODEL                        "ro.boot.em.model"
#define EM_PROPERTY_SW_VERSION                   "ro.build.sw_version"
#define EM_PROPERTY_BL_VERSION                   "ro.bootloader"
#define EM_PROPERTY_OS_VERSION                   "ro.build.version.sdk"
#define EM_PROPERTY_FISRT_API                    "ro.product.first_api_level"
#define EM_PROPERTY_TSS_SUPPORT                  "mdc.singlesku"
#define EM_PROPERTY_ACTIVATED                    "mdc.singlesku.activated"
#define EM_SERIAL_CMD                            "cat /sys/class/scsi_host/host0/unique_number"
#define EM_SMSN_CMD                              "cat /efs/FactoryApp/HwPartProtoTypeSerialNo"
#define EM_TYPE_IS_ACTIVATED                     1
#define EM_TYPE_IS_NOT_ACTIVATED                 0
#define EM_TYPE_NONE_ACTIVATED                   2
#define EM_MAGIC_TRUE                            "true"
#define EM_MAGIC_FALSE                           "false"
#define EM_MAGIC_NONE                            "NONE"
#define EM_LEN_MAGIC_TRUE                        4
#define EM_LEN_MAGIC_FALSE                       5
#define EM_LEN_MAGIC_NONE                        4
#define EM_MODE_REFILL_AND_CHECK                 0xFF0F

#define EM_VERSION_ITL                           0x0001

#define EM_MAGIC_PADDING                         0x60
#define EM_MAGIC_PACKET_ENG                      "ENG"
#define EM_MAGIC_PACKET_VERSION2                 "0002"
#define EM_MAGIC_PACKET_VERSION3                 "0003"
#define EM_MAGIC_PACKET_VERSION4                 "0004"
#define EM_MAGIC_ITL                             "ITL"
#define EM_MAGIC_IRS                             "IRS"

#define EM_MAGIC_TYPE_TOKEN_REQUEST              "REQ"
#define EM_MAGIC_TYPE_TIME_REQUEST               "TRQ"
#define EM_MAGIC_TYPE_TIME_RESPONSE              "TRS"
#define EM_MAGIC_TYPE_RECOVERY_REQUEST           "IRQ"

#define EM_MAGIC_ESI                             "ESI"
#define EM_MAGIC_EM_CORE                         "CORE"
#define EM_MAGIC_INTE                            "INTE"

#define EM_MAGIC_ESI_V20_SHARING                 "SHARING"
#define EM_MAGIC_ESI_V20_SHARED                  "SHARED"
#define EM_MAGIC_ESI_V20_PRESHARED               "PRESHARED"
#define EM_MAGIC_ESI_V20_INTERMEDIATE            "INTERMEDIATE"
#define EM_MAGIC_ESI_V20_COMPLETED               "COMPLETED"

#define EM_MAGIC_TOKEN                           "TOKE"
#define EM_MAGIC_TOKEN_VALIDATE                  "VALI"
#define EM_MAGIC_TOKEN_MODE                      "MODE"
#define EM_MAGIC_TOKEN_ISSUER                    "ISSU"
#define EM_MAGIC_TOKEN_DEVICE                    "DEVI"
#define EM_MAGIC_TOKEN_INTEGRITY                 "INTE"
#define EM_MAGIC_TOKEN_MODB                      "MODB"

#define EM_MAGIC_HEADER_PREFIX                   "ENG"
#define EM_MAGIC_HEADER_TYPE_REQ                 "REQ"
#define EM_MAGIC_HEADER_TYPE_TRQ                 "TRQ"
#define EM_MAGIC_HEADER_TYPE_RES                 "RES"
#define EM_MAGIC_HEADER_TYPE_ACK                 "ACK"
#define EM_MAGIC_HEADER_TYPE_ERR                 "ERR"

#define EM_MAGIC_LTS_INSTALLED                   "INS"
#define EM_MAGIC_LTS_DELETED                     "DEL"
#define EM_MAGIC_LTS_BROKEN                      "BRK"
#define EM_MAGIC_LTS_EXPIRED                     "EXP"
#define EM_MAGIC_LTS_UNKNOWN                     "UKN"

#define EM_MAGIC_OK                              "OK"
#define EM_MAGIC_NOK                             "NOK"

#define EM_MAGIC_USER_FUSE                       "11"

#define EM_MAGIC_GET_MODE_TOKENINZER             ","
#define EM_MAGIC_GET_MODE_FROM_TOKEN             "TOK"
#define EM_MAGIC_GET_MODE_FROM_DEV               "DEV"
#define EM_MAGIC_GET_MODE_NO_TOKEN               "NO_TOKEN"

#define EM_RTD_CMD_NONE                          0x00
#define EM_RTD_CMD_ACK                           0x01
#define EM_RTD_CMD_NO_ACK                        0x02

// ESS
#define EM_MAGIC_ESS_VERSION                     "01"
#define EM_MAGIC_ESS_TOKENIZER                   ":"
#define EM_MAGIC_ESS_AP_SIDE                     "MST"
#define EM_MAGIC_ESS_BL_SIDE                     "BLT"
#define EM_MAGIC_ESS_PROTOCOL_V1                 "01"
#define EM_MAGIC_ESS_PREFIX_COMMAND              "AT+ENGMODES="
#define EM_MAGIC_ESS_PREFIX_HEADER_DEL_TOK       "0,0,"
#define EM_MAGIC_ESS_PREFIX_HEADER_REQ_TOK       "0,1,"
#define EM_MAGIC_ESS_PREFIX_HEADER_INSTALL_TOK   "0,2,"
#define EM_MAGIC_ESS_PREFIX_HEADER_REQ_RECOVERY  "0,3,"
#define EM_MAGIC_ESS_PREFIX_HEADER_RECOVERY      "0,4,"
#define EM_MAGIC_ESS_PREFIX_HEADER_GET_MODES     "1,1,0"
#define EM_MAGIC_ESS_PREFIX_HEADER_HERE_I_AM     "1,3,1"
#define EM_MAGIC_ESS_PREFIX_HEADER_SET_P_TIME    "2,2,"
#define EM_MAGIC_ESS_PREFIX_HEADER_DELETE_OFF    "0,0,3,0"
#define EM_MAGIC_ESS_PREFIX_HEADER_GET_PRIORITY  "1,2,0"
#define EM_MAGIC_ESS_PREFIX_HEADER_SET_PRIORITY  "2,2,"
#define EM_MAGIC_ESS_PREFIX_HEADER_GET_INFO      "9,0"
#define EM_MAGIC_ESS_OS_TYPE                     "ANDROID"

#define EM_MAGIC_ESS_PREFIX_RETURN_COMMAND       "+ENGMODES:"
#define EM_MAGIC_ESS_AT_COMMAND_DELIM            ","
#define EM_MAGIC_ESS_AT_COMMAND_OK               "OK"
#define EM_MAGIC_ESS_AT_COMMAND_NG               "NG"
#define EM_MAGIC_ESS_AT_COMMAND_NOK              "NOK"
#define EM_MAGIC_ESS_AT_COMMAND_ERROR            "ERROR_INTERNAL"
#define EM_MAGIC_ESS_AT_COMMAND_NEW_LINE         "\r\n"
#define EM_MAGIC_ESS_AT_COMMAND_END_LINE         "\r\n\r\nOK\r\n"

/* EM PRIORITY TIME */
#define EM_MAGIC_PRIORITY_OK                     "OK"
#define EM_MAGIC_PRIORITY_NOK                    "NOK"
#define EM_MAGIC_PRIORITY_SEPARATOR              ","
#define EM_MAGIC_PRIORITY_BEYOND_GENERAL         "BEYOND_GENERAL"
#define EM_MAGIC_PRIORITY_EXCEEDED_PR_COUNT      "EXCEEDED"
#define EM_MAGIC_PRIORITY_NONE                   "NONE"
#define EM_MAGIC_PRIORITY_NO_TOKEN               "NO_TOKEN"
#define EM_PRIORITY_FLAG_MATCHED_TID             0x00000001

#define EM_LEN_RECOVERY_HEADER                   EM_STRUCT_ESI_META_SIZE
#define EM_LEN_RECOVERY_NUM_OF_TOKEN_ID          300
#define EM_LEN_RECOVERY_DATA                     (EM_LEN_RECOVERY_HEADER + (16 * EM_LEN_RECOVERY_NUM_OF_TOKEN_ID))
#define EM_LEN_RECOVERY_COUNTER                  4

// ESI TYPE
#define EM_TYPE_ESI_ITEM_MIN                     0
#define EM_TYPE_ESI_ITEM_INIT_STATE              0x0001
#define EM_TYPE_ESI_ITEM_TOKEN_STATE             0x0002
#define EM_TYPE_ESI_ITEM_TOKEN_ID                0x0003
#define EM_TYPE_ESI_ITEM_TUC_TABLE_LEGACY        0x0004
#define EM_TYPE_ESI_ITEM_LOG                     0x0005
#define EM_TYPE_ESI_ITEM_LATEST_TOKEN_ID         0x0006
#define EM_TYPE_ESI_ITEM_DID                     0x0007
#define EM_TYPE_ESI_ITEM_RECOVERY_COUNTER        0x0008
#define EM_TYPE_ESI_ITEM_IIN                     0x0009
#define EM_TYPE_ESI_ITEM_TUC_TABLES              0x000A
#define EM_TYPE_ESI_ITEM_PRIORITY_TIME           0x0010
#define EM_TYPE_ESI_ITEM_LATEST_FAC_TOKEN_ID     0x0011
#define EM_TYPE_ESI_ITEM_RECOVERY_COUNTER_BL     0x0012
#define EM_TYPE_ESI_ITEM_SHARED_KEY              0x1000
#define EM_TYPE_ESI_ITEM_SHARED_ESI_COUNTER      0x1001
#define EM_TYPE_ESI_ITEM_MAX                     0X1001

#define EM_TYPE_INFO_TOKE_ID                     0x0001
#define EM_TYPE_INFO_TOKE_UNIQUE_INFO            0x0002
#define EM_TYPE_INFO_TOKE_NUM_DEVICES            0x0003
#define EM_TYPE_INFO_TOKE_LSEC_TOK               0x0004
#define EM_TYPE_INFO_DEVI_MODEL_NAME             0x0001
#define EM_TYPE_INFO_DEVI_DID                    0x0002
#define EM_TYPE_INFO_DEVI_IMEI                   0x0003
#define EM_TYPE_INFO_ISSU_SINGLE_ID              0x0001
#define EM_TYPE_INFO_ISSU_OTP                    0x0002
#define EM_TYPE_INFO_ISSU_NONCE                  0x0003
#define EM_TYPE_INFO_ISSU_SYSTEM_ID              0x1001
#define EM_TYPE_INFO_ISSU_IP                     0x1002
#define EM_TYPE_INFO_ISSU_MAC                    0x1003
#define EM_TYPE_INFO_VALI_ISSUED_DATE            0x0001
#define EM_TYPE_INFO_VALI_EXPIRY_DATE            0x0002
#define EM_TYPE_INFO_INTE_SIGNATURE              0x0001
#define EM_TYPE_INFO_INTE_SERVER_CERT            0x0002
#define EM_TYPE_INFO_MODB_DEVICE_INFO            0x0001
#define EM_TYPE_INFO_MODB_HIDDEN                 0x0002
#define EM_TYPE_INFO_MODB_MTUC                   0x0003
#define EM_TYPE_INFO_MODB_MTUC_VALUE             0x0004
#define EM_TYPE_INFO_MODB_EXCLUSIVE              0x0005
#define EM_TYPE_INFO_MODB_USED_ONCE              0x0006
#define EM_TYPE_INFO_MODB_EXTENSION              0x0007
#define EM_TYPE_INFO_GRDB_NO_DUPLICATE           0x0001

#define EM_TYPE_DEV_CERT                         1

#define EM_TYPE_INIT_STATE_SHARING               0x01
#define EM_TYPE_INIT_STATE_SHARED                0x02
#define EM_TYPE_INIT_STATE_PRESHARED             0x03
#define EM_TYPE_INIT_STATE_INTERMEDIATE          0x04
#define EM_TYPE_INIT_STATE_COMPLETED             0x05
#define EM_TYPE_INIT_STATE_UNKNOWN               0xFF

// TOKE TYPE
#define EM_TYPE_TOKE_LSEC_TOK_ENABLED            0x01

// TUC TYPE
#define EM_TYPE_TUC_USAGE_COUNT_TYPE             0x0003
#define EM_TYPE_TUC_VALUE                        0x0004
#define EM_TYPE_TUC_IS_ENABLE                    0x01
#define EM_TYPE_TUC_ONLY_ONCE                    0x02

// ESS TYPE
#define EM_TYPE_ESS_MAKE_TOKEN                   0x0001
#define EM_TYPE_ESS_DELETE_TOKEN                 0x0002
#define EM_TYPE_ESS_INSTALL_TOK                  0x0003
#define EM_TYPE_ESS_MAKE_RECOVERY_MSG            0x0004
#define EM_TYPE_ESS_RECOVERY_DATA                0x0005
#define EM_TYPE_ESS_OFFLINE_DELETE_TOKEN         0x0006
#define EM_TYPE_ESS_GET_INFO                     0x0007
#define EM_TYPE_ESS_CHECKING_SUPPORT             0x0008
#define EM_TYPE_ESS_GET_MODES                    0x0009
#define EM_TYPE_ESS_SET_PRIORITY                 0x000A
#define EM_TYPE_ESS_GET_PRIORITY                 0x000B
#define EM_TYPE_ESS_UNKNOWN                      0xFFFF

// ESS Error Return Type
#define EM_RETURN_TYPE_ESS_ERROR_NG              0x0001
#define EM_RETURN_TYPE_ESS_ERROR_NOK             0x0002

// FLAGS
#define EM_FLAGS_0_EXIST_TOKEN                   0x0000000000000001
#define EM_FLAGS_0_EXIST_MESSAGE                 0x0000000000000002
#define EM_FLAGS_0_EXIST_CERT                    0x0000000000000004
#define EM_FLAGS_0_EXIST_ESS_PREFIXBODY          0x0000000000000008
#define EM_FLAGS_0_EXIST_ESS_IV_B64              0x0000000000000010
#define EM_FLAGS_0_EXIST_ESI                     0x0000000000000020
#define EM_FLAGS_0_EXIST_CORE_V20                0x0000000000000040
#define EM_FLAGS_0_EXIST_CLIENT_PROC_NAME        0x0000000000000080
#define EM_FLAGS_0_EXIST_CLIENT_PKG_NAME         0x0000000000000100
#define EM_FLAGS_0_EXIST_CLIENT_UID              0x0000000000000200
#define EM_FLAGS_0_EXIST_SINGLE_ID               0x0000000000000400
#define EM_FLAGS_0_EXIST_OTP                     0x0000000000000800
#define EM_FLAGS_0_EXIST_VALIDITY                0x0000000000001000
#define EM_FLAGS_0_EXIST_DATE                    0x0000000000002000
#define EM_FLAGS_0_EXIST_OSVERSION               0x0000000000004000
#define EM_FLAGS_0_EXIST_SWVERSION               0x0000000000008000
#define EM_FLAGS_0_EXIST_BLVERSION               0x0000000000010000
#define EM_FLAGS_0_EXIST_UNIQUE_NUMBER           0x0000000000020000
#define EM_FLAGS_0_EXIST_SMSN                    0x0000000000040000
#define EM_FLAGS_0_EXIST_TSS                     0x0000000000080000
#define EM_FLAGS_0_EXIST_IMEI                    0x0000000000100000
#define EM_FLAGS_0_EXIST_BOOTLOADER              0x0000000000200000
#define EM_FLAGS_0_EXIST_KEEPING_ITEM            0x0000000000400000
#define EM_FLAGS_0_EXIST_MODE_BITS               0x0000000000800000
#define EM_FLAGS_0_EXIST_TOKEN_ID                0x0000000001000000
#define EM_FLAGS_0_EXIST_MODEL_NAME              0x0000000002000000
#define EM_FLAGS_0_EXIST_RXIV_B64                0x0000000004000000
#define EM_FLAGS_0_EXIST_ETOKEN_B64              0x0000000008000000
#define EM_FLAGS_0_EXIST_ESS_MESSAGE             0x0000000010000000
#define EM_FLAGS_0_EXIST_DID                     0x0000000020000000
#define EM_FLAGS_0_EXIST_ERSD_B64                0x0000000040000000
#define EM_FLAGS_0_DEV_CERT                      0x0000000080000000
#define EM_FLAGS_0_EXIST_IS_CALLER_CHECKED       0x0000000100000000
#define EM_FLAGS_0_EXIST_CLIENT_SIGNATURE        0x0000000200000000
#define EM_FLAGS_0_EXIST_RECOVERY_MESSAGE        0x0000000400000000
#define EM_FLAGS_0_EXIST_PLEASE_NO_COUNT         0x0000000800000000
#define EM_FLAGS_0_EXIST_ACTIVATED               0x0000001000000000
#define EM_FLAGS_0_EXIST_FUSE                    0x0000002000000000
#define EM_FLAGS_0_EXIST_OPENDAY                 0x0000004000000000
#define EM_FLAGS_0_EXIST_IIN                     0x0000008000000000
#define EM_FLAGS_0_EXIST_PRIORITY_TIME           0x0000010000000000
#define EM_FLAGS_0_EXIST_OMC_ID                  0x0000020000000000

#define EM_FLAGS_1_EXIST_RETURN_MESSAGE          0x0000000000000001
#define EM_FLAGS_1_EXIST_RETURN_KEEPING_ITEM     0x0000000000000002
#define EM_FLAGS_1_EXIST_RETURN_ESI              0x0000000000000004
#define EM_FLAGS_1_EXIST_RETURN_TOKEN_REMOVE     0x0000000000000008
#define EM_FLAGS_1_EXIST_RETURN_TOKEN            0x0000000000000010
#define EM_FLAGS_1_EXIST_RETURN_MODES_BIT        0x0000000000000020
#define EM_FLAGS_1_EXIST_RETURN_TOKEN_EXPIRED    0x0000000000000040
#define EM_FLAGS_1_NEED_RECOVERY_ESI             0x0000000000000080
#define EM_FLAGS_1_DO_INIT_CORE                  0x0000000000000100
#define EM_FLAGS_1_WRITE_CORE                    0x0000000000000200
#define EM_FLAGS_1_IS_DEV_DEVICE                 0x0000000000000400
#define EM_FLAGS_1_LTS_INSTALL_TOKEN             0x0000000000000800
#define EM_FLAGS_1_LTS_REMOVE_TOKEN              0x0000000000001000
#define EM_FLAGS_1_EXIST_RETURN_PRIORITY_TIME    0x0000000000002000

#define EM_FLAGS_2_ENABLED_LSEC_TOKEN            0x0000000000000001
#define EM_FLAGS_2_NEED_TO_PARSING_TOKEN         0x0000000000000002
#define EM_FLAGS_2_PASS_VERIFY_ESI_CORE          0x0000000000000004
#define EM_FLAGS_2_PASS_POST_PROCESSING          0x0000000000000008
#define EM_FLAGS_2_BUT_ITS_OK_NO_TOKEN           0x0000000000000010
#define EM_FLAGS_2_NEED_TO_READ_DID              0x0000000000000020
#define EM_FLAGS_2_TOKEN_VERIFICATION_FAILED     0x0000000000000040
#define EM_FLAGS_2_TOKEN_MAGIC_IS_UNKNOWN        0x0000000000000080
#define EM_FLAGS_2_NO_NEED_CORE                  0x0000000000000100

#define EM_FLAG_EM_TOKEN_FROM_FAC                10

#define EM_CORE_FLAG_INIT_FLAG                   0x00000001

#define EM_VERSION15                             15
#define EM_VERSION20                             20
#define EM_VERSION25                             25
#define EM_VERSION30                             30
#define EM_MAGIC_VERSION15                       "15"
#define EM_MAGIC_VERSION20                       "20"
#define EM_MAGIC_VERSION25                       "25"

#define EM_STEADY_PATH                           "/dev/block/steady"
#define EM_STEADY_FUSE_CMD                       "FUSE"

#define EM_TYPE_STEADY_MAGIC                     1
#define EM_TYPE_STEADY_TOKEN                     2
#define EM_TYPE_STEADY_ESI                       3
#define EM_TYPE_STEADY_LTS                       4
#define EM_TYPE_STEADY_FUSE                      5

#define EM_FUSE_SUCCESS                          1
#define EM_FUSE_FAIL                             0

#define EM_POS_STEADY                            20480
#define EM_POS_ESI                               9216
#define EM_POS_LTS                               8320 /*8192+64+64*/
#define EM_POS_FUSE                              8192

#define EM_PROP_TSTATE                           "security.em.tstate"
#define EM_TSTATE_DELETE_BY_USER                 "DU"
#define EM_TSTATE_DELETE_BY_ESS                  "DC"
#define EM_TSTATE_DELETE_BROKEN                  "DB"
#define EM_TSTATE_EMPTY                          "EM"

#define EM_CERT_SUBJECT_UID                      "UID="
#define EM_CERT_SUBJECT_CN                       "CN="
#define EM_CERT_SUBJECT_CNV                      "EngineeringMode"
#define EM_CERT_SUBJECT_UID_FOR_LITE             "UID"
#define EM_CERT_SUBJECT_CN_FOR_LITE              "CN"

#define EM_RPMB_QSEE_PARTITION_ID                201719
#define EM_RPMB_RESERVED_SECTOR_NUM              256  /* 256 * 512(1 RPMB Sector) = 128 KBytes */
#define EM_RPMB_SECTOR_UNIT_BYTES                512

// INFO STRUCTURE TYPE
#define EM_INFO_TYPE_INTE_SIGNATURE              0x0001
#define EM_INFO_TYPE_INTE_SERVER_CERT            0x0002

#define EM_GROUP_ID_BINARY_FLASHING              0x0000
#define EM_GROUP_ID_DEVICE_RECOVERY_FT           0x0002
#define EM_GROUP_ID_DEVICE_MANUFACTURING_FT      0x0003
#define EM_GROUP_ID_DEBUGGING_FT                 0x0004

#define EM_RPMB_EXYNOS_PARTITION_ID              8
#define EM_RPMB_MTK_PARTITION_ID                 10
#define EM_RPMB_SINGLE_BLOCK_SIZE                256

#endif
