laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/40237?usp=email )
Change subject: Get rid of [now] superfluous HexAdapter ......................................................................
Get rid of [now] superfluous HexAdapter
With the introduction of using osmocom.construct.{Bytes,GreedyBytes} in Change-Id I1c8df6350c68aa408ec96ff6cd1e405ceb1a4fbb we don't have a need for wrapping each instance of Bytes or GreedyBytes into a HexAdapter anymore. The osmocom.construct.{Bytes,GreedyBytes} will automatically perform the related hex-string-to-bytes conversion if needed - and during printing we have osmocom.utils.JsonEncoder that makes sure to convert any bytes type to a hex-string.
Change-Id: I9c77e420c314f5e74458628dc4e767eab6d97123 --- M pySim/ara_m.py M pySim/cat.py M pySim/cdma_ruim.py M pySim/euicc.py M pySim/global_platform/__init__.py M pySim/global_platform/install_param.py M pySim/gsm_r.py M pySim/sms.py M pySim/sysmocom_sja2.py M pySim/ts_102_221.py M pySim/ts_102_310.py M pySim/ts_31_102.py M pySim/ts_31_103.py M pySim/ts_31_103_shared.py M pySim/ts_51_011.py M tests/unittests/test_utils.py 16 files changed, 204 insertions(+), 199 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/37/40237/1
diff --git a/pySim/ara_m.py b/pySim/ara_m.py index 9079a97..479ebeb 100644 --- a/pySim/ara_m.py +++ b/pySim/ara_m.py @@ -39,7 +39,7 @@
class AidRefDO(BER_TLV_IE, tag=0x4f): # GPD_SPE_013 v1.1 Table 6-3 - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class AidRefEmptyDO(BER_TLV_IE, tag=0xc0): @@ -49,7 +49,7 @@
class DevAppIdRefDO(BER_TLV_IE, tag=0xc1): # GPD_SPE_013 v1.1 Table 6-4 - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class PkgRefDO(BER_TLV_IE, tag=0xca): @@ -116,7 +116,7 @@ class PermArDO(BER_TLV_IE, tag=0xdb): # Android UICC Carrier Privileges specific extension, see https://source.android.com/devices/tech/config/uicc # based on Table 6-8 of GlobalPlatform Device API Access Control v1.0 - _construct = Struct('permissions'/HexAdapter(Bytes(8))) + _construct = Struct('permissions'/Bytes(8))
class ArDO(BER_TLV_IE, tag=0xe3, nested=[ApduArDO, NfcArDO, PermArDO]): @@ -141,7 +141,7 @@
class ResponseRefreshTagDO(BER_TLV_IE, tag=0xdf20): # GPD_SPE_013 v1.1 Table 4-4 - _construct = Struct('refresh_tag'/HexAdapter(Bytes(8))) + _construct = Struct('refresh_tag'/Bytes(8))
class DeviceInterfaceVersionDO(BER_TLV_IE, tag=0xe6): diff --git a/pySim/cat.py b/pySim/cat.py index ae4e06e..2d4b41b 100644 --- a/pySim/cat.py +++ b/pySim/cat.py @@ -24,8 +24,8 @@ from construct import Struct, Enum, BitStruct, this from construct import Switch, GreedyRange, FlagsEnum from osmocom.tlv import TLV_IE, COMPR_TLV_IE, BER_TLV_IE, TLV_IE_Collection -from osmocom.construct import PlmnAdapter, BcdAdapter, HexAdapter, GsmStringAdapter, TonNpi, GsmString, Bytes, GreedyBytes -from osmocom.utils import b2h +from osmocom.construct import PlmnAdapter, BcdAdapter, GsmStringAdapter, TonNpi, GsmString, Bytes, GreedyBytes +from osmocom.utils import b2h, h2b from pySim.utils import dec_xplmn_w_act
# Tag values as per TS 101 220 Table 7.23 @@ -255,24 +255,24 @@ 'launch_browser_generic_error': AddlInfoLaunchBrowser, 'bearer_independent_protocol_error': AddlInfoBip, 'frames_error': AddlInfoFrames - }, default=HexAdapter(GreedyBytes))) + }, default=GreedyBytes))
# TS 102 223 Section 8.13 + TS 31.111 Section 8.13 class SMS_TPDU(COMPR_TLV_IE, tag=0x8B): - _construct = Struct('tpdu'/HexAdapter(GreedyBytes)) + _construct = Struct('tpdu'/GreedyBytes)
# TS 31.111 Section 8.14 class SsString(COMPR_TLV_IE, tag=0x89): - _construct = Struct('ton_npi'/TonNpi, 'ss_string'/HexAdapter(GreedyBytes)) + _construct = Struct('ton_npi'/TonNpi, 'ss_string'/GreedyBytes)
# TS 102 223 Section 8.15 class TextString(COMPR_TLV_IE, tag=0x8D): _test_de_encode = [ - ( '8d090470617373776f7264', {'dcs': 4, 'text_string': '70617373776f7264'} ), + ( '8d090470617373776f7264', {'dcs': 4, 'text_string': b'password'} ) ] _construct = Struct('dcs'/Int8ub, # TS 03.38 - 'text_string'/HexAdapter(GreedyBytes)) + 'text_string'/GreedyBytes)
# TS 102 223 Section 8.16 class Tone(COMPR_TLV_IE, tag=0x8E): @@ -308,11 +308,11 @@ # TS 31 111 Section 8.17 class USSDString(COMPR_TLV_IE, tag=0x8A): _construct = Struct('dcs'/Int8ub, - 'ussd_string'/HexAdapter(GreedyBytes)) + 'ussd_string'/GreedyBytes)
# TS 102 223 Section 8.18 class FileList(COMPR_TLV_IE, tag=0x92): - FileId=HexAdapter(Bytes(2)) + FileId=Bytes(2) _construct = Struct('number_of_files'/Int8ub, 'files'/GreedyRange(FileId))
@@ -335,7 +335,7 @@ # TS 102 223 Section 8.23 class DefaultText(COMPR_TLV_IE, tag=0x97): _construct = Struct('dcs'/Int8ub, - 'text_string'/HexAdapter(GreedyBytes)) + 'text_string'/GreedyBytes)
# TS 102 223 Section 8.24 class ItemsNextActionIndicator(COMPR_TLV_IE, tag=0x98): @@ -394,7 +394,7 @@
# TS 102 223 Section 8.35 class CApdu(COMPR_TLV_IE, tag=0xA2): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.37 class TimerIdentifier(COMPR_TLV_IE, tag=0xA4): @@ -406,7 +406,7 @@
# TS 102 223 Section 8.40 class AtCommand(COMPR_TLV_IE, tag=0xA8): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.43 class ImmediateResponse(COMPR_TLV_IE, tag=0xAB): @@ -418,7 +418,7 @@
# TS 102 223 Section 8.45 class Language(COMPR_TLV_IE, tag=0xAD): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 31.111 Section 8.46 class TimingAdvance(COMPR_TLV_IE, tag=0xC6): @@ -440,7 +440,7 @@
# TS 102 223 Section 8.50 class ProvisioningFileReference(COMPR_TLV_IE, tag=0xB3): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.51 class BrowserTerminationCause(COMPR_TLV_IE, tag=0xB4): @@ -449,7 +449,7 @@ # TS 102 223 Section 8.52 class BearerDescription(COMPR_TLV_IE, tag=0xB5): _test_de_encode = [ - ( 'b50103', {'bearer_parameters': '', 'bearer_type': 'default'} ), + ( 'b50103', {'bearer_parameters': b'', 'bearer_type': 'default'} ), ] # TS 31.111 Section 8.52.1 BearerParsCs = Struct('data_rate'/Int8ub, @@ -492,11 +492,11 @@ 'packet_grps_utran_eutran': BearerParsPacket, 'packet_with_extd_params': BearerParsPacketExt, 'ng_ran': BearerParsNgRan, - }, default=HexAdapter(GreedyBytes))) + }, default=GreedyBytes))
# TS 102 223 Section 8.53 class ChannelData(COMPR_TLV_IE, tag = 0xB6): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.54 class ChannelDataLength(COMPR_TLV_IE, tag = 0xB7): @@ -510,15 +510,15 @@ class ChannelStatus(COMPR_TLV_IE, tag = 0xB8): # complex decoding, depends on out-of-band context/knowledge :( # for default / TCP Client mode: bit 8 of first byte indicates connected, 3 LSB indicate channel nr - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.58 class OtherAddress(COMPR_TLV_IE, tag = 0xBE): _test_de_encode = [ - ( 'be052101020304', {'address': '01020304', 'type_of_address': 'ipv4'} ), + ( 'be052101020304', {'address': h2b('01020304'), 'type_of_address': 'ipv4'} ), ] _construct = Struct('type_of_address'/Enum(Int8ub, ipv4=0x21, ipv6=0x57), - 'address'/HexAdapter(GreedyBytes)) + 'address'/GreedyBytes)
# TS 102 223 Section 8.59 class UiccTransportLevel(COMPR_TLV_IE, tag = 0xBC): @@ -532,7 +532,7 @@
# TS 102 223 Section 8.60 class Aid(COMPR_TLV_IE, tag=0xAF): - _construct = Struct('aid'/HexAdapter(GreedyBytes)) + _construct = Struct('aid'/GreedyBytes)
# TS 102 223 Section 8.61 class AccessTechnology(COMPR_TLV_IE, tag=0xBF): @@ -546,35 +546,35 @@ BearerTechId = Enum(Int8ub, technology_independent=0, bluetooth=1, irda=2, rs232=3, usb=4) _construct = Struct('local_bearer_technology'/BearerTechId, 'service_identifier'/Int8ub, - 'service_record'/HexAdapter(GreedyBytes)) + 'service_record'/GreedyBytes)
# TS 102 223 Section 8.64 class DeviceFilter(COMPR_TLV_IE, tag=0xC2): _construct = Struct('local_bearer_technology'/ServiceRecord.BearerTechId, - 'device_filter'/HexAdapter(GreedyBytes)) + 'device_filter'/GreedyBytes)
# TS 102 223 Section 8.65 class ServiceSearchIE(COMPR_TLV_IE, tag=0xC3): _construct = Struct('local_bearer_technology'/ServiceRecord.BearerTechId, - 'service_search'/HexAdapter(GreedyBytes)) + 'service_search'/GreedyBytes)
# TS 102 223 Section 8.66 class AttributeInformation(COMPR_TLV_IE, tag=0xC4): _construct = Struct('local_bearer_technology'/ServiceRecord.BearerTechId, - 'attribute_information'/HexAdapter(GreedyBytes)) + 'attribute_information'/GreedyBytes)
# TS 102 223 Section 8.68 class RemoteEntityAddress(COMPR_TLV_IE, tag=0xC9): _construct = Struct('coding_type'/Enum(Int8ub, ieee802_16=0, irda=1), - 'address'/HexAdapter(GreedyBytes)) + 'address'/GreedyBytes)
# TS 102 223 Section 8.70 class NetworkAccessName(COMPR_TLV_IE, tag=0xC7): _test_de_encode = [ - ( 'c704036e6161', '036e6161' ), + ( 'c704036e6161', h2b('036e6161') ), ] - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.72 class TextAttribute(COMPR_TLV_IE, tag=0xD0): @@ -618,15 +618,15 @@
# TS 102 223 Section 8.82 class MultimediaMessageReference(COMPR_TLV_IE, tag=0xEA): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.83 class MultimediaMessageIdentifier(COMPR_TLV_IE, tag=0xEB): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.85 class MmContentIdentifier(COMPR_TLV_IE, tag=0xEE): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.89 class ActivateDescriptor(COMPR_TLV_IE, tag=0xFB): @@ -649,7 +649,7 @@ # TS 31.111 Section 8.91 class RoutingAreaIdentification(COMPR_TLV_IE, tag=0xF3): _construct = Struct('mcc_mnc'/PlmnAdapter(Bytes(3)), - 'lac'/HexAdapter(Bytes(2)), + 'lac'/Bytes(2), 'rac'/Int8ub)
# TS 31.111 Section 8.92 @@ -709,15 +709,15 @@
# TS 102 223 Section 8.99 class EncryptedTlvList(COMPR_TLV_IE, tag=0xA2): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.100 class Mac(COMPR_TLV_IE, tag=0xE0): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.101 class SaTemplate(COMPR_TLV_IE, tag=0xA3): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.103 class RefreshEnforcementPolicy(COMPR_TLV_IE, tag=0xBA): @@ -725,7 +725,7 @@
# TS 102 223 Section 8.104 class DnsServerAddress(COMPR_TLV_IE, tag=0xC0): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# TS 102 223 Section 8.105 class SupportedRadioAccessTechnologies(COMPR_TLV_IE, tag=0xB4): diff --git a/pySim/cdma_ruim.py b/pySim/cdma_ruim.py index f20e77c..0aac683 100644 --- a/pySim/cdma_ruim.py +++ b/pySim/cdma_ruim.py @@ -115,7 +115,7 @@ '''3.4.33 Administrative Data'''
_test_de_encode = [ - ( "000000", { 'ms_operation_mode' : 'normal', 'additional_info' : '0000', 'rfu' : '' } ), + ( "000000", { 'ms_operation_mode' : 'normal', 'additional_info' : b'\x00\x00', 'rfu' : b'' } ), ] _test_no_pad = True
@@ -134,9 +134,9 @@ # Byte 1: Display Condition 'ms_operation_mode'/Enum(Byte, self.OP_MODE), # Bytes 2-3: Additional information - 'additional_info'/HexAdapter(Bytes(2)), + 'additional_info'/Bytes(2), # Bytes 4..: RFU - 'rfu'/HexAdapter(GreedyBytesRFU), + 'rfu'/GreedyBytesRFU, )
diff --git a/pySim/euicc.py b/pySim/euicc.py index 64eb29c..196f5fb 100644 --- a/pySim/euicc.py +++ b/pySim/euicc.py @@ -120,7 +120,7 @@
# SGP.22 Section 5.7.7: GetEUICCChallenge class EuiccChallenge(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(Bytes(16)) + _construct = Bytes(16) class GetEuiccChallenge(BER_TLV_IE, tag=0xbf2e, nested=[EuiccChallenge]): pass
@@ -128,7 +128,7 @@ class SVN(BER_TLV_IE, tag=0x82): _construct = VersionType class SubjectKeyIdentifier(BER_TLV_IE, tag=0x04): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class EuiccCiPkiListForVerification(BER_TLV_IE, tag=0xa9, nested=[SubjectKeyIdentifier]): pass class EuiccCiPkiListForSigning(BER_TLV_IE, tag=0xaa, nested=[SubjectKeyIdentifier]): @@ -140,15 +140,15 @@ class EuiccFirmwareVer(BER_TLV_IE, tag=0x83): _construct = VersionType class ExtCardResource(BER_TLV_IE, tag=0x84): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class UiccCapability(BER_TLV_IE, tag=0x85): - _construct = HexAdapter(GreedyBytes) # FIXME + _construct = GreedyBytes # FIXME class TS102241Version(BER_TLV_IE, tag=0x86): _construct = VersionType class GlobalPlatformVersion(BER_TLV_IE, tag=0x87): _construct = VersionType class RspCapability(BER_TLV_IE, tag=0x88): - _construct = HexAdapter(GreedyBytes) # FIXME + _construct = GreedyBytes # FIXME class EuiccCategory(BER_TLV_IE, tag=0x8b): _construct = Enum(Int8ub, other=0, basicEuicc=1, mediumEuicc=2, contactlessEuicc=3) class PpVersion(BER_TLV_IE, tag=0x04): @@ -211,7 +211,7 @@ class ProfileInfoListReq(BER_TLV_IE, tag=0xbf2d, nested=[TagList]): # FIXME: SearchCriteria pass class IsdpAid(BER_TLV_IE, tag=0x4f): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class ProfileState(BER_TLV_IE, tag=0x9f70): _construct = Enum(Int8ub, disabled=0, enabled=1) class ProfileNickname(BER_TLV_IE, tag=0x90): @@ -281,7 +281,7 @@
# SGP.22 Section 5.7.20 GetEID class EidValue(BER_TLV_IE, tag=0x5a): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class GetEuiccData(BER_TLV_IE, tag=0xbf3e, nested=[TagList, EidValue]): pass
diff --git a/pySim/global_platform/__init__.py b/pySim/global_platform/__init__.py index d82bd08..bfd5e5d 100644 --- a/pySim/global_platform/__init__.py +++ b/pySim/global_platform/__init__.py @@ -318,7 +318,7 @@
# GlobalPlatform v2.3.1 Section 11.3.3.1.3 class ApplicationAID(BER_TLV_IE, tag=0x4f): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class ApplicationTemplate(BER_TLV_IE, tag=0x61, ntested=[ApplicationAID]): pass class ListOfApplications(BER_TLV_IE, tag=0x2f00, nested=[ApplicationTemplate]): @@ -425,10 +425,10 @@ pass
class IssuerIdentificationNumber(BER_TLV_IE, tag=0x42): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class CardImageNumber(BER_TLV_IE, tag=0x45): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class SequenceCounterOfDefaultKvn(BER_TLV_IE, tag=0xc1): _construct = GreedyInteger() @@ -487,7 +487,7 @@
# Section 11.4.3.1 Table 11-36 class ExecutableLoadFileAID(BER_TLV_IE, tag=0xc4): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# Section 11.4.3.1 Table 11-36 class ExecutableLoadFileVersionNumber(BER_TLV_IE, tag=0xce): @@ -495,15 +495,15 @@ # specification. It shall consist of the version information contained in the original Load File: on a # Java Card based card, this version number represents the major and minor version attributes of the # original Load File Data Block. - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# Section 11.4.3.1 Table 11-36 class ExecutableModuleAID(BER_TLV_IE, tag=0x84): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# Section 11.4.3.1 Table 11-36 class AssociatedSecurityDomainAID(BER_TLV_IE, tag=0xcc): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# Section 11.4.3.1 Table 11-36 class GpRegistryRelatedData(BER_TLV_IE, tag=0xe3, nested=[ApplicationAID, LifeCycleState, Privileges, @@ -640,8 +640,8 @@
# Table 11-68: Key Data Field - Format 1 (Basic Format) KeyDataBasic = GreedyRange(Struct('key_type'/KeyType, - 'kcb'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'kcv'/HexAdapter(Prefixed(Int8ub, GreedyBytes)))) + 'kcb'/Prefixed(Int8ub, GreedyBytes), + 'kcv'/Prefixed(Int8ub, GreedyBytes)))
def put_key(self, old_kvn:int, kvn: int, kid: int, key_dict: dict) -> bytes: """Perform the GlobalPlatform PUT KEY command in order to store a new key on the card. @@ -704,7 +704,7 @@ def set_status(self, scope:str, status:str, aid:Hexstr = ''): SetStatus = Struct(Const(0x80, Byte), Const(0xF0, Byte), 'scope'/SetStatusScope, 'status'/CLifeCycleState, - 'aid'/HexAdapter(Prefixed(Int8ub, COptional(GreedyBytes)))) + 'aid'/Prefixed(Int8ub, COptional(GreedyBytes))) apdu = build_construct(SetStatus, {'scope':scope, 'status':status, 'aid':aid}) _data, _sw = self._cmd.lchan.scc.send_apdu_checksw(b2h(apdu))
@@ -738,12 +738,12 @@ @cmd2.with_argparser(inst_inst_parser) def do_install_for_install(self, opts): """Perform GlobalPlatform INSTALL [for install] command in order to install an application.""" - InstallForInstallCD = Struct('load_file_aid'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'module_aid'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'application_aid'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), + InstallForInstallCD = Struct('load_file_aid'/Prefixed(Int8ub, GreedyBytes), + 'module_aid'/Prefixed(Int8ub, GreedyBytes), + 'application_aid'/Prefixed(Int8ub, GreedyBytes), 'privileges'/Prefixed(Int8ub, Privileges._construct), - 'install_parameters'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'install_token'/HexAdapter(Prefixed(Int8ub, GreedyBytes))) + 'install_parameters'/Prefixed(Int8ub, GreedyBytes), + 'install_token'/Prefixed(Int8ub, GreedyBytes)) p1 = 0x04 if opts.make_selectable: p1 |= 0x08 @@ -770,11 +770,11 @@ """Perform GlobalPlatform INSTALL [for load] command in order to prepare to load an application.""" if opts.load_token != '' and opts.load_file_hash == '': raise ValueError('Load File Data Block Hash is mandatory if a Load Token is present') - InstallForLoadCD = Struct('load_file_aid'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'security_domain_aid'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'load_file_hash'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'load_parameters'/HexAdapter(Prefixed(Int8ub, GreedyBytes)), - 'load_token'/HexAdapter(Prefixed(Int8ub, GreedyBytes))) + InstallForLoadCD = Struct('load_file_aid'/Prefixed(Int8ub, GreedyBytes), + 'security_domain_aid'/Prefixed(Int8ub, GreedyBytes), + 'load_file_hash'/Prefixed(Int8ub, GreedyBytes), + 'load_parameters'/Prefixed(Int8ub, GreedyBytes), + 'load_token'/Prefixed(Int8ub, GreedyBytes)) ifl_bytes = build_construct(InstallForLoadCD, vars(opts)) self.install(0x02, 0x00, b2h(ifl_bytes))
diff --git a/pySim/global_platform/install_param.py b/pySim/global_platform/install_param.py index 45d1d1a..ec0ef66 100644 --- a/pySim/global_platform/install_param.py +++ b/pySim/global_platform/install_param.py @@ -23,7 +23,7 @@
class AppSpecificParams(BER_TLV_IE, tag=0xC9): # GPD_SPE_013, table 11-49 - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class VolatileMemoryQuota(BER_TLV_IE, tag=0xC7): # GPD_SPE_013, table 11-49 @@ -36,7 +36,7 @@ class StkParameter(BER_TLV_IE, tag=0xCA): # GPD_SPE_013, table 11-49 # ETSI TS 102 226, section 8.2.1.3.2.1 - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class SystemSpecificParams(BER_TLV_IE, tag=0xEF, nested=[VolatileMemoryQuota, NonVolatileMemoryQuota, StkParameter]): # GPD_SPE_013 v1.1 Table 6-5 diff --git a/pySim/gsm_r.py b/pySim/gsm_r.py index 5798df7..9a71119 100644 --- a/pySim/gsm_r.py +++ b/pySim/gsm_r.py @@ -184,13 +184,13 @@ class EF_Shunting(TransparentEF): """Section 7.6""" _test_de_encode = [ - ( "03f8ffffff000000", { "common_gid": 3, "shunting_gid": "f8ffffff000000" } ), + ( "03f8ffffff000000", { "common_gid": 3, "shunting_gid": h2b("f8ffffff000000") } ), ] def __init__(self): super().__init__(fid='6ff4', sfid=None, name='EF.Shunting', desc='Shunting', size=(8, 8)) self._construct = Struct('common_gid'/Int8ub, - 'shunting_gid'/HexAdapter(Bytes(7))) + 'shunting_gid'/Bytes(7))
class EF_GsmrPLMN(LinFixedEF): @@ -199,13 +199,13 @@ ( "22f860f86f8d6f8e01", { "plmn": "228-06", "class_of_network": { "supported": { "vbs": True, "vgcs": True, "emlpp": True, "fn": True, "eirene": True }, "preference": 0 }, - "ic_incoming_ref_tbl": "6f8d", "outgoing_ref_tbl": "6f8e", - "ic_table_ref": "01" } ), + "ic_incoming_ref_tbl": h2b("6f8d"), "outgoing_ref_tbl": h2b("6f8e"), + "ic_table_ref": h2b("01") } ), ( "22f810416f8d6f8e02", { "plmn": "228-01", "class_of_network": { "supported": { "vbs": False, "vgcs": False, "emlpp": False, "fn": True, "eirene": False }, "preference": 1 }, - "ic_incoming_ref_tbl": "6f8d", "outgoing_ref_tbl": "6f8e", - "ic_table_ref": "02" } ), + "ic_incoming_ref_tbl": h2b("6f8d"), "outgoing_ref_tbl": h2b("6f8e"), + "ic_table_ref": h2b("02") } ), ] def __init__(self): super().__init__(fid='6ff5', sfid=None, name='EF.GsmrPLMN', @@ -213,24 +213,24 @@ self._construct = Struct('plmn'/PlmnAdapter(Bytes(3)), 'class_of_network'/BitStruct('supported'/FlagsEnum(BitsInteger(5), vbs=1, vgcs=2, emlpp=4, fn=8, eirene=16), 'preference'/BitsInteger(3)), - 'ic_incoming_ref_tbl'/HexAdapter(Bytes(2)), - 'outgoing_ref_tbl'/HexAdapter(Bytes(2)), - 'ic_table_ref'/HexAdapter(Bytes(1))) + 'ic_incoming_ref_tbl'/Bytes(2), + 'outgoing_ref_tbl'/Bytes(2), + 'ic_table_ref'/Bytes(1))
class EF_IC(LinFixedEF): """Section 7.8""" _test_de_encode = [ - ( "f06f8e40f10001", { "next_table_type": "decision", "id_of_next_table": "6f8e", + ( "f06f8e40f10001", { "next_table_type": "decision", "id_of_next_table": h2b("6f8e"), "ic_decision_value": "041f", "network_string_table_index": 1 } ), - ( "ffffffffffffff", { "next_table_type": "empty", "id_of_next_table": "ffff", + ( "ffffffffffffff", { "next_table_type": "empty", "id_of_next_table": h2b("ffff"), "ic_decision_value": "ffff", "network_string_table_index": 65535 } ), ] def __init__(self): super().__init__(fid='6f8d', sfid=None, name='EF.IC', desc='International Code', rec_len=(7, 7)) self._construct = Struct('next_table_type'/NextTableType, - 'id_of_next_table'/HexAdapter(Bytes(2)), + 'id_of_next_table'/Bytes(2), 'ic_decision_value'/BcdAdapter(Bytes(2)), 'network_string_table_index'/Int16ub)
@@ -252,18 +252,18 @@ class EF_Switching(LinFixedEF): """Section 8.4""" _test_de_encode = [ - ( "f26f87f0ff00", { "next_table_type": "num_dial_digits", "id_of_next_table": "6f87", + ( "f26f87f0ff00", { "next_table_type": "num_dial_digits", "id_of_next_table": h2b("6f87"), "decision_value": "0fff", "string_table_index": 0 } ), - ( "f06f8ff1ff01", { "next_table_type": "decision", "id_of_next_table": "6f8f", + ( "f06f8ff1ff01", { "next_table_type": "decision", "id_of_next_table": h2b("6f8f"), "decision_value": "1fff", "string_table_index": 1 } ), - ( "f16f89f5ff05", { "next_table_type": "predefined", "id_of_next_table": "6f89", + ( "f16f89f5ff05", { "next_table_type": "predefined", "id_of_next_table": h2b("6f89"), "decision_value": "5fff", "string_table_index": 5 } ), ] def __init__(self, fid='1234', name='Switching', desc=None): super().__init__(fid=fid, sfid=None, name=name, desc=desc, rec_len=(6, 6)) self._construct = Struct('next_table_type'/NextTableType, - 'id_of_next_table'/HexAdapter(Bytes(2)), + 'id_of_next_table'/Bytes(2), 'decision_value'/BcdAdapter(Bytes(2)), 'string_table_index'/Int8ub)
@@ -271,12 +271,12 @@ class EF_Predefined(LinFixedEF): """Section 8.5""" _test_de_encode = [ - ( "f26f85", 1, { "next_table_type": "num_dial_digits", "id_of_next_table": "6f85" } ), + ( "f26f85", 1, { "next_table_type": "num_dial_digits", "id_of_next_table": h2b("6f85") } ), ( "f0ffc8", 2, { "predefined_value1": "0fff", "string_table_index1": 200 } ), ] # header and other records have different structure. WTF !?! construct_first = Struct('next_table_type'/NextTableType, - 'id_of_next_table'/HexAdapter(Bytes(2))) + 'id_of_next_table'/Bytes(2)) construct_others = Struct('predefined_value1'/BcdAdapter(Bytes(2)), 'string_table_index1'/Int8ub)
@@ -301,13 +301,13 @@ class EF_DialledVals(TransparentEF): """Section 8.6""" _test_de_encode = [ - ( "ffffff22", { "next_table_type": "empty", "id_of_next_table": "ffff", "dialed_digits": "22" } ), - ( "f16f8885", { "next_table_type": "predefined", "id_of_next_table": "6f88", "dialed_digits": "58" }), + ( "ffffff22", { "next_table_type": "empty", "id_of_next_table": h2b("ffff"), "dialed_digits": "22" } ), + ( "f16f8885", { "next_table_type": "predefined", "id_of_next_table": h2b("6f88"), "dialed_digits": "58" }), ] def __init__(self, fid='1234', name='DialledVals', desc=None): super().__init__(fid=fid, sfid=None, name=name, desc=desc, size=(4, 4)) self._construct = Struct('next_table_type'/NextTableType, - 'id_of_next_table'/HexAdapter(Bytes(2)), + 'id_of_next_table'/Bytes(2), 'dialed_digits'/BcdAdapter(Bytes(1)))
diff --git a/pySim/sms.py b/pySim/sms.py index 7c22c75..aefc874 100644 --- a/pySim/sms.py +++ b/pySim/sms.py @@ -23,7 +23,7 @@ from construct import Int8ub, Byte, Bit, Flag, BitsInteger from construct import Struct, Enum, Tell, BitStruct, this, Padding from construct import Prefixed, GreedyRange -from osmocom.construct import HexAdapter, BcdAdapter, TonNpi, Bytes, GreedyBytes +from osmocom.construct import BcdAdapter, TonNpi, Bytes, GreedyBytes from osmocom.utils import Hexstr, h2b, b2h
from smpp.pdu import pdu_types, operations diff --git a/pySim/sysmocom_sja2.py b/pySim/sysmocom_sja2.py index 438df23..17abfa8 100644 --- a/pySim/sysmocom_sja2.py +++ b/pySim/sysmocom_sja2.py @@ -51,13 +51,13 @@ ( 'f1030331323334ffffffff0a0a3132333435363738', { 'state': { 'valid': True, 'change_able': True, 'unblock_able': True, 'disable_able': True, 'not_initialized': False, 'disabled': True }, - 'attempts_remaining': 3, 'maximum_attempts': 3, 'pin': '31323334', - 'puk': { 'attempts_remaining': 10, 'maximum_attempts': 10, 'puk': '3132333435363738' } + 'attempts_remaining': 3, 'maximum_attempts': 3, 'pin': b'1234', + 'puk': { 'attempts_remaining': 10, 'maximum_attempts': 10, 'puk': b'12345678' } } ), ( 'f003039999999999999999', { 'state': { 'valid': True, 'change_able': True, 'unblock_able': True, 'disable_able': True, 'not_initialized': False, 'disabled': False }, - 'attempts_remaining': 3, 'maximum_attempts': 3, 'pin': '9999999999999999', + 'attempts_remaining': 3, 'maximum_attempts': 3, 'pin': h2b('9999999999999999'), 'puk': None } ), ] def __init__(self, fid='6f01', name='EF.CHV1'): @@ -66,29 +66,32 @@ change_able=0x40, valid=0x80) PukStruct = Struct('attempts_remaining'/Int8ub, 'maximum_attempts'/Int8ub, - 'puk'/HexAdapter(Rpad(Bytes(8)))) + 'puk'/Rpad(Bytes(8))) self._construct = Struct('state'/StateByte, 'attempts_remaining'/Int8ub, 'maximum_attempts'/Int8ub, - 'pin'/HexAdapter(Rpad(Bytes(8))), + 'pin'/Rpad(Bytes(8)), 'puk'/COptional(PukStruct))
class EF_MILENAGE_CFG(TransparentEF): _test_de_encode = [ ( '40002040600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000020000000000000000000000000000000400000000000000000000000000000008', - {"r1": 64, "r2": 0, "r3": 32, "r4": 64, "r5": 96, "c1": "00000000000000000000000000000000", "c2": - "00000000000000000000000000000001", "c3": "00000000000000000000000000000002", "c4": - "00000000000000000000000000000004", "c5": "00000000000000000000000000000008"} ), + {"r1": 64, "r2": 0, "r3": 32, "r4": 64, "r5": 96, + "c1": h2b("00000000000000000000000000000000"), + "c2": h2b("00000000000000000000000000000001"), + "c3": h2b("00000000000000000000000000000002"), + "c4": h2b("00000000000000000000000000000004"), + "c5": h2b("00000000000000000000000000000008")} ), ] def __init__(self, fid='6f21', name='EF.MILENAGE_CFG', desc='Milenage connfiguration'): super().__init__(fid, name=name, desc=desc) self._construct = Struct('r1'/Int8ub, 'r2'/Int8ub, 'r3'/Int8ub, 'r4'/Int8ub, 'r5'/Int8ub, - 'c1'/HexAdapter(Bytes(16)), - 'c2'/HexAdapter(Bytes(16)), - 'c3'/HexAdapter(Bytes(16)), - 'c4'/HexAdapter(Bytes(16)), - 'c5'/HexAdapter(Bytes(16))) + 'c1'/Bytes(16), + 'c2'/Bytes(16), + 'c3'/Bytes(16), + 'c4'/Bytes(16), + 'c5'/Bytes(16))
class EF_0348_KEY(LinFixedEF): @@ -102,18 +105,18 @@ self._construct = Struct('security_domain'/Int8ub, 'key_set_version'/Int8ub, 'key_len_and_type'/KeyLenAndType, - 'key'/HexAdapter(Bytes(this.key_len_and_type.key_length))) + 'key'/Bytes(this.key_len_and_type.key_length))
class EF_0348_COUNT(LinFixedEF): _test_de_encode = [ - ( 'fe010000000000', {"sec_domain": 254, "key_set_version": 1, "counter": "0000000000"} ), + ( 'fe010000000000', {"sec_domain": 254, "key_set_version": 1, "counter": h2b("0000000000")} ), ] def __init__(self, fid='6f23', name='EF.0348_COUNT', desc='TS 03.48 OTA Counters'): super().__init__(fid, name=name, desc=desc, rec_len=(7, 7)) self._construct = Struct('sec_domain'/Int8ub, 'key_set_version'/Int8ub, - 'counter'/HexAdapter(Bytes(5))) + 'counter'/Bytes(5))
class EF_SIM_AUTH_COUNTER(TransparentEF): @@ -145,8 +148,9 @@ class EF_SIM_AUTH_KEY(TransparentEF): _test_de_encode = [ ( '14000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', - {"cfg": {"sres_deriv_func": 1, "use_opc_instead_of_op": True, "algorithm": "milenage"}, "key": - "000102030405060708090a0b0c0d0e0f", "op_opc": "101112131415161718191a1b1c1d1e1f"} ), + {"cfg": {"sres_deriv_func": 1, "use_opc_instead_of_op": True, "algorithm": "milenage"}, + "key": h2b("000102030405060708090a0b0c0d0e0f"), + "op_opc": h2b("101112131415161718191a1b1c1d1e1f")} ), ] def __init__(self, fid='6f20', name='EF.SIM_AUTH_KEY'): super().__init__(fid, name=name, desc='USIM authentication key') @@ -155,8 +159,8 @@ 'use_opc_instead_of_op'/Flag, 'algorithm'/Enum(Nibble, milenage=4, comp128v1=1, comp128v2=2, comp128v3=3)) self._construct = Struct('cfg'/CfgByte, - 'key'/HexAdapter(Bytes(16)), - 'op_opc' /HexAdapter(Bytes(16))) + 'key'/Bytes(16), + 'op_opc' /Bytes(16))
class DF_SYSTEM(CardDF): @@ -209,13 +213,13 @@ _test_de_encode = [ ( '141898d827f70120d33b3e7462ee5fd6fe6ca53d7a0a804561646816d7b0c702fb', { "cfg": { "only_4bytes_res_in_3g": False, "sres_deriv_func_in_2g": 1, "use_opc_instead_of_op": True, "algorithm": "milenage" }, - "key": "1898d827f70120d33b3e7462ee5fd6fe", "op_opc": "6ca53d7a0a804561646816d7b0c702fb" } ), + "key": h2b("1898d827f70120d33b3e7462ee5fd6fe"), "op_opc": h2b("6ca53d7a0a804561646816d7b0c702fb") } ), ( '160a04101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f000102030405060708090a0b0c0d0e0f', { "cfg" : { "algorithm" : "tuak", "key_length" : 128, "sres_deriv_func_in_2g" : 1, "use_opc_instead_of_op" : True }, "tuak_cfg" : { "ck_and_ik_size" : 128, "mac_size" : 128, "res_size" : 128 }, "num_of_keccak_iterations" : 4, - "k" : "000102030405060708090a0b0c0d0e0f", - "op_opc" : "101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f" + "k" : h2b("000102030405060708090a0b0c0d0e0f"), + "op_opc" : h2b("101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f") } ), ] def __init__(self, fid='af20', name='EF.USIM_AUTH_KEY'): @@ -226,8 +230,8 @@ 'use_opc_instead_of_op'/Mapping(Bit, {False:0, True:1}), 'algorithm'/Algorithm) self._construct = Struct('cfg'/CfgByte, - 'key'/HexAdapter(Bytes(16)), - 'op_opc' /HexAdapter(Bytes(16))) + 'key'/Bytes(16), + 'op_opc'/Bytes(16)) # TUAK has a rather different layout for the data, so we define a different # construct below and use explicit _{decode,encode}_bin() methods for separating # the TUAK and non-TUAK situation @@ -243,8 +247,8 @@ self._constr_tuak = Struct('cfg'/CfgByteTuak, 'tuak_cfg'/TuakCfgByte, 'num_of_keccak_iterations'/Int8ub, - 'op_opc'/HexAdapter(Bytes(32)), - 'k'/HexAdapter(Bytes(this.cfg.key_length//8))) + 'op_opc'/Bytes(32), + 'k'/Bytes(this.cfg.key_length//8))
def _decode_bin(self, raw_bin_data: bytearray) -> dict: if raw_bin_data[0] & 0x0F == 0x06: @@ -263,8 +267,9 @@ _test_de_encode = [ ( '14000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', {"cfg": {"only_4bytes_res_in_3g": False, "sres_deriv_func_in_2g": 1, "use_opc_instead_of_op": True, - "algorithm": "milenage"}, "key": "000102030405060708090a0b0c0d0e0f", "op_opc": - "101112131415161718191a1b1c1d1e1f"} ), + "algorithm": "milenage"}, + "key": h2b("000102030405060708090a0b0c0d0e0f"), + "op_opc": h2b("101112131415161718191a1b1c1d1e1f")} ), ] def __init__(self, fid='af22', name='EF.USIM_AUTH_KEY_2G'): super().__init__(fid, name=name, desc='USIM authentication key in 2G context') @@ -273,8 +278,8 @@ 'use_opc_instead_of_op'/Flag, 'algorithm'/Enum(Nibble, milenage=4, comp128v1=1, comp128v2=2, comp128v3=3, xor=14)) self._construct = Struct('cfg'/CfgByte, - 'key'/HexAdapter(Bytes(16)), - 'op_opc' /HexAdapter(Bytes(16))) + 'key'/Bytes(16), + 'op_opc'/Bytes(16))
class EF_GBA_SK(TransparentEF): diff --git a/pySim/ts_102_221.py b/pySim/ts_102_221.py index 5508be7..d97b3cf 100644 --- a/pySim/ts_102_221.py +++ b/pySim/ts_102_221.py @@ -119,11 +119,11 @@
# ETSI TS 102 221 11.1.1.4.4 class FileIdentifier(BER_TLV_IE, tag=0x83): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# ETSI TS 102 221 11.1.1.4.5 class DfName(BER_TLV_IE, tag=0x84): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
# ETSI TS 102 221 11.1.1.4.6.1 class UiccCharacteristics(BER_TLV_IE, tag=0x80): @@ -217,7 +217,7 @@ # ETSI TS 102 221 11.1.1.4.7.3 class SecurityAttribReferenced(BER_TLV_IE, tag=0x8b): # TODO: longer format with SEID - _construct = Struct('ef_arr_file_id'/HexAdapter(Bytes(2)), 'ef_arr_record_nr'/Int8ub) + _construct = Struct('ef_arr_file_id'/Bytes(2), 'ef_arr_record_nr'/Int8ub)
# ETSI TS 102 221 11.1.1.4.8 class ShortFileIdentifier(BER_TLV_IE, tag=0x88): diff --git a/pySim/ts_102_310.py b/pySim/ts_102_310.py index e4c1b92..8764933 100644 --- a/pySim/ts_102_310.py +++ b/pySim/ts_102_310.py @@ -27,9 +27,9 @@ # TS102 310 Section 7.1 class EF_EAPKEYS(TransparentEF): class Msk(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class Emsk(BER_TLV_IE, tag=0x81): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes class MskCollection(TLV_IE_Collection, nested=[EF_EAPKEYS.Msk, EF_EAPKEYS.Emsk]): pass
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py index 1795341..8f1811a 100644 --- a/pySim/ts_31_102.py +++ b/pySim/ts_31_102.py @@ -217,7 +217,7 @@
# 3gPP TS 31.102 Section 7.5.2.1 class SUCI_TlvDataObject(BER_TLV_IE, tag=0xA1): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
###################################################################### # ADF.USIM @@ -230,7 +230,7 @@ _construct = Int8ub
class K_AMF(BER_TLV_IE, tag=0x81): - _construct = HexAdapter(Bytes(32)) + _construct = Bytes(32)
class UplinkNASCount(BER_TLV_IE, tag=0x82): _construct = Int32ub @@ -260,10 +260,10 @@ # 3GPP TS 31.102 Section 4.4.11.6 class EF_5GAUTHKEYS(TransparentEF): class K_AUSF(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class K_SEAF(BER_TLV_IE, tag=0x81): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class FiveGAuthKeys(TLV_IE_Collection, nested=[K_AUSF, K_SEAF]): pass @@ -281,9 +281,9 @@ "identifier": 0, "key_index": 0}], "hnet_pubkey_list": [{"hnet_pubkey_identifier": 10, "hnet_pubkey": - "4e858c4d49d1343e6181284c47ca721730c98742cb7c6182d2e8126e08088d36"}, + h2b("4e858c4d49d1343e6181284c47ca721730c98742cb7c6182d2e8126e08088d36")}, {"hnet_pubkey_identifier": 11, "hnet_pubkey": - "d1bc365f4997d17ce4374e72181431cbfeba9e1b98d7618f79d48561b144672a"}]} ), + h2b("d1bc365f4997d17ce4374e72181431cbfeba9e1b98d7618f79d48561b144672a")}]} ), ] # 3GPP TS 31.102 Section 4.4.11.8 class ProtSchemeIdList(BER_TLV_IE, tag=0xa0): @@ -298,7 +298,7 @@
class HnetPubkey(BER_TLV_IE, tag=0x81): # contents according to RFC 7748 / RFC 5480 - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class HnetPubkeyList(BER_TLV_IE, tag=0xa1, nested=[HnetPubkeyIdentifier, HnetPubkey]): pass @@ -425,7 +425,7 @@ desc='Ciphering and Integrity Keys'): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size) self._construct = Struct( - 'ksi'/Int8ub, 'ck'/HexAdapter(Bytes(16)), 'ik'/HexAdapter(Bytes(16))) + 'ksi'/Int8ub, 'ck'/Bytes(16), 'ik'/Bytes(16))
# TS 31.102 Section 4.2.6 class EF_HPPLMN(TransparentEF): @@ -536,15 +536,15 @@ class EF_LOCI(TransparentEF): _test_de_encode = [ ( '47d1264a62f21037211e00', - { "tmsi": "47d1264a", "lai": { "mcc_mnc": "262-01", "lac": "3721" }, + { "tmsi": h2b("47d1264a"), "lai": { "mcc_mnc": "262-01", "lac": h2b("3721") }, "rfu": 30, "lu_status": 0 } ), ( 'ffffffff62f2200000ff01', - {"tmsi": "ffffffff", "lai": {"mcc_mnc": "262-02", "lac": "0000"}, "rfu": 255, "lu_status": 1} ), + {"tmsi": h2b("ffffffff"), "lai": {"mcc_mnc": "262-02", "lac": h2b("0000") }, "rfu": 255, "lu_status": 1} ), ] def __init__(self, fid='6f7e', sfid=0x0b, name='EF.LOCI', desc='Location information', size=(11, 11)): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size) - Lai = Struct('mcc_mnc'/PlmnAdapter(Bytes(3)), 'lac'/HexAdapter(Bytes(2))) - self._construct = Struct('tmsi'/HexAdapter(Bytes(4)), 'lai'/Lai, 'rfu'/Int8ub, 'lu_status'/Int8ub) + Lai = Struct('mcc_mnc'/PlmnAdapter(Bytes(3)), 'lac'/Bytes(2)) + self._construct = Struct('tmsi'/Bytes(4), 'lai'/Lai, 'rfu'/Int8ub, 'lu_status'/Int8ub)
# TS 31.102 Section 4.2.18 class EF_AD(TransparentEF): @@ -585,15 +585,15 @@ class EF_PSLOCI(TransparentEF): def __init__(self, fid='6f73', sfid=0x0c, name='EF.PSLOCI', desc='PS Location information', size=(14, 14)): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size) - self._construct = Struct('ptmsi'/HexAdapter(Bytes(4)), 'ptmsi_sig'/HexAdapter(Bytes(3)), - 'rai'/HexAdapter(Bytes(6)), 'rau_status'/Int8ub) + self._construct = Struct('ptmsi'/Bytes(4), 'ptmsi_sig'/Bytes(3), + 'rai'/Bytes(6), 'rau_status'/Int8ub)
# TS 31.102 Section 4.2.33 class EF_ICI(CyclicEF): def __init__(self, fid='6f80', sfid=0x14, name='EF.ICI', rec_len=(28, 48), desc='Incoming Call Information', **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) - self._construct = Struct('alpha_id'/HexAdapter(Bytes(this._.total_len-28)), + self._construct = Struct('alpha_id'/Bytes(this._.total_len-28), 'len_of_bcd_contents'/Int8ub, 'ton_npi'/Int8ub, 'call_number'/BcdAdapter(Bytes(10)), @@ -602,14 +602,14 @@ 'date_and_time'/BcdAdapter(Bytes(7)), 'duration'/Int24ub, 'status'/Byte, - 'link_to_phonebook'/HexAdapter(Bytes(3))) + 'link_to_phonebook'/Bytes(3))
# TS 31.102 Section 4.2.34 class EF_OCI(CyclicEF): def __init__(self, fid='6f81', sfid=0x15, name='EF.OCI', rec_len=(27, 47), desc='Outgoing Call Information', **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) - self._construct = Struct('alpha_id'/HexAdapter(Bytes(this._.total_len-27)), + self._construct = Struct('alpha_id'/Bytes(this._.total_len-27), 'len_of_bcd_contents'/Int8ub, 'ton_npi'/Int8ub, 'call_number'/BcdAdapter(Bytes(10)), @@ -617,7 +617,7 @@ 'ext5_record_id'/Int8ub, 'date_and_time'/BcdAdapter(Bytes(7)), 'duration'/Int24ub, - 'link_to_phonebook'/HexAdapter(Bytes(3))) + 'link_to_phonebook'/Bytes(3))
# TS 31.102 Section 4.2.35 class EF_ICT(CyclicEF): @@ -655,7 +655,7 @@ def __init__(self, fid='6f57', sfid=None, name='EF.ACL', size=(32, None), desc='Access Point Name Control List', **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs) - self._construct = Struct('num_of_apns'/Int8ub, 'tlvs'/HexAdapter(GreedyBytes)) + self._construct = Struct('num_of_apns'/Int8ub, 'tlvs'/GreedyBytes)
# TS 31.102 Section 4.2.51 class EF_START_HFN(TransparentEF): @@ -705,16 +705,16 @@ def __init__(self, fid='6fd7', sfid=None, name='EF.MSK', desc='MBMS Service Key List', **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=(20, None), **kwargs) msk_ts_constr = Struct('msk_id'/Int32ub, 'timestamp_counter'/Int32ub) - self._construct = Struct('key_domain_id'/HexAdapter(Bytes(3)), + self._construct = Struct('key_domain_id'/Bytes(3), 'num_msk_id'/Int8ub, 'msk_ids'/msk_ts_constr[this.num_msk_id]) # TS 31.102 Section 4.2.81 class EF_MUK(LinFixedEF): class MUK_Idr(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class MUK_Idi(BER_TLV_IE, tag=0x82): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class MUK_ID(BER_TLV_IE, tag=0xA0, nested=[MUK_Idr, MUK_Idi]): pass @@ -732,10 +732,10 @@ # TS 31.102 Section 4.2.83 class EF_GBANL(LinFixedEF): class NAF_ID(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class B_TID(BER_TLV_IE, tag=0x81): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class EF_GBANL_Collection(BER_TLV_IE, nested=[NAF_ID, B_TID]): pass @@ -759,7 +759,7 @@ # TS 31.102 Section 4.2.87 class EF_NAFKCA(LinFixedEF): class NAF_KeyCentreAddress(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes def __init__(self, fid='6fdd', sfid=None, name='EF.NAFKCA', rec_len=(None, None), desc='NAF Key Centre Address', **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) @@ -770,11 +770,11 @@ class DataDestAddrRange(TLV_IE, tag=0x83): _construct = Struct('type_of_address'/Enum(Byte, IPv4=0x21, IPv6=0x56), 'prefix_length'/Int8ub, - 'prefix'/HexAdapter(GreedyBytes)) + 'prefix'/GreedyBytes)
class AccessPointName(TLV_IE, tag=0x80): # coded as per TS 23.003 - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class Login(TLV_IE, tag=0x81): # as per SMS DCS TS 23.038 @@ -803,8 +803,8 @@ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs) upd_status_constr = Enum( Byte, updated=0, not_updated=1, roaming_not_allowed=2) - self._construct = Struct('guti'/HexAdapter(Bytes(12)), - 'last_visited_registered_tai'/HexAdapter(Bytes(5)), + self._construct = Struct('guti'/Bytes(12), + 'last_visited_registered_tai'/Bytes(5), 'eps_update_status'/upd_status_constr)
# TS 31.102 Section 4.2.92 @@ -813,7 +813,7 @@ _construct = Int8ub
class K_ASME(BER_TLV_IE, tag=0x81): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class UplinkNASCount(BER_TLV_IE, tag=0x82): _construct = Int32ub @@ -822,7 +822,7 @@ _construct = Int32ub
class IDofNASAlgorithms(BER_TLV_IE, tag=0x84): - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class EPS_NAS_Security_Context(BER_TLV_IE, tag=0xa0, nested=[KSI_ASME, K_ASME, UplinkNASCount, DownlinkNASCount, @@ -1062,8 +1062,8 @@ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs) upd_status_constr = Enum( Byte, updated=0, not_updated=1, roaming_not_allowed=2) - self._construct = Struct('5g_guti'/HexAdapter(Bytes(13)), - 'last_visited_registered_tai_in_5gs'/HexAdapter(Bytes(6)), + self._construct = Struct('5g_guti'/Bytes(13), + 'last_visited_registered_tai_in_5gs'/Bytes(6), '5gs_update_status'/upd_status_constr)
# TS 31.102 Section 4.4.11.7 (Rel 15) @@ -1083,8 +1083,8 @@ class EF_OPL5G(LinFixedEF): def __init__(self, fid='4f08', sfid=0x08, name='EF.OPL5G', desc='5GS Operator PLMN List', **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=(10, None), **kwargs) - Tai = Struct('mcc_mnc'/PlmnAdapter(Bytes(3)), 'tac_min'/HexAdapter(Bytes(3)), - 'tac_max'/HexAdapter(Bytes(3))) + Tai = Struct('mcc_mnc'/PlmnAdapter(Bytes(3)), 'tac_min'/Bytes(3), + 'tac_max'/Bytes(3)) self._construct = Struct('tai'/Tai, 'pnn_record_id'/Int8ub)
# TS 31.102 Section 4.4.11.10 (Rel 15) @@ -1119,7 +1119,7 @@ # operator decides to assign less than 4 digits to Routing Indicator, the remaining digits # shall be coded as "1111" to fill the 4 digits coding of Routing Indicator self._construct = Struct('routing_indicator'/Rpad(BcdAdapter(Bytes(2)), 'f', 2), - 'rfu'/HexAdapter(Bytes(2))) + 'rfu'/Bytes(2))
# TS 31.102 Section 4.4.11.13 (Rel 16) class EF_TN3GPPSNN(TransparentEF): @@ -1135,14 +1135,14 @@ def __init__(self, fid='4f0d', sfid=0x0d, name='EF.CAG', desc='Pre-configured CAG information list EF', **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._construct = HexAdapter(GreedyBytes) + self._construct = GreedyBytes
# TS 31.102 Section 4.4.11.15 (Rel 17) class EF_SOR_CMCI(TransparentEF): def __init__(self, fid='4f0e', sfid=0x0e, name='EF.SOR-CMCI', desc='Steering Of Roaming - Connected Mode Control Information', **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._construct = HexAdapter(GreedyBytes) + self._construct = GreedyBytes
# TS 31.102 Section 4.4.11.17 (Rel 17) class EF_DRI(TransparentEF): @@ -1153,9 +1153,9 @@ 'parameters_indicator_status'/FlagsEnum(Byte, roaming_wait_range=1, return_wait_range=2, applicability_indicator=3), - 'roaming_wait_range'/HexAdapter(Bytes(2)), - 'return_wait_range'/HexAdapter(Bytes(2)), - 'applicability_indicator'/HexAdapter(Byte)) + 'roaming_wait_range'/Bytes(2), + 'return_wait_range'/Bytes(2), + 'applicability_indicator'/Byte)
# TS 31.102 Section 4.4.12.2 (Rel 17) class EF_PWS_SNPN(TransparentEF): @@ -1173,7 +1173,7 @@ self._construct = Struct('assignment_mode'/Enum(Byte, coordinated_ass_opt1=0, self_ass=1, coordinated_ass_opt2=2), - 'network_identifier'/HexAdapter(Bytes(5))) + 'network_identifier'/Bytes(5))
# TS 31.102 Section 4.4.12 (Rel 17) class DF_SNPN(CardDF): @@ -1413,7 +1413,7 @@ 'nid'/COptional(Bytes(6))) class Tmgi(BER_TLV_IE, tag=0x81): TmgiEntry = Struct('tmgi'/Bytes(6), - 'usd_fid'/HexAdapter(Bytes(2)), + 'usd_fid'/Bytes(2), 'service_type'/FlagsEnum(Byte, mbs_service_announcement=1, mbs_user_service=2)) _construct = GreedyRange(TmgiEntry) class NrArfcnList(BER_TLV_IE, tag=0x82): @@ -1482,7 +1482,7 @@ def __init__(self, fid='4f16', sfid=0x16, name='EF.KAUSF_DERIVATION', desc='K_AUSF derivation configuration', **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) - self._construct = Struct('k_ausf_deriv_cfg'/FlagsEnum(Byte, use_msk=1), 'rfu'/HexAdapter(GreedyBytes)) + self._construct = Struct('k_ausf_deriv_cfg'/FlagsEnum(Byte, use_msk=1), 'rfu'/GreedyBytes)
# TS 31.102 Section 4.4.5 class DF_WLAN(CardDF): diff --git a/pySim/ts_31_103.py b/pySim/ts_31_103.py index b281659..b3f5474 100644 --- a/pySim/ts_31_103.py +++ b/pySim/ts_31_103.py @@ -167,7 +167,7 @@ class EF_GBANL(LinFixedEF): class NAF_ID(BER_TLV_IE, tag=0x80): _construct = Struct('fqdn'/Utf8Adapter(Bytes(this._.total_len-5)), - 'ua_spi'/HexAdapter(Bytes(5))) + 'ua_spi'/Bytes(5)) class B_TID(BER_TLV_IE, tag=0x81): _construct = Utf8Adapter(GreedyBytes) # pylint: disable=undefined-variable diff --git a/pySim/ts_31_103_shared.py b/pySim/ts_31_103_shared.py index 8c56923..3355217 100644 --- a/pySim/ts_31_103_shared.py +++ b/pySim/ts_31_103_shared.py @@ -21,7 +21,7 @@
from construct import Struct, Switch, GreedyString, Int8ub, Prefixed, Enum, Byte from osmocom.tlv import BER_TLV_IE, TLV_IE_Collection -from osmocom.construct import Bytes, HexAdapter, Utf8Adapter, GreedyBytes +from osmocom.construct import Bytes, Utf8Adapter, GreedyBytes from pySim.filesystem import *
# TS 31.103 Section 4.2.16 @@ -36,7 +36,7 @@ # TS 31.103 Section 4.2.18 class EF_IMSConfigData(BerTlvEF): class ImsConfigDataEncoding(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(Bytes(1)) + _construct = Bytes(1) class ImsConfigData(BER_TLV_IE, tag=0x81): _construct = GreedyString # pylint: disable=undefined-variable @@ -103,7 +103,7 @@ # TS 31.103 Section 4.2.21 class EF_MuDMiDConfigData(BerTlvEF): class MudMidConfigDataEncoding(BER_TLV_IE, tag=0x80): - _construct = HexAdapter(Bytes(1)) + _construct = Bytes(1) class MudMidConfigData(BER_TLV_IE, tag=0x81): _construct = GreedyString # pylint: disable=undefined-variable diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py index eb1984e..2dc814b 100644 --- a/pySim/ts_51_011.py +++ b/pySim/ts_51_011.py @@ -250,7 +250,7 @@ "tp_sc_addr": { "length": 255, "ton_npi": { "ext": True, "type_of_number": "reserved_for_extension", "numbering_plan_id": "reserved_for_extension" }, "call_number": "" }, - "tp_pid": "00", "tp_dcs": "00", "tp_vp_minutes": 1440 } ), + "tp_pid": b"\x00", "tp_dcs": b"\x00", "tp_vp_minutes": 1440 } ), ] _test_no_pad = True class ValidityPeriodAdapter(Adapter): @@ -286,8 +286,8 @@ 'tp_dest_addr'/ScAddr, 'tp_sc_addr'/ScAddr,
- 'tp_pid'/HexAdapter(Bytes(1)), - 'tp_dcs'/HexAdapter(Bytes(1)), + 'tp_pid'/Bytes(1), + 'tp_dcs'/Bytes(1), 'tp_vp_minutes'/EF_SMSP.ValidityPeriodAdapter(Byte))
# TS 51.011 Section 10.5.7 @@ -309,14 +309,14 @@ def __init__(self, fid='6f47', sfid=None, name='EF.SMSR', desc='SMS status reports', rec_len=(30, 30), **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) self._construct = Struct( - 'sms_record_id'/Int8ub, 'sms_status_report'/HexAdapter(Bytes(29))) + 'sms_record_id'/Int8ub, 'sms_status_report'/Bytes(29))
class EF_EXT(LinFixedEF): def __init__(self, fid, sfid=None, name='EF.EXT', desc='Extension', rec_len=(13, 13), **kwargs): super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) self._construct = Struct( - 'record_type'/Int8ub, 'extension_data'/HexAdapter(Bytes(11)), 'identifier'/Int8ub) + 'record_type'/Int8ub, 'extension_data'/Bytes(11), 'identifier'/Int8ub)
# TS 51.011 Section 10.5.16 class EF_CMI(LinFixedEF): @@ -589,11 +589,11 @@ class EF_LOCI(TransparentEF): _test_de_encode = [ ( "7802570222f81009780000", - { "tmsi": "78025702", "lai": "22f8100978", "tmsi_time": 0, "lu_status": "updated" } ), + { "tmsi": h2b("78025702"), "lai": h2b("22f8100978"), "tmsi_time": 0, "lu_status": "updated" } ), ] def __init__(self, fid='6f7e', sfid=None, name='EF.LOCI', desc='Location Information', size=(11, 11)): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size) - self._construct = Struct('tmsi'/HexAdapter(Bytes(4)), 'lai'/HexAdapter(Bytes(5)), 'tmsi_time'/Int8ub, + self._construct = Struct('tmsi'/Bytes(4), 'lai'/Bytes(5), 'tmsi_time'/Int8ub, 'lu_status'/Enum(Byte, updated=0, not_updated=1, plmn_not_allowed=2, location_area_not_allowed=3))
@@ -751,22 +751,22 @@ # TS 51.011 Section 10.3.32 class EF_Kc(TransparentEF): _test_de_encode = [ - ( "837d783609a3858f05", { "kc": "837d783609a3858f", "cksn": 5 } ), + ( "837d783609a3858f05", { "kc": h2b("837d783609a3858f"), "cksn": 5 } ), ] def __init__(self, fid='6f20', sfid=None, name='EF.Kc', desc='Ciphering key Kc', size=(9, 9), **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs) - self._construct = Struct('kc'/HexAdapter(Bytes(8)), 'cksn'/Int8ub) + self._construct = Struct('kc'/Bytes(8), 'cksn'/Int8ub)
# TS 51.011 Section 10.3.33 class EF_LOCIGPRS(TransparentEF): _test_de_encode = [ ( "ffffffffffffff22f8990000ff01", - { "ptmsi": "ffffffff", "ptmsi_sig": "ffffff", "rai": "22f8990000ff", "rau_status": "not_updated" } ), + { "ptmsi": h2b("ffffffff"), "ptmsi_sig": h2b("ffffff"), "rai": h2b("22f8990000ff"), "rau_status": "not_updated" } ), ] def __init__(self, fid='6f53', sfid=None, name='EF.LOCIGPRS', desc='GPRS Location Information', size=(14, 14)): super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size) - self._construct = Struct('ptmsi'/HexAdapter(Bytes(4)), 'ptmsi_sig'/HexAdapter(Bytes(3)), - 'rai'/HexAdapter(Bytes(6)), + self._construct = Struct('ptmsi'/Bytes(4), 'ptmsi_sig'/Bytes(3), + 'rai'/Bytes(6), 'rau_status'/Enum(Byte, updated=0, not_updated=1, plmn_not_allowed=2, routing_area_not_allowed=3))
@@ -867,12 +867,12 @@ class FullNameForNetwork(BER_TLV_IE, tag=0x43): # TS 24.008 10.5.3.5a # TODO: proper decode - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class ShortNameForNetwork(BER_TLV_IE, tag=0x45): # TS 24.008 10.5.3.5a # TODO: proper decode - _construct = HexAdapter(GreedyBytes) + _construct = GreedyBytes
class NetworkNameCollection(TLV_IE_Collection, nested=[FullNameForNetwork, ShortNameForNetwork]): pass @@ -885,14 +885,14 @@ class EF_OPL(LinFixedEF): _test_de_encode = [ ( '62f2100000fffe01', - { "lai": { "mcc_mnc": "262-01", "lac_min": "0000", "lac_max": "fffe" }, "pnn_record_id": 1 } ), + { "lai": { "mcc_mnc": "262-01", "lac_min": h2b("0000"), "lac_max": h2b("fffe") }, "pnn_record_id": 1 } ), ( '216354789abcde12', - { "lai": { "mcc_mnc": "123-456", "lac_min": "789a", "lac_max": "bcde" }, "pnn_record_id": 18 } ), + { "lai": { "mcc_mnc": "123-456", "lac_min": h2b("789a"), "lac_max": h2b("bcde") }, "pnn_record_id": 18 } ), ] def __init__(self, fid='6fc6', sfid=None, name='EF.OPL', rec_len=(8, 8), desc='Operator PLMN List', **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) self._construct = Struct('lai'/Struct('mcc_mnc'/PlmnAdapter(Bytes(3)), - 'lac_min'/HexAdapter(Bytes(2)), 'lac_max'/HexAdapter(Bytes(2))), 'pnn_record_id'/Int8ub) + 'lac_min'/Bytes(2), 'lac_max'/Bytes(2)), 'pnn_record_id'/Int8ub)
# TS 51.011 Section 10.3.44 + TS 31.102 4.2.62 class EF_MBI(LinFixedEF): @@ -941,8 +941,8 @@ class EF_MMSN(LinFixedEF): def __init__(self, fid='6fce', sfid=None, name='EF.MMSN', rec_len=(4, 20), desc='MMS Notification', **kwargs): super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len, **kwargs) - self._construct = Struct('mms_status'/HexAdapter(Bytes(2)), 'mms_implementation'/HexAdapter(Bytes(1)), - 'mms_notification'/HexAdapter(Bytes(this._.total_len-4)), 'ext_record_nr'/Byte) + self._construct = Struct('mms_status'/Bytes(2), 'mms_implementation'/Bytes(1), + 'mms_notification'/Bytes(this._.total_len-4), 'ext_record_nr'/Byte)
# TS 51.011 Annex K.1 class MMS_Implementation(BER_TLV_IE, tag=0x80): diff --git a/tests/unittests/test_utils.py b/tests/unittests/test_utils.py index 04ceba4..4cb9478 100755 --- a/tests/unittests/test_utils.py +++ b/tests/unittests/test_utils.py @@ -36,8 +36,8 @@ {'priority': 1, 'identifier': 1, 'key_index': 2}, {'priority': 2, 'identifier': 0, 'key_index': 0}], 'hnet_pubkey_list': [ - {'hnet_pubkey_identifier': 27, 'hnet_pubkey': hnet_pubkey_profile_b.lower()}, # because h2b/b2h returns all lower-case - {'hnet_pubkey_identifier': 30, 'hnet_pubkey': hnet_pubkey_profile_a.lower()}] + {'hnet_pubkey_identifier': 27, 'hnet_pubkey': h2b(hnet_pubkey_profile_b)}, # because h2b/b2h returns all lower-case + {'hnet_pubkey_identifier': 30, 'hnet_pubkey': h2b(hnet_pubkey_profile_a)}] }
def testSplitHexStringToListOf5ByteEntries(self):