laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/37524?usp=email )
Change subject: move parts of pySim.ts_31_103 to pySim.ts_31_103_shared ...................................................................... move parts of pySim.ts_31_103 to pySim.ts_31_103_shared This is requird to make some definitions available to USIM / ts_31_102 without introducing circular dependencies. Change-Id: I32e29f400d2da047e821bf732316b21805b5a1e2 --- M pySim/ts_31_103.py A pySim/ts_31_103_shared.py 2 files changed, 151 insertions(+), 113 deletions(-) git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/24/37524/1 diff --git a/pySim/ts_31_103.py b/pySim/ts_31_103.py index 2a71449..0de0d62 100644 --- a/pySim/ts_31_103.py +++ b/pySim/ts_31_103.py @@ -29,6 +29,7 @@ from pySim.ts_51_011 import EF_AD, EF_SMS, EF_SMSS, EF_SMSR, EF_SMSP from pySim.ts_31_102 import ADF_USIM, EF_FromPreferred from pySim.ts_31_102_telecom import EF_UServiceTable +from pySim.ts_31_103_shared import * import pySim.ts_102_221 from pySim.ts_102_221 import EF_ARR from pySim.construct import * @@ -190,119 +191,6 @@ super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) self._tlv = EF_NAFKCA.NafKeyCentreAddress -# TS 31.103 Section 4.2.16 -class EF_UICCIARI(LinFixedEF): - class iari(BER_TLV_IE, tag=0x80): - _construct = Utf8Adapter(GreedyBytes) - - def __init__(self, fid='6fe7', sfid=None, name='EF.UICCIARI', desc='UICC IARI', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._tlv = EF_UICCIARI.iari - -# TS 31.103 Section 4.2.18 -class EF_IMSConfigData(BerTlvEF): - class ImsConfigDataEncoding(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(Bytes(1)) - class ImsConfigData(BER_TLV_IE, tag=0x81): - _construct = GreedyString - # pylint: disable=undefined-variable - class ImsConfigDataCollection(TLV_IE_Collection, nested=[ImsConfigDataEncoding, ImsConfigData]): - pass - def __init__(self, fid='6ff8', sfid=None, name='EF.IMSConfigData', desc='IMS Configuration Data', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._tlv = EF_IMSConfigData.ImsConfigDataCollection - -# TS 31.103 Section 4.2.19 -class EF_XCAPConfigData(BerTlvEF): - class Access(BER_TLV_IE, tag=0x81): - pass - class ApplicationName(BER_TLV_IE, tag=0x82): - pass - class ProviderID(BER_TLV_IE, tag=0x83): - pass - class URI(BER_TLV_IE, tag=0x84): - pass - class XcapAuthenticationUserName(BER_TLV_IE, tag=0x85): - pass - class XcapAuthenticationPassword(BER_TLV_IE, tag=0x86): - pass - class XcapAuthenticationType(BER_TLV_IE, tag=0x87): - pass - class AddressType(BER_TLV_IE, tag=0x88): - pass - class Address(BER_TLV_IE, tag=0x89): - pass - class PDPAuthenticationType(BER_TLV_IE, tag=0x8a): - pass - class PDPAuthenticationName(BER_TLV_IE, tag=0x8b): - pass - class PDPAuthenticationSecret(BER_TLV_IE, tag=0x8c): - pass - - class AccessForXCAP(BER_TLV_IE, tag=0x81): - pass - class NumberOfXcapConnParPolicy(BER_TLV_IE, tag=0x82): - _construct = Int8ub - # pylint: disable=undefined-variable - class XcapConnParamsPolicyPart(BER_TLV_IE, tag=0xa1, nested=[Access, ApplicationName, ProviderID, URI, - XcapAuthenticationUserName, XcapAuthenticationPassword, - XcapAuthenticationType, AddressType, Address, PDPAuthenticationType, - PDPAuthenticationName, PDPAuthenticationSecret]): - pass - class XcapConnParamsPolicy(BER_TLV_IE, tag=0xa0, nested=[AccessForXCAP, NumberOfXcapConnParPolicy, XcapConnParamsPolicyPart]): - pass - class XcapConnParamsPolicyDO(BER_TLV_IE, tag=0x80, nested=[XcapConnParamsPolicy]): - pass - def __init__(self, fid='6ffc', sfid=None, name='EF.XCAPConfigData', desc='XCAP Configuration Data', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._tlv = EF_XCAPConfigData.XcapConnParamsPolicy - -# TS 31.103 Section 4.2.20 -class EF_WebRTCURI(TransparentEF): - class uri(BER_TLV_IE, tag=0x80): - _construct = Utf8Adapter(GreedyBytes) - - def __init__(self, fid='6ffa', sfid=None, name='EF.WebRTCURI', desc='WebRTC URI', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._tlv = EF_WebRTCURI.uri - -# TS 31.103 Section 4.2.21 -class EF_MuDMiDConfigData(BerTlvEF): - class MudMidConfigDataEncoding(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(Bytes(1)) - class MudMidConfigData(BER_TLV_IE, tag=0x81): - _construct = GreedyString - # pylint: disable=undefined-variable - class MudMidConfigDataCollection(TLV_IE_Collection, nested=[MudMidConfigDataEncoding, MudMidConfigData]): - pass - def __init__(self, fid='6ffe', sfid=None, name='EF.MuDMiDConfigData', - desc='MuD and MiD Configuration Data', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._tlv = EF_MuDMiDConfigData.MudMidConfigDataCollection - -# TS 31.103 Section 4.2.22 -class EF_AC_GBAUAPI(LinFixedEF): - """The use of this EF is eescribed in 3GPP TS 31.130""" - class AppletNafAccessControl(BER_TLV_IE, tag=0x80): - # the use of Int8ub as length field in Prefixed is strictly speaking incorrect, as it is a BER-TLV - # length field whihc will consume two bytes from length > 127 bytes. However, AIDs and NAF IDs can - # safely be assumed shorter than that - _construct = Struct('aid'/Prefixed(Int8ub, GreedyBytes), - 'naf_id'/Prefixed(Int8ub, GreedyBytes)) - def __init__(self, fid='6f0a', sfid=None, name='EF.GBAUAPI', - desc='Access Control to GBA_U_API', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._tlv = EF_AC_GBAUAPI.AppletNafAccessControl - -# TS 31.103 Section 4.2.23 -class EF_IMSDCI(TransparentEF): - """See Management object as defined in 3GPP TS 24.275.""" - def __init__(self, fid='6f0b', sfid=None, name='EF.IMSDCI', desc='IMS Data Channel Indication', **kwargs): - super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._construct = Enum(Byte, ims_dc_not_allowed=0x00, - ims_dc_allowed_after_ims_session=0x01, - ims_dc_allowed_simultaneous_ims_session=0x02) - class ADF_ISIM(CardADF): def __init__(self, aid='a0000000871004', has_fs=True, name='ADF.ISIM', fid=None, sfid=None, diff --git a/pySim/ts_31_103_shared.py b/pySim/ts_31_103_shared.py new file mode 100644 index 0000000..98b5954 --- /dev/null +++ b/pySim/ts_31_103_shared.py @@ -0,0 +1,138 @@ +""" +Definitions from 3GPP TS 31.103 V18.1.0 which are shared by both USIM (31.102) and ISIM (31.103) and +hence need to be in a separate python module to avoid circular dependencies. +""" + +# Copyright (C) 2021-2024 Harald Welte <lafo...@osmocom.org> +# +# 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/>. +# + +from construct import Struct, Switch, Bytes, GreedyString, GreedyBytes, Int8ub, Prefixed, Enum, Byte +from pySim.construct import HexAdapter, Utf8Adapter +from pySim.filesystem import * +from pySim.tlv import BER_TLV_IE, TLV_IE_Collection + +# TS 31.103 Section 4.2.16 +class EF_UICCIARI(LinFixedEF): + class iari(BER_TLV_IE, tag=0x80): + _construct = Utf8Adapter(GreedyBytes) + + def __init__(self, fid='6fe7', sfid=None, name='EF.UICCIARI', desc='UICC IARI', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._tlv = EF_UICCIARI.iari + +# TS 31.103 Section 4.2.18 +class EF_IMSConfigData(BerTlvEF): + class ImsConfigDataEncoding(BER_TLV_IE, tag=0x80): + _construct = HexAdapter(Bytes(1)) + class ImsConfigData(BER_TLV_IE, tag=0x81): + _construct = GreedyString + # pylint: disable=undefined-variable + class ImsConfigDataCollection(TLV_IE_Collection, nested=[ImsConfigDataEncoding, ImsConfigData]): + pass + def __init__(self, fid='6ff8', sfid=None, name='EF.IMSConfigData', desc='IMS Configuration Data', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._tlv = EF_IMSConfigData.ImsConfigDataCollection + +# TS 31.103 Section 4.2.19 +class EF_XCAPConfigData(BerTlvEF): + class Access(BER_TLV_IE, tag=0x81): + pass + class ApplicationName(BER_TLV_IE, tag=0x82): + pass + class ProviderID(BER_TLV_IE, tag=0x83): + pass + class URI(BER_TLV_IE, tag=0x84): + pass + class XcapAuthenticationUserName(BER_TLV_IE, tag=0x85): + pass + class XcapAuthenticationPassword(BER_TLV_IE, tag=0x86): + pass + class XcapAuthenticationType(BER_TLV_IE, tag=0x87): + pass + class AddressType(BER_TLV_IE, tag=0x88): + pass + class Address(BER_TLV_IE, tag=0x89): + pass + class PDPAuthenticationType(BER_TLV_IE, tag=0x8a): + pass + class PDPAuthenticationName(BER_TLV_IE, tag=0x8b): + pass + class PDPAuthenticationSecret(BER_TLV_IE, tag=0x8c): + pass + + class AccessForXCAP(BER_TLV_IE, tag=0x81): + pass + class NumberOfXcapConnParPolicy(BER_TLV_IE, tag=0x82): + _construct = Int8ub + # pylint: disable=undefined-variable + class XcapConnParamsPolicyPart(BER_TLV_IE, tag=0xa1, nested=[Access, ApplicationName, ProviderID, URI, + XcapAuthenticationUserName, XcapAuthenticationPassword, + XcapAuthenticationType, AddressType, Address, PDPAuthenticationType, + PDPAuthenticationName, PDPAuthenticationSecret]): + pass + class XcapConnParamsPolicy(BER_TLV_IE, tag=0xa0, nested=[AccessForXCAP, NumberOfXcapConnParPolicy, XcapConnParamsPolicyPart]): + pass + class XcapConnParamsPolicyDO(BER_TLV_IE, tag=0x80, nested=[XcapConnParamsPolicy]): + pass + def __init__(self, fid='6ffc', sfid=None, name='EF.XCAPConfigData', desc='XCAP Configuration Data', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._tlv = EF_XCAPConfigData.XcapConnParamsPolicy + +# TS 31.103 Section 4.2.20 +class EF_WebRTCURI(TransparentEF): + class uri(BER_TLV_IE, tag=0x80): + _construct = Utf8Adapter(GreedyBytes) + + def __init__(self, fid='6ffa', sfid=None, name='EF.WebRTCURI', desc='WebRTC URI', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._tlv = EF_WebRTCURI.uri + +# TS 31.103 Section 4.2.21 +class EF_MuDMiDConfigData(BerTlvEF): + class MudMidConfigDataEncoding(BER_TLV_IE, tag=0x80): + _construct = HexAdapter(Bytes(1)) + class MudMidConfigData(BER_TLV_IE, tag=0x81): + _construct = GreedyString + # pylint: disable=undefined-variable + class MudMidConfigDataCollection(TLV_IE_Collection, nested=[MudMidConfigDataEncoding, MudMidConfigData]): + pass + def __init__(self, fid='6ffe', sfid=None, name='EF.MuDMiDConfigData', + desc='MuD and MiD Configuration Data', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._tlv = EF_MuDMiDConfigData.MudMidConfigDataCollection + +# TS 31.103 Section 4.2.22 +class EF_AC_GBAUAPI(LinFixedEF): + """The use of this EF is eescribed in 3GPP TS 31.130""" + class AppletNafAccessControl(BER_TLV_IE, tag=0x80): + # the use of Int8ub as length field in Prefixed is strictly speaking incorrect, as it is a BER-TLV + # length field whihc will consume two bytes from length > 127 bytes. However, AIDs and NAF IDs can + # safely be assumed shorter than that + _construct = Struct('aid'/Prefixed(Int8ub, GreedyBytes), + 'naf_id'/Prefixed(Int8ub, GreedyBytes)) + def __init__(self, fid='6f0a', sfid=None, name='EF.GBAUAPI', + desc='Access Control to GBA_U_API', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._tlv = EF_AC_GBAUAPI.AppletNafAccessControl + +# TS 31.103 Section 4.2.23 +class EF_IMSDCI(TransparentEF): + """See Management object as defined in 3GPP TS 24.275.""" + def __init__(self, fid='6f0b', sfid=None, name='EF.IMSDCI', desc='IMS Data Channel Indication', **kwargs): + super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Enum(Byte, ims_dc_not_allowed=0x00, + ims_dc_allowed_after_ims_session=0x01, + ims_dc_allowed_simultaneous_ims_session=0x02) -- To view, visit https://gerrit.osmocom.org/c/pysim/+/37524?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I32e29f400d2da047e821bf732316b21805b5a1e2 Gerrit-Change-Number: 37524 Gerrit-PatchSet: 1 Gerrit-Owner: laforge <lafo...@osmocom.org> Gerrit-MessageType: newchange