Change in pysim[master]: Added feature to parse Service table based on SIM type. If USIM is pr...

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

herlesupreeth gerrit-no-reply at lists.osmocom.org
Fri Jan 24 11:05:34 UTC 2020


herlesupreeth has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/16991 )


Change subject: Added feature to parse Service table based on SIM type. If USIM is present EF.UST service mapping is used else EF.SST service mapping is used
......................................................................

Added feature to parse Service table based on SIM type. If USIM is present EF.UST service mapping is used else EF.SST service mapping is used

Change-Id: I6680e8c7f86326f72b98a33338e0dd5b58e55013
---
M pySim-read.py
A pySim/ts_31_102.py
M pySim/ts_51_011.py
M pySim/utils.py
M pysim-testdata/Fairwaves-SIM.ok
M pysim-testdata/Wavemobile-SIM.ok
M pysim-testdata/fakemagicsim.ok
M pysim-testdata/sysmoISIM-SJA2.ok
M pysim-testdata/sysmoUSIM-SJS1.ok
M pysim-testdata/sysmosim-gr1.ok
10 files changed, 259 insertions(+), 31 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/91/16991/1

diff --git a/pySim-read.py b/pySim-read.py
index 4e17b42..1210852 100755
--- a/pySim-read.py
+++ b/pySim-read.py
@@ -28,7 +28,8 @@
 import random
 import re
 import sys
-from pySim.ts_51_011 import EF, DF
+from pySim.ts_51_011 import EF, DF, EF_SST_map
+from pySim.ts_31_102 import EF_UST_map
 
 try:
 	import json
@@ -37,7 +38,7 @@
 	import simplejson as json
 
 from pySim.commands import SimCardCommands
-from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, format_xplmn_w_act, dec_spn
+from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, format_xplmn_w_act, dec_spn, parse_st
 
 
 def parse_options():
@@ -114,31 +115,37 @@
 	else:
 		print("IMSI: Can't read, response code = %s" % (sw,))
 
-	# EF.SST
+	# Determine whether the has just SIM or SIM+USIM or SIM+USIM+ISIM
+	# First (known) halves of the AID
+	aid_usim = "a0000000871002"
+	aid_isim = "a0000000871004"
+
+	sim_type = []
+	# Find out how many records the EF.DIR has
+	aid_record_count = scc.record_count(['3f00', '2F00'])
+	for i in range(0, aid_record_count):
+		record = scc.read_record(['3f00', '2F00'], i + 1)
+		if aid_isim in record[0]:
+			sim_type.append("ISIM")
+		elif aid_usim in record[0]:
+			sim_type.append("USIM")
+		else:
+			sim_type.append("SIM")
+
+	# EF.SST/EF.UST - Base on SIM type
+	# Both EF.SST and EF.UST have same identifier - 6F38
 	(res, sw) = scc.read_binary(EF['SST'])
 	if sw == '9000':
-		swapped = swap_nibbles(res)
-		print("USIM Service Table: %s" % swapped)
-		if len(res) >= 24:
-			byte12 = int(swapped[(12*2) - 2:(12*2)], 16)
-			service96 = (byte12&0x80 == 0x80)
-			print("Service 96 - Non-Access Stratum configuration by USIM: %s" % service96)
-			service95 = (byte12&0x40 == 0x40)
-			print("Service 95 - Support of UICC access to IMS: %s" % service95)
-			service93 = (byte12&0x10 == 0x10)
-			print("Service 93 - Communication Control for IMS by USIM: %s" % service93)
-		if len(res) >= 6:
-			byte3 = int(swapped[(3*2) - 2:(3*2)], 16)
-			service21 = (byte3&0x10 == 0x10)
-			print("Service 21 - MSISDN: %s" % service21)
-		if len(res) >= 10:
-			byte5 = int(swapped[(5*2) - 2:(5*2)], 16)
-			service34 = (byte5&0x02 == 0x02)
-			service35 = (byte5&0x04 == 0x04)
-			print("Service 34 - Enabled Services Table: %s" % service34)
-			print("Service 35 - APN Control List (ACL): %s" % service35)
+		# Get list of available services
+		avail_srvcs = parse_st(res)
+		srvc_map = EF_SST_map
+		if "USIM" in sim_type:
+			srvc_map = EF_UST_map
+		 # Print those we're interested in
+		for s in (96, 95, 93, 21, 34, 35):
+			print('Service %d - %s: %s' % (s, srvc_map[s], s in avail_srvcs))
 	else:
