FreeCalypso > hg > fc-magnetite
diff src/aci2/aci/aci_slock.h @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 00:29:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/aci2/aci/aci_slock.h Mon Sep 26 00:29:36 2016 +0000 @@ -0,0 +1,283 @@ +/* ++----------------------------------------------------------------------------- +| Project : +| Modul : J:\g23m-aci\aci\aci_slock.h ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : ++----------------------------------------------------------------------------- +*/ + +#ifndef ACI_SLOCK_H +#define ACI_SLOCK_H + +#ifdef SIM_PERS +/* Shared globals ------------------------------------------------ */ + +typedef struct{ + T_SIMLOCK_STATUS status[SIMLOCK_FIRST_SIM+1]; /* lint */ /* one status for every personalisation lock type */ + UINT16 dependency[SIMLOCK_FIRST_SIM+1]; + UBYTE blocked; /* blocked flag */ + T_SIMLOCK_TYPE current_lock; /* currently checked lock */ + UBYTE pb_load ; + T_SIMLOCK_CHECK check_lock; + T_SIMLOCK_TYPE lock_type; + CHAR * lock_passwd; +}T_ACI_SLOCK_SHARED; + + +EXTERN T_ACI_SLOCK_SHARED AciSLockShrd; +EXTERN UBYTE sim_code_present_in_me; +#endif + +#define NOT_PRESENT_8BIT 0xFF +#define MAX_GID 5 +#define MAX_AD 0 +#define CHECK_FAIL 2 + +#ifdef SIM_PERS +/*Max number of user codes for each category- To be defined*/ +#define MAX_NW_USER_CODES 20 +#define MAX_NS_USER_CODES 10 +#define MAX_SP_USER_CODES 10 +#define MAX_CP_USER_CODES 10 +#define MAX_SIM_USER_CODES 10 +/*Normal code length for each category*/ +#define NW_USER_CODE_LEN 3 +#define NS_USER_CODE_LEN 4 +#define SP_USER_CODE_LEN 7 +#define CP_USER_CODE_LEN 11 +#define SIM_USER_CODE_LEN 8 + +#define MAX_NUM_USERCODE_SIZE 1 +#define NUM_OPCODE_SIZE 1 +#define NUM_USER_CODE_SIZE 1 +#define CURR_USER_CODE_INDEX_SIZE 1 +#define OPCODE_LEN_SIZE 1 // can be 2 +#define OPCODE_LEN_INDEX 2 +#define CODE_TYPE_SIZE 1 + +#define FC_MAX_INFINITE 0xff //04-08-2005 + + + /* + * BCD length + */ +#define NW_CODE_LEN 4 // Parity +MNC + MCC may require 4 bytes in packed bcd format if MNC length is 3 +#define NS_CODE_LEN 1 // NS requires 1 byte in packed bcd format +#define NW_NS_CODE_LEN 5 +#define NW_NS_MSIN_CODE_LEN 8 +#define NW_NS_MSIN_MSIN_CODE_LEN 13 +#define NW_NS_NS_CODE_LEN 6 +#define NW_DIGIT_MAP_TABLE_LEN 24 // Network code (4) + digit mapping table (10 * 2) + + +#define NORMAL_CODE 0x0a +#define INTERVAL_TYPE1 0x0b // Range +#define INTERVAL_TYPE2 0x0d // digit interval +#define REGULAR_EXP 0x0c // Regular expession + +#define GID1_LEN 4 // GID1 is not stored in BCD format +#define GID2_LEN 4 // GID2 is not stored in BCD format +#define GID_LEN_TO_BE_COMPARED 1 //depends on what the length is in the sim + + enum +{ + ALWAYS_ACCEPTED=0x00, + ALWAYS_REJECTED= 0x01, + UNTIL_NORMAL_SIM=0x02 +} ; + +typedef enum +{ + SIM_NORMAL =0, + SIM_TYPEAPPROVAL, + SIM_TEST +}T_SIM_TYPE ; + +#endif + +/* SIM configuration information */ +typedef struct +{ + UBYTE deper_key [16]; + UBYTE phase; + UBYTE oper_mode; /* SIM card functionality */ + UBYTE pref_lang[5]; + UBYTE access_acm; + UBYTE access_acmmax; + UBYTE access_puct; + UBYTE sim_gidl1[MAX_GID]; + UBYTE sim_gidl2[MAX_GID]; + #ifdef SIM_PERS + T_SIM_TYPE sim_type; /* */ + UBYTE sim_read_gid1; /* added for SP, CP */ + UBYTE sim_read_gid2; /* added for SP, CP */ + UBYTE gid1_len; + UBYTE gid2_len; + UBYTE sim_read_ad_first_byte; + #endif + +} T_ACI_SIM_CONFIG; // This is the same as T_MFW_SIM_CONFIG + + +/* Prototypes ----------------------------------------------------*/ + + + + +#ifdef SIM_PERS +/* + Initialising of this module. Has to be called first and *once only* before calling any other method. +*/ +void aci_slock_init ( void ); + +/* + Reset the aci_slock variables +*/ +void aci_slock_reset(); + + +/* + Unlocks the lock of the given type after verifying the given password. + The ACI extension for password verifying (see 2.3.9.1) will be used to + determine if the given password is correct or not. + On a successful unlock the actual status of the lock will be returned. + If an error occurred SIMLOCK_FAIL will be returned. + (Uses the ACI extension "personalisation data access".) + */ +T_SIMLOCK_STATUS aci_slock_authenticate ( T_SIMLOCK_TYPE type, char *passwd ); + + +/* + ACI method for retrieving the status of a single personalisation type. This method calls extension + methods which in turn calls Security Drv. API and retrn the status of a personalisation category. + The personalisation status is stored in MEPD which is directly accessed by Security Drv. + Added on 11/03/2005 +*/ + +T_SIMLOCK_STATUS aci_personalisation_get_status ( T_SIMLOCK_TYPE personalisation_type ); +#endif +#ifdef SIM_PERS + + +/* + Locks the lock of the given type. On a successful lock the actual + status of the lock will be returned. If an error occurred SIMLOCK_FAIL + will be returned. This method will use the ACI extension for password + verifying (see 2.3.9.1) to determine if the given password is correct + or not. (Uses the ACI extension "personalisation data access".) + */ +T_SIMLOCK_STATUS aci_slock_lock ( T_SIMLOCK_TYPE type, char *passwd ); + +/* +For Failure Counter reset. Use extension methods +added on 11/03/2005 +*/ +T_OPER_RET_STATUS aci_slock_reset_fc ( char *fcKey ); + +/*-------------------------------------- +For Supplementary Info( e.g. FC MAX, MC Current value). +Uses extension method aci_slock_sup_info +added on 11/03/2005 +----------------------------------------*/ +T_OPER_RET_STATUS aci_slock_sup_info(T_SUP_INFO *sup_info); + + +/* change the password */ +T_SIMLOCK_STATUS aci_slock_change_password ( T_SIMLOCK_TYPE type, char *passwd, char *new_passwd ); + + + +#endif +/* + Unlocks the lock of the given type after verifying the given password. + The ACI extension for password verifying (see 2.3.9.1) will be used to + determine if the given password is correct or not. + On a successful unlock the actual status of the lock will be returned. + If an error occurred SIMLOCK_FAIL will be returned. + (Uses the ACI extension "personalisation data access".) + */ +T_SIMLOCK_STATUS aci_slock_unlock ( T_SIMLOCK_TYPE type, char *passwd ); +/* + Checks for all kinds of personalisation locks. The given IMSI will be checked against the internal + personalisation data. Returns SIMLOCK_BLOCKED, if one lock was not matching the given IMSI. + */ +T_SIMLOCK_STATUS aci_slock_checkpersonalisation( T_SIMLOCK_TYPE current_lock ); + + +/* + PURPOSE : Install information found in the primitive into configuration buffers. +*/ +void aci_slock_sim_init ( T_SIM_MMI_INSERT_IND *sim_mmi_insert_ind ); + + +/* + PURPOSE : read SIM group identifier 1 from SIM card + +*/ +void aci_slock_sim_gid1_cnf(USHORT error, UBYTE *data); + +/* + PURPOSE : read SIM group identifier 2 from SIM card + +*/ +void aci_slock_sim_gid2_cnf(USHORT error, UBYTE *data); + + + +/* + PURPOSE : Call back for SIM read. + +*/ +void aci_slock_sim_read_sim_cb(SHORT table_id); + +/* + PURPOSE : Request to read SIM card. + +*/ +void aci_slock_sim_read_sim(USHORT data_id, UBYTE len, UBYTE max_length); + +#ifdef SIM_PERS +/* + +PURPOSE : Setting the sim_type value (Normal, Test SIM, Type Approval SIM) + +*/ + +void aci_slock_set_simtype(T_SIM_TYPE sim_type ); + +/* +PURPOSE : To set global variable for configuration data ( part1 of Security Driver) +*/ +void aci_slock_set_CFG(void); + + +void aci_slock_check_NWlock( UBYTE* imsi_sim, UBYTE personalisation ); + +void aci_slock_check_NSlock( UBYTE* imsi_sim, UBYTE personalisation ); + +void aci_slock_check_SPlock( UBYTE* imsi_sim, UBYTE personalisation ); +void aci_slock_check_CPlock( UBYTE* imsi_sim, UBYTE personalisation); + +void aci_slock_check_SMlock( UBYTE* imsi_sim, UBYTE personalisation); + +GLOBAL void aci_slock_psaSIM_decodeIMSI (UBYTE* imsi_field, UBYTE imsi_c_field, CHAR* imsi_asciiz); + +GLOBAL void aci_slock_psaSIM_decodeIMSI_without_parity(UBYTE* imsi_field, UBYTE imsi_c_field, CHAR* imsi_asciiz); + +GLOBAL void aci_set_cme_error(T_SIMLOCK_TYPE slocktype); +GLOBAL void aci_set_cme_error_code(T_SIMLOCK_TYPE current_lock , T_ACI_CME_ERR *err_code); + +#endif //SIM_PERS +#endif /* ACI_SLOCK_H */ \ No newline at end of file