isdZddlZddlmZmZmZmZddlmZmZm 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)sK((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_checksumr//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_checksumr3Gs s88b=A rceZdZdZdZdZdS)VersionAdapterzCconvert an EUICC Version (3-int array) to a textual representation.c6d|d|d|dfzS)Nz%u.%u.%urr1rselfobjcontextpaths r_decodezVersionAdapter._decodePs SVSVSV444rc@d|dDS)Nc,g|]}t|Srr2).0xs r z*VersionAdapter._encode..Ts///1A///r.)splitr8s r_encodezVersionAdapter._encodeSs // #////rN)rrr__doc__r=rErrrr5r5Ms8MM55500000rr5 A0000005591010FFFFFFFF8900000100 A0000005591010FFFFFFFF8900000200 A0000005591010FFFFFFFF8900000D00 A0000005591010FFFFFFFF8900000E00ceZdZeZdS)SupportedVersionNumberNrrrrrrrrrMrM^JJJrrMceZdZdS)"IsdrProprietaryApplicationTemplateNrrrrrrrRrRaDrrR)rnestedceZdZdS) FciTemplateNrSrrrrXrXfrTrrXoc$eZdZeeZdS)DefaultDpAddressNrrr Utf8Adapterrrrrrr[r[l[))JJJrr[c$eZdZeeZdS) RootDsAddressNr\rrrraranr^rraceZdZdS)EuiccConfiguredAddressesNrSrrrrdrdpDrrdi<c*eZdZeeddZdS)SetDefaultDpAddrResr)okundefinedErrorNrrrEnumInt8ubrrrrrgrgts$f3777JJJrrgceZdZdS)SetDefaultDpAddressNrSrrrrorovrerroi?c$eZdZedZdS)EuiccChallengeN)rrrBytesrrrrrqrqzsrJJJrrqceZdZdS)GetEuiccChallengeNrSrrrruru|rerrui.ceZdZeZdS)SVNNrrr VersionTyperrrrrwrwrOrrwceZdZeZdS)SubjectKeyIdentifierNrNrrrr{r{rOrr{ceZdZdS)EuiccCiPkiListForVerificationNrSrrrr~r~rerr~ceZdZdS)EuiccCiPkiListForSigningNrSrrrrrrerrceZdZdS) EuiccInfo1NrSrrrrrrerri ceZdZeZdS)ProfileVersionNrxrrrrrrOrrceZdZeZdS)EuiccFirmwareVerNrxrrrrrrOrrceZdZeZdS)ExtCardResourceNrNrrrrrrOrrceZdZeZdS)UiccCapabilityNrNrrrrrrOrrceZdZeZdS)TS102241VersionNrxrrrrrrOrrceZdZeZdS)GlobalPlatformVersionNrxrrrrrrOrrceZdZeZdS) RspCapabilityNrNrrrrrrOrrc.eZdZeeddddZdS) EuiccCategoryrr1r7rG)other basicEuicc mediumEuicccontactlessEuiccNrkrrrrrs)fA!UVWWWJJJrrceZdZeZdS) PpVersionNrxrrrrrrOrrc$eZdZeeZdS)SsAcreditationNumberNr\rrrrrr^rr c*eZdZeeddZdS)IpaModerr1)ipadipeaNrkrrrrrs$f11---JJJrrceZdZeZdS) IotVersionNrxrrrrrrOrrceZdZdS) IotVersionSeqNrSrrrrrrerrceZdZdS)IotSpecificInfoNrSrrrrrrerrceZdZdS) EuiccInfo2NrSrrrrrs  Drri"c HeZdZeedeeddddz ZdS)ProfileMgmtOperationpmor_@r"rr)installenabledisabledeleteN)rrrrByterrrrrrrs;eIIdDW[dh$i$i$iijjJJJrrceZdZdS)ListNotificationReqNrSrrrrrrerri(c"eZdZeZdS) SeqNumberNrrrAsn1DerIntegerrrrrrr!!JJJrrc$eZdZeeZdS)NotificationAddressNr\rrrrrr^rrc$eZdZeeZdS)IccidN)rrrPaddedBcdAdapterrrrrrrrs!!+..JJJrrceZdZdS)NotificationMetadataNrSrrrrrrTrri/ceZdZdS)NotificationMetadataListNrSrrrrrrerrc(eZdZeedZdS)ListNotificationsResultErrorrh)rjNrkrrrrrs"fS111JJJrrceZdZdS)ListNotificationRespNrSrrrrrrTrrc,eZdZeedddZdS)DeleteNotificationStatusrr1rhrinothingToDeleterjNrkrrrrr&fAcJJJJJJrrceZdZdS)NotificationSentReqNrSrrrrrrerri0ceZdZdS)NotificationSentRespNrSrrrrrrerrceZdZdS)LoadCRLNrSrrrrrrerri5c$eZdZeeZdS)TagListN)rrrrrmrrrrrrsV$$JJJrr\ceZdZdS)ProfileInfoListReqNrSrrrrrrerri-ceZdZeZdS)IsdpAidNrNrrrrrrOrrOc*eZdZeeddZdS) ProfileStaterr1)disabledenabledNrkrrrrrs$fq!444JJJrripc$eZdZeeZdS)ProfileNicknameNr\rrrrrr^rrc$eZdZeeZdS)ServiceProviderNameNr\rrrrrr^rrc$eZdZeeZdS) ProfileNameNr\rrrrrr^rrc*eZdZeeddZdS)IconTyperr1)jpgpngNrkrrrrrs$f!+++JJJrrceZdZeZdS)IconNrNrrrrrrOrrc,eZdZeedddZdS) ProfileClassrr1r7)test provisioning operationalNrkrrrrrs&f11!DDDJJJrrceZdZdS) ProfileInfoNrSrrrrrs DrrceZdZdS)ProfileInfoSeqNrSrrrrrrerrc*eZdZeeddZdS)ProfileInfoListErrorr1r7)incorrectInputValuesrjNrkrrrrrs$f1QGGGJJJrrceZdZdS)ProfileInfoListRespNrSrrrrrrerrceZdZeZdS) RefreshFlagN)rrrrmrrrrrrsJJJrrc 4eZdZeedddddddZd S) EnableResultrr1r7rGr|rh)riiccidOrAidNotFoundprofileNotInDisabledStatedisallowedByPolicywrongProfileReenablingcatBusyrjNrkrrrr r s:fqTU)*1a`ceeeJJJrr ceZdZdS)ProfileIdentifierNrSrrrrrrerrceZdZdS)EnableProfileReqNrSrrrrrrerri1ceZdZdS)EnableProfileRespNrSrrrrrrerrc 2eZdZeeddddddZdS) DisableResultrr1r7rGr rh)rir profileNotInEnabledStaterrrjNrkrrrrrs7fqST)*AcKKKJJJrrceZdZdS)DisableProfileReqNrSrrrrrrerri2ceZdZdS)DisableProfileRespNrSrrrrrrerrc0eZdZeedddddZdS) DeleteResultrr1r7rGrh)rir r rrjNrkrrrrrs5fqTU)*3@@@JJJrrceZdZdS)DeleteProfileReqNrSrrrr!r! rerr!i3ceZdZdS)DeleteProfileRespNrSrrrr#r# rerr#c,eZdZeedddZdS) ResetOptionsr_rr")deleteOperationalProfilesdeleteFieldLoadedTestProfilesresetDefaultSmdpAddressN)rrrrrrrrrr%r%s.44_c37999JJJrr%c,eZdZeedddZdS) ResetResultrr1rhrNrkrrrr*r*rrr*ceZdZdS)EuiccMemoryResetReqNrSrrrr,r,rerr,i4ceZdZdS)EuiccMemoryResetRespNrSrrrr.r.rerr.ceZdZeZdS)EidValueNrNrrrr0r0rOrr0ceZdZdS) GetEuiccDataNrSrrrr2r2rerr2i>c$eZdZeeZdS)SnrProfileNicknameNr\rrrr4r4!r^rr4ceZdZdS)SetNicknameReqNrSrrrr7r7#rerr7i)c,eZdZeedddZdS)SetNicknameResultrr1rh)ri iccidNotFoundrjNrkrrrr9r9%s&f!CHHHJJJrr9ceZdZdS)SetNicknameRespNrSrrrr<r<'rerr<ceZdZdS) GetCertsReqNrSrrrr>r>+rerr>iVceZdZeZdS)EumCertificateNrNrrrr@r@-rOrr@ceZdZeZdS)EuiccCertificateNrNrrrrCrC/rOrrCc*eZdZeeddZdS) GetCertsErrorr1rh) invalidCiPKIdrjNrkrrrrFrF1s$fAcBBBJJJrrFceZdZdS) GetCertsRespNrSrrrrIrI3rerrIc$eZdZeeZdS)EimIdNr\rrrrKrK7r^rrKc$eZdZeeZdS)EimFqdnNr\rrrrMrM9r^rrMc,eZdZeedddZdS) EimIdTyper1r7rG) eimIdTypeOid eimIdTypeFqdneimIdTypeProprietaryNrkrrrrOrO;s'f1ATUVVVJJJrrOc"eZdZeZdS) CounterValueNrrrrrTrT=rrrTc"eZdZeZdS)AssociationTokenNrrrrrVrV?rrrVc0eZdZeedddddZdS)EimSupportedProtocolrr1r7rGr|)eimRetrieveHttpseimRetrieveCoapseimInjectHttpseimInjectCoapseimProprietaryNrkrrrrXrXAs3fq1UVgh%&(((JJJrrXceZdZdS)EimConfigurationDataNrSrrrr_r_ErTrr_ceZdZdS)EimConfigurationDataSeqNrSrrrraraHrerraceZdZdS)GetEimConfigurationDataNrSrrrrcrcJrerrciUc 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_identityr9 __class__s rrmzCardApplicationISDR.__init__Nsp kyO  Q Q Q*.*E' D$:$:$<$<#==$)!!!r9000scctx_doexp_swrc\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%s00r7)r)send_apdu_checksw)rwrxrycapdus 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)ryN)to_tlvr)r*rer}b2hfrom_tlvh2b) rwcmd_doresp_clsry 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)r2rrerto_dictrflatten_dict_lists)rwged_cmdgedds rget_eidzCardApplicationISDR.get_eidssh$)@)@)@(ABBB!00g|LL KKMM%a(8&9::;GHHHrdata_hexct}|t||}t |dSN fci_templaterXrrrrr9rtrs rroz*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)rer}_cmdlchanrwr)r9opts_datars rdo_es10x_store_dataz9CardApplicationISDR.AddlShellCommands.do_es10x_store_datas*/99$)/:MtzZZLUCCCrct|jjjt t }|}|jt|ddS)z6Perform an ES10a GetEuiccConfiguredAddresses function.euicc_configured_addressesN) rerrrrwrdr poutput_jsonr)r9_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) ror[rrerrrrwrrr)r9rsdda_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) rerrrrwrurrrr9rgecrs 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) r2rrerrrrwrrr)r9rrrrs 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_nicknamerrrr7rerrrrwr<rrr)r9rnicknamesn_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) rerrrrwr>rIrrr)r9rgcrs 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) rerrrrwrcrrrrs 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_parserrrrrrrrrrs#:("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 Xrrr)rv)rrrrm staticmethodrr rTupler r}rr(robjectror rrr __classcell__rus@rrereMsj*****4444 4W\]cem]mWn444\4 Oz\*I_IIII\I 5v5&5555 :;;~X~X~X~X~XJ~X~X<;~X~X~X~X~XrrecleZdZdedefdZfdZedGddeZ xZ S)CardApplicationECASDrrct}|t||}t |dSrrrs rroz+CardApplicationECASD.decode_select_responseBrrctdtd|j|j_|jxj|gz c_d|j_dS)Nz ADF.ECASDz?ECASD (eUICC Controlling Authority Security Domain) Applicationrgrk)rlrm AID_ECASDrorprqrrrsrts rrmzCardApplicationECASD.__init__Hsp ky_  a a a*.*E' D$:$:$<$<#==$)!!!rrceZdZdS)&CardApplicationECASD.AddlShellCommandsNrSrrrrrr#Ps rrr) rrrr rrormr rrrrrs@rrrAs5v5&5555 *****:;;     J  <;     rrcBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP32r cLtddS)NzIoT eUICC (SGP.32)rhrlrmrts rrmzCardProfileEuiccSGP32.__init__W% 233333rrwrNcd|_|tt|t t dSNr!)cla_byte select_adfrnrerr>rIclsrws r_try_match_cardz%CardProfileEuiccSGP32._try_match_cardZs?  y!!!**3 |LLLLLr rrrORDERrm classmethodrr0rrs@rr%r%Tsu E44444M/MdMMM[MMMMMrr%cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP22cLtddS)NzConsumer eUICC (SGP.22)r'r(rts rrmzCardProfileEuiccSGP22.__init__ds% 788888rrwrNc|d|_|tt|}dSr+)r,r-rnrer)r/rwr,s rr0z%CardProfileEuiccSGP22._try_match_cardgs4  y!!!!))#..rr1rs@rr5r5ask E99999///d///[/////rr5cBeZdZdZfdZededdfdZxZS)CardProfileEuiccSGP02cLtddS)NzM2M eUICC (SGP.02)r'r(rts rrmzCardProfileEuiccSGP02.__init__rr)rrwrNcrd|_|t|ddS)Nr!r)r,r-r!get_datar.s rr0z%CardProfileEuiccSGP02._try_match_cardus3  y!!! Trr1rs@rr:r:osk E44444/d[rr:)rFr constructrrrrrrr osmocom.utilsr osmocom.tlvosmocom.constructpySim.exceptionsr pySim.utilsr rpySim.commandsrpySim.ts_102_221rpySim.global_platformpySim BER_TLV_IErglobal_platformDataCollectionpossible_nestedappendr(r/boolr3Adapterr5rmryrnr!AID_ISD_P_FILEAID_ISD_P_MODULErMrRFciTemplateNestedListrXr[rardrgrorqrurwr{r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrr!r#r%r*r,r.r0r2r4r7r9r<r>r@rCrFrIrKrMrOrTrVrXr_rarcCardApplicationSDrerr%r5r:rrrrTs$.;;;;;;;;;;;;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