blob: 9fcdd930cb1b9a773f20222ddc22ea40a792aa07 [file] [log] [blame]
Supreeth Herle8b72c272020-03-22 08:55:50 +01001# -*- coding: utf-8 -*-
2
3"""
Harald Welte16ec96a2021-04-21 10:46:19 +02004Various constants from 3GPP TS 31.103 V16.1.0
Supreeth Herle8b72c272020-03-22 08:55:50 +01005"""
6
7#
8# Copyright (C) 2020 Supreeth Herle <herlesupreeth@gmail.com>
Harald Welteb2edd142021-01-08 23:29:35 +01009# Copyright (C) 2021 Harald Welte <laforge@osmocom.org>
Supreeth Herle8b72c272020-03-22 08:55:50 +010010#
11# This program is free software: you can redistribute it and/or modify
12# it under the terms of the GNU General Public License as published by
13# the Free Software Foundation, either version 2 of the License, or
14# (at your option) any later version.
15#
16# This program is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with this program. If not, see <http://www.gnu.org/licenses/>.
23#
24
Harald Welteb2edd142021-01-08 23:29:35 +010025from pySim.filesystem import *
26from pySim.utils import *
Harald Welte14105dc2021-05-31 08:48:51 +020027from pySim.tlv import *
Harald Welte35dfe822021-04-21 10:50:12 +020028from pySim.ts_51_011 import EF_AD, EF_SMS, EF_SMSS, EF_SMSR, EF_SMSP
Harald Weltee8947492022-02-10 10:33:20 +010029from pySim.ts_31_102 import ADF_USIM, EF_FromPreferred, EF_UServiceTable
Harald Welteb2edd142021-01-08 23:29:35 +010030import pySim.ts_102_221
Harald Weltefc4833e2021-05-02 21:46:06 +020031from pySim.ts_102_221 import EF_ARR
Harald Welteb2edd142021-01-08 23:29:35 +010032
Supreeth Herle8b72c272020-03-22 08:55:50 +010033# Mapping between ISIM Service Number and its description
34EF_IST_map = {
Harald Weltec91085e2022-02-10 18:05:45 +010035 1: 'P-CSCF address',
36 2: 'Generic Bootstrapping Architecture (GBA)',
37 3: 'HTTP Digest',
38 4: 'GBA-based Local Key Establishment Mechanism',
39 5: 'Support of P-CSCF discovery for IMS Local Break Out',
40 6: 'Short Message Storage (SMS)',
41 7: 'Short Message Status Reports (SMSR)',
42 8: 'Support for SM-over-IP including data download via SMS-PP as defined in TS 31.111 [31]',
43 9: 'Communication Control for IMS by ISIM',
44 10: 'Support of UICC access to IMS',
45 11: 'URI support by UICC',
46 12: 'Media Type support',
47 13: 'IMS call disconnection cause',
48 14: 'URI support for MO SHORT MESSAGE CONTROL',
49 15: 'MCPTT',
50 16: 'URI support for SMS-PP DOWNLOAD as defined in 3GPP TS 31.111 [31]',
51 17: 'From Preferred',
52 18: 'IMS configuration data',
53 19: 'XCAP Configuration Data',
54 20: 'WebRTC URI',
55 21: 'MuD and MiD configuration data',
Supreeth Herle8b72c272020-03-22 08:55:50 +010056}
herlesupreeth75c14c02020-12-23 09:41:07 +010057
58EF_ISIM_ADF_map = {
Harald Weltec91085e2022-02-10 18:05:45 +010059 'IST': '6F07',
60 'IMPI': '6F02',
61 'DOMAIN': '6F03',
62 'IMPU': '6F04',
63 'AD': '6FAD',
64 'ARR': '6F06',
65 'PCSCF': '6F09',
66 'GBAP': '6FD5',
67 'GBANL': '6FD7',
68 'NAFKCA': '6FDD',
69 'UICCIARI': '6FE7',
70 'SMS': '6F3C',
71 'SMSS': '6F43',
72 'SMSR': '6F47',
73 'SMSP': '6F42',
74 'FromPreferred': '6FF7',
75 'IMSConfigData': '6FF8',
76 'XCAPConfigData': '6FFC',
77 'WebRTCURI': '6FFA'
herlesupreeth75c14c02020-12-23 09:41:07 +010078}
Harald Welteb2edd142021-01-08 23:29:35 +010079
80# TS 31.103 Section 4.2.2
Harald Weltec91085e2022-02-10 18:05:45 +010081
82
Harald Welteb2edd142021-01-08 23:29:35 +010083class EF_IMPI(TransparentEF):
Harald Welte14105dc2021-05-31 08:48:51 +020084 class nai(BER_TLV_IE, tag=0x80):
85 _construct = GreedyString("utf8")
Harald Weltec91085e2022-02-10 18:05:45 +010086
Harald Welte6169c722022-02-12 09:05:15 +010087 def __init__(self, fid='6f02', sfid=0x02, name='EF.IMPI', desc='IMS private user identity', **kwargs):
88 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welte14105dc2021-05-31 08:48:51 +020089 self._tlv = EF_IMPI.nai
Harald Welteb2edd142021-01-08 23:29:35 +010090
91# TS 31.103 Section 4.2.3
Harald Weltec91085e2022-02-10 18:05:45 +010092
93
Harald Welteb2edd142021-01-08 23:29:35 +010094class EF_DOMAIN(TransparentEF):
Harald Welte14105dc2021-05-31 08:48:51 +020095 class domain(BER_TLV_IE, tag=0x80):
96 _construct = GreedyString("utf8")
Harald Weltec91085e2022-02-10 18:05:45 +010097
Harald Welte6169c722022-02-12 09:05:15 +010098 def __init__(self, fid='6f05', sfid=0x05, name='EF.DOMAIN', desc='Home Network Domain Name', **kwargs):
99 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welte14105dc2021-05-31 08:48:51 +0200100 self._tlv = EF_DOMAIN.domain
Harald Welteb2edd142021-01-08 23:29:35 +0100101
102# TS 31.103 Section 4.2.4
Harald Weltec91085e2022-02-10 18:05:45 +0100103
104
Harald Welteb2edd142021-01-08 23:29:35 +0100105class EF_IMPU(LinFixedEF):
Harald Welte14105dc2021-05-31 08:48:51 +0200106 class impu(BER_TLV_IE, tag=0x80):
107 _construct = GreedyString("utf8")
Harald Weltec91085e2022-02-10 18:05:45 +0100108
Harald Welte6169c722022-02-12 09:05:15 +0100109 def __init__(self, fid='6f04', sfid=0x04, name='EF.IMPU', desc='IMS public user identity', **kwargs):
110 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welte14105dc2021-05-31 08:48:51 +0200111 self._tlv = EF_IMPU.impu
Harald Welteb2edd142021-01-08 23:29:35 +0100112
Harald Welteb2edd142021-01-08 23:29:35 +0100113# TS 31.103 Section 4.2.8
Harald Weltec91085e2022-02-10 18:05:45 +0100114
115
Harald Welteb2edd142021-01-08 23:29:35 +0100116class EF_PCSCF(LinFixedEF):
Harald Welte6169c722022-02-12 09:05:15 +0100117 def __init__(self, fid='6f09', sfid=None, name='EF.P-CSCF', desc='P-CSCF Address', **kwargs):
118 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Weltec91085e2022-02-10 18:05:45 +0100119
Harald Welteb2edd142021-01-08 23:29:35 +0100120 def _decode_record_hex(self, raw_hex):
Philipp Maier86b09da2021-04-30 15:13:57 +0200121 addr, addr_type = dec_addr_tlv(raw_hex)
122 return {"addr": addr, "addr_type": addr_type}
Harald Weltec91085e2022-02-10 18:05:45 +0100123
Harald Welteb2edd142021-01-08 23:29:35 +0100124 def _encode_record_hex(self, json_in):
Philipp Maier86b09da2021-04-30 15:13:57 +0200125 addr = json_in['addr']
126 addr_type = json_in['addr_type']
127 return enc_addr_tlv(addr, addr_type)
Harald Welteb2edd142021-01-08 23:29:35 +0100128
129# TS 31.103 Section 4.2.9
Harald Weltec91085e2022-02-10 18:05:45 +0100130
131
Harald Welte89e59542021-04-02 21:33:13 +0200132class EF_GBABP(TransparentEF):
Harald Welte6169c722022-02-12 09:05:15 +0100133 def __init__(self, fid='6fd5', sfid=None, name='EF.GBABP', desc='GBA Bootstrapping', **kwargs):
134 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welteb2edd142021-01-08 23:29:35 +0100135
136# TS 31.103 Section 4.2.10
Harald Weltec91085e2022-02-10 18:05:45 +0100137
138
Harald Welteb2edd142021-01-08 23:29:35 +0100139class EF_GBANL(LinFixedEF):
Harald Welte6169c722022-02-12 09:05:15 +0100140 def __init__(self, fid='6fd7', sfid=None, name='EF.GBANL', desc='GBA NAF List', **kwargs):
141 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welteb2edd142021-01-08 23:29:35 +0100142
143# TS 31.103 Section 4.2.11
Harald Weltec91085e2022-02-10 18:05:45 +0100144
145
Harald Welteb2edd142021-01-08 23:29:35 +0100146class EF_NAFKCA(LinFixedEF):
Harald Welte6169c722022-02-12 09:05:15 +0100147 def __init__(self, fid='6fdd', sfid=None, name='EF.NAFKCA', desc='NAF Key Centre Address', **kwargs):
148 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welteb2edd142021-01-08 23:29:35 +0100149
150# TS 31.103 Section 4.2.16
Harald Weltec91085e2022-02-10 18:05:45 +0100151
152
Harald Welteb2edd142021-01-08 23:29:35 +0100153class EF_UICCIARI(LinFixedEF):
Harald Welte14105dc2021-05-31 08:48:51 +0200154 class iari(BER_TLV_IE, tag=0x80):
155 _construct = GreedyString("utf8")
Harald Weltec91085e2022-02-10 18:05:45 +0100156
Harald Welte6169c722022-02-12 09:05:15 +0100157 def __init__(self, fid='6fe7', sfid=None, name='EF.UICCIARI', desc='UICC IARI', **kwargs):
158 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welte14105dc2021-05-31 08:48:51 +0200159 self._tlv = EF_UICCIARI.iari
Harald Welteb2edd142021-01-08 23:29:35 +0100160
161# TS 31.103 Section 4.2.18
Harald Weltec91085e2022-02-10 18:05:45 +0100162
163
Harald Welte27881622021-04-21 11:16:31 +0200164class EF_IMSConfigData(BerTlvEF):
Harald Welte6169c722022-02-12 09:05:15 +0100165 def __init__(self, fid='6ff8', sfid=None, name='EF.IMSConfigData', desc='IMS Configuration Data', **kwargs):
166 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welteb2edd142021-01-08 23:29:35 +0100167
168# TS 31.103 Section 4.2.19
Harald Weltec91085e2022-02-10 18:05:45 +0100169
170
Harald Welte27881622021-04-21 11:16:31 +0200171class EF_XCAPConfigData(BerTlvEF):
Harald Welte6169c722022-02-12 09:05:15 +0100172 def __init__(self, fid='6ffc', sfid=None, name='EF.XCAPConfigData', desc='XCAP Configuration Data', **kwargs):
173 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welteb2edd142021-01-08 23:29:35 +0100174
175# TS 31.103 Section 4.2.20
Harald Weltec91085e2022-02-10 18:05:45 +0100176
177
Harald Welteb2edd142021-01-08 23:29:35 +0100178class EF_WebRTCURI(TransparentEF):
Harald Welte14105dc2021-05-31 08:48:51 +0200179 class uri(BER_TLV_IE, tag=0x80):
180 _construct = GreedyString("utf8")
Harald Weltec91085e2022-02-10 18:05:45 +0100181
Harald Welte6169c722022-02-12 09:05:15 +0100182 def __init__(self, fid='6ffa', sfid=None, name='EF.WebRTCURI', desc='WebRTC URI', **kwargs):
183 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welte14105dc2021-05-31 08:48:51 +0200184 self._tlv = EF_WebRTCURI.uri
Harald Welteb2edd142021-01-08 23:29:35 +0100185
Harald Welte16ec96a2021-04-21 10:46:19 +0200186# TS 31.103 Section 4.2.21
Harald Weltec91085e2022-02-10 18:05:45 +0100187
188
Harald Welte27881622021-04-21 11:16:31 +0200189class EF_MuDMiDConfigData(BerTlvEF):
Harald Welte16ec96a2021-04-21 10:46:19 +0200190 def __init__(self, fid='6ffe', sfid=None, name='EF.MuDMiDConfigData',
Harald Welte6169c722022-02-12 09:05:15 +0100191 desc='MuD and MiD Configuration Data', **kwargs):
192 super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs)
Harald Welte16ec96a2021-04-21 10:46:19 +0200193
Harald Welteb2edd142021-01-08 23:29:35 +0100194
195class ADF_ISIM(CardADF):
196 def __init__(self, aid='a0000000871004', name='ADF.ISIM', fid=None, sfid=None,
197 desc='ISIM Application'):
198 super().__init__(aid=aid, fid=fid, sfid=sfid, name=name, desc=desc)
199
200 files = [
201 EF_IMPI(),
202 EF_DOMAIN(),
203 EF_IMPU(),
204 EF_AD(),
Harald Weltefc4833e2021-05-02 21:46:06 +0200205 EF_ARR('6f06', 0x06),
Harald Weltec91085e2022-02-10 18:05:45 +0100206 EF_UServiceTable('6f07', 0x07, 'EF.IST',
207 'ISIM Service Table', {1, None}, EF_IST_map),
Harald Welte6169c722022-02-12 09:05:15 +0100208 EF_PCSCF(service=5),
209 EF_GBABP(service=2),
210 EF_GBANL(service=2),
211 EF_NAFKCA(service=2),
212 EF_SMS(service=(6,8)),
213 EF_SMSS(service=(6,8)),
214 EF_SMSR(service=(7,8)),
215 EF_SMSP(service=8),
216 EF_UICCIARI(service=10),
217 EF_FromPreferred(service=17),
218 EF_IMSConfigData(service=18),
219 EF_XCAPConfigData(service=19),
220 EF_WebRTCURI(service=20),
221 EF_MuDMiDConfigData(service=21),
Harald Weltec91085e2022-02-10 18:05:45 +0100222 ]
Harald Welteb2edd142021-01-08 23:29:35 +0100223 self.add_files(files)
Harald Welte15fae982021-04-10 10:22:27 +0200224 # add those commands to the general commands of a TransparentEF
225 self.shell_commands += [ADF_USIM.AddlShellCommands()]
Harald Welteb2edd142021-01-08 23:29:35 +0100226
227 def decode_select_response(self, data_hex):
Philipp Maier5998a3a2021-11-16 15:16:39 +0100228 return pySim.ts_102_221.CardProfileUICC.decode_select_response(data_hex)
Harald Welteb2edd142021-01-08 23:29:35 +0100229
Harald Weltec91085e2022-02-10 18:05:45 +0100230
Harald Welteb2edd142021-01-08 23:29:35 +0100231# TS 31.103 Section 7.1
232sw_isim = {
233 'Security management': {
234 '9862': 'Authentication error, incorrect MAC',
235 '9864': 'Authentication error, security context not supported',
236 }
237}
238
Harald Weltec91085e2022-02-10 18:05:45 +0100239
Philipp Maier57f65ee2021-10-18 14:09:02 +0200240class CardApplicationISIM(CardApplication):
241 def __init__(self):
Harald Weltec91085e2022-02-10 18:05:45 +0100242 super().__init__('ISIM', adf=ADF_ISIM(), sw=sw_isim)