| """ |
| card: Library adapted to request (U)SIM cards and other types of telco cards. |
| Copyright (C) 2010 Benoit Michau |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License along |
| with this program; if not, write to the Free Software Foundation, Inc., |
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| """ |
| |
| ################################# |
| # 3GPP SIM and USIM File-System # |
| # see TS 51.11 for SIM # |
| # see TS 31.102 for USIM # |
| ################################# |
| |
| # (U)SIM file-system dictionnaries |
| # (absolut_file_address) : 'file_name' |
| |
| SIM_FS = { |
| (0x3F, 0x00) : 'MF', |
| (0x2F, 0xE2) : 'EF_ICCID', |
| (0x2F, 0x05) : 'EF_ELP', |
| (0x7F, 0x23) : 'DF_FP-CTS', |
| (0x7F, 0x22) : 'DF_IS-41', |
| (0x7F, 0x10) : 'DF_TELECOM', |
| (0x7F, 0x10, 0x6F, 0x3A) : 'EF_ADN', |
| (0x7F, 0x10, 0x6F, 0x3B) : 'EF_FDN', |
| (0x7F, 0x10, 0x6F, 0x3C) : 'EF_SMS', |
| (0x7F, 0x10, 0x6F, 0x3D) : 'EF_CCP', |
| (0x7F, 0x10, 0x6F, 0x40) : 'EF_MSISDN', |
| (0x7F, 0x10, 0x6F, 0x42) : 'EF_SMSP', |
| (0x7F, 0x10, 0x6F, 0x43) : 'EF_SMSS', |
| (0x7F, 0x10, 0x6F, 0x44) : 'EF_LND', |
| (0x7F, 0x10, 0x6F, 0x47) : 'EF_SMSR', |
| (0x7F, 0x10, 0x6F, 0x49) : 'EF_SDN', |
| (0x7F, 0x10, 0x6F, 0x4A) : 'EF_EXT1', |
| (0x7F, 0x10, 0x6F, 0x4B) : 'EF_EXT2', |
| (0x7F, 0x10, 0x6F, 0x4C) : 'EF_EXT3', |
| (0x7F, 0x10, 0x6F, 0x4D) : 'EF_BDN', |
| (0x7F, 0x10, 0x6F, 0x4E) : 'EF_EXT4', |
| (0x7F, 0x10, 0x6F, 0x58) : 'EF_CMI', |
| (0x7F, 0x10, 0x6F, 0x4F) : 'EF_ECCP', |
| (0x7F, 0x10, 0x5F, 0x50) : 'DF_GRAPHICS', |
| (0x7F, 0x10, 0x5F, 0x50, 0x4F, 0x20) : 'EF_IMG', |
| (0x7F, 0x20) : 'DF_GSM', |
| (0x7F, 0x20, 0x5F, 0x3C) : 'DF_MExE', |
| (0x7F, 0x20, 0x5F, 0x3C, 0x4F, 0x40) : 'EF_MExE-ST', |
| (0x7F, 0x20, 0x5F, 0x3C, 0x4F, 0x41) : 'EF_ORPK', |
| (0x7F, 0x20, 0x5F, 0x3C, 0x4F, 0x42) : 'EF_ARPK', |
| (0x7F, 0x20, 0x5F, 0x3C, 0x4F, 0x43) : 'EF_TPRPK', |
| (0x7F, 0x20, 0x5F, 0x30) : 'DF_IRIDIUM', |
| (0x7F, 0x20, 0x5F, 0x31) : 'DF_GLOBST', |
| (0x7F, 0x20, 0x5F, 0x32) : 'DF_ICO', |
| (0x7F, 0x20, 0x5F, 0x33) : 'DF_ACeS', |
| (0x7F, 0x20, 0x5F, 0x40) : 'DF_EIA/TIA-553', |
| (0x7F, 0x20, 0x5F, 0x60) : 'DF_CTS', |
| (0x7F, 0x20, 0x5F, 0x70) : 'DF_SoLSA', |
| (0x7F, 0x20, 0x5F, 0x70, 0x4F, 0x30) : 'EF_SAI', |
| (0x7F, 0x20, 0x5F, 0x70, 0x4F, 0x31) : 'EF_SLL', |
| (0x7F, 0x20, 0x6F, 0x05) : 'EF_LP', |
| (0x7F, 0x20, 0x6F, 0x07) : 'EF_IMSI', |
| (0x7F, 0x20, 0x6F, 0x20) : 'EF_Kc', |
| (0x7F, 0x20, 0x6F, 0x2C) : 'EF_DCK', |
| (0x7F, 0x20, 0x6F, 0x30) : 'EF_PLMNsel', |
| (0x7F, 0x20, 0x6F, 0x31) : 'EF_HPPLMN', |
| (0x7F, 0x20, 0x6F, 0x32) : 'EF_CNL', |
| (0x7F, 0x20, 0x6F, 0x37) : 'EF_ACMmax', |
| (0x7F, 0x20, 0x6F, 0x38) : 'EF_SST', |
| (0x7F, 0x20, 0x6F, 0x39) : 'EF_ACM', |
| (0x7F, 0x20, 0x6F, 0x3E) : 'EF_GID1', |
| (0x7F, 0x20, 0x6F, 0x3F) : 'EF_GID2', |
| (0x7F, 0x20, 0x6F, 0x41) : 'EF_PUCT', |
| (0x7F, 0x20, 0x6F, 0x45) : 'EF_CBMI', |
| (0x7F, 0x20, 0x6F, 0x46) : 'EF_SPN', |
| (0x7F, 0x20, 0x6F, 0x48) : 'EF_CBMID', |
| (0x7F, 0x20, 0x6F, 0x74) : 'EF_BCCH', |
| (0x7F, 0x20, 0x6F, 0x78) : 'EF_ACC', |
| (0x7F, 0x20, 0x6F, 0x7B) : 'EF_FPLMN', |
| (0x7F, 0x20, 0x6F, 0x7E) : 'EF_LOCI', |
| (0x7F, 0x20, 0x6F, 0xAD) : 'EF_AD', |
| (0x7F, 0x20, 0x6F, 0xAE) : 'EF_PHASE', |
| (0x7F, 0x20, 0x6F, 0xB1) : 'EF_VGCS', |
| (0x7F, 0x20, 0x6F, 0xB2) : 'EF_VGCSS', |
| (0x7F, 0x20, 0x6F, 0xB3) : 'EF_VBS', |
| (0x7F, 0x20, 0x6F, 0xB4) : 'EF_VBSS', |
| (0x7F, 0x20, 0x6F, 0xB5) : 'EF_eMLPP', |
| (0x7F, 0x20, 0x6F, 0xB6) : 'EF_AAeM', |
| (0x7F, 0x20, 0x6F, 0xB7) : 'EF_ECC', |
| (0x7F, 0x20, 0x6F, 0x50) : 'EF_CBMIR', |
| (0x7F, 0x20, 0x6F, 0x51) : 'EF_NIA', |
| (0x7F, 0x20, 0x6F, 0x52) : 'EF_KcGPRS', |
| (0x7F, 0x20, 0x6F, 0x53) : 'EF_LOCIGPRS', |
| (0x7F, 0x20, 0x6F, 0x54) : 'EF_SUME', |
| (0x7F, 0x20, 0x6F, 0x60) : 'EF_PLMNwAcT', |
| (0x7F, 0x20, 0x6F, 0x61) : 'EF_OPLMNwAcT', |
| (0x7F, 0x20, 0x6F, 0x62) : 'EF_HPLMNAcT', |
| (0x7F, 0x20, 0x6F, 0x63) : 'EF_CPBCCH', |
| (0x7F, 0x20, 0x6F, 0x64) : 'EF_INVSCAN', |
| (0x7F, 0x20, 0x6F, 0xC5) : 'EF_PNN', |
| (0x7F, 0x20, 0x6F, 0xC6) : 'EF_OPL', |
| (0x7F, 0x20, 0x6F, 0xC7) : 'EF_MBDN', |
| (0x7F, 0x20, 0x6F, 0xC8) : 'EF_EXT6', |
| (0x7F, 0x20, 0x6F, 0xC9) : 'EF_MBI', |
| (0x7F, 0x20, 0x6F, 0xCA) : 'EF_MWIS', |
| (0x7F, 0x20, 0x6F, 0xCB) : 'EF_CFIS', |
| (0x7F, 0x20, 0x6F, 0xCC) : 'EF_EXT7', |
| (0x7F, 0x20, 0x6F, 0xCD) : 'EF_SPDI', |
| (0x7F, 0x20, 0x6F, 0xCE) : 'EF_MMSN', |
| (0x7F, 0x20, 0x6F, 0xCF) : 'EF_EXT8', |
| (0x7F, 0x20, 0x6F, 0xD0) : 'EF_MMSICP', |
| (0x7F, 0x20, 0x6F, 0xD1) : 'EF_MMSUP', |
| (0x7F, 0x20, 0x6F, 0xD2) : 'EF_MMSUCP', |
| } |
| |
| USIM_FS = { |
| (0x3F, 0x00) : 'MF', |
| (0x2F, 0x00) : 'EF_DIR', |
| (0x2F, 0x05) : 'EF_PL', |
| (0x2F, 0x06) : 'EF_ARR', |
| (0x2F, 0xE2) : 'EF_ICCID', |
| (0x7F, 0x20) : 'DF_GSM', |
| (0x7F, 0x10) : 'DF_TELECOM', |
| (0x7F, 0x10, 0x6F, 0x06) : 'EF_ARR', |
| (0x7F, 0x10, 0x6F, 0x3A) : 'EF_ADN', |
| (0x7F, 0x10, 0x6F, 0x3B) : 'EF_FDN', |
| (0x7F, 0x10, 0x6F, 0x3C) : 'EF_SMS', |
| (0x7F, 0x10, 0x6F, 0x4F) : 'EF_ECCP', |
| (0x7F, 0x10, 0x6F, 0x40) : 'EF_MSISDN', |
| (0x7F, 0x10, 0x6F, 0x42) : 'EF_SMSP', |
| (0x7F, 0x10, 0x6F, 0x43) : 'EF_SMSS', |
| (0x7F, 0x10, 0x6F, 0x44) : 'EF_LND', |
| (0x7F, 0x10, 0x6F, 0x47) : 'EF_SMSR', |
| (0x7F, 0x10, 0x6F, 0x49) : 'EF_SDN', |
| (0x7F, 0x10, 0x6F, 0x4A) : 'EF_EXT1', |
| (0x7F, 0x10, 0x6F, 0x4B) : 'EF_EXT2', |
| (0x7F, 0x10, 0x6F, 0x4C) : 'EF_EXT3', |
| (0x7F, 0x10, 0x6F, 0x4D) : 'EF_BDN', |
| (0x7F, 0x10, 0x6F, 0x4E) : 'EF_EXT4', |
| (0x7F, 0x10, 0x6F, 0x54) : 'EF_SUME', |
| (0x7F, 0x10, 0x5F, 0x50) : 'DF_GRAPHICS', |
| (0x7F, 0x10, 0x5F, 0x50, 0x4F, 0x20) : 'EF_IMG', |
| #(0x7F, 0x10, 0x5F, 0x50, 0x4F, 0xXX) : 'EF_IIDFn', |
| (0x5F, 0x3A) : 'DF_PHONEBOOK', |
| (0x5F, 0x3A, 0x4F, 0x30) : 'EF_PBR', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_IAP', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_ADN', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_EXT1', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_PBC', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_GRP', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_AAS', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_GAS', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_ANR', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_SNE', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_CCP1', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_UID', |
| (0x5F, 0x3A, 0x4F, 0x22) : 'EF_PSC', |
| (0x5F, 0x3A, 0x4F, 0x23) : 'EF_CC', |
| (0x5F, 0x3A, 0x4F, 0x24) : 'EF_PUID', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_EMAIL', |
| (0x5F, 0x3B) : 'DF_MULTIMEDIA', |
| (0x5F, 0x3B, 0x4F, 0x47) : 'EF_MML', |
| (0x5F, 0x3B, 0x4F, 0x48) : 'EF_MMDF', |
| } |
| |
| |
| USIM_app_FS = { |
| (0x5F, 0x40) : 'DF_WLAN', |
| (0x5F, 0x40, 0x4F, 0x41) : 'EF_Pseudo', |
| (0x5F, 0x40, 0x4F, 0x42) : 'EF_UPLMNWLAN', |
| (0x5F, 0x40, 0x4F, 0x43) : 'EF_0PLMNWLAN', |
| (0x5F, 0x40, 0x4F, 0x44) : 'EF_USSIDL', |
| (0x5F, 0x40, 0x4F, 0x45) : 'EF_OSSIDL', |
| (0x5F, 0x40, 0x4F, 0x46) : 'EF_WRI', |
| (0x5F, 0x70) : 'DF_SoLSA', |
| (0x5F, 0x70, 0x4F, 0x30) : 'EF_SAI', |
| (0x5F, 0x70, 0x4F, 0x31) : 'EF_SLL', |
| (0x5F, 0x3C) : 'DF_MExE', |
| (0x5F, 0x3C, 0x4F, 0x40) : 'EF_MExE-ST', |
| (0x5F, 0x3C, 0x4F, 0x41) : 'EF_ORPK', |
| (0x5F, 0x3C, 0x4F, 0x42) : 'EF_ARPK', |
| (0x5F, 0x3C, 0x4F, 0x43) : 'EF_TPRK', |
| #(0x5F, 0x3C, 0x4F, 0xXX) : 'EF_TKCDF', |
| (0x5F, 0x3B) : 'DF_GSM-ACCESS', |
| (0x5F, 0x3B, 0x4F, 0x20) : 'EF_Kc', |
| (0x5F, 0x3B, 0x4F, 0x52) : 'EF_KcGPRS', |
| (0x5F, 0x3B, 0x4F, 0x63) : 'EF_CPBCCH', |
| (0x5F, 0x3B, 0x4F, 0x64) : 'EF_invSCAN', |
| (0x5F, 0x3A) : 'DF_PHONEBOOK', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_UID', |
| (0x5F, 0x3A, 0x4F, 0x22) : 'EF_PSC', |
| (0x5F, 0x3A, 0x4F, 0x23) : 'EF_CC', |
| (0x5F, 0x3A, 0x4F, 0x24) : 'EF_PUID', |
| (0x5F, 0x3A, 0x4F, 0x30) : 'EF_PBR', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_CCP1', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_IAP', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_ADN', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_EXT1', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_PBC', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_GRP', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_AAS', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_GAS', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_ANR', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_SNE', |
| #(0x5F, 0x3A, 0x4F, 0xXX) : 'EF_EMAIL', |
| (0x6F, 0x05) : 'EF_LI', |
| (0x6F, 0x06) : 'EF_ARR', |
| (0x6F, 0x07) : 'EF_IMSI', |
| (0x6F, 0x08) : 'EF_Keys', |
| (0x6F, 0x09) : 'EF_KeysPS', |
| (0x6F, 0x2C) : 'EF_DCK', |
| (0x6F, 0x31) : 'EF_HPPLMN', |
| (0x6F, 0x32) : 'EF_CNL', |
| (0x6F, 0x37) : 'EF_ACMmax', |
| (0x6F, 0x38) : 'EF_UST', |
| (0x6F, 0x39) : 'EF_ACM', |
| (0x6F, 0x3B) : 'EF_FDN', |
| (0x6F, 0x3C) : 'EF_SMS', |
| (0x6F, 0x3E) : 'EF_GID1', |
| (0x6F, 0x3F) : 'EF_GID2', |
| (0x6F, 0x40) : 'EF_MSISDN', |
| (0x6F, 0x41) : 'EF_PUCT', |
| (0x6F, 0x42) : 'EF_SMSP', |
| (0x6F, 0x43) : 'EF_SMSS', |
| (0x6F, 0x45) : 'EF_CBMI', |
| (0x6F, 0x46) : 'EF_SPN', |
| (0x6F, 0x47) : 'EF_SMSR', |
| (0x6F, 0x48) : 'EF_CBMID', |
| (0x6F, 0x49) : 'EF_SDN', |
| (0x6F, 0x4B) : 'EF_EXT2', |
| (0x6F, 0x4C) : 'EF_EXT3', |
| (0x6F, 0x4D) : 'EF_BDN', |
| (0x6F, 0x4E) : 'EF_EXT5', |
| (0x6F, 0x50) : 'EF_CBMIR', |
| (0x6F, 0x55) : 'EF_EXT4', |
| (0x6F, 0x56) : 'EF_EST', |
| (0x6F, 0x57) : 'EF_ACL', |
| (0x6F, 0x58) : 'EF_CMI', |
| (0x6F, 0x5B) : 'EF_START-HFN', |
| (0x6F, 0x5C) : 'EF_THRESHOLD', |
| (0x6F, 0x60) : 'EF_PLMNwAcT', |
| (0x6F, 0x61) : 'EF_OPLMNwAcT', |
| (0x6F, 0x62) : 'EF_HPLMNwAcT', |
| (0x6F, 0xD9) : 'EF_EHPLMN', |
| (0x6F, 0x73) : 'EF_PSLOCI', |
| (0x6F, 0x78) : 'EF_ACC', |
| (0x6F, 0x7B) : 'EF_FPLMN', |
| (0x6F, 0x7E) : 'EF_LOCI', |
| (0x6F, 0x80) : 'EF_ICI', |
| (0x6F, 0x81) : 'EF_OCI', |
| (0x6F, 0x82) : 'EF_ICT', |
| (0x6F, 0x83) : 'EF_OCT', |
| (0x6F, 0xAD) : 'EF_AD', |
| (0x6F, 0xB5) : 'EF_eMLPP', |
| (0x6F, 0xB6) : 'EF_AAeM', |
| (0x6F, 0xB7) : 'EF_ECC', |
| (0x6F, 0xC3) : 'EF_Hiddenkey', |
| (0x6F, 0xC4) : 'EF_NETPAR', |
| (0x6F, 0xC5) : 'EF_PNN', |
| (0x6F, 0xC6) : 'EF_OPL', |
| (0x6F, 0xC7) : 'EF_MBDN', |
| (0x6F, 0xC8) : 'EF_EXT6', |
| (0x6F, 0xC9) : 'EF_MBI', |
| (0x6F, 0xCA) : 'EF_MWIS', |
| (0x6F, 0xCB) : 'EF_CFIS', |
| (0x6F, 0xCC) : 'EF_EXT7', |
| (0x6F, 0xCD) : 'EF_SPDI', |
| (0x6F, 0xCE) : 'EF_MMSN', |
| (0x6F, 0xCF) : 'EF_EXT8', |
| (0x6F, 0xD0) : 'EF_MMSICP', |
| (0x6F, 0xD1) : 'EF_MMSUP', |
| (0x6F, 0xD2) : 'EF_MMSUCP', |
| (0x6F, 0xD3) : 'EF_NIA', |
| (0x6F, 0x4F) : 'EF_CCP2', |
| (0x6F, 0xB1) : 'EF_VGCS', |
| (0x6F, 0xB2) : 'EF_VGCSS', |
| (0x6F, 0xB3) : 'EF_VBS', |
| (0x6F, 0xB4) : 'EF_VBSS', |
| (0x6F, 0xD4) : 'EF_VGCSCA', |
| (0x6F, 0xD5) : 'EF_VBSCA', |
| (0x6F, 0xD6) : 'EF_GBAP', |
| (0x6F, 0xD7) : 'EF_MSK', |
| (0x6F, 0xD8) : 'EF_MUK', |
| (0x6F, 0xDA) : 'EF_GBANL', |
| (0x6F, 0xDB) : 'EF_EHPLMNPI', |
| (0x6F, 0xDC) : 'EF_LRPLMNSI', |
| (0x6F, 0xDD) : 'EF_NAFKCA', |
| (0x6F, 0xDE) : 'EF_SPNI', |
| (0x6F, 0xDF) : 'EF_PNNI', |
| } |
| |
| EMV_AID = { |
| (160, 0, 0, 0, 3, 16, 16) : 'VISA credit / debit', |
| } |