)}g(tdZddlZddlmZmZmZmZddlmZmZm 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?c6eZdZeedZdS)EuiccChallengeN)rrr HexAdapterBytesrrrrrsrszs%EE"II&&JJJrrsceZdZdS)GetEuiccChallengeNrUrrrrxrx|rgrrxi.ceZdZeZdS)SVNNrrr VersionTyperrrrrzrzrQrrzc$eZdZeeZdS)SubjectKeyIdentifierNrrrrurrrrrr~r~rrr~ceZdZdS)EuiccCiPkiListForVerificationNrUrrrrrrgrrceZdZdS)EuiccCiPkiListForSigningNrUrrrrrrgrrceZdZdS) EuiccInfo1NrUrrrrrrgrri ceZdZeZdS)ProfileVersionNr{rrrrrrQrrceZdZeZdS)EuiccFirmwareVerNr{rrrrrrQrrc$eZdZeeZdS)ExtCardResourceNrrrrrrrrrc$eZdZeeZdS)UiccCapabilityNrrrrrrrrrceZdZeZdS)TS102241VersionNr{rrrrrrQrrceZdZeZdS)GlobalPlatformVersionNr{rrrrrrQrrc$eZdZeeZdS) RspCapabilityNrrrrrrrrrc.eZdZeeddddZdS) EuiccCategoryrr3r9rI)other basicEuicc mediumEuicccontactlessEuiccNrmrrrrrs)fA!UVWWWJJJrrceZdZeZdS) PpVersionNr{rrrrrrQrrc$eZdZeeZdS)SsAcreditationNumberNr^rrrrrr`rr c*eZdZeeddZdS)IpaModerr3)ipadipeaNrmrrrrrs$f11---JJJrrceZdZeZdS) IotVersionNr{rrrrrrQrrceZdZdS) 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-c$eZdZeeZdS)IsdpAidNrrrrrrrrrOc*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)ProfileInfoListRespNrUrrrr r rgrr ceZdZeZdS) RefreshFlagN)rrrrorrrrr r sJJJrr c 4eZdZeedddddddZd S) EnableResultrr3r9rIrrj)rkiccidOrAidNotFoundprofileNotInDisabledStatedisallowedByPolicywrongProfileReenablingcatBusyrlNrmrrrr r s:fqTU)*1a`ceeeJJJrr ceZdZdS)ProfileIdentifierNrUrrrrrrgrrceZdZdS)EnableProfileReqNrUrrrrrrgrri1ceZdZdS)EnableProfileRespNrUrrrrrrgrrc 2eZdZeeddddddZdS) DisableResultrr3r9rIrrj)rkrprofileNotInEnabledStaterrrlNrmrrrrrs7fqST)*AcKKKJJJrrceZdZdS)DisableProfileReqNrUrrrrrrgrri2ceZdZdS)DisableProfileRespNrUrrrr r rgrr c0eZdZeedddddZdS) DeleteResultrr3r9rIrj)rkrrrrlNrmrrrr"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)EuiccMemoryResetRespNrUrrrr1r1rgrr1c$eZdZeeZdS)EidValueNrrrrr3r3rrr3ceZdZdS) GetEuiccDataNrUrrrr5r5rgrr5i>c$eZdZeeZdS)SnrProfileNicknameNr^rrrr7r7!r`rr7ceZdZdS)SetNicknameReqNrUrrrr:r:#rgrr:i)c,eZdZeedddZdS)SetNicknameResultrr3rj)rk iccidNotFoundrlNrmrrrr<r<%s&f!CHHHJJJrr<ceZdZdS)SetNicknameRespNrUrrrr?r?'rgrr?ceZdZdS) GetCertsReqNrUrrrrArA+rgrrAiVceZdZeZdS)EumCertificateNrPrrrrCrC-rQrrCceZdZeZdS)EuiccCertificateNrPrrrrFrF/rQrrFc*eZdZeeddZdS) GetCertsErrorr3rj) invalidCiPKIdrlNrmrrrrIrI1s$fAcBBBJJJrrIceZdZdS) GetCertsRespNrUrrrrLrL3rgrrLc$eZdZeeZdS)EimIdNr^rrrrNrN7r`rrNc$eZdZeeZdS)EimFqdnNr^rrrrPrP9r`rrPc,eZdZeedddZdS) EimIdTyper3r9rI) eimIdTypeOid eimIdTypeFqdneimIdTypeProprietaryNrmrrrrRrR;s'f1ATUVVVJJJrrRc"eZdZeZdS) CounterValueNrrrrrWrW=rrrWc"eZdZeZdS)AssociationTokenNrrrrrYrY?rrrYc0eZdZeedddddZdS)EimSupportedProtocolrr3r9rIr)eimRetrieveHttpseimRetrieveCoapseimInjectHttpseimInjectCoapseimProprietaryNrmrrrr[r[As3fq1UVgh%&(((JJJrr[ceZdZdS)EimConfigurationDataNrUrrrrbrbErVrrbceZdZdS)EimConfigurationDataSeqNrUrrrrdrdHrgrrdceZdZdS)GetEimConfigurationDataNrUrrrrfrfJrgrrfiUc 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 rrpzCardApplicationISDR.__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)rzr{r|capdus 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)r|N)to_tlvr+r,rhrb2hfrom_tlvh2b) rzcmd_doresp_clsr| 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 |ddS)Nrdecodedchildrenget_euicc_data eid_value)r5rrhrto_dictflatten_dict_lists)rzged_cmdgedds rget_eidzCardApplicationISDR.get_eidss_$)@)@)@(ABBB!00g|LL KKMM!!$4"566{CCrdata_hexct}|t||}t |dSN fci_templaterZrrrrr;rtrs rrrz*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)rhr_cmdlchanrzr)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) rhrrrrzrfr 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]rrhrrrrzrrr)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) rhrrrrzrxrrrr;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) r5rrhrrrrzrrr)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_nicknamerrrr:rhrrrrzr?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) rhrrrrzrArLrrr)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) rhrrrrzrfrrrrs 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_parserrrr rrrrurs#:("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 Xrru)ry)rrrrp staticmethodrr rTupler rrr*robjectrrr rru __classcell__rxs@rrhrhMsj*****4444 4W\]cem]mWn444\4 Oz\*D_DDDD\D 5v5&5555 :;;~X~X~X~X~XJ~X~X<;~X~X~X~X~XrrhcleZdZdedefdZfdZedGddeZ xZ S)CardApplicationECASDrr ct}|t||}t |dSrrrs rrrz+CardApplicationECASD.decode_select_responseBrrctdtd|j|j_|jxj|gz c_d|j_dS)Nz ADF.ECASDz?ECASD (eUICC Controlling Authority Security Domain) Applicationrjrn)rorp AID_ECASDrrrsrtrurvrws rrpzCardApplicationECASD.__init__Hsp ky_  a a a*.*E' D$:$:$<$<#==$)!!!rrceZdZdS)&CardApplicationECASD.AddlShellCommandsNrUrrrrur&Ps rru) rrrr rrrrpr rrurrs@rr!r!As5v5&5555 *****:;;     J  <;     rr!cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP32rcLtddS)NzIoT eUICC (SGP.32)rkrorprws rrpzCardProfileEuiccSGP32.__init__W% 233333rrzr Ncd|_|tt|t t dSNr#)cla_byte select_adfrqrhrrArLclsrzs r_try_match_cardz%CardProfileEuiccSGP32._try_match_cardZs?  y!!!**3 |LLLLLr rrrORDERrp classmethodrr3rrs@rr(r(Tsu E44444M/MdMMM[MMMMMrr(cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP22cLtddS)NzConsumer eUICC (SGP.22)r*r+rws rrpzCardProfileEuiccSGP22.__init__ds% 788888rrzr Nc|d|_|tt|}dSr.)r/r0rqrhr)r2rzr.s rr3z%CardProfileEuiccSGP22._try_match_cardgs4  y!!!!))#..rr4rs@rr8r8ask E99999///d///[/////rr8cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP02cLtddS)NzM2M eUICC (SGP.02)r*r+rws rrpzCardProfileEuiccSGP02.__init__rr,rrzr Ncrd|_|t|ddS)Nr#r)r/r0r$get_datar1s rr3z%CardProfileEuiccSGP02._try_match_cardus3  y!!! Trr4rs@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|rqr$AID_ISD_P_FILEAID_ISD_P_MODULErOrTFciTemplateNestedListrZr]rcrfrirqrsrxrzr~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r rrrrrr r"r$r&r(r-r/r1r3r5r7r:r<r?rArCrFrIrLrNrPrRrWrYr[rbrdrfCardApplicationSDrhr!r(r8r=rrrrWs$.;;;;;;;;;;;;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