
    is                        d Z ddlZddlmZmZmZmZ ddlmZmZm	Z	 ddl
mZ ddlT ddlT ddlmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlZ G d ded          Zej        j        j                            e           defdZ de!fdZ" G d de#          Z$ e$ ede%                    Z&dZ'dZ(dZ)dZ* G d ded          Z+ G d dede+g          Z, G d  d!ed"ej        j-        e,gz             Z. G d# d$ed%          Z/ G d& d'ed(          Z0 G d) d*ed+e/e0g          Z1 G d, d-ed%          Z2 G d. d/ed0e/e2g          Z3 G d1 d2ed%          Z4 G d3 d4ed5e4g          Z5 G d6 d7ed          Z6 G d8 d9ed:          Z7 G d; d<ed=e7g          Z8 G d> d?ed@e7g          Z9 G dA dBedCe6e8e9g          Z: G dD dEed(          Z; G dF dGedH          Z< G dI dJedK          Z= G dL dMedN          Z> G dO dPedQ          Z? G dR dSedT          Z@ G dU dVedW          ZA G dX dYedZ          ZB G d[ d\ed:          ZC G d] d^ed_          ZD G d` daedb          ZE G dc dded%          ZF G de dfedgeFg          ZG G dh diedjeGg          ZH G dk dledme;e6e<e=e>e?e@eAe8e9eBeCeDeEeHg          ZI G dn doed(          ZJ G dp dqedreJg          ZK G ds dted%          ZL G du dved_          ZM G dw dxed          ZN G dy dzed{eLeJeMeNg          ZO G d| d}edgeOg          ZP G d~ ded(          ZQ G d dedrePeQg          ZR G d ded%          ZS G d dedeLg          ZT G d dedeSg          ZU G d dedg           ZV G d ded          ZW G d dedeWg          ZX G d ded          ZY G d ded          ZZ G d dedb          Z[ G d ded          Z\ G d ded          Z] G d ded          Z^ G d dedj          Z_ G d ded          Z` G d dedeNeYeZe[e\e]e^e_e`g	          Za G d dedgeag          Zb G d ded(          Zc G d dedebecg          Zd G d ded(          Ze G d ded%          Zf G d dedgeYeNg          Zg G d dedegeeg          Zh G d dedefg          Zi G d ded%          Zj G d dedegeeg          Zk G d dedejg          Zl G dÄ ded%          Zm G dń dedeYeNg          Zn G dȄ dedemg          Zo G dʄ ded          Zp G d̄ ded%          Zq G d΄ dedepg          Zr G dф dedeqg          Zs G dӄ ded          Zt G dՄ dedeWetg          Zu G d؄ dedڬ          Zv G dۄ dedeNevg          Zw G dބ ded%          Zx G d dedexg          Zy G d ded          Zz G d ded          Z{ G d ded          Z| G d ded(          Z} G d dede{e|e}g          Z~ G d ded%          Z G d ded(          Z G d ded          Z G d dedH          Z G d dedK          Z G d dedT          Z G d ded%eeeeeeg          Z G d dedgeg          Z G d d edeg          Z G d dej        j                  Z G d dej        j                  Z G d de          Z G d d	e          Z G d
 de          ZdS (  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)ArrayStruct	FlagsEnumGreedyRange)cmd2
CommandSetwith_default_category)Hexstr)*)SwMatchError)r
   SwHexstr
SwMatchstr)SimCardCommands)CardProfileUICCc                   $    e Zd Z ee          ZdS )Sgp02EidN)__name__
__module____qualname__
BcdAdapterGreedyBytes
_construct     9/home/jenkins/workspace/simtester-sanitize/pySim/euicc.pyr   r   )   s        K((JJJr   r   Z   )tagreturnc                 ^   t          | t                    rYt          |           dk    r| dz  } n0t          |           dk    r| dd         dz   } nt          d          t	          |           }n$t          | t                    r| }|dz  r||dz  z  }d|d	z  z
  }||z  }t          |          S )
