blob: c196479d693f17fd527eed7eb61a0a674e6bec5e [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2 *
3 * Filename:
4 * ---------
5 * custom_sml.h
6 *
7 * Project:
8 * --------
9 * UMOLYA
10 *
11 * Description:
12 * ------------
13 * This is the file for SIM ME Lock customization
14 *
15 * Author:
16 * -------
17 * -------
18 ****************************************************************************/
19#ifndef CUSTOM_SML_H
20#define CUSTOM_SML_H
21
22#include "kal_general_types.h"
23#include "ps_public_enum.h"
24#include "sim_ps_enum.h"
25#include "mcd_l3_inc_struct.h"
26#include "l4_nvram_def.h"
27#include "cust_chl_interface.h"
28
29/****************************************************************************
30 *
31 * SIM ME Lock
32 *
33 ****************************************************************************/
34#define SML_IMEI_PRINT_LEN 5 // print partial UE IMEI for privacy
35
36extern void sml_mini_trace(const kal_char *title, kal_uint8 *data, kal_uint8 len);
37extern sml_key_input_type_enum custom_sml_query_key_input_type(sml_key_algo_enum algo, sml_op_enum op);
38#ifdef __SML_PUK__
39extern sml_key_input_type_enum custom_sml_query_puk_key_input_type(sml_key_algo_enum algo, sml_puk_key_op_enum op);
40#endif
41
42
43/****************************************************************************
44 *
45 * Verizon SIM Lock
46 *
47 ****************************************************************************/
48#define SML_VZW_RSU_TIME_STAMP_LEN 8
49#define SML_VZW_RSU_NW_CODE_LEN 6 /* 123-456 */
50#define SML_VZW_RSU_NW_LIST_LEN (SML_VZW_RSU_NW_CODE_LEN * 5) /* 5 sets */
51#define SML_VZW_RSU_NS_CODE_LEN 8 /* 123-456-78 */
52#define SML_VZW_RSU_NS_LIST_LEN (SML_VZW_RSU_NS_CODE_LEN * 5)
53#define SML_VZW_RSU_SP_CODE_LEN (7+NUM_GID1) /* 123-456-8-00000000000000000000 */
54#define SML_VZW_RSU_SP_LIST_LEN (SML_VZW_RSU_SP_CODE_LEN * 4)
55#define SML_VZW_RSU_EHPLMN_CODE_LEN (13+NUM_GID1) /* 123-456-8-00000000000000000000-123-456 */
56#define SML_VZW_RSU_EHPLMN_LIST_LEN (SML_VZW_RSU_EHPLMN_CODE_LEN * 5)
57#define SML_VZW_RSU_SESSION_ID_LEN 8
58#define SML_VZW_RSU_SIZE_OF_MCC_MNC 6
59#define SML_VZW_RSU_SIZE_OF_GID 9
60#define SML_VZW_RSU_SIZE_OF_EHPLMN 6
61#define SML_VZW_RSU_MAX_SUPPORT_MAJOR_VER 1
62#define SML_VZW_RSU_MAX_SUPPORT_MINOR_VER 0
63
64
65typedef struct {
66 kal_uint8 major_version;
67 kal_uint8 minor_version;
68 kal_uint8 protection_algo;
69 kal_uint8 nw_lock_op;
70 kal_uint8 timestamp[SML_VZW_RSU_TIME_STAMP_LEN];
71 kal_uint8 nw_num;
72 kal_uint8 nw_list[SML_VZW_RSU_NW_LIST_LEN];
73 kal_uint8 ns_num;
74 kal_uint8 ns_list[SML_VZW_RSU_NS_LIST_LEN];
75 kal_uint8 sp_num;
76 kal_uint8 sp_list[SML_VZW_RSU_SP_LIST_LEN];
77 kal_uint8 ehplmn_num;
78 kal_uint8 ehplmn_list[SML_VZW_RSU_EHPLMN_LIST_LEN];
79 kal_uint8 session_id[SML_VZW_RSU_SESSION_ID_LEN];
80} sml_vzw_sim_lock_context_struct;
81typedef sml_vzw_sim_lock_context_struct nvram_sml_vzw_sim_lock_context_struct;
82
83typedef struct {
84 kal_uint8 device_key[32]; //a unique 32-byte Device Key, which is used to calculate HMAC of a Network Lock Request message
85} sml_vzw_sim_lock_device_key_struct;
86typedef sml_vzw_sim_lock_device_key_struct nvram_sml_vzw_sim_lock_device_key_struct;
87
88typedef struct {
89 kal_uint16 delay_timer; //ranging from 0-10 minutes, default is 2 minutes
90} sml_vzw_rsu_delay_timer_struct;
91typedef sml_vzw_rsu_delay_timer_struct nvram_sml_vzw_rsu_delay_timer_struct;
92
93typedef enum {
94 SML_VZW_RSU_MSG_TYPE_INVALID = 0,
95 SML_VZW_RSU_MSG_TYPE_REQUEST = 1,
96 SML_VZW_RSU_MSG_TYPE_STATUS = 2,
97} sml_vzw_rsu_msg_type_enum;
98
99typedef enum {
100 SML_VZW_LOCK_STATE_LOCK = 0,
101 SML_VZW_LOCK_STATE_UNLOCK = 1,
102 SML_VZW_LOCK_STATE_TEMP_UNLOCK = 2,
103} sml_vzw_lock_state_enum;
104
105typedef enum {
106 SML_VZW_CAT_NONE,
107 SML_VZW_CAT_N,
108 SML_VZW_CAT_NS,
109 SML_VZW_CAT_SP,
110 SML_VZW_CAT_EHPLMN,
111 SML_VZW_CAT_SIZE
112} sml_vzw_cat_enum;
113
114typedef enum {
115 SML_VZW_RSU_STATUS_SUCCESS = 0,
116 SML_VZW_RSU_STATUS_GENERIC_ERROR = 1,
117 SML_VZW_RSU_STATUS_BLOB_TOO_SHORT = 2,
118 SML_VZW_RSU_STATUS_SIGNATURE_FAILED = 3,
119 SML_VZW_RSU_STATUS_RESERVE = 4,
120 SML_VZW_RSU_STATUS_IMEI_FAILED = 5,
121 SML_VZW_RSU_STATUS_BLOB_FRESHNESS_CHECK_FAILED = 6,
122} sml_vzw_rsu_status_enum;
123
124typedef struct {
125 void * pObj;
126 void (* give)(void * /* pLidToObj */, kal_uint8);
127 void (* take)(void * /* pObjToLid */, kal_uint8);
128 void (* destory)(kal_uint8);
129 void * (* getItem)(sml_vzw_cat_enum,sml_ctx_enum,kal_uint16 * /* length */, kal_uint8);
130 void (* putItem)(sml_vzw_cat_enum,sml_ctx_enum,void * /* pItem */, kal_uint16 * /* plen */, kal_uint8);
131} nvram_ef_sml_vzw_sim_lock_obj_struct;
132
133extern void sml_clean_vzw_cntxt(void);
134extern kal_bool custom_sml_vzw_is_test_purpose(void);
135
136extern kal_uint16 sml_vzw_Load( void *pLid, kal_uint8 source );
137extern kal_uint16 sml_vzw_Save( void *pLid, kal_uint8 source );
138extern kal_bool sml_vzw_Check( sml_vzw_cat_enum cat,
139 kal_uint8 *imsi,
140 kal_uint8 *gid1,
141 kal_uint16 ehplmn_num,
142 kal_uint8 *ehplmn,
143 kal_uint8 sim_mnc_len,
144 kal_uint8 source);
145extern kal_uint8 sml_vzw_get_major_version(kal_uint8 source);
146extern kal_uint8 sml_vzw_get_minor_version(kal_uint8 source);
147extern kal_uint8 sml_vzw_get_max_support_major_version();
148extern kal_uint8 sml_vzw_get_max_support_minor_version();
149extern kal_bool sml_vzw_update_int_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8 data);
150extern kal_bool sml_vzw_get_int_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* pData);
151extern kal_bool sml_vzw_update_array_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* data, kal_uint16 data_len);
152extern kal_bool sml_vzw_get_array_data(kal_uint8 source, sml_vzw_cat_enum cat, sml_ctx_enum type, kal_uint8* data, kal_uint16* data_len);
153extern kal_bool sml_vzw_reset_rsu_data(kal_uint8 source);
154
155extern void sml_vzw_give( void * pLidToObj, kal_uint8 source );
156extern void sml_vzw_take( void * pObjToLid, kal_uint8 source );
157extern void sml_vzw_destory( kal_uint8 source );
158extern void *sml_vzw_getItem(sml_vzw_cat_enum cat,
159 sml_ctx_enum item,
160 kal_uint16 * plength,
161 kal_uint8 source);
162extern void sml_vzw_putItem( sml_vzw_cat_enum cat,
163 sml_ctx_enum item,
164 void * pItem,
165 kal_uint16 * plength,
166 kal_uint8 source);
167
168extern nvram_ef_sml_vzw_sim_lock_obj_struct *pSMLVZWg;
169extern void custom_vzw_rsu_get_pub_key_handle(kal_uint8 index,
170 TYPE_CUST_CHL_KEY *key);
171
172/****************************************************************************
173 *
174 * TMO SIM Lock with Movial Solution
175 *
176 ****************************************************************************/
177#define SML_TMO_MOVIAL_BLOB_IMEI_SIZE 15
178#define SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE 8
179#define SML_TMO_MOVIAL_SIZE_OF_START_TIME 8
180#define SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION 4
181#define SML_TMO_MOVIAL_BLOB_LENGTH_SIZE 2
182#define SML_TMO_MOVIAL_BLOB_CONFIG_SUPPORT_CAT_SIZE 3
183
184/* Length of each CAT Codes */
185#define SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N 6 /* MCC/MNC */
186#define SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS 8 /* MCC/MNC + HLR */
187#define SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP 7 /* MCC/MNC + GID1 */
188
189/* Define the maximum suppot categories */
190#define SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_N 15
191#define SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_NS 10
192#define SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_SP 10
193
194/* Define the total size of each category */
195#define SML_TMO_MOVIAL_BLOB_CAT_N_SIZE (SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_N * SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_N)
196#define SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE (SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_NS * SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_NS)
197#define SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE (SML_TMO_MOVIAL_BLOB_SIZE_OF_CAT_SP * SML_TMO_MOVIAL_BLOB_MAX_SUPPORT_CAT_SP)
198
199#define SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE 4
200#define SML_TMO_MOVIAL_BLOB_SALT_SIZE 16
201#define SML_TMO_MOVIAL_BLOB_HCK_SIZE 32
202#define SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE 256
203#define SML_TMO_MOVIAL_SIZE_OF_UNLOCK_TIME 4
204
205
206#define SML_TMO_MOVIAL_TIMEOUT_PERIODIC_CHECK (KAL_TICKS_1_SEC*10)//(12*60*KAL_TICKS_1_MIN) /* 12 hours */
207#define SML_TMO_MOVIAL_TIMER_INDEX_PERIODIC_CHECK 0x05
208
209#define SML_TMO_MOVIAL_SLB_ERR_SUCCESS 0x00
210#define SML_TMO_MOVIAL_SLB_ERR_GENERIC 0x01
211#define SML_TMO_MOVIAL_SLB_ERR_BLOB_TOO_SHORT 0x02
212#define SML_TMO_MOVIAL_SLB_ERR_VERIFY_FAIL 0x03
213#define SML_TMO_MOVIAL_SLB_ERR_GET_TIME_OP_FAIL 0x04
214#define SML_TMO_MOVIAL_SLB_ERR_IMEI_MISMATCH 0x05
215#define SML_TMO_MOVIAL_SLB_ERR_BLOB_FRESH_CHECK_FAIL 0x06
216
217#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_CAT_LOCK 0xDA
218#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_SLB 0xDB
219#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UNLOCK_EXPIRE 0xDC
220#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_UPDATE_CORR 0xDD
221#define SML_TMO_MOVIAL_NVRAM_ACCESS_ID_RESTORE_LOCK 0xDE
222
223typedef enum {
224 SML_TMO_MOVIAL_CAT_LOCKED,
225 SML_TMO_MOVIAL_CAT_UNLOCKED,
226} sml_tmo_movial_cat_lock_enum;
227
228typedef struct {
229 kal_uint8 change_flag;
230 kal_uint8 num; /* num of valid sets */
231 sml_tmo_movial_cat_lock_enum cat_lock;
232} sml_tmo_movial_blob_meta_struct;
233
234typedef struct {
235 kal_uint8 iteration_count[SML_TMO_MOVIAL_BLOB_ITERATION_COUNT_SIZE]; /* 4 */
236 kal_uint8 salt[SML_TMO_MOVIAL_BLOB_SALT_SIZE]; /* 16 */
237 kal_uint8 hck[SML_TMO_MOVIAL_BLOB_HCK_SIZE]; /* 32 */
238} sml_tmo_movial_blob_key_struct;
239
240typedef struct {
241 kal_uint8 major_version;
242 kal_uint8 minor_version;
243 kal_uint8 protection_algorithm;
244 kal_uint8 lock_operation;
245 kal_uint8 imei[SML_TMO_MOVIAL_BLOB_IMEI_SIZE]; /* 15 */
246 kal_uint8 time_stamp[SML_TMO_MOVIAL_BLOB_TIME_STAMP_SIZE]; /* 8 */
247 kal_uint8 start_time[SML_TMO_MOVIAL_SIZE_OF_START_TIME]; /* 8 */
248 kal_uint8 unlock_duration[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_DURATION]; /* 4 */
249 kal_uint8 length[SML_TMO_MOVIAL_BLOB_LENGTH_SIZE]; /* 2 */
250 sml_tmo_movial_blob_meta_struct cat[SML_TMO_MOVIAL_BLOB_CONFIG_SUPPORT_CAT_SIZE]; /* (3 * ?) */
251 sml_tmo_movial_blob_key_struct key[SML_TMO_MOVIAL_BLOB_CONFIG_SUPPORT_CAT_SIZE]; /* (3 * 52) */
252 kal_uint8 code_cat_n[SML_TMO_MOVIAL_BLOB_CAT_N_SIZE]; /* (30 * 6)*/
253 kal_uint8 code_cat_ns[SML_TMO_MOVIAL_BLOB_CAT_NS_SIZE]; /* (10 * 8)*/
254 kal_uint8 code_cat_sp[SML_TMO_MOVIAL_BLOB_CAT_SP_SIZE]; /* (10 * 7)*/
255 kal_uint8 signature[SML_TMO_MOVIAL_BLOB_SIZE_OF_SIGNATURE]; /* 256 */
256 kal_uint8 unlock_time[SML_TMO_MOVIAL_SIZE_OF_UNLOCK_TIME]; /* 4 */
257} sml_tmo_movial_sim_lock_context_struct;
258
259typedef sml_tmo_movial_sim_lock_context_struct nvram_sml_tmo_movial_sim_lock_context_struct;
260
261#define SML_TMO_MOVIAL_MAX_BLOB_SIZE NVRAM_EF_L4_SML_TMO_MOVIAL_SIM_LOCK_SIZE
262
263typedef struct {
264 kal_uint64 correlation_id;
265} sml_tmo_movial_corr_id_struct;
266
267typedef sml_tmo_movial_corr_id_struct nvram_sml_tmo_movial_corr_id_struct;
268
269typedef enum {
270 SML_TMO_MOVIAL_CAT_BEGIN,
271 SML_TMO_MOVIAL_CAT_N = SML_TMO_MOVIAL_CAT_BEGIN,
272 SML_TMO_MOVIAL_CAT_NS,
273 SML_TMO_MOVIAL_CAT_SP,
274 SML_TMO_MOVIAL_CAT_SIZE,
275 SML_TMO_MOVIAL_CAT_NULL
276} sml_tmo_movial_cat_enum;
277
278typedef struct {
279 void * pObj;
280 void (* give)(void * /* pLidToObj */, kal_uint8);
281 void (* take)(void * /* pObjToLid */, kal_uint8);
282 void (* destory)(kal_uint8);
283 void * (* getItem)(sml_tmo_movial_cat_enum,sml_ctx_enum,kal_uint16 * /* length */, kal_uint8);
284 void (* putItem)(sml_tmo_movial_cat_enum,sml_ctx_enum,void * /* pItem */, kal_uint16 * /* plen */, kal_uint8);
285} nvram_ef_sml_tmo_movial_sim_lock_obj_struct;
286
287extern void sml_clean_tmo_movial_cntxt(void);
288extern void sml_tmo_movial_give( void *pLidToObj, kal_uint8 source );
289extern void sml_tmo_movial_take( void *pObjToLid, kal_uint8 source );
290extern void sml_tmo_movial_destory(kal_uint8 source);
291extern void *sml_tmo_movial_getItem( sml_tmo_movial_cat_enum category,
292 sml_ctx_enum item,
293 kal_uint16 *plength,
294 kal_uint8 source);
295extern void sml_tmo_movial_putItem( sml_tmo_movial_cat_enum cat,
296 sml_ctx_enum item,
297 void *pItem,
298 kal_uint16 *plength,
299 kal_uint8 source);
300
301extern kal_bool sml_tmo_movial_ValidateIMEI(kal_uint8 *imei, kal_bool is_bypass_default, kal_uint8 source);
302extern kal_bool sml_tmo_movial_ValidateTimeStamp(kal_uint8 *new_time_stamp, kal_uint8 source);
303extern kal_bool sml_tmo_movial_ValidateConfigData(sml_tmo_movial_sim_lock_context_struct *pBlob);
304extern kal_uint8 *sml_tmo_movial_ConstructBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint8 *error_cause, kal_uint8 source);
305extern kal_uint8 *sml_tmo_movial_ConstructSmlBlob(sml_tmo_movial_sim_lock_context_struct *pObj, kal_uint8 source);
306extern kal_uint8 *sml_tmo_movial_ReconstructBlob(sml_tmo_movial_sim_lock_context_struct *pObj, kal_uint32 *pLen, kal_uint8 *error_cause);
307extern kal_bool sml_tmo_movial_checkValidity(void *pObj, kal_uint8 source, kal_uint8 *error_cause);
308extern void sml_tmo_movial_Load(void *pLid, kal_uint8 source);
309extern void sml_tmo_movial_FirstLoad(void *pLid, kal_uint8 source);
310extern kal_uint16 sml_tmo_movial_Save(void *pLid, kal_uint8 source);
311extern kal_bool sml_tmo_movial_CheckTempUnlock(kal_uint8 source);
312extern kal_uint8 sml_tmo_movial_Catcode(sml_tmo_movial_cat_enum cat,
313 kal_uint8 *imsi,
314 kal_uint8 *gid1,
315 kal_uint8 mnc_len,
316 kal_uint8 *code);
317extern kal_uint8 sml_tmo_movial_GetCode( sml_tmo_movial_cat_enum cat,
318 kal_uint8 * imsi,
319 kal_uint8 * gid1,
320 kal_uint8 sim_mnc_len,
321 kal_uint8 * pdata,
322 kal_uint8 * code);
323extern kal_bool sml_tmo_movial_Check(sml_tmo_movial_cat_enum cat,
324 kal_uint8 *imsi,
325 kal_uint8 *gid1,
326 kal_uint8 sim_mnc_len,
327 kal_uint8 source);
328extern kal_bool sml_tmo_movial_UpdateNwTimeAndCheckTempLock(kal_uint8 source,
329 kal_uint8 nw_time_zone,
330 nw_time_zone_time_struct *nw_time);
331extern kal_bool sml_tmo_movial_Verify(sml_tmo_movial_cat_enum cat,
332 kal_uint8 * key,
333 kal_uint8 len,
334 kal_uint8 source);
335
336extern kal_uint8 sml_tmo_movial_update_slb(void *blob, kal_uint8 source);
337extern kal_uint8 *sml_tmo_movial_ConstructFirstBlob(kal_uint8 *pObj, kal_uint16 slb_len, kal_uint8 source);
338
339extern nvram_ef_sml_tmo_movial_sim_lock_obj_struct* pSMLTMMg;
340extern kal_uint32 sml_tmo_movial_seconds_to_expire;
341
342extern void sml_tmm_GetLockState(kal_uint8 *lock_state, kal_uint8 source);
343extern kal_uint32 sml_tmm_GetUnlockTimeLeft(kal_uint8 source);
344
345extern kal_bool custom_check_is_default_imei(kal_uint8 *imei);
346extern void custom_tmo_movial_rsu_get_pub_key_handle(kal_uint8 index,
347 TYPE_CUST_CHL_KEY *key1, TYPE_CUST_CHL_KEY *key2);
348#endif /* CUSTOM_SML_H */