-		print("USIM Service Table: Can't read, response code = %s" % (sw,))
+		print("Service Table: Can't read, response code = %s" % (sw,))
 
 	# EF.SMSP
 	(res, sw) = scc.read_record(['3f00', '7f10', '6f42'], 1)
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
new file mode 100644
index 0000000..c29aa04
--- /dev/null
+++ b/pySim/ts_31_102.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+""" 
+Various constants from ETSI TS 131 102
+"""
+
+#
+# Copyright (C) 2020 Supreeth Herle <herlesupreeth at gmail.com>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+
+# Mapping between USIM Service Number and its description
+EF_UST_map = {
+	1: 'Local Phone Book',
+	2: 'Fixed Dialling Numbers (FDN)',
+	3: 'Extension 2',
+	4: 'Service Dialling Numbers (SDN)',
+	5: 'Extension3',
+	6: 'Barred Dialling Numbers (BDN)',
+	7: 'Extension4',
+	8: 'Outgoing Call Information (OCI and OCT)',
+	9: 'Incoming Call Information (ICI and ICT)',
+	10: 'Short Message Storage (SMS)',
+	11: 'Short Message Status Reports (SMSR)',
+	12: 'Short Message Service Parameters (SMSP)',
+	13: 'Advice of Charge (AoC)',
+	14: 'Capability Configuration Parameters 2 (CCP2)',
+	15: 'Cell Broadcast Message Identifier',
+	16: 'Cell Broadcast Message Identifier Ranges',
+	17: 'Group Identifier Level 1',
+	18: 'Group Identifier Level 2',
+	19: 'Service Provider Name',
+	20: 'User controlled PLMN selector with Access Technology',
+	21: 'MSISDN',
+	22: 'Image (IMG)',
+	23: 'Support of Localised Service Areas (SoLSA)',
+	24: 'Enhanced Multi-Level Precedence and Pre-emption Service',
+	25: 'Automatic Answer for eMLPP',
+	26: 'RFU',
+	27: 'GSM Access',
+	28: 'Data download via SMS-PP',
+	29: 'Data download via SMS-CB',
+	30: 'Call Control by USIM',
+	31: 'MO-SMS Control by USIM',
+	32: 'RUN AT COMMAND command',
+	33: 'shall be set to 1',
+	34: 'Enabled Services Table',
+	35: 'APN Control List (ACL)',
+	36: 'Depersonalisation Control Keys',
+	37: 'Co-operative Network List',
+	38: 'GSM security context',
+	39: 'CPBCCH Information',
+	40: 'Investigation Scan',
+	41: 'MexE',
+	42: 'Operator controlled PLMN selector with Access Technology',
+	43: 'HPLMN selector with Access Technology',
+	44: 'Extension 5',
+	45: 'PLMN Network Name',
+	46: 'Operator PLMN List',
+	47: 'Mailbox Dialling Numbers',
+	48: 'Message Waiting Indication Status',
+	49: 'Call Forwarding Indication Status',
+	50: 'Reserved and shall be ignored',
+	51: 'Service Provider Display Information',
+	52: 'Multimedia Messaging Service (MMS)',
+	53: 'Extension 8',
+	54: 'Call control on GPRS by USIM',
+	55: 'MMS User Connectivity Parameters',
+	56: 'Network\'s indication of alerting in the MS (NIA)',
+	57: 'VGCS Group Identifier List (EFVGCS and EFVGCSS)',
+	58: 'VBS Group Identifier List (EFVBS and EFVBSS)',
+	59: 'Pseudonym',
+	60: 'User Controlled PLMN selector for I-WLAN access',
+	61: 'Operator Controlled PLMN selector for I-WLAN access',
+	62: 'User controlled WSID list',
+	63: 'Operator controlled WSID list',
+	64: 'VGCS security',
+	65: 'VBS security',
+	66: 'WLAN Reauthentication Identity',
+	67: 'Multimedia Messages Storage',
+	68: 'Generic Bootstrapping Architecture (GBA)',
+	69: 'MBMS security',
+	70: 'Data download via USSD and USSD application mode',
+	71: 'Equivalent HPLMN',
+	72: 'Additional TERMINAL PROFILE after UICC activation',
+	73: 'Equivalent HPLMN Presentation Indication',
+	74: 'Last RPLMN Selection Indication',
+	75: 'OMA BCAST Smart Card Profile',
+	76: 'GBA-based Local Key Establishment Mechanism',
+	77: 'Terminal Applications',
+	78: 'Service Provider Name Icon',
+	79: 'PLMN Network Name Icon',
+	80: 'Connectivity Parameters for USIM IP connections',
+	81: 'Home I-WLAN Specific Identifier List',
+	82: 'I-WLAN Equivalent HPLMN Presentation Indication',
+	83: 'I-WLAN HPLMN Priority Indication',
+	84: 'I-WLAN Last Registered PLMN',
+	85: 'EPS Mobility Management Information',
+	86: 'Allowed CSG Lists and corresponding indications',
+	87: 'Call control on EPS PDN connection by USIM',
+	88: 'HPLMN Direct Access',
+	89: 'eCall Data',
+	90: 'Operator CSG Lists and corresponding indications',
+	91: 'Support for SM-over-IP',
+	92: 'Support of CSG Display Control',
+	93: 'Communication Control for IMS by USIM',
+	94: 'Extended Terminal Applications',
+	95: 'Support of UICC access to IMS',
+	96: 'Non-Access Stratum configuration by USIM',
+	97: 'PWS configuration by USIM',
+	98: 'RFU',
+	99: 'URI support by UICC',
+	100: 'Extended EARFCN support',
+	101: 'ProSe',
+	102: 'USAT Application Pairing',
+	103: 'Media Type support',
+	104: 'IMS call disconnection cause',
+	105: 'URI support for MO SHORT MESSAGE CONTROL',
+	106: 'ePDG configuration Information support',
+	107: 'ePDG configuration Information configured',
+	108: 'ACDC support',
+	109: 'MCPTT',
+	110: 'ePDG configuration Information for Emergency Service support',
+	111: 'ePDG configuration Information for Emergency Service configured',
+}
\ No newline at end of file
diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py
index 754d57f..1cec91f 100644
--- a/pySim/ts_51_011.py
+++ b/pySim/ts_51_011.py
@@ -249,3 +249,66 @@
 'MMSUP':  DF['GSM']+[EF_num['MMSUP']],
 'MMSUCP': DF['GSM']+[EF_num['MMSUCP']],
 }