zYCompute and add/replace check digits of an EID value according to GSMA SGP.29 Section 10.   00    Nzand EID must be 30 or 32 digitsd   b   a   )
isinstancestrlen
ValueErrorint)eideid_intcsums      r   compute_eid_checksumr/   /   s    #s %s88r>>4KCCXX^^crc(T/CC>???c((	C		 %S= 	%w}$G 2DtOGw<<r   c                 .    t          |           dz  dk    S )zLVerify the check digits of an EID value according to GSMA SGP.29 Section 10.r&      r+   )r,   s    r   verify_eid_checksumr3   G   s     s88b=Ar   c                       e Zd ZdZd Zd ZdS )VersionAdapterzCconvert an EUICC Version (3-int array) to a textual representation.c                 6    d|d         |d         |d         fz  S )Nz%u.%u.%ur   r1      r   selfobjcontextpaths       r   _decodezVersionAdapter._decodeP   s     SVSVSV444r   c                 @    d |                     d          D             S )Nc                 ,    g | ]}t          |          S r   r2   ).0xs     r   
<listcomp>z*VersionAdapter._encode.<locals>.<listcomp>T   s    ///1A///r   .)splitr8   s       r   _encodezVersionAdapter._encodeS   s     //		#////r   N)r   r   r   __doc__r=   rE   r   r   r   r5   r5   M   s8        MM5 5 50 0 0 0 0r   r5       A0000005591010FFFFFFFF8900000100 A0000005591010FFFFFFFF8900000200 A0000005591010FFFFFFFF8900000D00 A0000005591010FFFFFFFF8900000E00c                       e Zd ZeZdS )SupportedVersionNumberNr   r   r   r   r   r   r   r   rM   rM   ^           JJJr   rM      c                       e Zd ZdS )"IsdrProprietaryApplicationTemplateNr   r   r   r   r   r   rR   rR   a           Dr   rR      )r   nestedc                       e Zd ZdS )FciTemplateNrS   r   r   r   rX   rX   f   rT   r   rX   o   c                   $    e Zd Z ee          ZdS )DefaultDpAddressNr   r   r   Utf8Adapterr   r   r   r   r   r[   r[   l           [))JJJr   r[      c                   $    e Zd Z ee          ZdS )RootDsAddressNr\   r   r   r   ra   ra   n   r^   r   ra      c                       e Zd ZdS )EuiccConfiguredAddressesNrS   r   r   r   rd   rd   p           Dr   rd   i<  c                   *    e Zd Z eedd          ZdS )SetDefaultDpAddrResr      )okundefinedErrorNr   r   r   EnumInt8ubr   r   r   r   rg   rg   t   s$        f3777JJJr   rg   c                       e Zd ZdS )SetDefaultDpAddressNrS   r   r   r   ro   ro   v   re   r   ro   i?  c                   $    e Zd Z ed          ZdS )EuiccChallenge   N)r   r   r   Bytesr   r   r   r   rq   rq   z   s        rJJJr   rq   c                       e Zd ZdS )GetEuiccChallengeNrS   r   r   r   ru   ru   |   re   r   ru   i.  c                       e Zd ZeZdS )SVNNr   r   r   VersionTyper   r   r   r   rw   rw      rO   r   rw   c                       e Zd ZeZdS )SubjectKeyIdentifierNrN   r   r   r   r{   r{      rO   r   r{      c                       e Zd ZdS )EuiccCiPkiListForVerificationNrS   r   r   r   r~   r~      re   r   r~      c                       e Zd ZdS )EuiccCiPkiListForSigningNrS   r   r   r   r   r      re   r   r      c                       e Zd ZdS )
EuiccInfo1NrS   r   r   r   r   r      re   r   r   i   c                       e Zd ZeZdS )ProfileVersionNrx   r   r   r   r   r      rO   r   r   c                       e Zd ZeZdS )EuiccFirmwareVerNrx   r   r   r   r   r      rO   r   r      c                       e Zd ZeZdS )ExtCardResourceNrN   r   r   r   r   r      rO   r   r      c                       e Zd ZeZdS )UiccCapabilityNrN   r   r   r   r   r      rO   r   r      c                       e Zd ZeZdS )TS102241VersionNrx   r   r   r   r   r      rO   r   r      c                       e Zd ZeZdS )GlobalPlatformVersionNrx   r   r   r   r   r      rO   r   r      c                       e Zd ZeZdS )RspCapabilityNrN   r   r   r   r   r      rO   r   r      c                   .    e Zd Z eedddd          ZdS )EuiccCategoryr   r1   r7   rG   )other
basicEuiccmediumEuicccontactlessEuiccNrk   r   r   r   r   r      s)        fA!UVWWWJJJr   r      c                       e Zd ZeZdS )	PpVersionNrx   r   r   r   r   r      rO   r   r   c                   $    e Zd Z ee          ZdS )SsAcreditationNumberNr\   r   r   r   r   r      r^   r   r      c                   *    e Zd Z eedd          ZdS )IpaModer   r1   )ipadipeaNrk   r   r   r   r   r      s$        f11---JJJr   r      c                       e Zd ZeZdS )
IotVersionNrx   r   r   r   r   r      rO   r   r   c                       e Zd ZdS )IotVersionSeqNrS   r   r   r   r   r      re   r   r      c                       e Zd ZdS )IotSpecificInfoNrS   r   r   r   r   r      re   r   r      c                       e Zd ZdS )
EuiccInfo2NrS   r   r   r   r   r      s        
 	Dr   r   i"  c                   H    e Zd Z eed eedddd          z            ZdS )ProfileMgmtOperationpmor_   @   r"   rr   )installenabledisabledeleteN)r   r   r   r   Byter   r   r   r   r   r   r      s;        eIIdDW[dh$i$i$iijjJJJr   r   c                       e Zd ZdS )ListNotificationReqNrS   r   r   r   r   r      re   r   r   i(  c                   "    e Zd Z e            ZdS )	SeqNumberNr   r   r   Asn1DerIntegerr   r   r   r   r   r              !!JJJr   r   c                   $    e Zd Z ee          ZdS )NotificationAddressNr\   r   r   r   r   r      r^   r   r   c                   $    e Zd Z ee          ZdS )IccidN)r   r   r   PaddedBcdAdapterr   r   r   r   r   r   r      s        !!+..JJJr   r   c                       e Zd ZdS )NotificationMetadataNrS   r   r   r   r   r      rT   r   r   i/  c                       e Zd ZdS )NotificationMetadataListNrS   r   r   r   r   r      re   r   r   c                   (    e Zd Z eed          ZdS )ListNotificationsResultErrorrh   )rj   Nrk   r   r   r   r   r      s"        fS111JJJr   r   c                       e Zd ZdS )ListNotificationRespNrS   r   r   r   r   r      rT   r   r   c                   ,    e Zd Z eeddd          ZdS )DeleteNotificationStatusr   r1   rh   ri   nothingToDeleterj   Nrk   r   r   r   r   r      &        fAcJJJJJJr   r   c                       e Zd ZdS )NotificationSentReqNrS   r   r   r   r   r      re   r   r   i0  c                       e Zd ZdS )NotificationSentRespNrS   r   r   r   r   r      re   r   r   c                       e Zd ZdS )LoadCRLNrS   r   r   r   r   r      re   r   r   i5  c                   $    e Zd Z ee          ZdS )TagListN)r   r   r   r   rm   r   r   r   r   r   r      s        V$$JJJr   r   \   c                       e Zd ZdS )ProfileInfoListReqNrS   r   r   r   r   r      re   r   r   i-  c                       e Zd ZeZdS )IsdpAidNrN   r   r   r   r   r      rO   r   r   O   c                   *    e Zd Z eedd          ZdS )ProfileStater   r1   )disabledenabledNrk   r   r   r   r   r      s$        fq!444JJJr   r   ip  c                   $    e Zd Z ee          ZdS )ProfileNicknameNr\   r   r   r   r   r      r^   r   r   c                   $    e Zd Z ee          ZdS )ServiceProviderNameNr\   r   r   r   r   r      r^   r   r      c                   $    e Zd Z ee          ZdS )ProfileNameNr\   r   r   r   r   r      r^   r   r      c                   *    e Zd Z eedd          ZdS )IconTyper   r1   )jpgpngNrk   r   r   r   r   r      s$        f!+++JJJr   r      c                       e Zd ZeZdS )IconNrN   r   r   r   r   r      rO   r   r   c                   ,    e Zd Z eeddd          ZdS )ProfileClassr   r1   r7   )testprovisioningoperationalNrk   r   r   r   r   r      s&        f11!DDDJJJr   r      c                       e Zd ZdS )ProfileInfoNrS   r   r   r   r   r      s         	Dr   r      c                       e Zd ZdS )ProfileInfoSeqNrS   r   r   r   r  r     re   r   r  c                   *    e Zd Z eedd          ZdS )ProfileInfoListErrorr1   r7   )incorrectInputValuesrj   Nrk   r   r   r   r  r     s$        f1QGGGJJJr   r  c                       e Zd ZdS )ProfileInfoListRespNrS   r   r   r   r  r     re   r   r  c                       e Zd ZeZdS )RefreshFlagN)r   r   r   rm   r   r   r   r   r  r     s        JJJr   r  c            
       4    e Zd Z eeddddddd          Zd	S )
