123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #include "ats_config.h"
- #ifdef CONFIG_AT_SSIM_SUPPORT
- #define SSIM_DIRECROTY "/ssim"
- #define AUTH_FILE_NAME "auth"
- #define SSIM_FILE "sim_file"
- #define SSIM_PLMN "sim_plmn"
- #define AUTH_FILE_PATH SSIM_DIRECROTY "/" AUTH_FILE_NAME
- #define SSIM_FILE_PATH SSIM_DIRECROTY "/" SSIM_FILE
- #define SSIM_PLMN_PATH SSIM_DIRECROTY "/" SSIM_PLMN
- #define PASSWORD_LENGTH 12
- #define AUTH_CODE_LENGTH 32
- #define PLMN_LENGTH 7
- #define SSIM_C_PARAMTER_LENGTH 16
- #define SSIM_KEY_LEN 16
- #define SSIM_OP_LEN 16
- #define SSIM_OPC_LEN 16
- #define SSIM_IMSI_LEN 16
- #define SSIM_IMEI_LEN 16
- #define SOFT_SIM_LENGTH_5 5
- #define SOFT_SIM_LENGTH_6 6
- #define SOFT_SIM_MSINH3B_LENGTH 3
- #define SOFT_SIM_IMEI_LENGTH 15
- #define SOFT_SIM_IMSI_LENGTH 15
- typedef struct
- {
- uint8_t mncLen;
- uint8_t plmn[PLMN_LENGTH];
- } SSIM_PLMN_T;
- typedef struct
- {
- uint8_t imei[SSIM_IMEI_LEN];
- uint8_t password[PASSWORD_LENGTH + 1];
- uint8_t authValue[AUTH_CODE_LENGTH + 1];
- } AUTH_CONTEXT_T;
- typedef struct
- {
- uint32_t enSoftUsimAlg;
- uint8_t aucKey[SSIM_KEY_LEN];
- uint8_t aucOp[SSIM_OP_LEN];
- } SOFT_AUTH_PARAM_STRU;
- typedef struct
- {
- uint8_t R1;
- uint8_t R2;
- uint8_t R3;
- uint8_t R4;
- uint8_t R5;
- uint8_t aucRsv[3];
- uint8_t C1[SSIM_C_PARAMTER_LENGTH];
- uint8_t C2[SSIM_C_PARAMTER_LENGTH];
- uint8_t C3[SSIM_C_PARAMTER_LENGTH];
- uint8_t C4[SSIM_C_PARAMTER_LENGTH];
- uint8_t C5[SSIM_C_PARAMTER_LENGTH];
- } SIM_AMRC_STRU;
- typedef struct
- {
- uint32_t bitOpcSoftUsimEnable : 1; // 1: VALID; 0: INVALID*, default : 0
- uint32_t bitOpRsv : 31;
- uint8_t aucOpc[SSIM_OPC_LEN];
- } USIM_SOFT_OPC_PARAM_STRU;
- typedef struct
- {
- uint8_t mncLen;
- uint8_t imsi[SSIM_IMSI_LEN];
- SIM_AMRC_STRU sim_amrc_stru;
- SOFT_AUTH_PARAM_STRU soft_auth_param_stru;
- USIM_SOFT_OPC_PARAM_STRU auth_opc;
- unsigned char hashCode[32];
- } SSIM_FILE_INFO_T;
- #define JUDGE_KEY_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_KEY_LEN * 2))
- #define JUDGE_OP_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_OP_LEN * 2))
- #define JUDGE_OPC_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_OPC_LEN * 2))
- #define JUDGE_C_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_C_PARAMTER_LENGTH * 2))
- #define PARSE_KEY_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.soft_auth_param_stru.aucKey, (uint8_t *)key, SSIM_KEY_LEN * 2)
- #define PARSE_OP_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.soft_auth_param_stru.aucOp, (uint8_t *)op, SSIM_OP_LEN * 2)
- #define PARSE_OPC_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.auth_opc.aucOpc, (uint8_t *)opc, SSIM_OPC_LEN * 2)
- #define PARSE_C1_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C1, (uint8_t *)c1, SSIM_C_PARAMTER_LENGTH * 2)
- #define PARSE_C2_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C2, (uint8_t *)c2, SSIM_C_PARAMTER_LENGTH * 2)
- #define PARSE_C3_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C3, (uint8_t *)c3, SSIM_C_PARAMTER_LENGTH * 2)
- #define PARSE_C4_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C4, (uint8_t *)c4, SSIM_C_PARAMTER_LENGTH * 2)
- #define PARSE_C5_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C5, (uint8_t *)c5, SSIM_C_PARAMTER_LENGTH * 2)
- #define PARSE_HEX_DATA PARSE_KEY_HEX_DATA || PARSE_OP_HEX_DATA || PARSE_OPC_HEX_DATA || PARSE_C1_HEX_DATA || PARSE_C2_HEX_DATA || PARSE_C3_HEX_DATA || PARSE_C4_HEX_DATA || PARSE_C5_HEX_DATA
- #define PARSE_HEX_DATA_NO_KEY PARSE_OP_HEX_DATA || PARSE_OPC_HEX_DATA || PARSE_C1_HEX_DATA || PARSE_C2_HEX_DATA || PARSE_C3_HEX_DATA || PARSE_C4_HEX_DATA || PARSE_C5_HEX_DATA
- extern int mbedtls_sha256_ret(const unsigned char *input,
- size_t ilen,
- unsigned char output[32],
- int is224);
- int _saveFileData(const char *path, void *data, size_t size);
- int _getFileData(const char *path, void *savedAuthCode, size_t size);
- bool _paramHexDataParse(uint8_t *dest, uint8_t *src, uint16_t length);
- void _imsiStrConvertBCD(uint8_t *dest, uint8_t *src, ssize_t srcLen);
- bool _isSoftSimDigit(const char *data, int length);
- int _generateSha256AuthCode(unsigned char *password, unsigned char *outputAuthcode);
- #endif
|