+
+# Mapping between SIM Service Number and its description
+EF_SST_map = {
+	1: 'CHV1 disable function',
+	2: 'Abbreviated Dialling Numbers (ADN)',
+	3: 'Fixed Dialling Numbers (FDN)',
+	4: 'Short Message Storage (SMS)',
+	5: 'Advice of Charge (AoC)',
+	6: 'Capability Configuration Parameters (CCP)',
+	7: 'PLMN selector',
+	8: 'RFU',
+	9: 'MSISDN',
+	10: 'Extension1',
+	11: 'Extension2',
+	12: 'SMS Parameters',
+	13: 'Last Number Dialled (LND)',
+	14: 'Cell Broadcast Message Identifier',
+	15: 'Group Identifier Level 1',
+	16: 'Group Identifier Level 2',
+	17: 'Service Provider Name',
+	18: 'Service Dialling Numbers (SDN)',
+	19: 'Extension3',
+	20: 'RFU',
+	21: 'VGCS Group Identifier List (EFVGCS and EFVGCSS)',
+	22: 'VBS Group Identifier List (EFVBS and EFVBSS)',
+	23: 'enhanced Multi-Level Precedence and Pre-emption Service',
+	24: 'Automatic Answer for eMLPP',
+	25: 'Data download via SMS-CB',
+	26: 'Data download via SMS-PP',
+	27: 'Menu selection',
+	28: 'Call control',
+	29: 'Proactive SIM',
+	30: 'Cell Broadcast Message Identifier Ranges',
+	31: 'Barred Dialling Numbers (BDN)',
+	32: 'Extension4',
+	33: 'De-personalization Control Keys',
+	34: 'Co-operative Network List',
+	35: 'Short Message Status Reports',
+	36: 'Network\'s indication of alerting in the MS',
+	37: 'Mobile Originated Short Message control by SIM',
+	38: 'GPRS',
+	39: 'Image (IMG)',
+	40: 'SoLSA (Support of Local Service Area)',
+	41: 'USSD string data object supported in Call Control',
+	42: 'RUN AT COMMAND command',
+	43: 'User controlled PLMN Selector with Access Technology',
+	44: 'Operator controlled PLMN Selector with Access Technology',
+	45: 'HPLMN Selector with Access Technology',
+	46: 'CPBCCH Information',
+	47: 'Investigation Scan',
+	48: 'Extended Capability Configuration Parameters',
+	49: 'MExE',
+	50: 'Reserved and shall be ignored',
+	51: 'PLMN Network Name',
+	52: 'Operator PLMN List',
+	53: 'Mailbox Dialling Numbers',
+	54: 'Message Waiting Indication Status',
+	55: 'Call Forwarding Indication Status',
+	56: 'Service Provider Display Information',
+	57: 'Multimedia Messaging Service (MMS)',
+	58: 'Extension 8',
+	59: 'MMS User Connectivity Parameters',
+}
\ No newline at end of file
diff --git a/pySim/utils.py b/pySim/utils.py
index fbe3e47..2d71ade 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -252,4 +252,24 @@
 		mcc += digit2 * 10
 	if digit3 != 0XF:
 		mcc += digit3