EnableResultr   r1   r7   rG   r|      rh   )ri   iccidOrAidNotFoundprofileNotInDisabledStatedisallowedByPolicywrongProfileReenablingcatBusyrj   Nrk   r   r   r   r
  r
     s:        fqTU)*1a`ce e eJJJr   r
  c                       e Zd ZdS )ProfileIdentifierNrS   r   r   r   r  r     re   r   r  c                       e Zd ZdS )EnableProfileReqNrS   r   r   r   r  r     re   r   r  i1  c                       e Zd ZdS )EnableProfileRespNrS   r   r   r   r  r     re   r   r  c            	       2    e Zd Z eedddddd          ZdS )	DisableResultr   r1   r7   rG   r  rh   )ri   r  profileNotInEnabledStater  r  rj   Nrk   r   r   r   r  r     s7        fqST)*AcK K KJJJr   r  c                       e Zd ZdS )DisableProfileReqNrS   r   r   r   r  r    re   r   r  i2  c                       e Zd ZdS )DisableProfileRespNrS   r   r   r   r  r    re   r   r  c                   0    e Zd Z eeddddd          ZdS )DeleteResultr   r1   r7   rG   rh   )ri   r  r  r  rj   Nrk   r   r   r   r  r    s5        fqTU)*3@ @ @JJJr   r  c                       e Zd ZdS )DeleteProfileReqNrS   r   r   r   r!  r!  
  re   r   r!  i3  c                       e Zd ZdS )DeleteProfileRespNrS   r   r   r   r#  r#    re   r   r#  c                   ,    e Zd Z eeddd          ZdS )ResetOptionsr_   r   r"   )deleteOperationalProfilesdeleteFieldLoadedTestProfilesresetDefaultSmdpAddressN)r   r   r   r   r   r   r   r   r   r%  r%    s.        44_c379 9 9JJJr   r%  c                   ,    e Zd Z eeddd          ZdS )ResetResultr   r1   rh   r   Nrk   r   r   r   r*  r*    r   r   r*  c                       e Zd ZdS )EuiccMemoryResetReqNrS   r   r   r   r,  r,    re   r   r,  i4  c                       e Zd ZdS )EuiccMemoryResetRespNrS   r   r   r   r.  r.    re   r   r.  c                       e Zd ZeZdS )EidValueNrN   r   r   r   r0  r0    rO   r   r0  c                       e Zd ZdS )GetEuiccDataNrS   r   r   r   r2  r2    re   r   r2  i>  c                   $    e Zd Z ee          ZdS )SnrProfileNicknameNr\   r   r   r   r4  r4  !  r^   r   r4     c                       e Zd ZdS )SetNicknameReqNrS   r   r   r   r7  r7  #  re   r   r7  i)  c                   ,    e Zd Z eeddd          ZdS )SetNicknameResultr   r1   rh   )ri   iccidNotFoundrj   Nrk   r   r   r   r9  r9  %  s&        f!CHHHJJJr   r9  c                       e Zd ZdS )SetNicknameRespNrS   r   r   r   r<  r<  '  re   r   r<  c                       e Zd ZdS )GetCertsReqNrS   r   r   r   r>  r>  +  re   r   r>  iV  c                       e Zd ZeZdS )EumCertificateNrN   r   r   r   r@  r@  -  rO   r   r@     c                       e Zd ZeZdS )EuiccCertificateNrN   r   r   r   rC  rC  /  rO   r   rC     c                   *    e Zd Z eedd          ZdS )GetCertsErrorr1   rh   )invalidCiPKIdrj   Nrk   r   r   r   rF  rF  1  s$        fAcBBBJJJr   rF  c                       e Zd ZdS )GetCertsRespNrS   r   r   r   rI  rI  3  re   r   rI  c                   $    e Zd Z ee          ZdS )EimIdNr\   r   r   r   rK  rK  7  r^   r   rK  c                   $    e Zd Z ee          ZdS )EimFqdnNr\   r   r   r   rM  rM  9  r^   r   rM  c                   ,    e Zd Z eeddd          ZdS )	EimIdTyper1   r7   rG   )eimIdTypeOideimIdTypeFqdneimIdTypeProprietaryNrk   r   r   r   rO  rO  ;  s'        f1ATUVVVJJJr   rO  c                   "    e Zd Z e            ZdS )CounterValueNr   r   r   r   rT  rT  =  r   r   rT  c                   "    e Zd Z e            ZdS )AssociationTokenNr   r   r   r   rV  rV  ?  r   r   rV  c                   0    e Zd Z eeddddd          ZdS )EimSupportedProtocolr   r1   r7   rG   r|   )eimRetrieveHttpseimRetrieveCoapseimInjectHttpseimInjectCoapseimProprietaryNrk   r   r   r   rX  rX  A  s3        fq1UVgh%&( ( (JJJr   rX  c                       e Zd ZdS )EimConfigurationDataNrS   r   r   r   r_  r_  E  rT   r   r_  c                       e Zd ZdS )EimConfigurationDataSeqNrS   r   r   r   ra  ra  H  re   r   ra  c                       e Zd ZdS )GetEimConfigurationDataNrS   r   r   r   rc  rc  J  re   r   rc  iU  c                        e Zd Z fdZeddedededeee	f         fd            Z
eddedefd            Zededefd	            Zd
edefdZ ed           G d de                      Z xZS )CardApplicationISDRc                     t                                          dt          d           | j        | j        _        | j        xj        |                                 gz  c_        d| j        _        d S )Nz	ADF.ISD-Rz/ISD-R (Issuer Security Domain Root) ApplicationnameaiddescEID)super__init__	AID_ISD_Rdecode_select_responseadfshell_commandsAddlShellCommandsscp_key_identityr9   	__class__s    r   rm  zCardApplicationISDR.__init__N  sp    kyO 	 	Q 	Q 	Q*.*E'D$:$:$<$<#==$)!!!r   9000scctx_doexp_swr   c                 \    dt          |          dz  |fz  }|                     ||          S )zzPerform STORE DATA according to Table 47+48 in Section 5.7.2 of SGP.22.
        Only single-block store supported for now.z80E29100%02x%s00r7   )r)   send_apdu_checksw)rw  rx  ry  capdus       r   
store_datazCardApplicationISDR.store_dataV  s3     #c%jj!mU%;;$$UF333r   c                 B   |r9|                                 }t          |          }|dk    rt          d          S nd}t                              | t          |          |          \  }}|r2|r. |            }|                    t          |                     |S |S dS )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   )ry  N)to_tlvr)   r*   re  r}  b2hfrom_tlvh2b)	rw  cmd_doresp_clsry  
cmd_do_enc
cmd_do_lendata_swresp_dos	            r   store_data_tlvz"CardApplicationISDR.store_data_tlv]  s      	JZJC!"DEEE   J)44S#j//RX4YYs 	 "(**  T+++4r   c                     t          t          dg          g          }t                              | |t                     }|                                }t          t          |d                   d                   S )Nr   decodedchildrenget_euicc_data	eid_value)r2  r   re  r  to_dictr  flatten_dict_lists)rw  ged_cmdgedds       r   get_eidzCardApplicationISDR.get_eids  sh    $)@)@)@(ABBB!00g|LLKKMM%a(8&9::;GHHHr   data_hexc                     t                      }|                    t          |                     |                                }t	          |d                   S Nfci_templaterX   r  r  r  r  r9   r  tr  s       r   ro  z*CardApplicationISDR.decode_select_responsez  C    MM	

3x==!!!IIKK!!N"3444r   Application-Specific Commandsc                   (   e Zd Z ej                    Ze                    dd            ej        e          d             Z	d Z
 ej                    Ze                    dd            ej        e          d             Zd	 Zd
 Zd Zd Z ej                    Ze                    ded            ej        e          d             Zd Z ej                    Ze                                Ze                    dd           e                    dd           e                    ddd            ej        e          d             Z ej                    Ze                                Ze                    dd           e                    dd           e                    ddd            ej        e          d             Z ej                    Ze                                Ze                    dd           e                    dd            ej        e          d             Z ej                    Ze                    ddd           e                    ddd            e                    d!dd"            ej        e          d#             Z d$ Z! ej                    Z"e"                    d%d&           e"                    d'd(            ej        e"          d)             Z#d* Z$d+ Z%d,S )-%CardApplicationISDR.AddlShellCommandsTX_DOz)Hexstring of encoded to-be-transmitted DO)helpc                 j    t                               | j        j        j        |j                  \  }}dS )zJPerform a raw STORE DATA command as defined for the ES10x eUICC interface.N)re  r}  _cmdlchanrw  r  )r9   opts_datar  s       r   do_es10x_store_dataz9CardApplicationISDR.AddlShellCommands.do_es10x_store_data  s*     /99$)/:MtzZZLUCCCr   c                     t                               | j        j        j        t                      t
                    }|                                }| j                            t          |d                              dS )z6Perform an ES10a GetEuiccConfiguredAddresses function.euicc_configured_addressesN)	re  r  r  r  rw  rd   r  poutput_jsonr  )r9   _optsecar  s       r   !do_get_euicc_configured_addresseszGCardApplicationISDR.AddlShellCommands.do_get_euicc_configured_addresses  s`    %44TY_5HJbJdJdf~CAI""#5a8T6U#V#VWWWWWr   
