/***************************************************************************** | |
* °æ±¾ËùÓÐ (C)2013ÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾ | |
* | |
* Ä£¿éÃû £ºÐéÄ⿨ | |
* ÎļþÃû £ºvsim.h | |
* Îļþ±êʶ£º | |
* Ïà¹ØÎļþ£º | |
* ʵÏÖ¹¦ÄÜ£º¶¨ÒåÐéÄ⿨Ïà¹ØºêºÍ½Ó¿Ú | |
* ×÷Õß £º miaohaixiang | |
* °æ±¾ £º | |
* Íê³ÉÈÕÆÚ£º20160406 | |
* ÆäËü˵Ã÷£º | |
*****************************************************************************/ | |
#ifndef UICC_VCARD_H | |
#define UICC_VCARD_H | |
#include <string.h> | |
#include <stdio.h> | |
#include <stdarg.h> | |
#include <stdlib.h> | |
#include <time.h> | |
#include <syslog.h> | |
#include <unistd.h> | |
#include <errno.h> | |
#include <signal.h> | |
#include <netdb.h> | |
#include <sys/types.h> | |
#include <sys/ioctl.h> | |
#include <sys/socket.h> | |
#include <sys/time.h> | |
#include <sys/uio.h> | |
#include <sys/stat.h> | |
#include <fcntl.h> | |
#include <sys/sysctl.h> | |
#include <poll.h> | |
#include <stddef.h> | |
#include <linux/if_packet.h> | |
#include "softap_api.h" | |
#include <sys/un.h> | |
#include <ctype.h> | |
#include <semaphore.h> | |
#include <pthread.h> | |
typedef unsigned char u8; | |
typedef unsigned char Byte; | |
typedef unsigned char BYTE; | |
typedef unsigned char BITS; | |
typedef unsigned short WORD; | |
typedef UINT32 DWORD; | |
typedef unsigned long long UINT64; | |
//in bits | |
#define VSIM_DIGIT_BITS 32 | |
#define VSIM_HALF_DIGIT_BITS 16 | |
//in bytes | |
#define VSIM_DIGIT_LEN (VSIM_DIGIT_BITS / 8) | |
//Max len in digits | |
#define MAX_VSIM_DIGITS ((VSIM_MAX_RSA_MODULUS_LEN + VSIM_DIGIT_LEN - 1) / VSIM_DIGIT_LEN + 1) | |
//Max digits | |
#define MAX_VSIM_DIGIT 0xffffffff | |
#define MAX_VSIM_HALF_DIGIT 0xffff | |
#define VSIM_LOW_HALF(x) ((x) & MAX_VSIM_HALF_DIGIT) | |
#define VSIM_HIGH_HALF(x) (((x) >> VSIM_HALF_DIGIT_BITS) & MAX_VSIM_HALF_DIGIT) | |
#define VSIM_TO_HIGH_HALF(x) (((VSIM_DIGIT)(x)) << VSIM_HALF_DIGIT_BITS) | |
#define VSIM_DIGIT_2MSB(x) (unsigned int)(((x) >> (VSIM_DIGIT_BITS - 2)) & 3) | |
/*³£Á¿¶¨ÒåÇø*/ | |
#define Z_VCARD_NV_BIN_LENGTH (UINT32)4 | |
#define Z_VCARD_NV_MAGIC_NUM_LENGTH (UINT32)4 | |
#define Z_VCARD_NV_LENGTH_ADDR (UINT32)0 | |
#define Z_VCARD_NV_PUBLIC_KEY_ADDR (UINT32)(Z_VCARD_NV_LENGTH_ADDR + Z_VCARD_NV_BIN_LENGTH + Z_VCARD_NV_MAGIC_NUM_LENGTH) | |
#define Z_VCARD_NV_AUTH_PARM_ADDR (UINT32)(Z_VCARD_NV_PUBLIC_KEY_ADDR + (sizeof(t_Vcard_EncPubKey))) | |
#define Z_VCARD_NV_SEC_INFO_ADDR (UINT32)(Z_VCARD_NV_AUTH_PARM_ADDR + (sizeof(t_Vcard_AuthInfo))) | |
#define Z_VCARD_NV_EF_CONTENT_ADDR (UINT32)(Z_VCARD_NV_SEC_INFO_ADDR + (sizeof(t_Vcard_SecurityInfo))) | |
#define Z_VCARD_MAX_FLASH_BLOCK_SIZE (UINT32)262144 | |
#define UICC_VCARD_MAX_DF_FCP_LEN (BYTE)52 | |
#define UICC_VCARD_MAX_GSM_EF_FCP_LEN (BYTE)20 | |
#define UICC_VCARD_MAX_GSM_DF_FCP_LEN (BYTE)36 | |
#define UICC_VCARD_MAX_EF_NUM (BYTE)100 | |
#define UICC_VCARD_MAX_DF_NUM (BYTE)20 | |
#define UICC_VCARD_MAX_PIN_LEN (BYTE)8 | |
#define UICC_VCARD_MAX_PUK_LEN (BYTE)8 | |
#define UICC_VCARD_MAX_AID_LEN (BYTE)16 | |
#define UICC_VCARD_DIR_REC_LEN (BYTE)56 | |
#define UICC_VCARD_MIN_VALID_AID_LEN (BYTE)7 | |
#define UICC_VCARD_MAX_PIN1_RETRY_NUM (BYTE)3 | |
#define UICC_VCARD_MAX_PUK1_RETRY_NUM (BYTE)10 | |
#define UICC_VCARD_MAX_PIN2_RETRY_NUM (BYTE)3 | |
#define UICC_VCARD_MAX_PUK2_RETRY_NUM (BYTE)10 | |
#define DFKEY_MF (BYTE)0 | |
#define DFKEY_ADF (BYTE)1 | |
#define DFKEY_GSM (BYTE)2 | |
#define DFKEY_USIM_GSMACSS (BYTE)3 | |
#define DFKEY_USIM_MEXE (BYTE)4 | |
#define DFKEY_USIM_SOLSA (BYTE)5 | |
#define DFKEY_USIM_HNB (BYTE)6 | |
#define DFKEY_MF_TELE_PB (BYTE)7 | |
#define DFKEY_USIM_WLAN (BYTE)8 | |
#define DFKEY_MF_TELE_MMEDIA (BYTE)9 | |
#define DFKEY_MF_TELE_MMSS (BYTE)10 | |
#define DFKEY_MF_TELE (BYTE)11 | |
#define DFKEY_MF_TELE_GRAPH (BYTE)12 | |
#define DFKEY_USIM_PB (BYTE)13 | |
#define DFKEY_GSM_IRIDIUM (BYTE)14 | |
#define DFKEY_GSM_GLOBST (BYTE)15 | |
#define DFKEY_GSM_ICO (BYTE)16 | |
#define DFKEY_GSM_ACES (BYTE)17 | |
#define DFKEY_GSM_EIATIA (BYTE)18 | |
#define DFKEY_GSM_CTS (BYTE)19 | |
#define DFKEY_GSM_SOLSA (BYTE)20 | |
#define DFKEY_GSM_MEXE (BYTE)21 | |
#define DFKEY_MF_IS41 (BYTE)22 | |
#define DFKEY_MF_FPCTS (BYTE)23 | |
#define DFKEY_ISIM_MF (BYTE)24 | |
#define DFKEY_ISIM_ADF (BYTE)25 | |
#define DFKEY_ISIM_TELE (BYTE)26 | |
#define DFKEY_END (BYTE)DFKEY_ISIM_TELE | |
#define Z_UICCMNG_MAX_DF_NUM (DFKEY_END+1) | |
#define DFKEY_INVALID (BYTE)0xFF | |
#define EFKEY_INVALID (WORD)0xFFFF | |
/*DF FID*/ | |
#define UICC_VCARD_MF_FID (WORD)0x3F00 | |
#define UICC_VCARD_TELE_FID (WORD)0x7F10 | |
#define UICC_VCARD_GSM_FID (WORD)0x7F20 | |
#define UICC_VCARD_GRAPHICS_FID (WORD)0x5F50 | |
#define UICC_VCARD_USIM_FID (WORD)0x7FFF | |
#define UICC_VCARD_USIM_PB_FID (WORD)0x5F3A | |
#define UICC_VCARD_USIM_GSM_ACCESS_FID (WORD)0x5F3B | |
#define UICC_VCARD_USIM_MEXE_FID (WORD)0x5F3C | |
#define UICC_VCARD_USIM_SOLASA_FID (WORD)0x5F70 | |
#define UICC_VCARD_GSM_SOLASA_FID (WORD)0x5F70 | |
#define UICC_VCARD_ISIM_TELE_FID (WORD)0x7F10 | |
#define UICC_VCARD_ISIM_ADF_FID (WORD)0x7FFF | |
/*SIM EF TYPE*/ | |
#define Z_VCARD_EF_REC_CONT (BYTE)0 | |
#define Z_VCARD_EF_BIN_CONT (BYTE)1 | |
#define Z_VCARD_DF_FCP (BYTE)2 | |
#define Z_VCARD_EF_FCP (BYTE)3 | |
#define Z_VCARD_SEC_INFO (BYTE)4 | |
#define Z_VCARD_AUTH_PARM (BYTE)5 | |
#define Z_VCARD_AUTH_PARM_SQN_MS (BYTE)0 | |
#define Z_VCARD_AUTH_PARM_K (BYTE)1 | |
#define Z_VCARD_AUTH_PARM_OP (BYTE)2 | |
#define Z_VCARD_SUCCESS (BYTE)0 | |
#define Z_VCARD_TYPE_NOT_SUPPORT (BYTE)1 | |
#define Z_VCARD_INVALID_LENGTH (BYTE)2 | |
#define Z_VCARD_INVALID_DATA (BYTE)3 | |
#define Z_VCARD_FILE_NOT_SUPPORT (BYTE)4 | |
#define Z_VCARD_CARD_NOT_INIT (BYTE)5 | |
#define Z_VCARD_INVALID_RECORD_NUM (BYTE)6 | |
#define Z_VCARD_MEMORY_ERROR (BYTE)7 | |
#define Z_VCARD_CARD_TYPE_ERROR (BYTE)8 | |
#define Z_VCARD_CARD_FILE_EXIST (BYTE)9 | |
/*File Type*/ | |
#define Z_VCARD_FILE_TYPE_INVALID (BYTE)0 | |
#define Z_VCARD_FILE_TYPE_DF (BYTE)1 | |
#define Z_VCARD_FILE_TYPE_EF (BYTE)2 | |
/*EF File Type*/ | |
typedef BYTE t_Vcard_EfFileType; | |
#define Z_VCARD_EF_TYPE_BIN (BYTE)0 | |
#define Z_VCARD_EF_TYPE_REC (BYTE)1 | |
#define Z_VCARD_EF_TYPE_CYC (BYTE)2 | |
typedef BYTE t_Vcard_EFAppType; | |
#define Z_VCARD_EF_SHARE (BYTE)0 /*ICCID µÈSIM USIM Ó¦Óù²ÏíµÄÎļþ*/ | |
#define Z_VCARD_EF_USIM_ONLY (BYTE)1 | |
#define Z_VCARD_EF_GSM_ONLY (BYTE)2 | |
#define Z_VCARD_EF_GSM_USIM (BYTE)3 /*USIM SIM Ó¦Óù²´æµÄÎļþ*/ | |
typedef BYTE t_Vcard_ChvPukType; | |
#define Z_VCARD_TYPE_CHV1 (BYTE)0 | |
#define Z_VCARD_TYPE_PUK1 (BYTE)1 | |
#define Z_VCARD_TYPE_CHV2 (BYTE)2 | |
#define Z_VCARD_TYPE_PUK2 (BYTE)3 | |
/*Îļþ·ÃÎÊȨÏÞ*/ | |
typedef BYTE t_Vcard_AccRule; | |
#define Z_VCARD_ACC_ALW (BYTE)0 | |
#define Z_VCARD_ACC_PIN1 (BYTE)1 | |
#define Z_VCARD_ACC_PIN2 (BYTE)2 | |
#define Z_VCARD_ACC_RFU (BYTE)3 | |
#define Z_VCARD_ACC_ADM (BYTE)4 | |
#define Z_VCARD_ACC_UNSUP (BYTE)15 | |
typedef BYTE t_Vcard_AccType; | |
#define Z_VCARD_OPRT_READ (BYTE)0 | |
#define Z_VCARD_OPRT_UPDATE (BYTE)1 | |
#define Z_VCARD_OPRT_ACTIVE (BYTE)2 | |
#define Z_VCARD_OPRT_DEACTIVE (BYTE)3 | |
#define Z_VCARD_OPRT_INCREASE (BYTE)4 | |
#define Z_VCARD_DATA_CONTENT_OFFSET (DWORD)4 | |
#define Z_VCARD_APP_STAT_INITEING (BYTE)1 | |
#define Z_VCARD_APP_STAT_INITED (BYTE)2 | |
#define Z_VCARD_APP_STAT_TERM (BYTE)0 | |
#define UICC_VCARD_AUTH_RAND_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_AUTN_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_KC_LEN (BYTE)8 | |
#define UICC_VCARD_AUTH_CK_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_IK_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_RES_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_AUTS_LEN (BYTE)14 | |
#define UICC_VCARD_AUTH_AMF_LEN (BYTE)2 | |
#define UICC_VCARD_AUTH_MAC_LEN (BYTE)8 | |
#define UICC_VCARD_AUTH_SQN_LEN (BYTE)6 | |
#define UICC_VCARD_AUTH_MAC_A_LEN (BYTE)8 | |
#define UICC_VCARD_AUTH_XRES_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_AK_LEN (BYTE)6 | |
#define UICC_VCARD_AUTH_MAC_S_LEN (BYTE)8 | |
#define UICC_VCARD_AUTH_SRES_LEN (BYTE)4 | |
#define UICC_VCARD_AUTH_K_LEN (BYTE)16 | |
#define UICC_VCARD_AUTH_OP_LEN (BYTE)16 | |
#define UICC_VCARD_SQN_MS_NUM (BYTE)32 | |
#define UICC_VCARD_AUTH_ENCRYPT_K_LEN (BYTE)128 | |
#define UICC_VCARD_AUTH_ENCRYPT_OP_LEN (BYTE)128 | |
#define UICC_VCARD_ENC_PUBLIC_MOD_LEN (BYTE)128 | |
#define UICC_VCARD_ENC_PUBLIC_EXP_LEN (BYTE)128 | |
#define UICC_VCARD_PUBLIC_MOD_LEN (BYTE)128 | |
#define UICC_VCARD_PUBLIC_EXP_LEN (BYTE)128 | |
#define UICC_VCARD_AUTH_CAUSE_SYS_FAIL (BYTE)21 | |
#define UICC_VCARD_AUTH_CAUSE_MAC_FAIL (BYTE)20 | |
#define UICC_VCARD_MAX_BIN_SIZE (DWORD)(256*1024) | |
#define Z_APUICC_USAT_MAX_AID_LEN (BYTE)16 | |
#define ZPS_ApUicc_APPMODE_NULL (BYTE)0 | |
#define Z_APUICC_APPMODE_NULL ZPS_ApUicc_APPMODE_NULL | |
#define ZPS_ApUicc_APPMODE_USIM (BYTE)1 | |
#define Z_APUICC_APPMODE_USIM ZPS_ApUicc_APPMODE_USIM | |
#define ZPS_ApUicc_APPMODE_SIM (BYTE)2 | |
#define Z_APUICC_APPMODE_SIM ZPS_ApUicc_APPMODE_SIM | |
#define ZPS_ApUicc_APPMODE_ISIM (BYTE)3 | |
#define Z_APUICC_APPMODE_ISIM ZPS_ApUicc_APPMODE_ISIM | |
#define ZPS_ApUicc_MAX_INITAPPMODEVAL (BYTE)ZPS_ApUicc_APPMODE_ISIM | |
#define Z_APUICC_MAX_INITAPPMODEVAL ZPS_ApUicc_MAX_INITAPPMODEVAL | |
#define ZOSS_SUCCESS 0x0 | |
#define ZOSS_ERROR 0xffffffff | |
#define ZOSS_NULL NULL | |
#define USIM_DFKEY_MF (BYTE)0 | |
#define USIM_DFKEY_USIM_ADF (BYTE)1 | |
#define USIM_DFKEY_USIM_PB (BYTE)2 | |
#define USIM_DFKEY_USIM_GSMACSS (BYTE)3 | |
#define USIM_DFKEY_USIM_MEXE (BYTE)4 | |
#define USIM_DFKEY_USIM_SOLSA (BYTE)5 | |
#define USIM_DFKEY_USIM_HNB (BYTE)6 | |
#define USIM_DFKEY_MF_TELE_PB (BYTE)7 | |
#define USIM_DFKEY_USIM_WLAN (BYTE)8 | |
#define USIM_DFKEY_MF_TELE_MMEDIA (BYTE)9 | |
#define USIM_DFKEY_MF_TELE_MMSS (BYTE)10 | |
#define USIM_DFKEY_MF_TELE (BYTE)11 | |
#define USIM_DFKEY_MF_TELE_GRAPH (BYTE)12 | |
#define USIM_DFKEY_MF_GSM (BYTE)13 | |
#define USIM_DFKEY_END (BYTE)USIM_DFKEY_MF_GSM | |
#define USIM_DFKEY_NUM (BYTE)(USIM_DFKEY_END + 1) | |
#define USIM_DFKEY_INVALID (BYTE)0xFF | |
#define SIM_DFKEY_MF (BYTE)0 | |
#define SIM_DFKEY_MF_TELE (BYTE)1 | |
#define SIM_DFKEY_MF_TELE_GRAPH (BYTE)2 | |
#define SIM_DFKEY_GSM (BYTE)3 | |
#define SIM_DFKEY_GSM_IRIDIUM (BYTE)4 //NONE,ûÓÐÎļþ | |
#define SIM_DFKEY_GSM_GLOBST (BYTE)5 //NONE | |
#define SIM_DFKEY_GSM_ICO (BYTE)6 //NONE | |
#define SIM_DFKEY_GSM_ACES (BYTE)7 //NONE | |
#define SIM_DFKEY_GSM_EIATIA (BYTE)8 //NONE | |
#define SIM_DFKEY_GSM_CTS (BYTE)9 //NONE | |
#define SIM_DFKEY_GSM_SOLSA (BYTE)10 | |
#define SIM_DFKEY_GSM_MEXE (BYTE)11 | |
#define SIM_DFKEY_MF_IS41 (BYTE)12 //NONE | |
#define SIM_DFKEY_MF_FPCTS (BYTE)13 //NONE | |
#define SIM_DFKEY_END (BYTE)SIM_DFKEY_MF_FPCTS | |
#define SIM_DFKEY_NUM (BYTE)(SIM_DFKEY_END + 1) | |
#define SIM_DFKEY_INVALID (BYTE)0xFF | |
#define Z_SUCC (BYTE)0 | |
#define Z_FAIL (BYTE)1 | |
/*==========STATUS WORD: SW1SW2===========*/ | |
#define Z_UICCMNG_SUCCESS (WORD)0x9000 | |
#define Z_UICCMNG_SUCCESS_CMD_PENDING (WORD)0x9100 | |
#define Z_UICCMNG_BUSY (WORD)0x9300 | |
#define Z_UICCMNG_WARNING (WORD)0x6200 | |
#define Z_UICCMNG_WARN_EOF (WORD)0x6282 | |
#define Z_UICCMNG_WARN_RETRIES (WORD)0x63C0 | |
#define Z_UICCMNG_ERROR (WORD)0x6400 | |
#define Z_UICCMNG_MEMORY_ERROR (WORD)0x6581 | |
#define Z_UICCMNG_ERR_WRONG_LENGTH (WORD)0x6700 | |
#define Z_UICCMNG_ERR_FILE_NOF_FOUND (WORD)0x6A82 | |
#define Z_UICCMNG_ERR_REC_NOT_FOUND (WORD)0x6A83 | |
#define Z_UICCMNG_FILE_SECURED (WORD)0x6982 | |
#define Z_UICCMNG_BLOCKED (WORD)0x6983 | |
#define Z_UICCMNG_EOF_REACHED (WORD)0x6282 | |
#define Z_UICCMNG_NOT_AVAIL (WORD)0x6985 | |
#define Z_UICCMNG_REF_NOT_FOUND (WORD)0x6A88 | |
#define Z_UICCMNG_GSM_ERR_WRONG_P3 (WORD)0x6700 | |
#define Z_UICCMNG_GSM_ERR_WRONG_P1_P2 (WORD)0x6B00 | |
#define Z_UICCMNG_GSM_ERR_TECHNICAL (WORD)0x6F00 | |
#define Z_UICCMNG_GSM_ERR_OUT_OF_RANGE (WORD)0x9402 | |
#define Z_UICCMNG_GSM_ERR_FILE_NOT_FOUND (WORD)0x9404 | |
#define Z_UICCMNG_GSM_ERR_FILE_INCONSISTENT (WORD)0x9408 | |
#define Z_UICCMNG_GSM_NO_CHV_INIT (WORD)0x9802 | |
#define Z_UICCMNG_GSM_UNSUCCESSFUL_SECURITY (WORD)0x9804/*access condition not fulfilled | |
unsuccessful CHV verification, at least one attempt left | |
unsuccessful UNBLOCK CHV verification, at least one attempt left | |
authentication failed (see note)*/ | |
#define Z_UICCMNG_GSM_CONTRA_CHV_STATUS (WORD)0x9808 | |
#define Z_UICCMNG_GSM_CONTRA_INVAL_STATUS (WORD)0x9810 | |
#define Z_UICCMNG_GSM_CHV_FAIL_NO_ATTEMPS (WORD)0x9840 /*unsuccessful CHV verification, no attempt left | |
unsuccessful UNBLOCK CHV verification, no attempt left | |
CHV blocked | |
UNBLOCK CHV blocked*/ | |
#define Z_UICCMNG_GSM_NO_INCREASE (WORD)0x9850 | |
#define Z_UICCMNG_GSM_SUCCESS_W_RESP_LEN (WORD)0x9F00 | |
#define Z_UICCMNG_GSM_SUCCESS_W_RESP_LEN_MASK (WORD)0xFF00 | |
#define Z_UICCMNG_WRAN_RETRIES (WORD)0x9200 | |
#define Z_UICCMNG_RETRIES_HB (WORD)0x6300 | |
#define Z_UICCMNG_WRAN_CORRUPT (WORD)0x6281 | |
#define Z_UICCMNG_INVALIDATED (WORD)0x6283 | |
#define Z_UICCMNG_ERROR_CHANGED (WORD)0x6500 | |
#define Z_UICCMNG_ERROR_INS (WORD)0x6D00 | |
#define Z_UICCMNG_WRONG_CLASS (WORD)0x6E00 | |
#define Z_UICCMNG_NO_CLA_SUPPORT (WORD)0x6800 | |
#define Z_UICCMNG_NO_LOG_CHAN (WORD)0x6881 | |
#define Z_UICCMNG_NO_SM (WORD)0x6882 | |
#define Z_UICCMNG_NOT_ALLOW (WORD)0x6900 | |
#define Z_UICCMNG_STRUCT_ERR (WORD)0x6981 | |
#define Z_UICCMNG_INVALID_DATA (WORD)0x6984 | |
#define Z_UICCMNG_NOT_EF (WORD)0x6986 | |
#define Z_UICCMNG_WRONG_PARA (WORD)0x6A80 | |
#define Z_UICCMNG_NO_FUNCTION (WORD)0x6A81 | |
#define Z_UICCMNG_ERR_P1_P2 (WORD)0x6A86 | |
#define Z_UICCMNG_ERR_LC (WORD)0x6A87 | |
#define Z_UICCMNG_ERR_AUTH (WORD)0x9862 | |
#define Z_UICCMNG_ERR_AUTH_GSM_NOT_SUPPORT (WORD)0x9864 | |
#define Z_UICCMNG_DL_RESP_LEN (WORD)0x9E00 | |
#define Z_UICCMNG_GSM_NO_EF (WORD)0x9400 | |
/*===========Z_UICC&SIM INS===========*/ | |
#define Z_UICCMNG_SIM_INS_SELECT (BYTE)0xA4 | |
#define Z_UICCMNG_SIM_INS_STATUS (BYTE)0xF2 | |
#define Z_UICCMNG_SIM_INS_READ_BINARY (BYTE)0xB0 | |
#define Z_UICCMNG_SIM_INS_UPDATE_BINARY (BYTE)0xD6 | |
#define Z_UICCMNG_SIM_INS_READ_RECORD (BYTE)0xB2 | |
#define Z_UICCMNG_SIM_INS_UPDATE_RECORD (BYTE)0xDC | |
#define Z_UICCMNG_SIM_INS_SEARCH_RECORD (BYTE)0xA2 | |
#define Z_UICCMNG_SIM_INS_INCREASE (BYTE)0x32 | |
#define Z_UICCMNG_SIM_INS_VERIFY_PIN (BYTE)0x20 | |
#define Z_UICCMNG_SIM_INS_CHANGE_PIN (BYTE)0x24 | |
#define Z_UICCMNG_SIM_INS_DISABLE_PIN (BYTE)0x26 | |
#define Z_UICCMNG_SIM_INS_ENABLE_PIN (BYTE)0x28 | |
#define Z_UICCMNG_SIM_INS_UNBLOCK_PIN (BYTE)0x2C | |
#define Z_UICCMNG_SIM_INS_DEACTIVATE_FILE (BYTE)0x04 | |
#define Z_UICCMNG_SIM_INS_ACTIVATE_FILE (BYTE)0x44 | |
#define Z_UICCMNG_SIM_INS_AUTHENTICATE (BYTE)0x88 | |
#define Z_UICCMNG_SIM_INS_GET_CHALLENGE (BYTE)0x84 | |
#define Z_UICCMNG_SIM_INS_TERMINAL_PROFILE (BYTE)0x10 | |
#define Z_UICCMNG_SIM_INS_ENVELOPE (BYTE)0xC2 | |
#define Z_UICCMNG_SIM_INS_FETCH (BYTE)0x12 | |
#define Z_UICCMNG_SIM_INS_TERMINAL_RESPONSE (BYTE)0x14 | |
#define Z_UICCMNG_SIM_INS_MANAGE_CHANNEL (BYTE)0x70 | |
#define Z_UICCMNG_SIM_INS_GET_RESPONSE (BYTE)0xC0 | |
/* Ŀ¼×î´óÉî¶È */ | |
#define Z_UICCMNG_PATH_DEPTH (BYTE)5 | |
/* FID×Ö½ÚÊý */ | |
#define Z_UICCMNG_FID_LEN (BYTE)2 | |
/*Authenticate length*/ | |
#define ZPS_ApUicc_MAX_LEN_RAND (BYTE)16 | |
#define Z_APUICC_MAX_LEN_RAND ZPS_ApUicc_MAX_LEN_RAND | |
#define ZPS_ApUicc_MAX_LEN_AUTN (BYTE)16 | |
#define Z_APUICC_MAX_LEN_AUTN ZPS_ApUicc_MAX_LEN_AUTN | |
#define ZPS_ApUicc_MAX_LEN_KC (BYTE)8 | |
#define Z_APUICC_MAX_LEN_KC ZPS_ApUicc_MAX_LEN_KC | |
#define ZPS_ApUicc_MAX_LEN_RES (BYTE)16 | |
#define Z_APUICC_MAX_LEN_RES ZPS_ApUicc_MAX_LEN_RES | |
#define ZPS_ApUicc_MAX_LEN_AUTS (BYTE)14 | |
#define Z_APUICC_MAX_LEN_AUTS ZPS_ApUicc_MAX_LEN_AUTS | |
/*the flag of Authenticate context*/ | |
#define ZPS_ApUicc_AUTH_GSM (BYTE)0 /*GSM auth*/ | |
#define Z_APUICC_AUTH_GSM ZPS_ApUicc_AUTH_GSM | |
#define ZPS_ApUicc_AUTH_UMTS (BYTE)1 /*UMTS auth*/ | |
#define Z_APUICC_AUTH_UMTS ZPS_ApUicc_AUTH_UMTS | |
/*Authenticate err*/ | |
#define ZPS_ApUicc_AUTH_MACFAIL (BYTE)20 /*MAC failure*/ | |
#define Z_APUICC_AUTH_MACFAIL ZPS_ApUicc_AUTH_MACFAIL | |
#define ZPS_ApUicc_AUTH_SYNCFAIL (BYTE)21 /*Sync failure*/ | |
#define Z_APUICC_AUTH_SYNCFAIL ZPS_ApUicc_AUTH_SYNCFAIL | |
#define ZPS_ApUicc_AUTH_GSMAUTHUNACCPT (BYTE)23 /*Gsm auth unaccept*/ | |
#define Z_APUICC_AUTH_GSMAUTHUNACCPT ZPS_ApUicc_AUTH_GSMAUTHUNACCPT | |
#define ZPS_ApUicc_AUTH_OTHERFAIL (BYTE) 0xFF | |
#define Z_APUICC_AUTH_OTHERFAIL ZPS_ApUicc_AUTH_OTHERFAIL | |
typedef struct | |
{ | |
BYTE abFid[Z_UICCMNG_FID_LEN]; | |
}T_zUiccmng_FileID; | |
typedef struct | |
{ | |
BYTE bPathLen; | |
T_zUiccmng_FileID tFid[Z_UICCMNG_PATH_DEPTH]; | |
}T_zUiccmng_Path; | |
typedef struct{ | |
WORD wCurNo; /*ÂëÁ÷´æ·ÅµÄ×Ö½ÚÊýÖ¸Õ룬±ÈÈçÊǵڼ¸¸ö×Ö½Ú*/ | |
BYTE bCurBitPtr; /*ÂëÁ÷ÔÚ×Ö½ÚÖеĿªÊ¼µØÖ·Ö¸Õ룬±ÈÈçÊǵڼ¸¸ö×ֽڵĵڼ¸Î»*/ | |
WORD wLen; /*ÂëÁ÷¿ª±ÙµÄ³¤¶È£¬·ÀÖ¹Òç³ö*/ | |
BYTE *pbCode; /* ÔʼÂëÁ÷*/ | |
BYTE bBitEd; /*ÂëÁ÷ÔÚÄÚ´æÖнáÊøµÄÔʼµØÖ·Ö¸Õë*/ | |
BITS bType1:1; /*¸ÃÎļþÊÇ·ñΪÀàÐÍ1£¬²»ÎªÀàÐÍ1£º1£¬ÎªÀàÐÍ1£º0*/ | |
BITS :7; | |
}T_zUiccmng_CdecInfo_T; | |
typedef BYTE t_Vcard_auth_sqn_ms[8]; | |
typedef struct | |
{ | |
BYTE bAuthType; | |
BYTE abRand[UICC_VCARD_AUTH_RAND_LEN]; | |
BYTE abAutn[UICC_VCARD_AUTH_AUTN_LEN]; | |
}t_vcard_AuthParm; | |
typedef struct | |
{ | |
BYTE abKc[UICC_VCARD_AUTH_KC_LEN]; | |
BYTE abCK[UICC_VCARD_AUTH_CK_LEN]; | |
BYTE abIK[UICC_VCARD_AUTH_IK_LEN]; | |
BYTE abRes[UICC_VCARD_AUTH_RES_LEN]; | |
}t_vcard_Succ; | |
typedef struct | |
{ | |
BYTE bFailCause; | |
BYTE abAuts[UICC_VCARD_AUTH_AUTS_LEN]; | |
}t_vcard_Fail; | |
typedef union | |
{ | |
t_vcard_Succ tAuthSucc; | |
t_vcard_Fail tAuthFail; | |
}t_u_Vcard_AuthRsp; | |
typedef struct{ | |
BYTE bAuthRlt; | |
t_u_Vcard_AuthRsp uAuthRsp; | |
} t_vcard_AuthRst; | |
typedef struct | |
{ | |
BYTE bExistFlag; | |
BYTE bRecNum; | |
BYTE bRecLen; | |
DWORD dwAddrOffset; | |
}t_vCard_EfFileInfo; | |
typedef struct | |
{ | |
WORD wFid; | |
t_vCard_EfFileInfo tUsimInfo; | |
t_vCard_EfFileInfo tSimInfo; | |
}t_Vcard_EfFcp; | |
typedef struct | |
{ | |
BYTE bExistFlag; | |
BYTE abPadding[3]; | |
}t_Vcard_DfFcp; | |
typedef struct | |
{ | |
t_Vcard_DfFcp atDfFcp[Z_UICCMNG_MAX_DF_NUM]; | |
t_Vcard_EfFcp atEfFcp[UICC_VCARD_MAX_EF_NUM]; | |
}t_Vcard_Fcp; | |
typedef struct | |
{ | |
BITS bIsPin1Enabled:1; | |
BITS bIsPin1Verified:1; | |
BITS bIsPin1Blocked:1; | |
BITS bIsCardBroken:1; | |
BITS :3; | |
}t_Vcard_SecurityStat; | |
typedef struct | |
{ | |
BYTE bCurrentApp; | |
BYTE bAPPStat; | |
BYTE abPadding[2]; | |
BYTE abCurrentAid[Z_APUICC_USAT_MAX_AID_LEN]; | |
}t_Vcard_AppInfo; | |
typedef struct | |
{ | |
BITS bIsPowerOn :1; | |
BITS bIsPin1Enabled :1; | |
BITS bIsPin1Verified :1; | |
BITS bIsPin1Blocked :1; | |
BITS bIsPuk1Blocked :1; | |
BITS bIsPin2Enabled :1; | |
BITS bIsPin2Verified :1; | |
BITS bIsPin2Blocked :1; | |
BITS bIsPuk2Blocked :1; | |
BITS :7; | |
BYTE bCurrentRecNum; | |
BYTE bCurSelFileType; | |
BYTE bCurrentDf; | |
BYTE bPadding; | |
WORD wCurrentEf; | |
t_Vcard_AppInfo tAppInfo; | |
}t_Vcard_CardStatus; | |
typedef struct | |
{ | |
BYTE bIsPin1Enabled; | |
BYTE bIsPin1Blocked; | |
BYTE bIsPuk1Blocked; | |
BYTE bIsPin2Enabled; | |
BYTE bIsPin2Blocked; | |
BYTE bIsPuk2Blocked; | |
BYTE bPin1RemainNum; | |
BYTE bPin2RemainNum; | |
BYTE bPuk1RemainNum; | |
BYTE bPuk2RemainNum; | |
BYTE abPadding[2]; | |
BYTE abPin1[UICC_VCARD_MAX_PIN_LEN]; | |
BYTE abPuk1[UICC_VCARD_MAX_PUK_LEN]; | |
BYTE abPin2[UICC_VCARD_MAX_PIN_LEN]; | |
BYTE abPuk2[UICC_VCARD_MAX_PUK_LEN]; | |
}t_Vcard_SecurityInfo; | |
typedef struct { | |
BYTE bEfType; /*ÎļþÊôÐÔ£¬¼Ç¼ÐÍ»ò¶þ½øÖÆ*/ | |
BYTE bRecNum; | |
WORD wDataOffset; /*Êý¾ÝÇøµÄÆ«ÒÆ*/ | |
BYTE bLen; | |
BYTE bMaxEfLen; | |
BYTE abPadding[2]; | |
}t_Vcard_EfFileInfo; | |
typedef struct { | |
BYTE abEncExp[UICC_VCARD_ENC_PUBLIC_EXP_LEN]; | |
BYTE abEncMod[UICC_VCARD_ENC_PUBLIC_MOD_LEN]; | |
}t_Vcard_EncPubKey; | |
typedef struct { | |
BYTE abEncK[UICC_VCARD_AUTH_ENCRYPT_K_LEN]; | |
BYTE abEncOP[UICC_VCARD_AUTH_ENCRYPT_OP_LEN]; | |
t_Vcard_auth_sqn_ms atSqnMs[UICC_VCARD_SQN_MS_NUM]; | |
}t_Vcard_AuthInfo; | |
typedef struct | |
{ | |
t_Vcard_EncPubKey tEncPubKey; | |
t_Vcard_AuthInfo tAuthParm; | |
t_Vcard_SecurityInfo tSecInfo; | |
t_Vcard_Fcp tFcp; | |
DWORD dwEfInfoSize; | |
BYTE *pbEfInfo; | |
}t_Vcard_CardInfo; | |
typedef enum | |
{ | |
DRV_UICC_TRANSFER_SUCCEEDED, | |
DRV_UICC_TRANSFER_FAILED | |
} T_ZDrvUicc_ApduReselt; | |
/** | |
* \enum T_ZDrvUicc_ResetResult | |
* Response cause for function \ref UICC_reset. | |
*/ | |
typedef enum | |
{ | |
DRV_UICC_ACTIVATION_SUCCEEDED, | |
DRV_UICC_ACTIVATION_FAILED, | |
DRV_UICC_REJECT_CARD | |
} T_ZDrvUicc_ResetResult; | |
/** | |
* \enum T_ZDrvUicc_CloseResult | |
* Response cause for function \ref UICC_close. | |
*/ | |
typedef enum | |
{ | |
DRV_UICC_DEACTIVATION_SUCCEEDED, | |
DRV_UICC_DEACTIVATION_FAILED, | |
DRV_UICC_ALREADY_DEACTIVATED | |
} T_ZDrvUicc_CloseResult; | |
/** | |
* \enum T_ZDrvUicc_SetInOutCallBack | |
* Response cause for callback function \ref UICC_set_inout_callback. | |
*/ | |
typedef enum | |
{ | |
DRV_CALLBACK_FUNCTION_SET, /*!< Callback function registered. */ | |
DRV_CALLBACK_NOT_AVAILABLE /*!< Callback function NOT registered (or not supported). */ | |
} T_ZDrvUicc_SetInOutCallBack; | |
/** | |
* \enum T_ZDrvUicc_CardSelector | |
* Card selector. | |
*/ | |
typedef enum | |
{ | |
DRV_UICC_PRIMARY_CARD, | |
DRV_UICC_SECONDARY_CARD_1, | |
DRV_UICC_SECONDARY_CARD_2 | |
} T_ZDrvUicc_CardSelector; | |
/** | |
* \enum T_ZDrvUicc_CommandCase | |
* Command case indicator. | |
*/ | |
typedef enum | |
{ | |
DRV_UICC_CMD_CASE_1, /*!< No Tx nor Tx command. */ | |
DRV_UICC_CMD_CASE_2, /*!< Rx command. */ | |
DRV_UICC_CMD_CASE_3, /*!< Tx command. */ | |
DRV_UICC_CMD_CASE_4 /*!< Tx and Rx command. */ | |
} T_ZDrvUicc_CommandCase; | |
/** | |
* \enum T_ZDrvUicc_ResetMode | |
* Reset indicator. | |
*/ | |
typedef enum | |
{ | |
DRV_UICC_COLD_RESET, /*!< Cold Reset. */ | |
DRV_UICC_WARM_RESET /*!< Warm Reset (reset with RST line only). */ | |
} T_ZDrvUicc_ResetMode; | |
/** | |
* \struct T_ZDrvUicc_ApduHeader | |
* Structure holding the APDU command header. | |
*/ | |
typedef struct | |
{ | |
UINT8 cla; /*!< Command CLAss. */ | |
UINT8 ins; /*!< Command INStruction. */ | |
UINT8 p1; /*!< Command Parameter. */ | |
UINT8 p2; /*!< Command Parameter. */ | |
UINT16 lc; /*!< Tx-size. */ | |
UINT16 le; /*!< Rx-Size. */ | |
} T_ZDrvUicc_ApduHeader; | |
/** | |
* \struct T_ZDrvUicc_ApduFooter | |
* Structure holding the APDU command response 'header'. | |
*/ | |
typedef struct | |
{ | |
UINT16 luicc; /*!< Actual Rx-size recived. */ | |
UINT8 sw1; /*!< Received Status Word SW1. */ | |
UINT8 sw2; /*!< Received Status Word SW2. */ | |
} T_ZDrvUicc_ApduFooter; | |
typedef T_ZDrvUicc_ApduReselt (*t_Vcard_ApduHandler)(T_ZDrvUicc_CardSelector card_selector,\ | |
T_ZDrvUicc_CommandCase command_case,\ | |
BOOL extended_length,\ | |
T_ZDrvUicc_ApduHeader c_apdu,\ | |
T_ZDrvUicc_ApduFooter *r_apdu_ptr,\ | |
UINT8 *apdu_data_ptr); | |
typedef struct | |
{ | |
BYTE bApduIns; | |
t_Vcard_ApduHandler ptUsimApduHandler; | |
t_Vcard_ApduHandler ptSimApduHandler; | |
}t_Vcard_ApduCmdMap; | |
typedef struct | |
{ | |
WORD wFid; | |
t_Vcard_EfFileType bEfType; | |
BYTE bRecLen; | |
BYTE bRecNum; | |
t_Vcard_AccRule tReadRule; | |
t_Vcard_AccRule tUpdateRule; | |
t_Vcard_AccRule tIncreaseRule; | |
}T_zVcard_FileInfo; | |
typedef struct | |
{ | |
WORD wFid; | |
t_Vcard_EfFileType bEfType; | |
t_Vcard_AccRule tReadRule; | |
t_Vcard_AccRule tUpdateRule; | |
t_Vcard_AccRule tIncreaseRule; | |
t_Vcard_EFAppType tAppType; | |
BYTE bUsimParentDf; | |
BYTE bSimParentDf; | |
BYTE abPadding[3]; | |
}T_zVcard_EfAttribute; | |
UINT32 zVcard_ReadNv(UINT32 NvItemID, VOID *NvItemData, UINT32 NvItemLen); | |
UINT32 zVcard_WriteNv(UINT32 NvItemID, VOID *NvItemData, UINT32 NvItemLen); | |
BOOL zVcard_WriteEfNV(UINT16 efid, UINT16 indx, VOID *data, UINT16 dataLen); | |
T_ZDrvUicc_ResetResult zVcard_ResetCard(T_ZDrvUicc_CardSelector tCardNum); | |
T_ZDrvUicc_CloseResult zVcard_CloseCard(T_ZDrvUicc_CardSelector tCardNum); | |
UINT8 zVcard_GetAtr(T_ZDrvUicc_CardSelector bSlotNum, UINT8 *atr); | |
T_ZDrvUicc_ApduReselt zVcard_TransportApdu(T_ZDrvUicc_CardSelector card_selector, | |
T_ZDrvUicc_CommandCase command_case, | |
BOOL extended_length, | |
T_ZDrvUicc_ApduHeader c_apdu, | |
T_ZDrvUicc_ApduFooter *r_apdu_ptr, | |
UINT8 *apdu_data_ptr); | |
BYTE zVcard_Init(VOID); | |
void v_sim_f1 ( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], | |
u8 mac_a[8] ); | |
void v_sim_f2345 ( u8 k[16], u8 rand[16], | |
u8 res[8], u8 ck[16], u8 ik[16], u8 ak[6] ); | |
void v_sim_f1star( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], | |
u8 mac_s[8] ); | |
void v_sim_f5star( u8 k[16], u8 rand[16], | |
u8 ak[6] ); | |
void v_sim_ComputeOPc( u8 op_c[16] ); | |
void v_sim_RijndaelKeySchedule( u8 key[16] ); | |
void v_sim_RijndaelEncrypt( u8 input[16], u8 output[16] ); | |
void A3A8(/* in */ Byte rand[16], /* in */ Byte key[16],/* out */ Byte simoutput[12]); | |
#ifndef PROTOTYPES | |
#define PROTOTYPES 1 | |
#endif | |
typedef unsigned char *POINTER; | |
typedef unsigned short int UINT2; | |
typedef unsigned long int UINT4; | |
typedef signed long int signeddigit; | |
typedef UINT4 VSIM_DIGIT; | |
typedef UINT2 VSIM_HALF_DIGIT; | |
#ifndef NULL_PTR | |
#define NULL_PTR ((POINTER)0) | |
#endif | |
#ifndef UNUSED_ARG | |
#define UNUSED_ARG(x) x = *(&x); | |
#endif | |
#if PROTOTYPES | |
#define PROTO_LIST(list) list | |
#else | |
#define PROTO_LIST(list) () | |
#endif | |
#define ID_OK 0 | |
#define ID_ERROR 1 | |
#define RE_DATA 0x0401 | |
#define RE_LEN 0x0406 | |
#define MAX_RSA_MODULUS_BITS 1024 | |
#define VSIM_MAX_RSA_MODULUS_LEN ((MAX_RSA_MODULUS_BITS + 7) / 8) | |
#define MAX_RSA_PRIME_BITS ((MAX_RSA_MODULUS_BITS + 1) / 2) | |
#define MAX_RSA_PRIME_LEN ((MAX_RSA_PRIME_BITS + 7) / 8) | |
typedef struct { | |
unsigned short int bits; /* length in bits of modulus */ | |
unsigned char modulus[VSIM_MAX_RSA_MODULUS_LEN]; /* modulus */ | |
//unsigned char publicExponent[VSIM_MAX_RSA_MODULUS_LEN]; /* public exponent */ | |
//unsigned char exponent[VSIM_MAX_RSA_MODULUS_LEN]; /* private exponent */ | |
unsigned char prime[2][MAX_RSA_PRIME_LEN]; /* prime factors */ | |
unsigned char primeExponent[2][MAX_RSA_PRIME_LEN]; /* exponents for CRT */ | |
unsigned char coefficient[MAX_RSA_PRIME_LEN]; /* CRT coefficient */ | |
} R_RSA_PRIVATE_KEY; | |
typedef struct { | |
unsigned short int bits; /* length in bits of modulus */ | |
BYTE modulus[VSIM_MAX_RSA_MODULUS_LEN]; /* modulus */ | |
BYTE exponent[VSIM_MAX_RSA_MODULUS_LEN]; /* public exponent */ | |
} R_RSA_PUBLIC_KEY; | |
void VSIM_Decode(VSIM_DIGIT *, unsigned int, unsigned char *, unsigned int); | |
void VSIM_Encode(unsigned char *, unsigned int, VSIM_DIGIT *, unsigned int); | |
void VSIM_Assign (VSIM_DIGIT *, VSIM_DIGIT *, unsigned int); | |
void VSIM_AssignZero (VSIM_DIGIT *, unsigned int); | |
void VSIM_Assign2Exp (VSIM_DIGIT *, unsigned int, unsigned int); | |
VSIM_DIGIT VSIM_Add (VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, unsigned int); | |
VSIM_DIGIT VSIM_Sub(VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, unsigned int); | |
void VSIM_Mult (VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, unsigned int); | |
void VSIM_Div(VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, unsigned int, VSIM_DIGIT *,unsigned int); | |
VSIM_DIGIT VSIM_LShift(VSIM_DIGIT *, VSIM_DIGIT *, unsigned int, unsigned int); | |
VSIM_DIGIT VSIM_RShift (VSIM_DIGIT *, VSIM_DIGIT *, unsigned int, unsigned int); | |
void VSIM_Mod(VSIM_DIGIT *, VSIM_DIGIT *, unsigned int, VSIM_DIGIT *, unsigned int); | |
void VSIM_ModMult(VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, unsigned int); | |
void VSIM_ModExp (VSIM_DIGIT *, VSIM_DIGIT *, VSIM_DIGIT *, unsigned int, VSIM_DIGIT *,unsigned int); | |
int VSIM_Cmp (VSIM_DIGIT *, VSIM_DIGIT *, unsigned int); | |
unsigned int VSIM_Digits (VSIM_DIGIT *, unsigned int); | |
#define VSIM_ASSIGN_DIGIT(a, b, digits) {VSIM_AssignZero (a, digits); a[0] = b;} | |
int RSAPublicDecrypt(unsigned char *output, /* output block */ | |
unsigned int *outputLen, /* length of output block */ | |
unsigned char *input, /* input block */ | |
unsigned int inputLen, /* length of input block */ | |
R_RSA_PUBLIC_KEY *publicKey /* RSA public key */); | |
extern SINT32 zAmt_GetPublicKey(BYTE *pE, UINT32 *pELen, BYTE *pN, UINT32 *pModulusLen); | |
#endif | |