hsdZddlZddlmZmZmZmZddlmZmZm Z ddl m Z ddl Tddl TddlmZddlm Z mZmZdd lmZdd lmZddlZGd d ed ZejjjedefdZ de!fdZ"Gdde#Z$e$ede%Z&dZ'dZ(dZ)dZ*GddedZ+Gddede+gZ,Gd d!ed"ejj-e,gzZ.Gd#d$ed%Z/Gd&d'ed(Z0Gd)d*ed+e/e0gZ1Gd,d-ed%Z2Gd.d/ed0e/e2gZ3Gd1d2ed%Z4Gd3d4ed5e4gZ5Gd6d7edZ6Gd8d9ed:Z7Gd;dd?ed@e7gZ9GdAdBedCe6e8e9gZ:GdDdEed(Z;GdFdGedHZ<GdIdJedKZ=GdLdMedNZ>GdOdPedQZ?GdRdSedTZ@GdUdVedWZAGdXdYedZZBGd[d\ed:ZCGd]d^ed_ZDGd`daedbZEGdcdded%ZFGdedfedgeFgZGGdhdiedjeGgZHGdkdledme;e6ee?e@eAe8e9eBeCeDeEeHgZIGdndoed(ZJGdpdqedreJgZKGdsdted%ZLGdudved_ZMGdwdxed ZNGdydzed{eLeJeMeNgZOGd|d}edgeOgZPGd~ded(ZQGddedrePeQgZRGdded%ZSGddedeLgZTGddedeSgZUGddedgZVGddedZWGddedeWgZXGddedZYGddedZZGddedbZ[GddedZ\GddedZ]GddedZ^GddedjZ_GddedZ`GddedeNeYeZe[e\e]e^e_e`g ZaGddedgeagZbGdded(ZcGddedebecgZdGdded(ZeGdded%ZfGddedgeYeNgZgGddedegeegZhGddedefgZiGdded%ZjGddedegeegZkGddedejgZlGdÄded%ZmGdńdedeYeNgZnGdȄdedemgZoGdʄdedZpGd̄ded%ZqGd΄dedepgZrGdфdedeqgZsGdӄded ZtGdՄdedeWetgZuGd؄dedڬZvGdۄdedeNevgZwGdބded%ZxGddedexgZyGddedZzGddedZ{GddedZ|Gdded(Z}Gddede{e|e}gZ~Gdded%ZGdded(ZGddedZGddedHZGddedKZGddedTZGdded%eeeeeegZGddedgegZGddedegZGddejjZGddejjZGddeZGdd eZGd d eZdS( z Various definitions related to GSMA consumer + IoT eSIM / eUICC Does *not* implement anything related to M2M eUICC Related Specs: GSMA SGP.21, SGP.22, SGP.31, SGP32 N)ArrayStruct FlagsEnum GreedyRange)cmd2 CommandSetwith_default_category)Hexstr)*) SwMatchError)r SwHexstr SwMatchstr)SimCardCommands)CardProfileUICCc$eZdZeeZdS)Sgp02EidN__name__ __module__ __qualname__ BcdAdapter GreedyBytes _construct9/home/jenkins/workspace/simtester-sanitize/pySim/euicc.pyrr)K((JJJrrZ)tagreturnc^t|trYt|dkr|dz }n0t|dkr|dddz}ntdt |}n$t|tr|}|dzr||dzz}d|d zz }||z }t|S) zYCompute and add/replace check digits of an EID value according to GSMA SGP.29 Section 10.00 Nzand EID must be 30 or 32 digitsdba) isinstancestrlen ValueErrorint)eideid_intcsums rcompute_eid_checksumr1/s#s% s88r>> 4KCC XX^^crc(T/CC>?? ?c(( C  % S= % w} $G 2 D tOG w<<rc.t|dzdkS)zLVerify the check digits of an EID value according to GSMA SGP.29 Section 10.r(r-)r.s rverify_eid_checksumr5Gs s88b=A rceZdZdZdZdZdS)VersionAdapterzCconvert an EUICC Version (3-int array) to a textual representation.c6d|d|d|dfzS)Nz%u.%u.%urr3rselfobjcontextpaths r_decodezVersionAdapter._decodePs SVSVSV444rc@d|dDS)Nc,g|]}t|Srr4).0xs r z*VersionAdapter._encode..Ts///1A///r.)splitr:s r_encodezVersionAdapter._encodeSs // #////rN)rrr__doc__r?rGrrrr7r7Ms8MM55500000rr7 A0000005591010FFFFFFFF8900000100 A0000005591010FFFFFFFF8900000200 A0000005591010FFFFFFFF8900000D00 A0000005591010FFFFFFFF8900000E00ceZdZeZdS)SupportedVersionNumberNrrrrrrrrrOrO^JJJrrOceZdZdS)"IsdrProprietaryApplicationTemplateNrrrrrrrTrTaDrrT)rnestedceZdZdS) FciTemplateNrUrrrrZrZfrVrrZoc$eZdZeeZdS)DefaultDpAddressNrrr Utf8Adapterrrrrrr]r]l[))JJJrr]c$eZdZeeZdS) RootDsAddressNr^rrrrcrcnr`rrcceZdZdS)EuiccConfiguredAddressesNrUrrrrfrfpDrrfi<c*eZdZeeddZdS)SetDefaultDpAddrResr)okundefinedErrorNrrrEnumInt8ubrrrrririts$f3777JJJrriceZdZdS)SetDefaultDpAddressNrUrrrrqrqvrgrrqi?c$eZdZedZdS)EuiccChallengeN)rrrBytesrrrrrsrszsrJJJrrsceZdZdS)GetEuiccChallengeNrUrrrrwrw|rgrrwi.ceZdZeZdS)SVNNrrr VersionTyperrrrryryrQrryceZdZeZdS)SubjectKeyIdentifierNrPrrrr}r}rQrr}ceZdZdS)EuiccCiPkiListForVerificationNrUrrrrrrgrrceZdZdS)EuiccCiPkiListForSigningNrUrrrrrrgrrceZdZdS) EuiccInfo1NrUrrrrrrgrri ceZdZeZdS)ProfileVersionNrzrrrrrrQrrceZdZeZdS)EuiccFirmwareVerNrzrrrrrrQrrceZdZeZdS)ExtCardResourceNrPrrrrrrQrrceZdZeZdS)UiccCapabilityNrPrrrrrrQrrceZdZeZdS)TS102241VersionNrzrrrrrrQrrceZdZeZdS)GlobalPlatformVersionNrzrrrrrrQrrceZdZeZdS) RspCapabilityNrPrrrrrrQrrc.eZdZeeddddZdS) EuiccCategoryrr3r9rI)other basicEuicc mediumEuicccontactlessEuiccNrmrrrrrs)fA!UVWWWJJJrrceZdZeZdS) PpVersionNrzrrrrrrQrrc$eZdZeeZdS)SsAcreditationNumberNr^rrrrrr`rr c*eZdZeeddZdS)IpaModerr3)ipadipeaNrmrrrrrs$f11---JJJrrceZdZeZdS) IotVersionNrzrrrrrrQrrceZdZdS) IotVersionSeqNrUrrrrrrgrrceZdZdS)IotSpecificInfoNrUrrrrrrgrrceZdZdS) EuiccInfo2NrUrrrrrs  Drri"c HeZdZeedeeddddz ZdS)ProfileMgmtOperationpmora@r$rt)installenabledisabledeleteN)rrrrByterrrrrrrs;eIIdDW[dh$i$i$iijjJJJrrceZdZdS)ListNotificationReqNrUrrrrrrgrri(c"eZdZeZdS) SeqNumberNrrrAsn1DerIntegerrrrrrr!!JJJrrc$eZdZeeZdS)NotificationAddressNr^rrrrrr`rrc$eZdZeeZdS)IccidNrrrrrrrrrceZdZdS)NotificationMetadataNrUrrrrrrVrri/ceZdZdS)NotificationMetadataListNrUrrrrrrgrrc(eZdZeedZdS)ListNotificationsResultErrorrj)rlNrmrrrrrs"fS111JJJrrceZdZdS)ListNotificationRespNrUrrrrrrVrrc,eZdZeedddZdS)DeleteNotificationStatusrr3rjrknothingToDeleterlNrmrrrrr&fAcJJJJJJrrceZdZdS)NotificationSentReqNrUrrrrrrgrri0ceZdZdS)NotificationSentRespNrUrrrrrrgrrceZdZdS)LoadCRLNrUrrrrrrgrri5c$eZdZeeZdS)TagListN)rrrrrorrrrrrsV$$JJJrr\ceZdZdS)ProfileInfoListReqNrUrrrrrrgrri-ceZdZeZdS)IsdpAidNrPrrrrrrQrrOc*eZdZeeddZdS) ProfileStaterr3)disabledenabledNrmrrrrrs$fq!444JJJrripc$eZdZeeZdS)ProfileNicknameNr^rrrrrr`rrc$eZdZeeZdS)ServiceProviderNameNr^rrrrrr`rrc$eZdZeeZdS) ProfileNameNr^rrrrrr`rrc*eZdZeeddZdS)IconTyperr3)jpgpngNrmrrrrrs$f!+++JJJrrceZdZeZdS)IconNrPrrrrrrQrrc,eZdZeedddZdS) ProfileClassrr3r9)test provisioning operationalNrmrrrrrs&f11!DDDJJJrrceZdZdS) ProfileInfoNrUrrrrrs DrrceZdZdS)ProfileInfoSeqNrUrrrrrrgrrc*eZdZeeddZdS)ProfileInfoListErrorr3r9)incorrectInputValuesrlNrmrrrrrs$f1QGGGJJJrrceZdZdS)ProfileInfoListRespNrUrrrrrrgrrceZdZeZdS) RefreshFlagN)rrrrorrrrr r sJJJrr c 4eZdZeedddddddZd S) EnableResultrr3r9rIr~rj)rkiccidOrAidNotFoundprofileNotInDisabledStatedisallowedByPolicywrongProfileReenablingcatBusyrlNrmrrrr r s:fqTU)*1a`ceeeJJJrr ceZdZdS)ProfileIdentifierNrUrrrrrrgrrceZdZdS)EnableProfileReqNrUrrrrrrgrri1ceZdZdS)EnableProfileRespNrUrrrrrrgrrc 2eZdZeeddddddZdS) DisableResultrr3r9rIr rj)rkr profileNotInEnabledStaterrrlNrmrrrrrs7fqST)*AcKKKJJJrrceZdZdS)DisableProfileReqNrUrrrrrrgrri2ceZdZdS)DisableProfileRespNrUrrrrrrgrrc0eZdZeedddddZdS) DeleteResultrr3r9rIrj)rkr rrrlNrmrrrr r s5fqTU)*3@@@JJJrr ceZdZdS)DeleteProfileReqNrUrrrr"r" rgrr"i3ceZdZdS)DeleteProfileRespNrUrrrr$r$ rgrr$c,eZdZeedddZdS) ResetOptionsrarr$)deleteOperationalProfilesdeleteFieldLoadedTestProfilesresetDefaultSmdpAddressN)rrrrrrrrrr&r&s.44_c37999JJJrr&c,eZdZeedddZdS) ResetResultrr3rjrNrmrrrr+r+rrr+ceZdZdS)EuiccMemoryResetReqNrUrrrr-r-rgrr-i4ceZdZdS)EuiccMemoryResetRespNrUrrrr/r/rgrr/ceZdZeZdS)EidValueNrPrrrr1r1rQrr1ceZdZdS) GetEuiccDataNrUrrrr3r3rgrr3i>c$eZdZeeZdS)SnrProfileNicknameNr^rrrr5r5!r`rr5ceZdZdS)SetNicknameReqNrUrrrr8r8#rgrr8i)c,eZdZeedddZdS)SetNicknameResultrr3rj)rk iccidNotFoundrlNrmrrrr:r:%s&f!CHHHJJJrr:ceZdZdS)SetNicknameRespNrUrrrr=r='rgrr=ceZdZdS) GetCertsReqNrUrrrr?r?+rgrr?iVceZdZeZdS)EumCertificateNrPrrrrArA-rQrrAceZdZeZdS)EuiccCertificateNrPrrrrDrD/rQrrDc*eZdZeeddZdS) GetCertsErrorr3rj) invalidCiPKIdrlNrmrrrrGrG1s$fAcBBBJJJrrGceZdZdS) GetCertsRespNrUrrrrJrJ3rgrrJc$eZdZeeZdS)EimIdNr^rrrrLrL7r`rrLc$eZdZeeZdS)EimFqdnNr^rrrrNrN9r`rrNc,eZdZeedddZdS) EimIdTyper3r9rI) eimIdTypeOid eimIdTypeFqdneimIdTypeProprietaryNrmrrrrPrP;s'f1ATUVVVJJJrrPc"eZdZeZdS) CounterValueNrrrrrUrU=rrrUc"eZdZeZdS)AssociationTokenNrrrrrWrW?rrrWc0eZdZeedddddZdS)EimSupportedProtocolrr3r9rIr~)eimRetrieveHttpseimRetrieveCoapseimInjectHttpseimInjectCoapseimProprietaryNrmrrrrYrYAs3fq1UVgh%&(((JJJrrYceZdZdS)EimConfigurationDataNrUrrrr`r`ErVrr`ceZdZdS)EimConfigurationDataSeqNrUrrrrbrbHrgrrbceZdZdS)GetEimConfigurationDataNrUrrrrdrdJrgrrdiUc eZdZfdZeddedededeee ffdZ eddedefdZ edede fd Z d edefd Zed Gd deZxZS)CardApplicationISDRctdtd|j|j_|jxj|gz c_d|j_dS)Nz ADF.ISD-Rz/ISD-R (Issuer Security Domain Root) ApplicationnameaiddescEID)super__init__ AID_ISD_Rdecode_select_responseadfshell_commandsAddlShellCommandsscp_key_identityr; __class__s rrnzCardApplicationISDR.__init__Nsp kyO  Q Q Q*.*E' D$:$:$<$<#==$)!!!r9000scctx_doexp_swr c\dt|dz|fz}|||S)zzPerform STORE DATA according to Table 47+48 in Section 5.7.2 of SGP.22. Only single-block store supported for now.z80E29100%02x%s00r9)r+send_apdu_checksw)rxryrzcapdus r store_datazCardApplicationISDR.store_dataVs3#c%jj!mU%;;$$UF333rcB|r9|}t|}|dkrtdSnd}t|t ||\}}|r2|r.|}|t||S|SdS)zTransceive STORE DATA APDU with the card, transparently encoding the command data from TLV and decoding the response data tlv.z DO > 255 bytes not supported yetr)rzN)to_tlvr+r,rfr~b2hfrom_tlvh2b) rxcmd_doresp_clsrz cmd_do_enc cmd_do_lendata_swresp_dos rstore_data_tlvz"CardApplicationISDR.store_data_tlv]s  JZJC!"DEEE J)44S#j//RX4YY s   "(**  T+++ 4rcttdgg}t||t}|}t t |ddS)Nrdecodedchildrenget_euicc_data eid_value)r3rrfrto_dictrflatten_dict_lists)rxged_cmdgedds rget_eidzCardApplicationISDR.get_eidssh$)@)@)@(ABBB!00g|LL KKMM%a(8&9::;GHHHrdata_hexct}|t||}t |dSN fci_templaterZrrrrr;rtrs rrpz*CardApplicationISDR.decode_select_responsezC MM 3x==!!! IIKK!!N"3444rApplication-Specific Commandsc(eZdZejZeddejedZ dZ ejZ e ddeje dZ d Z d Zd Zd ZejZed edejedZdZejZeZeddeddedddejedZejZeZeddeddedddejedZejZeZeddeddejedZejZedddeddd ed!dd"ejed#Z d$Z!ejZ"e"d%d&e"d'd(eje"d)Z#d*Z$d+Z%d,S)-%CardApplicationISDR.AddlShellCommandsTX_DOz)Hexstring of encoded to-be-transmitted DO)helpcjt|jjj|j\}}dS)zJPerform a raw STORE DATA command as defined for the ES10x eUICC interface.N)rfr~_cmdlchanrxr)r;opts_datars rdo_es10x_store_dataz9CardApplicationISDR.AddlShellCommands.do_es10x_store_datas*/99$)/:MtzZZLUCCCrct|jjjt t }|}|jt|ddS)z6Perform an ES10a GetEuiccConfiguredAddresses function.euicc_configured_addressesN) rfrrrrxrfr poutput_jsonr)r;_optsecars r!do_get_euicc_configured_addresseszGCardApplicationISDR.AddlShellCommands.do_get_euicc_configured_addressess`%44TY_5HJbJdJdf~C A I " "#5a8T6U#V#V W W W W Wr DP_ADDRESSz&Default SM-DP+ address as UTF-8 stringc0tt|jg}t|jjj|t}|}|j t|ddS)z.Perform an ES10a SetDefaultDpAddress function.rrset_default_dp_addressN) rqr]rrfrrrrxrrr)r;rsdda_cmdsddars rdo_set_default_dp_addressz?CardApplicationISDR.AddlShellCommands.do_set_default_dp_addresss|+5Edo5^5^5^4_```H&55dio6I8UhiiD A I " "#5a8P6Q#R#R S S S S Srct|jjjt t }|}|jt|ddS)z,Perform an ES10b GetEUICCChallenge function.get_euicc_challengeN) rfrrrrxrwrrrr;rgecrs rdo_get_euicc_challengez9=56& 837/0(<3N3N3N2OPPPF$33DIO4GQeffB A I " "#5a8Q6R#S#S T T T T Trc(ttdgg}t|jjj|t}|}|jt|ddS)z!Perform an ES10c GetEID function.rrrrN) r3rrfrrrrxrrr)r;rrrrs r do_get_eidz0CardApplicationISDR.AddlShellCommands.do_get_eidsy"WdV-D-D-D,EFFFG%44TY_5H'S_``C A I " "#5a8H6I#J#J K K K K Krz--profile-nicknamezNickname of the profileICCIDz*ICCID of the profile whose nickname to setcd|jpd}t|jt|g}t |}t |jjj |t}| }|j t|ddS)z&Perform an ES10c SetNickname function.rrset_nickname_respN)profile_nicknamerrrr8rfrrrrxr=rrr)r;rnicknamesn_cmd_contentssn_cmdsnrs rdo_set_nicknamez5CardApplicationISDR.AddlShellCommands.do_set_nickname*s,2H$TZ888/RZ:[:[:[\O#_===F$33DIO4GQ`aaB A I " "#5a8K6L#M#M N N N N Nrct|jjjt t }|}|jt|ddS)z5Perform an ES10c GetCerts() function on an IoT eUICC.get_certs_respN) rfrrrrxr?rJrrr)r;rgcrs r do_get_certsz2CardApplicationISDR.AddlShellCommands.do_get_certs4s]$33DIO4GXdeeB A I " "#5a8H6I#J#J K K K K Krct|jjjt t }|}|jt|ddS)zBPerform an ES10b GetEimConfigurationData function on an Iot eUICC.get_eim_configuration_dataN) rfrrrrxrdrrrrs rdo_get_eim_configuration_datazCCardApplicationISDR.AddlShellCommands.do_get_eim_configuration_data:sf%44TY_5HJaJcJc5LNNC A I " "#5a8T6U#V#V W W W W WrN)&rrrargparseArgumentParseres10x_store_data_parser add_argumentrwith_argparserrrset_def_dp_addr_parserrrrrrrem_notif_parserr-rren_prof_parseradd_mutually_exclusive_group en_prof_grprdis_prof_parser dis_prof_grprdel_prof_parser del_prof_grprmem_res_parserrrset_nickname_parserrrrrrrrsrs#:("9";";,,W;f,ggg  4 5 5 [ [ 6 5 [ X X X "9!8!:!:++L?g+hhh  3 4 4 T T 5 4 T Q Q Q  I I I  I I I  T T T 38244%%hS?r%sss  - . . T T / . T T T T 1022$AACC   4Y ZZZ  1R SSS##$8Ts#ttt  ^ , , Q Q - , Q2(133&CCEE !!,5Z![[[!!)2S!TTT$$%9,Ut$uuu  _ - - R R . - R2(133&CCEE !!,5Z![[[!!)2S!TTT  _ - - Q Q . - Q1022##$:<)J $ L L L##$CL)^ $ ` ` `##$:<)C $ E E E  ^ , , U U - , U  L L L6h577(()=D](^^^((7c(ddd  0 1 1 O O 2 1 O L L L  X X X X Xrrs)rw)rrrrn staticmethodrr rTupler r~rr*robjectrpr rrs __classcell__rvs@rrfrfMsj*****4444 4W\]cem]mWn444\4 Oz\*I_IIII\I 5v5&5555 :;;~X~X~X~X~XJ~X~X<;~X~X~X~X~XrrfcleZdZdedefdZfdZedGddeZ xZ S)CardApplicationECASDrr ct}|t||}t |dSrrrs rrpz+CardApplicationECASD.decode_select_responseBrrctdtd|j|j_|jxj|gz c_d|j_dS)Nz ADF.ECASDz?ECASD (eUICC Controlling Authority Security Domain) Applicationrhrl)rmrn AID_ECASDrprqrrrsrtrus rrnzCardApplicationECASD.__init__Hsp ky_  a a a*.*E' D$:$:$<$<#==$)!!!rrceZdZdS)&CardApplicationECASD.AddlShellCommandsNrUrrrrsr$Ps rrs) rrrr rrprnr rrsrrs@rrrAs5v5&5555 *****:;;     J  <;     rrcBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP32r cLtddS)NzIoT eUICC (SGP.32)rirmrnrus rrnzCardProfileEuiccSGP32.__init__W% 233333rrxr Ncd|_|tt|t t dSNr#)cla_byte select_adfrorfrr?rJclsrxs r_try_match_cardz%CardProfileEuiccSGP32._try_match_cardZs?  y!!!**3 |LLLLLr rrrORDERrn classmethodrr1rrs@rr&r&Tsu E44444M/MdMMM[MMMMMrr&cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP22cLtddS)NzConsumer eUICC (SGP.22)r(r)rus rrnzCardProfileEuiccSGP22.__init__ds% 788888rrxr Nc|d|_|tt|}dSr,)r-r.rorfr)r0rxr.s rr1z%CardProfileEuiccSGP22._try_match_cardgs4  y!!!!))#..rr2rs@rr6r6ask E99999///d///[/////rr6cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP02cLtddS)NzM2M eUICC (SGP.02)r(r)rus rrnzCardProfileEuiccSGP02.__init__rr*rrxr Ncrd|_|t|ddS)Nr#r)r-r.r"get_datar/s rr1z%CardProfileEuiccSGP02._try_match_cardus3  y!!! Trr2rs@rr;r;osk E44444/d[rr;)rHr  constructrrrrrrr osmocom.utilsr osmocom.tlvosmocom.constructpySim.exceptionsr pySim.utilsr rpySim.commandsrpySim.ts_102_221rpySim.global_platformpySim BER_TLV_IErglobal_platformDataCollectionpossible_nestedappendr*r1boolr5Adapterr7ror{ror"AID_ISD_P_FILEAID_ISD_P_MODULErOrTFciTemplateNestedListrZr]rcrfrirqrsrwryr}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r rrrrrrr r"r$r&r+r-r/r1r3r5r8r:r=r?rArDrGrJrLrNrPrUrWrYr`rbrdCardApplicationSDrfrr&r6r;rrrrUs$.;;;;;;;;;;;;8888888888 ))))))4444444444******,,,,,,)))))zt))))$4;;HEEE0 00000W000nUU1f--.. 9 8 88ZT     G]F^         *$u/D/Z0R/S0T    *****zt*********JD****     zv?OQ^>_    88888*$8888     *&:JL_9`    ZT     7G    *$:4     JDBVAW         zt=Q@]1I=Zc1EwP_ 1a    kkkkk:4kkkk     *&:N9O    """"" """"******$****)))))JD))))     :69FZ;NPU;W         zt=Q         ZT;-    HHHHH:4HHHH     *&.J^9_    *$eeeee:4eeee     gu5E         zv7H+6V          ~    KKKKKJDKKKK     8I;7W             @@@@@:4@@@@     zvw6F          ~    99999:49999KKKKK*$KKKK     *&,         :6;-    zt     :67H2E    *********     ZVUCSUb2c    *****JD*********jd****WWWWW WWWW""""":4"""""""""zt""""(((((:4((((     :4T`9IK_9a         jdU=V    rXrXrXrXrX%/ArXrXrXh     50B   & M M M M MO M M M / / / / /O / / /     O     r