DP_ADDRESSz&Default SM-DP+ address as UTF-8 stringc                 0   t          t          |j                  g          }t                              | j        j        j        |t                     }|                                }| j        	                    t          |d                              dS )z.Perform an ES10a SetDefaultDpAddress function.r  r  set_default_dp_addressN)ro   r[   r  re  r  r  r  rw  r  r  r  )r9   r  sdda_cmdsddar  s        r   do_set_default_dp_addressz?CardApplicationISDR.AddlShellCommands.do_set_default_dp_address  s|     +5Edo5^5^5^4_```H&55dio6I8UhiiDAI""#5a8P6Q#R#RSSSSSr   c                     t                               | j        j        j        t                      t
                    }|                                }| j                            t          |d                              dS )z,Perform an ES10b GetEUICCChallenge function.get_euicc_challengeN)	re  r  r  r  rw  ru   r  r  r  r9   r  gecr  s       r   do_get_euicc_challengez<CardApplicationISDR.AddlShellCommands.do_get_euicc_challenge  s`    %44TY_5HJ[J]J]_pqqCAI""#5a8M6N#O#OPPPPPr   c                     t                               | j        j        j        t                      t
                    }|                                }| j                            t          |d                              dS )z+Perform an ES10b GetEUICCInfo (1) function.euicc_info1N)	re  r  r  r  rw  r   r  r  r  )r9   r  ei1r  s       r   do_get_euicc_info1z8CardApplicationISDR.AddlShellCommands.do_get_euicc_info1  \    %44TY_5H*,,XbccCAI""#5a6F#G#GHHHHHr   c                     t                               | j        j        j        t                      t
                    }|                                }| j                            t          |d                              dS )z+Perform an ES10b GetEUICCInfo (2) function.euicc_info2N)	re  r  r  r  rw  r   r  r  r  )r9   r  ei2r  s       r   do_get_euicc_info2z8CardApplicationISDR.AddlShellCommands.do_get_euicc_info2  r  r   c                     t                               | j        j        j        t                      t                    }|                                }| j                            t          |d                              dS )z+Perform an ES10b ListNotification function.list_notification_respN)