-	return mcc
\ No newline at end of file
+	return mcc
+
+def parse_st(st):
+	"""
+	Parses the EF S/UST and returns available/supported services
+	"""
+	swapped = swap_nibbles(st)
+	print("Service Table: %s" % swapped)
+	swapped_bytes = [swapped[i:i+2] for i in range(0, len(swapped), 2) ]
+	avail_srvc = []
+	# Get each byte and check for available services
+	for i in range(0, len(swapped_bytes)):
+		byte = int(swapped_bytes[i], 16)
+		for j in range(1, 9):
+			if byte&0x01 == 0x01:
+				# Byte X contains info about Services num (8X-7) to num (8X)
+				# bit = 1: service available
+				# bit = 0: service not available
+				avail_srvc.append((8*i) + j)
+			byte = byte >> 1
+	return avail_srvc
diff --git a/pysim-testdata/Fairwaves-SIM.ok b/pysim-testdata/Fairwaves-SIM.ok
index 149b9b4..d1b62f2 100644
--- a/pysim-testdata/Fairwaves-SIM.ok
+++ b/pysim-testdata/Fairwaves-SIM.ok
@@ -2,7 +2,7 @@
 Reading ...
 ICCID: 8988219000000117833
 IMSI: 001010000000111
-USIM Service Table: ffc33cff30f0fff000f0ff300f0c
+Service Table: ffc33cff30f0fff000f0ff300f0c
 Service 96 - Non-Access Stratum configuration by USIM: False
 Service 95 - Support of UICC access to IMS: False
 Service 93 - Communication Control for IMS by USIM: True
