at_cmd_ssim.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "ats_config.h"
  2. #ifdef CONFIG_AT_SSIM_SUPPORT
  3. #define SSIM_DIRECROTY "/ssim"
  4. #define AUTH_FILE_NAME "auth"
  5. #define SSIM_FILE "sim_file"
  6. #define SSIM_PLMN "sim_plmn"
  7. #define AUTH_FILE_PATH SSIM_DIRECROTY "/" AUTH_FILE_NAME
  8. #define SSIM_FILE_PATH SSIM_DIRECROTY "/" SSIM_FILE
  9. #define SSIM_PLMN_PATH SSIM_DIRECROTY "/" SSIM_PLMN
  10. #define PASSWORD_LENGTH 12
  11. #define AUTH_CODE_LENGTH 32
  12. #define PLMN_LENGTH 7
  13. #define SSIM_C_PARAMTER_LENGTH 16
  14. #define SSIM_KEY_LEN 16
  15. #define SSIM_OP_LEN 16
  16. #define SSIM_OPC_LEN 16
  17. #define SSIM_IMSI_LEN 16
  18. #define SSIM_IMEI_LEN 16
  19. #define SOFT_SIM_LENGTH_5 5
  20. #define SOFT_SIM_LENGTH_6 6
  21. #define SOFT_SIM_MSINH3B_LENGTH 3
  22. #define SOFT_SIM_IMEI_LENGTH 15
  23. #define SOFT_SIM_IMSI_LENGTH 15
  24. typedef struct
  25. {
  26. uint8_t mncLen;
  27. uint8_t plmn[PLMN_LENGTH];
  28. } SSIM_PLMN_T;
  29. typedef struct
  30. {
  31. uint8_t imei[SSIM_IMEI_LEN];
  32. uint8_t password[PASSWORD_LENGTH + 1];
  33. uint8_t authValue[AUTH_CODE_LENGTH + 1];
  34. } AUTH_CONTEXT_T;
  35. typedef struct
  36. {
  37. uint32_t enSoftUsimAlg;
  38. uint8_t aucKey[SSIM_KEY_LEN];
  39. uint8_t aucOp[SSIM_OP_LEN];
  40. } SOFT_AUTH_PARAM_STRU;
  41. typedef struct
  42. {
  43. uint8_t R1;
  44. uint8_t R2;
  45. uint8_t R3;
  46. uint8_t R4;
  47. uint8_t R5;
  48. uint8_t aucRsv[3];
  49. uint8_t C1[SSIM_C_PARAMTER_LENGTH];
  50. uint8_t C2[SSIM_C_PARAMTER_LENGTH];
  51. uint8_t C3[SSIM_C_PARAMTER_LENGTH];
  52. uint8_t C4[SSIM_C_PARAMTER_LENGTH];
  53. uint8_t C5[SSIM_C_PARAMTER_LENGTH];
  54. } SIM_AMRC_STRU;
  55. typedef struct
  56. {
  57. uint32_t bitOpcSoftUsimEnable : 1; // 1: VALID; 0: INVALID*, default : 0
  58. uint32_t bitOpRsv : 31;
  59. uint8_t aucOpc[SSIM_OPC_LEN];
  60. } USIM_SOFT_OPC_PARAM_STRU;
  61. typedef struct
  62. {
  63. uint8_t mncLen;
  64. uint8_t imsi[SSIM_IMSI_LEN];
  65. SIM_AMRC_STRU sim_amrc_stru;
  66. SOFT_AUTH_PARAM_STRU soft_auth_param_stru;
  67. USIM_SOFT_OPC_PARAM_STRU auth_opc;
  68. unsigned char hashCode[32];
  69. } SSIM_FILE_INFO_T;
  70. #define JUDGE_KEY_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_KEY_LEN * 2))
  71. #define JUDGE_OP_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_OP_LEN * 2))
  72. #define JUDGE_OPC_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_OPC_LEN * 2))
  73. #define JUDGE_C_LENGTH(_PARAM_) (strlen(_PARAM_) != (SSIM_C_PARAMTER_LENGTH * 2))
  74. #define PARSE_KEY_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.soft_auth_param_stru.aucKey, (uint8_t *)key, SSIM_KEY_LEN * 2)
  75. #define PARSE_OP_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.soft_auth_param_stru.aucOp, (uint8_t *)op, SSIM_OP_LEN * 2)
  76. #define PARSE_OPC_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.auth_opc.aucOpc, (uint8_t *)opc, SSIM_OPC_LEN * 2)
  77. #define PARSE_C1_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C1, (uint8_t *)c1, SSIM_C_PARAMTER_LENGTH * 2)
  78. #define PARSE_C2_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C2, (uint8_t *)c2, SSIM_C_PARAMTER_LENGTH * 2)
  79. #define PARSE_C3_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C3, (uint8_t *)c3, SSIM_C_PARAMTER_LENGTH * 2)
  80. #define PARSE_C4_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C4, (uint8_t *)c4, SSIM_C_PARAMTER_LENGTH * 2)
  81. #define PARSE_C5_HEX_DATA !_paramHexDataParse((uint8_t *)ssim_file_info.sim_amrc_stru.C5, (uint8_t *)c5, SSIM_C_PARAMTER_LENGTH * 2)
  82. #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
  83. #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
  84. extern int mbedtls_sha256_ret(const unsigned char *input,
  85. size_t ilen,
  86. unsigned char output[32],
  87. int is224);
  88. int _saveFileData(const char *path, void *data, size_t size);
  89. int _getFileData(const char *path, void *savedAuthCode, size_t size);
  90. bool _paramHexDataParse(uint8_t *dest, uint8_t *src, uint16_t length);
  91. void _imsiStrConvertBCD(uint8_t *dest, uint8_t *src, ssize_t srcLen);
  92. bool _isSoftSimDigit(const char *data, int length);
  93. int _generateSha256AuthCode(unsigned char *password, unsigned char *outputAuthcode);
  94. #endif