re  r  r  r  rw  r   r   r  r  r  )r9   r  lnr  s       r   do_list_notificationz:CardApplicationISDR.AddlShellCommands.do_list_notification  s`    $33DIO4GI\I^I^`tuuB

AI""#5a8P6Q#R#RSSSSSr   SEQ_NRz1Sequence Number of the to-be-removed notification)typer  c                 0   t          t          |j                  g          }t                              | j        j        j        |t                    }|	                                }| j        
                    t          |d                              dS )z5Perform an ES10b RemoveNotificationFromList function.r  r  notification_sent_respN)r   r   r  re  r  r  r  rw  r   r  r  r  )r9   r  rn_cmdrnr  s        r    do_remove_notification_from_listzFCardApplicationISDR.AddlShellCommands.do_remove_notification_from_list  s{     )9T[3Q3Q3Q2RSSSF$33DIO4GQeffB

AI""#5a8P6Q#R#RSSSSSr   c                     t                               | j        j        j        t                      t                    }|                                }| j                            t          |d                              dS )z*Perform an ES10c GetProfilesInfo function.profile_info_list_respN)
re  r  r  r  rw  r   r  r  r  r  )r9   r  pir  s       r   do_get_profiles_infoz:CardApplicationISDR.AddlShellCommands.do_get_profiles_info  s`    $33DIO4GI[I]I]_rssB

AI""#5a8P6Q#R#RSSSSSr   z
--isdp-aidz#Profile identified by its ISD-P AIDz--iccidzProfile identified by its ICCIDz--refresh-required
store_truezwhether a REFRESH is required)actionr  c                    |j         r%t          t          |j                   g          }n;|j        r%t          t	          |j                  g          }nt          d          |t          |j                  g}t          |          }t          
                    | j        j        j        |t                    }|                                }| j                            t#          |d                              dS )z(Perform an ES10c EnableProfile function.r  r  'Either ISD-P AID or ICCID must be givenenable_profile_respN)isdp_aidr  r   iccidr   r*   r  refresh_requiredr  re  r  r  r  rw  r  r  r  r  )r9   r  p_idep_cmd_contentsep_cmdepr  s          r   do_enable_profilez7CardApplicationISDR.AddlShellCommands.do_enable_profile  s     } L(74=3Q3Q3Q2RSSS L(53L3L3L2MNNN !!JKKK#[9N%O%O%OPO%???F$33DIO4GQbccB

AI""#5a8M6N#O#OPPPPPr   c                    |j         r%t          t          |j                   g          }n;|j        r%t          t	          |j                  g          }nt          d          |t          |j                  g}t          |          }t          
                    | j        j        j        |t                    }|                                }| j                            t#          |d                              dS )z)Perform an ES10c DisableProfile function.r  r  r  disable_profile_respN)r  r  r   r  r   r*   r  r  r  re  r  r  r  rw  r  r  r  r  r9   r  r  dp_cmd_contentsdp_cmddpr  s          r   do_disable_profilez8CardApplicationISDR.AddlShellCommands.do_disable_profile  s     } L(74=3Q3Q3Q2RSSS L(53L3L3L2MNNN !!JKKK#[9N%O%O%OPO&@@@F$33DIO4GQcddB

AI""#5a8N6O#P#PQQQQQr   c                    |j         rt          |j                   }n,|j        rt          |j                  }nt	          d          |g}t          |          }t                              | j        j	        j
        |t                    }|                                }| j                            t          |d                              dS )z(Perform an ES10c DeleteProfile function.r  r  r  delete_profile_respN)r  r   r  r   r*   r!  re  r  r  r  rw  r#  r  r  r  r  s          r   do_delete_profilez7CardApplicationISDR.AddlShellCommands.do_delete_profile  s     } Lt}555 LTZ000 !!JKKK#fO%???F$33DIO4GQbccB

AI""#5a8M6N#O#OPPPPPr   z--delete-operationalzDelete all operational profilesz--delete-test-field-installedz3Delete all test profiles, except pre-installed onesz--reset-smdp-addresszReset the SM-DP+ addressc                 r   i }|j         rd|d<   |j        rd|d<   |j        rd|d<   t          t	          |          g          }t
                              | j        j        j	        |t                    }|                                }| j                            t          |d                              dS )	zPerform an ES10c eUICCMemoryReset function. This will permanently delete the selected subset of
            profiles from the eUICC.Tr&  r'  r(  r  r  euicc_memory_reset_respN)delete_operationaldelete_test_field_installedreset_smdp_addressr,  r%  re  r  r  r  rw  r.  r  r  r  )r9   r  flagsmr_cmdmrr  s         r   do_euicc_memory_resetz;CardApplicationISDR.AddlShellCommands.do_euicc_memory_reset  s     E& :5912/ >9=56& 837/0(<3N3N3N2OPPPF$33DIO4GQeffB

AI""#5a8Q6R#S#STTTTTr   c                 (   t          t          dg          g          }t                              | j        j        j        |t                     }|                                }| j                            t          |d                              dS )z!Perform an ES10c GetEID function.r   r  r  r  N)
r2  r   re  r  r  r  rw  r  r  r  )r9   r  r  r  r  s        r   
do_get_eidz0CardApplicationISDR.AddlShellCommands.do_get_eid  sy    "WdV-D-D-D,EFFFG%44TY_5H'S_``CAI""#5a8H6I#J#JKKKKKr   z--profile-nicknamezNickname of the profileICCIDz*ICCID of the profile whose nickname to setc                 d   |j         pd}t          |j                  t          |          g}t	          |          }t
                              | j        j        j	        |t                    }|                                }| j                            t          |d                              dS )z&Perform an ES10c SetNickname function. r  r  set_nickname_respN)profile_nicknamer   r  r   r7  re  r  r  r  rw  r<  r  r  r  )r9   r  nicknamesn_cmd_contentssn_cmdsnr  s          r   do_set_nicknamez5CardApplicationISDR.AddlShellCommands.do_set_nickname*  s     ,2H$TZ888/RZ:[:[:[\O#_===F$33DIO4GQ`aaB