diff --git a/pysim-testdata/Wavemobile-SIM.ok b/pysim-testdata/Wavemobile-SIM.ok
index 8214a4c..0347401 100644
--- a/pysim-testdata/Wavemobile-SIM.ok
+++ b/pysim-testdata/Wavemobile-SIM.ok
@@ -2,7 +2,7 @@
 Reading ...
 ICCID: 89445310150011013678
 IMSI: 001010000000102
-USIM Service Table: ff33fff0c300fff000c00f0c0f300000
+Service Table: ff33fff0c300fff000c00f0c0f300000
 Service 96 - Non-Access Stratum configuration by USIM: False
 Service 95 - Support of UICC access to IMS: False
 Service 93 - Communication Control for IMS by USIM: False
diff --git a/pysim-testdata/fakemagicsim.ok b/pysim-testdata/fakemagicsim.ok
index be24539..be5f8f4 100644
--- a/pysim-testdata/fakemagicsim.ok
+++ b/pysim-testdata/fakemagicsim.ok
@@ -2,7 +2,7 @@
 Reading ...
 ICCID: 1122334455667788990
 IMSI: 001010000000102
-USIM Service Table: fff3fff030000f3000c0
+Service Table: fff3fff030000f3000c0
 Service 21 - MSISDN: True
 Service 34 - Enabled Services Table: False
 Service 35 - APN Control List (ACL): False
diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok
index 7161b55..d40944c 100644
--- a/pysim-testdata/sysmoISIM-SJA2.ok
+++ b/pysim-testdata/sysmoISIM-SJA2.ok
@@ -2,7 +2,7 @@
 Reading ...
 ICCID: 8988211900000000004
 IMSI: 001010000000102
-USIM Service Table: ff33fffff300f3f003c00f3c0f0000
+Service Table: ff33fffff300f3f003c00f3c0f0000
 Service 96 - Non-Access Stratum configuration by USIM: False
 Service 95 - Support of UICC access to IMS: False
 Service 93 - Communication Control for IMS by USIM: True
diff --git a/pysim-testdata/sysmoUSIM-SJS1.ok b/pysim-testdata/sysmoUSIM-SJS1.ok
index 25f14d8..43fa43b 100644
--- a/pysim-testdata/sysmoUSIM-SJS1.ok
+++ b/pysim-testdata/sysmoUSIM-SJS1.ok
@@ -2,7 +2,7 @@
 Reading ...
 ICCID: 1122334455667788990
 IMSI: 001010000000102
-USIM Service Table: fff3fffff300f3f10fc0000c0f0000
+Service Table: fff3fffff300f3f10fc0000c0f0000
 Service 96 - Non-Access Stratum configuration by USIM: False
 Service 95 - Support of UICC access to IMS: False
 Service 93 - Communication Control for IMS by USIM: False
diff --git a/pysim-testdata/sysmosim-gr1.ok b/pysim-testdata/sysmosim-gr1.ok
index b26433b..f466f9f 100644
--- a/pysim-testdata/sysmosim-gr1.ok
+++ b/pysim-testdata/sysmosim-gr1.ok
@@ -2,7 +2,7 @@
 Reading ...
 ICCID: 1122334455667788990
 IMSI: 001010000000102
-USIM Service Table: fff3fff0f00000300000
+Service Table: fff3fff0f00000300000
 Service 21 - MSISDN: True
 Service 34 - Enabled Services Table: False
 Service 35 - APN Control List (ACL): False

-- 
To view, visit https://gerrit.osmocom.org/c/pysim/+/16991
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I6680e8c7f86326f72b98a33338e0dd5b58e55013
Gerrit-Change-Number: 16991
Gerrit-PatchSet: 1
Gerrit-Owner: herlesupreeth <herlesupreeth at gmail.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200124/b72793e6/attachment.htm>


More information about the gerrit-log mailing list