From 57ad38e661453dcc89648039c54dcfad7cf4c8ea Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 9 Jul 2023 22:14:09 +0200 Subject: [PATCH] create pySim.legacy.ts_51_011.py and move legacy code there Those old flat dicts indicating FID to string-name mapping have long been obsoleted by the pySim.filsystem based classes. Change-Id: I20ceea3fdb02ee70d8c8889c078b2e5a0f17c83b --- pySim-prog.py | 3 +- pySim-read.py | 3 +- pySim/legacy/cards.py | 3 +- pySim/legacy/ts_51_011.py | 257 ++++++++++++++++++++++++++++++++++++++ pySim/ts_51_011.py | 230 ---------------------------------- 5 files changed, 263 insertions(+), 233 deletions(-) create mode 100644 pySim/legacy/ts_51_011.py diff --git a/pySim-prog.py b/pySim-prog.py index 2e9d5d7f..c07bfd18 100755 --- a/pySim-prog.py +++ b/pySim-prog.py @@ -38,7 +38,8 @@ from pySim.commands import SimCardCommands from pySim.transport import init_reader from pySim.legacy.cards import _cards_classes, card_detect from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid -from pySim.ts_51_011 import EF, EF_AD +from pySim.ts_51_011 import EF_AD +from pySim.legacy.ts_51_011 import EF from pySim.card_handler import * from pySim.utils import * diff --git a/pySim-read.py b/pySim-read.py index 52c60be0..74bb35a5 100755 --- a/pySim-read.py +++ b/pySim-read.py @@ -28,7 +28,8 @@ import os import random import re import sys -from pySim.ts_51_011 import EF, DF, EF_SST_map, EF_AD +from pySim.ts_51_011 import EF_SST_map, EF_AD +from pySim.legacy.ts_51_011 import EF, DF from pySim.ts_31_102 import EF_UST_map, EF_USIM_ADF_map from pySim.ts_31_103 import EF_IST_map, EF_ISIM_ADF_map diff --git a/pySim/legacy/cards.py b/pySim/legacy/cards.py index e63b0446..bb3e8a52 100644 --- a/pySim/legacy/cards.py +++ b/pySim/legacy/cards.py @@ -13,8 +13,9 @@ from pySim.utils import enc_plmn, get_addr_type from pySim.utils import is_hex, h2b, b2h, h2s, s2h, lpad, rpad from pySim.legacy.utils import enc_ePDGSelection, format_xplmn_w_act, format_xplmn, dec_st, enc_st from pySim.legacy.utils import format_ePDGSelection +from pySim.legacy.ts_51_011 import EF, DF -from pySim.ts_51_011 import EF, DF, EF_AD, EF_SPN +from pySim.ts_51_011 import EF_AD, EF_SPN from pySim.ts_31_102 import EF_USIM_ADF_map from pySim.ts_31_103 import EF_ISIM_ADF_map diff --git a/pySim/legacy/ts_51_011.py b/pySim/legacy/ts_51_011.py new file mode 100644 index 00000000..a384b1d5 --- /dev/null +++ b/pySim/legacy/ts_51_011.py @@ -0,0 +1,257 @@ +# -*- coding: utf-8 -*- + +""" Various constants from 3GPP TS 51.011 used by *legacy* code only. + +This will likely be removed in future versions of pySim. Please instead +use the pySim.filesystem class model with the various profile/application +specific extension modules. +""" + +# Copyright (C) 2017 Alexander.Chemeris +# Copyright (C) 2021 Harald Welte +# +# 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, see . + + +MF_num = '3F00' + +DF_num = { + 'TELECOM': '7F10', + + 'GSM': '7F20', + 'IS-41': '7F22', + 'FP-CTS': '7F23', + + 'GRAPHICS': '5F50', + + 'IRIDIUM': '5F30', + 'GLOBST': '5F31', + 'ICO': '5F32', + 'ACeS': '5F33', + + 'EIA/TIA-553': '5F40', + 'CTS': '5F60', + 'SOLSA': '5F70', + + 'MExE': '5F3C', +} + +EF_num = { + # MF + 'ICCID': '2FE2', + 'ELP': '2F05', + 'DIR': '2F00', + + # DF_TELECOM + 'ADN': '6F3A', + 'FDN': '6F3B', + 'SMS': '6F3C', + 'CCP': '6F3D', + 'MSISDN': '6F40', + 'SMSP': '6F42', + 'SMSS': '6F43', + 'LND': '6F44', + 'SMSR': '6F47', + 'SDN': '6F49', + 'EXT1': '6F4A', + 'EXT2': '6F4B', + 'EXT3': '6F4C', + 'BDN': '6F4D', + 'EXT4': '6F4E', + 'CMI': '6F58', + 'ECCP': '6F4F', + + # DF_GRAPHICS + 'IMG': '4F20', + + # DF_SoLSA + 'SAI': '4F30', + 'SLL': '4F31', + + # DF_MExE + 'MExE-ST': '4F40', + 'ORPK': '4F41', + 'ARPK': '4F42', + 'TPRPK': '4F43', + + # DF_GSM + 'LP': '6F05', + 'IMSI': '6F07', + 'Kc': '6F20', + 'DCK': '6F2C', + 'PLMNsel': '6F30', + 'HPPLMN': '6F31', + 'CNL': '6F32', + 'ACMmax': '6F37', + 'SST': '6F38', + 'ACM': '6F39', + 'GID1': '6F3E', + 'GID2': '6F3F', + 'PUCT': '6F41', + 'CBMI': '6F45', + 'SPN': '6F46', + 'CBMID': '6F48', + 'BCCH': '6F74', + 'ACC': '6F78', + 'FPLMN': '6F7B', + 'LOCI': '6F7E', + 'AD': '6FAD', + 'PHASE': '6FAE', + 'VGCS': '6FB1', + 'VGCSS': '6FB2', + 'VBS': '6FB3', + 'VBSS': '6FB4', + 'eMLPP': '6FB5', + 'AAeM': '6FB6', + 'ECC': '6FB7', + 'CBMIR': '6F50', + 'NIA': '6F51', + 'KcGPRS': '6F52', + 'LOCIGPRS': '6F53', + 'SUME': '6F54', + 'PLMNwAcT': '6F60', + 'OPLMNwAcT': '6F61', + # Figure 8 names it HPLMNAcT, but in the text it's names it HPLMNwAcT + 'HPLMNAcT': '6F62', + 'HPLMNwAcT': '6F62', + 'CPBCCH': '6F63', + 'INVSCAN': '6F64', + 'PNN': '6FC5', + 'OPL': '6FC6', + 'MBDN': '6FC7', + 'EXT6': '6FC8', + 'MBI': '6FC9', + 'MWIS': '6FCA', + 'CFIS': '6FCB', + 'EXT7': '6FCC', + 'SPDI': '6FCD', + 'MMSN': '6FCE', + 'EXT8': '6FCF', + 'MMSICP': '6FD0', + 'MMSUP': '6FD1', + 'MMSUCP': '6FD2', +} + +DF = { + 'TELECOM': [MF_num, DF_num['TELECOM']], + + 'GSM': [MF_num, DF_num['GSM']], + 'IS-41': [MF_num, DF_num['IS-41']], + 'FP-CTS': [MF_num, DF_num['FP-CTS']], + + 'GRAPHICS': [MF_num, DF_num['GRAPHICS']], + + 'IRIDIUM': [MF_num, DF_num['IRIDIUM']], + 'GLOBST': [MF_num, DF_num['GLOBST']], + 'ICO': [MF_num, DF_num['ICO']], + 'ACeS': [MF_num, DF_num['ACeS']], + + 'EIA/TIA-553': [MF_num, DF_num['EIA/TIA-553']], + 'CTS': [MF_num, DF_num['CTS']], + 'SoLSA': [MF_num, DF_num['SOLSA']], + + 'MExE': [MF_num, DF_num['MExE']], +} + + +EF = { + 'ICCID': [MF_num, EF_num['ICCID']], + 'ELP': [MF_num, EF_num['ELP']], + 'DIR': [MF_num, EF_num['DIR']], + + 'ADN': DF['TELECOM']+[EF_num['ADN']], + 'FDN': DF['TELECOM']+[EF_num['FDN']], + 'SMS': DF['TELECOM']+[EF_num['SMS']], + 'CCP': DF['TELECOM']+[EF_num['CCP']], + 'MSISDN': DF['TELECOM']+[EF_num['MSISDN']], + 'SMSP': DF['TELECOM']+[EF_num['SMSP']], + 'SMSS': DF['TELECOM']+[EF_num['SMSS']], + 'LND': DF['TELECOM']+[EF_num['LND']], + 'SMSR': DF['TELECOM']+[EF_num['SMSR']], + 'SDN': DF['TELECOM']+[EF_num['SDN']], + 'EXT1': DF['TELECOM']+[EF_num['EXT1']], + 'EXT2': DF['TELECOM']+[EF_num['EXT2']], + 'EXT3': DF['TELECOM']+[EF_num['EXT3']], + 'BDN': DF['TELECOM']+[EF_num['BDN']], + 'EXT4': DF['TELECOM']+[EF_num['EXT4']], + 'CMI': DF['TELECOM']+[EF_num['CMI']], + 'ECCP': DF['TELECOM']+[EF_num['ECCP']], + + 'IMG': DF['GRAPHICS']+[EF_num['IMG']], + + 'SAI': DF['SoLSA']+[EF_num['SAI']], + 'SLL': DF['SoLSA']+[EF_num['SLL']], + + 'MExE-ST': DF['MExE']+[EF_num['MExE-ST']], + 'ORPK': DF['MExE']+[EF_num['ORPK']], + 'ARPK': DF['MExE']+[EF_num['ARPK']], + 'TPRPK': DF['MExE']+[EF_num['TPRPK']], + + 'LP': DF['GSM']+[EF_num['LP']], + 'IMSI': DF['GSM']+[EF_num['IMSI']], + 'Kc': DF['GSM']+[EF_num['Kc']], + 'DCK': DF['GSM']+[EF_num['DCK']], + 'PLMNsel': DF['GSM']+[EF_num['PLMNsel']], + 'HPPLMN': DF['GSM']+[EF_num['HPPLMN']], + 'CNL': DF['GSM']+[EF_num['CNL']], + 'ACMmax': DF['GSM']+[EF_num['ACMmax']], + 'SST': DF['GSM']+[EF_num['SST']], + 'ACM': DF['GSM']+[EF_num['ACM']], + 'GID1': DF['GSM']+[EF_num['GID1']], + 'GID2': DF['GSM']+[EF_num['GID2']], + 'PUCT': DF['GSM']+[EF_num['PUCT']], + 'CBMI': DF['GSM']+[EF_num['CBMI']], + 'SPN': DF['GSM']+[EF_num['SPN']], + 'CBMID': DF['GSM']+[EF_num['CBMID']], + 'BCCH': DF['GSM']+[EF_num['BCCH']], + 'ACC': DF['GSM']+[EF_num['ACC']], + 'FPLMN': DF['GSM']+[EF_num['FPLMN']], + 'LOCI': DF['GSM']+[EF_num['LOCI']], + 'AD': DF['GSM']+[EF_num['AD']], + 'PHASE': DF['GSM']+[EF_num['PHASE']], + 'VGCS': DF['GSM']+[EF_num['VGCS']], + 'VGCSS': DF['GSM']+[EF_num['VGCSS']], + 'VBS': DF['GSM']+[EF_num['VBS']], + 'VBSS': DF['GSM']+[EF_num['VBSS']], + 'eMLPP': DF['GSM']+[EF_num['eMLPP']], + 'AAeM': DF['GSM']+[EF_num['AAeM']], + 'ECC': DF['GSM']+[EF_num['ECC']], + 'CBMIR': DF['GSM']+[EF_num['CBMIR']], + 'NIA': DF['GSM']+[EF_num['NIA']], + 'KcGPRS': DF['GSM']+[EF_num['KcGPRS']], + 'LOCIGPRS': DF['GSM']+[EF_num['LOCIGPRS']], + 'SUME': DF['GSM']+[EF_num['SUME']], + 'PLMNwAcT': DF['GSM']+[EF_num['PLMNwAcT']], + 'OPLMNwAcT': DF['GSM']+[EF_num['OPLMNwAcT']], + # Figure 8 names it HPLMNAcT, but in the text it's names it HPLMNwAcT + 'HPLMNAcT': DF['GSM']+[EF_num['HPLMNAcT']], + 'HPLMNwAcT': DF['GSM']+[EF_num['HPLMNAcT']], + 'CPBCCH': DF['GSM']+[EF_num['CPBCCH']], + 'INVSCAN': DF['GSM']+[EF_num['INVSCAN']], + 'PNN': DF['GSM']+[EF_num['PNN']], + 'OPL': DF['GSM']+[EF_num['OPL']], + 'MBDN': DF['GSM']+[EF_num['MBDN']], + 'EXT6': DF['GSM']+[EF_num['EXT6']], + 'MBI': DF['GSM']+[EF_num['MBI']], + 'MWIS': DF['GSM']+[EF_num['MWIS']], + 'CFIS': DF['GSM']+[EF_num['CFIS']], + 'EXT7': DF['GSM']+[EF_num['EXT7']], + 'SPDI': DF['GSM']+[EF_num['SPDI']], + 'MMSN': DF['GSM']+[EF_num['MMSN']], + 'EXT8': DF['GSM']+[EF_num['EXT8']], + 'MMSICP': DF['GSM']+[EF_num['MMSICP']], + 'MMSUP': DF['GSM']+[EF_num['MMSUP']], + 'MMSUCP': DF['GSM']+[EF_num['MMSUCP']], +} + diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py index 700fb02d..1f98e724 100644 --- a/pySim/ts_51_011.py +++ b/pySim/ts_51_011.py @@ -41,236 +41,6 @@ from struct import pack, unpack from typing import Tuple from pySim.tlv import * from pySim.utils import * -MF_num = '3F00' - -DF_num = { - 'TELECOM': '7F10', - - 'GSM': '7F20', - 'IS-41': '7F22', - 'FP-CTS': '7F23', - - 'GRAPHICS': '5F50', - - 'IRIDIUM': '5F30', - 'GLOBST': '5F31', - 'ICO': '5F32', - 'ACeS': '5F33', - - 'EIA/TIA-553': '5F40', - 'CTS': '5F60', - 'SOLSA': '5F70', - - 'MExE': '5F3C', -} - -EF_num = { - # MF - 'ICCID': '2FE2', - 'ELP': '2F05', - 'DIR': '2F00', - - # DF_TELECOM - 'ADN': '6F3A', - 'FDN': '6F3B', - 'SMS': '6F3C', - 'CCP': '6F3D', - 'MSISDN': '6F40', - 'SMSP': '6F42', - 'SMSS': '6F43', - 'LND': '6F44', - 'SMSR': '6F47', - 'SDN': '6F49', - 'EXT1': '6F4A', - 'EXT2': '6F4B', - 'EXT3': '6F4C', - 'BDN': '6F4D', - 'EXT4': '6F4E', - 'CMI': '6F58', - 'ECCP': '6F4F', - - # DF_GRAPHICS - 'IMG': '4F20', - - # DF_SoLSA - 'SAI': '4F30', - 'SLL': '4F31', - - # DF_MExE - 'MExE-ST': '4F40', - 'ORPK': '4F41', - 'ARPK': '4F42', - 'TPRPK': '4F43', - - # DF_GSM - 'LP': '6F05', - 'IMSI': '6F07', - 'Kc': '6F20', - 'DCK': '6F2C', - 'PLMNsel': '6F30', - 'HPPLMN': '6F31', - 'CNL': '6F32', - 'ACMmax': '6F37', - 'SST': '6F38', - 'ACM': '6F39', - 'GID1': '6F3E', - 'GID2': '6F3F', - 'PUCT': '6F41', - 'CBMI': '6F45', - 'SPN': '6F46', - 'CBMID': '6F48', - 'BCCH': '6F74', - 'ACC': '6F78', - 'FPLMN': '6F7B', - 'LOCI': '6F7E', - 'AD': '6FAD', - 'PHASE': '6FAE', - 'VGCS': '6FB1', - 'VGCSS': '6FB2', - 'VBS': '6FB3', - 'VBSS': '6FB4', - 'eMLPP': '6FB5', - 'AAeM': '6FB6', - 'ECC': '6FB7', - 'CBMIR': '6F50', - 'NIA': '6F51', - 'KcGPRS': '6F52', - 'LOCIGPRS': '6F53', - 'SUME': '6F54', - 'PLMNwAcT': '6F60', - 'OPLMNwAcT': '6F61', - # Figure 8 names it HPLMNAcT, but in the text it's names it HPLMNwAcT - 'HPLMNAcT': '6F62', - 'HPLMNwAcT': '6F62', - 'CPBCCH': '6F63', - 'INVSCAN': '6F64', - 'PNN': '6FC5', - 'OPL': '6FC6', - 'MBDN': '6FC7', - 'EXT6': '6FC8', - 'MBI': '6FC9', - 'MWIS': '6FCA', - 'CFIS': '6FCB', - 'EXT7': '6FCC', - 'SPDI': '6FCD', - 'MMSN': '6FCE', - 'EXT8': '6FCF', - 'MMSICP': '6FD0', - 'MMSUP': '6FD1', - 'MMSUCP': '6FD2', -} - -DF = { - 'TELECOM': [MF_num, DF_num['TELECOM']], - - 'GSM': [MF_num, DF_num['GSM']], - 'IS-41': [MF_num, DF_num['IS-41']], - 'FP-CTS': [MF_num, DF_num['FP-CTS']], - - 'GRAPHICS': [MF_num, DF_num['GRAPHICS']], - - 'IRIDIUM': [MF_num, DF_num['IRIDIUM']], - 'GLOBST': [MF_num, DF_num['GLOBST']], - 'ICO': [MF_num, DF_num['ICO']], - 'ACeS': [MF_num, DF_num['ACeS']], - - 'EIA/TIA-553': [MF_num, DF_num['EIA/TIA-553']], - 'CTS': [MF_num, DF_num['CTS']], - 'SoLSA': [MF_num, DF_num['SOLSA']], - - 'MExE': [MF_num, DF_num['MExE']], -} - - -EF = { - 'ICCID': [MF_num, EF_num['ICCID']], - 'ELP': [MF_num, EF_num['ELP']], - 'DIR': [MF_num, EF_num['DIR']], - - 'ADN': DF['TELECOM']+[EF_num['ADN']], - 'FDN': DF['TELECOM']+[EF_num['FDN']], - 'SMS': DF['TELECOM']+[EF_num['SMS']], - 'CCP': DF['TELECOM']+[EF_num['CCP']], - 'MSISDN': DF['TELECOM']+[EF_num['MSISDN']], - 'SMSP': DF['TELECOM']+[EF_num['SMSP']], - 'SMSS': DF['TELECOM']+[EF_num['SMSS']], - 'LND': DF['TELECOM']+[EF_num['LND']], - 'SMSR': DF['TELECOM']+[EF_num['SMSR']], - 'SDN': DF['TELECOM']+[EF_num['SDN']], - 'EXT1': DF['TELECOM']+[EF_num['EXT1']], - 'EXT2': DF['TELECOM']+[EF_num['EXT2']], - 'EXT3': DF['TELECOM']+[EF_num['EXT3']], - 'BDN': DF['TELECOM']+[EF_num['BDN']], - 'EXT4': DF['TELECOM']+[EF_num['EXT4']], - 'CMI': DF['TELECOM']+[EF_num['CMI']], - 'ECCP': DF['TELECOM']+[EF_num['ECCP']], - - 'IMG': DF['GRAPHICS']+[EF_num['IMG']], - - 'SAI': DF['SoLSA']+[EF_num['SAI']], - 'SLL': DF['SoLSA']+[EF_num['SLL']], - - 'MExE-ST': DF['MExE']+[EF_num['MExE-ST']], - 'ORPK': DF['MExE']+[EF_num['ORPK']], - 'ARPK': DF['MExE']+[EF_num['ARPK']], - 'TPRPK': DF['MExE']+[EF_num['TPRPK']], - - 'LP': DF['GSM']+[EF_num['LP']], - 'IMSI': DF['GSM']+[EF_num['IMSI']], - 'Kc': DF['GSM']+[EF_num['Kc']], - 'DCK': DF['GSM']+[EF_num['DCK']], - 'PLMNsel': DF['GSM']+[EF_num['PLMNsel']], - 'HPPLMN': DF['GSM']+[EF_num['HPPLMN']], - 'CNL': DF['GSM']+[EF_num['CNL']], - 'ACMmax': DF['GSM']+[EF_num['ACMmax']], - 'SST': DF['GSM']+[EF_num['SST']], - 'ACM': DF['GSM']+[EF_num['ACM']], - 'GID1': DF['GSM']+[EF_num['GID1']], - 'GID2': DF['GSM']+[EF_num['GID2']], - 'PUCT': DF['GSM']+[EF_num['PUCT']], - 'CBMI': DF['GSM']+[EF_num['CBMI']], - 'SPN': DF['GSM']+[EF_num['SPN']], - 'CBMID': DF['GSM']+[EF_num['CBMID']], - 'BCCH': DF['GSM']+[EF_num['BCCH']], - 'ACC': DF['GSM']+[EF_num['ACC']], - 'FPLMN': DF['GSM']+[EF_num['FPLMN']], - 'LOCI': DF['GSM']+[EF_num['LOCI']], - 'AD': DF['GSM']+[EF_num['AD']], - 'PHASE': DF['GSM']+[EF_num['PHASE']], - 'VGCS': DF['GSM']+[EF_num['VGCS']], - 'VGCSS': DF['GSM']+[EF_num['VGCSS']], - 'VBS': DF['GSM']+[EF_num['VBS']], - 'VBSS': DF['GSM']+[EF_num['VBSS']], - 'eMLPP': DF['GSM']+[EF_num['eMLPP']], - 'AAeM': DF['GSM']+[EF_num['AAeM']], - 'ECC': DF['GSM']+[EF_num['ECC']], - 'CBMIR': DF['GSM']+[EF_num['CBMIR']], - 'NIA': DF['GSM']+[EF_num['NIA']], - 'KcGPRS': DF['GSM']+[EF_num['KcGPRS']], - 'LOCIGPRS': DF['GSM']+[EF_num['LOCIGPRS']], - 'SUME': DF['GSM']+[EF_num['SUME']], - 'PLMNwAcT': DF['GSM']+[EF_num['PLMNwAcT']], - 'OPLMNwAcT': DF['GSM']+[EF_num['OPLMNwAcT']], - # Figure 8 names it HPLMNAcT, but in the text it's names it HPLMNwAcT - 'HPLMNAcT': DF['GSM']+[EF_num['HPLMNAcT']], - 'HPLMNwAcT': DF['GSM']+[EF_num['HPLMNAcT']], - 'CPBCCH': DF['GSM']+[EF_num['CPBCCH']], - 'INVSCAN': DF['GSM']+[EF_num['INVSCAN']], - 'PNN': DF['GSM']+[EF_num['PNN']], - 'OPL': DF['GSM']+[EF_num['OPL']], - 'MBDN': DF['GSM']+[EF_num['MBDN']], - 'EXT6': DF['GSM']+[EF_num['EXT6']], - 'MBI': DF['GSM']+[EF_num['MBI']], - 'MWIS': DF['GSM']+[EF_num['MWIS']], - 'CFIS': DF['GSM']+[EF_num['CFIS']], - 'EXT7': DF['GSM']+[EF_num['EXT7']], - 'SPDI': DF['GSM']+[EF_num['SPDI']], - 'MMSN': DF['GSM']+[EF_num['MMSN']], - 'EXT8': DF['GSM']+[EF_num['EXT8']], - 'MMSICP': DF['GSM']+[EF_num['MMSICP']], - 'MMSUP': DF['GSM']+[EF_num['MMSUP']], - 'MMSUCP': DF['GSM']+[EF_num['MMSUCP']], -} # Mapping between SIM Service Number and its description EF_SST_map = {