AI""#5a8K6L#M#MNNNNNr   c                     t                               | j        j        j        t                      t                    }|                                }| j                            t          |d                              dS )z5Perform an ES10c GetCerts() function on an IoT eUICC.get_certs_respN)
re  r  r  r  rw  r>  rI  r  r  r  )r9   r  gcr  s       r   do_get_certsz2CardApplicationISDR.AddlShellCommands.do_get_certs4  s]    $33DIO4GXdeeB

AI""#5a8H6I#J#JKKKKKr   c                     t                               | j        j        j        t                      t
                    }|                                }| j                            t          |d                              dS )zBPerform an ES10b GetEimConfigurationData function on an Iot eUICC.get_eim_configuration_dataN)	re  r  r  r  rw  rc  r  r  r  r  s       r   do_get_eim_configuration_datazCCardApplicationISDR.AddlShellCommands.do_get_eim_configuration_data:  sf    %44TY_5HJaJcJc5LN NCAI""#5a8T6U#V#VWWWWWr   N)&r   r   r   argparseArgumentParseres10x_store_data_parseradd_argumentr   with_argparserr  r  set_def_dp_addr_parserr  r  r  r  r  rem_notif_parserr+   r  r  en_prof_parseradd_mutually_exclusive_groupen_prof_grpr  dis_prof_parserdis_prof_grpr  del_prof_parserdel_prof_grpr  mem_res_parserr  r  set_nickname_parserr   r  r  r   r   r   rr  r    s        #:("9";";,,W;f,ggg		4	5	5	[ 	[ 
6	5	[	X 	X 	X "9!8!:!:++L?g+hhh		3	4	4	T 	T 
5	4	T	Q 	Q 	Q	I 	I 	I	I 	I 	I	T 	T 	T 38244%%hS?r%sss		-	.	.	T 	T 
/	.	T	T 	T 	T 1022$AACC  4Y ZZZ  1R SSS##$8Ts#ttt		^	,	,	Q 	Q 
-	,	Q 2(133&CCEE!!,5Z![[[!!)2S!TTT$$%9,Ut$uuu		_	-	-	R 	R 
.	-	R 2(133&CCEE!!,5Z![[[!!)2S!TTT		_	-	-	Q 	Q 
.	-	Q 1022##$:<)J 	$ 	L 	L 	L##$CL)^ 	$ 	` 	` 	`##$:<)C 	$ 	E 	E 	E 
	^	,	,	U 	U 
-	,	U 	L 	L 	L 6h577(()=D](^^^((7c(ddd		0	1	1	O 	O 
2	1	O	L 	L 	L	X 	X 	X 	X 	Xr   rr  )rv  )r   r   r   rm  staticmethodr   r
   r   Tupler   r}  r  r(   r  objectro  r	   r   rr  __classcell__ru  s   @r   re  re  M  sj       * * * * * 4 4 4 4
 4W\]cem]mWn 4 4 4 \4  O z    \* I_ I I I I \I5v 5& 5 5 5 5 :;;~X ~X ~X ~X ~XJ ~X ~X <;~X ~X ~X ~X ~Xr   re  c                   l     e Zd ZdedefdZ fdZ ed           G d de                      Z	 xZ
S )CardApplicationECASDr  r   c                     t                      }|                    t          |                     |                                }t	          |d                   S r  r  r  s       r   ro  z+CardApplicationECASD.decode_select_responseB  r  r   c                     t                                          dt          d           | j        | j        _        | j        xj        |                                 gz  c_        d| j        _        d S )Nz	ADF.ECASDz?ECASD (eUICC Controlling Authority Security Domain) Applicationrg  rk  )rl  rm  	AID_ECASDro  rp  rq  rr  rs  rt  s    r   rm  zCardApplicationECASD.__init__H  sp    ky_ 	 	a 	a 	a*.*E'D$:$:$<$<#==$)!!!r   r  c                       e Zd ZdS )&CardApplicationECASD.AddlShellCommandsNrS   r   r   r   rr  r#  P  s        r   rr  )r   r   r   r
   r  ro  rm  r	   r   rr  r  r  s   @r   r  r  A  s        5v 5& 5 5 5 5* * * * * :;;    J   <;    r   r  c                   B     e Zd ZdZ fdZededdfd            Z xZS )CardProfileEuiccSGP32r  c                 L    t                                          d           d S )NzIoT eUICC (SGP.32)rh  rl  rm  rt  s    r   rm  zCardProfileEuiccSGP32.__init__W  %    233333r   rw  r   Nc                     d|_         |                    t                     t                              |t                      t                     d S Nr!   )cla_byte
select_adfrn  re  r  r>  rI  clsrw  s     r   _try_match_cardz%CardProfileEuiccSGP32._try_match_cardZ  s?     y!!!**3|LLLLLr   	r   r   r   ORDERrm  classmethodr   r0  r  r  s   @r   r%  r%  T  su        E4 4 4 4 4 M/ Md M M M [M M M M Mr   r%  c                   B     e Zd ZdZ fdZededdfd            Z xZS )CardProfileEuiccSGP22   c                 L    t                                          d           d S )NzConsumer eUICC (SGP.22)r'  r(  rt  s    r   rm  zCardProfileEuiccSGP22.__init__d  s%    788888r   rw  r   Nc                 |    d|_         |                    t                     t                              |          }d S r+  )r,  r-  rn  re  r  )r/  rw  r,   s      r   r0  z%CardProfileEuiccSGP22._try_match_cardg  s4     y!!!!))#..r   r1  r  s   @r   r5  r5  a  sk        E9 9 9 9 9 // /d / / / [/ / / / /r   r5  c                   B     e Zd ZdZ fdZededdfd            Z xZS )CardProfileEuiccSGP02   c                 L    t                                          d           d S )NzM2M eUICC (SGP.02)r'  r(  rt  s    r   rm  zCardProfileEuiccSGP02.__init__r  r)  r   rw  r   Nc                 r    d|_         |                    t                     |                    d           d S )Nr!   r   )r,  r-  r!  get_datar.  s     r   r0  z%CardProfileEuiccSGP02._try_match_cardu  s3    y!!!Tr   r1  r  s   @r   r:  r:  o  sk        E4 4 4 4 4 / d    [    r   r:  )rF   r  	constructr   r   r   r   r   r   r	   osmocom.utilsr
   osmocom.tlvosmocom.constructpySim.exceptionsr   pySim.utilsr   r   pySim.commandsr   pySim.ts_102_221r   pySim.global_platformpySim
BER_TLV_IEr   global_platformDataCollectionpossible_nestedappendr(   r/   boolr3   Adapterr5   rm   ry   rn  r!  AID_ISD_P_FILEAID_ISD_P_MODULErM   rR   FciTemplateNestedListrX   r[   ra   rd   rg   ro   rq   ru   rw   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r!  r#  r%  r*  r,  r.  r0  r2  r4  r7  r9  r<  r>  r@  rC  rF  rI  rK  rM  rO  rT  rV  rX  r_  ra  rc  CardApplicationSDre  r  r%  r5  r:  r   r   r   <module>rT     s$   .  ; ; ; ; ; ; ; ; ; ; ; ; 8 8 8 8 8 8 8 8 8 8                     ) ) ) ) ) ) 4 4 4 4 4 4 4 4 4 4 * * * * * * , , , , , ,    ) ) ) ) )zt ) ) ) )   $ 4 ; ;H E E E    0    0 0 0 0 0W 0 0 0 nUU1f--.. 9	8	88     ZT    	 	 	 	 	G]F^ 	 	 	 	
	 	 	 	 	*$u/D/Z0R/S0T 	 	 	 	* * * * *zt * * * ** * * * *JD * * * *	 	 	 	 	zv?OQ^>_ 	 	 	 	8 8 8 8 8*$ 8 8 8 8	 	 	 	 	*&:JL_9` 	 	 	 	    ZT    	 	 	 	 	
7G 	 	 	 	    *$        :4    	 	 	 	 	JDBVAW 	 	 	 		 	 	 	 	zt=Q<R 	 	 	 		 	 	 	 	6SUm0n 	 	 	 	    ZT        zt        jd        ZT        jd        JD        JD    X X X X XJD X X X X    
    * * * * *:4 * * * *. . . . .jd . . . .        	 	 	 	 	JD* 	 	 	 		 	 	 	 	jdM? 	 	 	 		 	 	 	 	FVXg1?Rg1>@]1I=Zc1EwP_	1a 	 	 	 	k k k k k:4 k k k k	 	 	 	 	*&:N9O 	 	 	 	" " " " "
 " " " "* * * * **$ * * * */ / / / /JD / / / /	 	 	 	 	:69FZ;NPU;W 	 	 	 		 	 	 	 	zt=Q<R 	 	 	 	2 2 2 2 2:4 2 2 2 2	 	 	 	 	:6;S;W;Y 	 	 	 	
K K K K Kzt K K K K	 	 	 	 	*&) 	 	 	 		 	 	 	 	:6;S:T 	 	 	 		 	 	 	 	jfR 	 	 	 	% % % % %jd % % % %	 	 	 	 		 	 	 	 	    jd    5 5 5 5 5:6 5 5 5 5* * * * *jd * * * ** * * * **$ * * * ** * * * **$ * * * *, , , , ,zt , , , ,    :4    E E E E E:4 E E E E	 	 	 	 	*$wo0C[RZ\`0<0> 	 	 	 		 	 	 	 	ZT;- 	 	 	 	H H H H H:4 H H H H	 	 	 	 	*&.J^9_ 	 	 	 	    *$    e e e e e:4 e e e e	 	 	 	 	
gu5E 	 	 	 		 	 	 	 	zv7H+6V 	 	 	 		 	 	 	 	
~ 	 	 	 	K K K K KJD K K K K	 	 	 	 	
8I;7W 	 	 	 		 	 	 	 	 	 	 	 	@ @ @ @ @:4 @ @ @ @	 	 	 	 	zvw6F 	 	 	 		 	 	 	 	
~ 	 	 	 	9 9 9 9 9:4 9 9 9 9K K K K K*$ K K K K	 	 	 	 	*&, 	 	 	 		 	 	 	 	:6;- 	 	 	 	    zt    	 	 	 	 	:67H2E 	 	 	 	* * * * * * * * *	 	 	 	 	ZVU<N4O 	 	 	 	I I I I I
 I I I I	 	 	 	 	jf6G5H 	 	 	 		 	 	 	 	*& 	 	 	 	    ZT        zt    C C C C CJD C C C C	 	 	 	 	:6>CSUb2c 	 	 	 	* * * * *JD * * * ** * * * *jd * * * *W W W W W
 W W W W" " " " ":4 " " " "" " " " "zt " " " "( ( ( ( (:4 ( ( ( (	 	 	 	 	:4T`9IK_9a 	 	 	 		 	 	 	 	jd<P;Q 	 	 	 		 	 	 	 	jf>U=V 	 	 	 	rX rX rX rX rX%/A rX rX rXh    50B   &M M M M MO M M M/ / / / /O / / /
 
 
 
 
O 
 
 
 
 
r   