
    di(                     6   d Z ddlmZmZmZmZ ddlT ddlT ddlT ddl	T ddl
mZmZmZmZmZ ddlmZmZ ddlmZ ddlT ddlZddlmZ i d	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0Z G d1 d2e          Z G d3 d4e          Z G d5 d6e          Z G d7 d8e          Z G d9 d:e          Z  G d; d<e          Z! G d= d>e          Z" G d? d@e          Z# G dA dBe$          Z%dCdDdEdFiZ& G dG dHe'          Z(dS )Iz/
Various constants from 3GPP TS 31.103 V18.1.0
    )StructSwitchthisGreedyString)*)EF_ADEF_SMSEF_SMSSEF_SMSREF_SMSP)ADF_USIMEF_FromPreferred)EF_UServiceTableN)EF_ARR   zP-CSCF address   z(Generic Bootstrapping Architecture (GBA)   zHTTP Digest   z+GBA-based Local Key Establishment Mechanism   z3Support of P-CSCF discovery for IMS Local Break Out   zShort Message Storage (SMS)   z#Short Message Status Reports (SMSR)   zVSupport for SM-over-IP including data download via SMS-PP as defined in TS 31.111 [31]	   z%Communication Control for IMS by ISIM
   zSupport of UICC access to IMS   zURI support by UICC   zMedia Type support   zIMS call disconnection cause   z(URI support for MO SHORT MESSAGE CONTROL   MCPTT   zAURI support for SMS-PP DOWNLOAD as defined in 3GPP TS 31.111 [31]   zFrom PreferredzIMS configuration datazXCAP Configuration Dataz
WebRTC URIzMuD and MiD configuration datazIMS Data Channel indication)               c                   N     e Zd ZdddifgZ G d ded          Zd fd	Z xZS )EF_IMPIf803137333830303630303030303031303140696d732e6d6e633030302e6d63633733382e336770706e6574776f726b2e6f7267naiz1738006000000101@ims.mnc000.mcc738.3gppnetwork.orgc                   $    e Zd Z ee          ZdS )EF_IMPI.naiN__name__
__module____qualname__Utf8AdapterGreedyBytes
_construct     =/home/jenkins/workspace/simtester-sanitize/pySim/ts_31_103.pyr+   r-   F            [--


r6      tag6f02r   EF.IMPIIMS private user identityc                 f     t                      j        d||||d| t          j        | _        d S Nfidsfidnamedescr5   )super__init__r)   r+   _tlvselfrB   rC   rD   rE   kwargs	__class__s         r7   rG   zEF_IMPI.__init__I   s8    LSt$TLLVLLLK			r6   )r<   r   r=   r>   )r/   r0   r1   _test_de_encode
BER_TLV_IEr+   rG   __classcell__rL   s   @r7   r)   r)   @   s        
rF
H	KO
. . . . .jd . . . .                   r6   r)   c                   N     e Zd ZdddifgZ G d ded          Zd fd	Z xZS )	EF_DOMAINF8021696d732e6d6e633030302e6d63633733382e336770706e6574776f726b2e6f7267domainz!ims.mnc000.mcc738.3gppnetwork.orgc                   $    e Zd Z ee          ZdS )EF_DOMAIN.domainNr.   r5   r6   r7   rT   rV   S   r8   r6   r9   r:   6f03r   	EF.DOMAINHome Network Domain Namec                 f     t                      j        d||||d| t          j        | _        d S r@   )rF   rG   rR   rT   rH   rI   s         r7   rG   zEF_DOMAIN.__init__V   s9    LSt$TLLVLLL$			r6   )rW   r   rX   rY   )r/   r0   r1   rM   rN   rT   rG   rO   rP   s   @r7   rR   rR   N   s        
R9
;	>O. . . . . . . . .% % % % % % % % % %r6   rR   c                   N     e Zd ZdddifgZ G d ded          Zd fd	Z xZS )EF_IMPUn80357369703a37333830303630303030303031303140696d732e6d6e633030302e6d63633733382e336770706e6574776f726b2e6f7267impuz5sip:738006000000101@ims.mnc000.mcc738.3gppnetwork.orgc                   $    e Zd Z ee          ZdS )EF_IMPU.impuNr.   r5   r6   r7   r^   r`   `   r8   r6   r9   r:   6f04r   EF.IMPUIMS public user identityc                 f     t                      j        d||||d| t          j        | _        d S r@   )rF   rG   r\   r^   rH   rI   s         r7   rG   zEF_IMPU.__init__c   s8    LSt$TLLVLLLL			r6   )ra   r   rb   rc   )r/   r0   r1   rM   rN   r^   rG   rO   rP   s   @r7   r\   r\   [   s        
zK
M	PO. . . . .zt . . . .! ! ! ! ! ! ! ! ! !r6   r\   c                   \     e Zd Z fdZ ed           G d de                      Z xZS )EF_ISTc                     t                                          dddddt                     | xj        |                                 gz  c_        d S )N6f07r   zEF.ISTzISIM Service Table)r   N)rF   rG   
EF_IST_mapshell_commandsAddlShellCommands)rJ   rK   rL   s     r7   rG   zEF_IST.__init__i   sP    x1EyR\]]] 6 6 8 899r6   zFile-Specific Commandsc                   0     e Zd Z fdZd Zd Zd Z xZS )EF_IST.AddlShellCommandsc                 H    t                                                       d S N)rF   rG   rJ   rL   s    r7   rG   z!EF_IST.AddlShellCommands.__init__p   s    GGr6   c                 |    | j         j        j        }|                    | j         t	          |          gg            dS )z Activate a service within EF.ISTN_cmdlchanselected_file
ust_updateintrJ   argru   s      r7   do_ist_service_activatez0EF_IST.AddlShellCommands.do_ist_service_activates   s6     IO9M$$TYS
B?????r6   c                 |    | j         j        j        }|                    | j         g t	          |          g           dS )z"Deactivate a service within EF.ISTNrr   rx   s      r7   do_ist_service_deactivatez2EF_IST.AddlShellCommands.do_ist_service_deactivatex   s6     IO9M$$TYSXXJ?????r6   c                     | j         j        j        }|                    | j                   }| j                             d|z             dS )a  Check consistency between services of this file and files present/activated.

            Many services determine if one or multiple files shall be present/activated or if they shall be
            absent/deactivated.  This performs a consistency check to ensure that no services are activated
            for files that are not - and vice-versa, no files are activated for services that are not.  Error
            messages are printed for every inconsistency found.z/===> %u service / file inconsistencies detectedN)rs   rt   ru   ust_service_checkpoutput)rJ   ry   ru   num_problemss       r7   do_ist_service_checkz-EF_IST.AddlShellCommands.do_ist_service_check}   sH     !IO9M(::49EELIOR^^_____r6   )r/   r0   r1   rG   rz   r|   r   rO   rP   s   @r7   rk   rm   n   sr        	 	 	 	 		@ 	@ 	@
	@ 	@ 	@
		` 		` 		` 		` 		` 		` 		`r6   rk   )r/   r0   r1   rG   with_default_category
CommandSetrk   rO   rP   s   @r7   rf   rf   h   s        : : : : :
 344` ` ` ` `J ` ` 54` ` ` ` `r6   rf   c                   t     e Zd Zdddddifdddddifd	dd
ddifgZ G d ded          Zd fd	Z xZS )EF_PCSCF\802c0070637363662e696d732e6d6e633030302e6d63633733382e7075622e336770706e6574776f726b2e6f7267pcscf_addressz+pcscf.ims.mnc000.mcc738.pub.3gppnetwork.orgFQDN)addresstype_of_address800501c0a80c22z192.168.12.34IPv4&801102fe800000000000000042d7fffe530335zfe80::42:d7ff:fe53:335IPv6c                       e Zd Z ed eeddd          z  d eej         e	e
           ee
           ee
          d          z            ZdS )EF_PCSCF.PcscfAddressr   r   r   r   )r   r   r   r   N)r/   r0   r1   r   EnumByter   r   r   r2   r3   Ipv4AdapterIpv6Adapterr4   r5   r6   r7   PcscfAddressr      s        V-dd4aaa.P.P.PP%ffT-A6Ak+6N6N6Ak+6N6N6Ak+6N6N.P .P'Q 'Q QR R


r6   r   r9   r:   6f09N	EF.P-CSCFP-CSCF Addressc                 f     t                      j        d||||d| t          j        | _        d S r@   )rF   rG   r   r   rH   rI   s         r7   rG   zEF_PCSCF.__init__   s9    LSt$TLLVLLL)			r6   )r   Nr   r   )r/   r0   r1   rM   rN   r   rG   rO   rP   s   @r7   r   r      s        
h)Vkqss
u	x
VUU
W	Z
2)AV\^^
`	cOR R R R Rzt R R R R* * * * * * * * * *r6   r   c                         e Zd Zd fd	Z xZS )EF_GBABP6fd5NEF.GBABPGBA Bootstrappingc                      t                      j        d||||d| t          dt          z  dt          z  dt          z            | _        d S )NrA   randb_tidkey_lifetimer5   )rF   rG   r   LVr4   rI   s         r7   rG   zEF_GBABP.__init__   sU    LSt$TLLVLLL !(!/!24 4r6   )r   Nr   r   r/   r0   r1   rG   rO   rP   s   @r7   r   r      s=        4 4 4 4 4 4 4 4 4 4r6   r   c                        e Zd Z G d ded          Z G d ded          Z G d d	eeeg
          Zd fd	Z xZ	S )EF_GBANLc            	           e Zd Z ed e eej        j        dz
                      z  d ed          z            Z	dS )EF_GBANL.NAF_IDfqdnr   ua_spiN)
r/   r0   r1   r   r2   Bytesr   _	total_lenr4   r5   r6   r7   NAF_IDr      sT        VF;;uuTV5Ea5G/H/H#I#II$UU1XX-/ /


r6   r   r9   r:   c                   $    e Zd Z ee          ZdS )EF_GBANL.B_TIDNr.   r5   r6   r7   B_TIDr      r8   r6   r      c                       e Zd ZdS )EF_GBANL.GbaNlCollectionN)r/   r0   r1   r5   r6   r7   GbaNlCollectionr      s        r6   r   )nested6fd7NEF.GBANLGBA NAF Listc                 f     t                      j        d||||d| t          j        | _        d S r@   )rF   rG   r   r   rH   rI   s         r7   rG   zEF_GBANL.__init__   s9    LSt$TLLVLLL,			r6   )r   Nr   r   )
r/   r0   r1   rN   r   r   TLV_IE_Collectionr   rG   rO   rP   s   @r7   r   r      s        / / / / / / / / /. . . . .
 . . . .    +VUO    - - - - - - - - - -r6   r   c                   X     e Zd ZdddifdddifgZ G d ded	          Zd fd	Z xZS )	EF_NAFKCAV80296273662e696d732e6d6e633030302e6d63633733382e7075622e336770706e6574776f726b2e6f7267naf_key_centre_addressz)bsf.ims.mnc000.mcc738.pub.3gppnetwork.orgd8030656e65746e61667830312e696d732e6d6e633030302e6d63633733382e7075622e336770706e6574776f726b2e6f7267z0enetnafx01.ims.mnc000.mcc738.pub.3gppnetwork.orgc                   $    e Zd Z ee          ZdS )EF_NAFKCA.NafKeyCentreAddressNr.   r5   r6   r7   NafKeyCentreAddressr      r8   r6   r   r9   r:   6fddN	EF.NAFKCANAF Key Centre Addressc                 f     t                      j        d||||d| t          j        | _        d S r@   )rF   rG   r   r   rH   rI   s         r7   rG   zEF_NAFKCA.__init__   s9    LSt$TLLVLLL1			r6   )r   Nr   r   )r/   r0   r1   rM   rN   r   rG   rO   rP   s   @r7   r   r      s        
b$&Q
S	V
p$&X
Z	\O. . . . .jd . . . .2 2 2 2 2 2 2 2 2 2r6   r   c                   *     e Zd Z	 	 d fd	Zd Z xZS )	ADF_ISIMa0000000871004TADF.ISIMNISIM Applicationc                 H   t                                          ||||||           t                      t                      t	                      t                      t          dd          t                      t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d	          t!          d
          t#          d          t%          d          t'          d          t)          d          t+          d          t-          d          t/          d          g}|                     |           | xj        t5          j                    gz  c_        d S )N)aidhas_fsrB   rC   rD   rE   6f06r   r   )servicer   )r   r   )r   r   r   r   r"   r#   r$   r%   r&   r'   )rF   rG   r)   rR   r\   r   r   rf   r   r   r   r   r	   r
   r   r   EF_UICCIARIr   EF_IMSConfigDataEF_XCAPConfigDataEF_WebRTCURIEF_MuDMiDConfigDataEF_AC_GBAUAPI	EF_IMSDCI	add_filesrj   r   rk   )	rJ   r   r   rD   rB   rC   rE   filesrL   s	           r7   rG   zADF_ISIM.__init__   s|   SSt$UYZZZ IIKKIIGG64  HHQQQa   5!!!E"""E"""A###R(((R(((b)))$$$+++!$$$b!!!-
0 	u : < <==r6   c                 J    t           j        j                            |          S ro   )pySim
ts_102_221CardProfileUICCdecode_select_response)rJ   data_hexs     r7   r   zADF_ISIM.decode_select_response   s    /FFxPPPr6   )r   Tr   NNr   )r/   r0   r1   rG   r   rO   rP   s   @r7   r   r      sZ        Z^(> > > > > >@Q Q Q Q Q Q Qr6   r   zSecurity managementz#Authentication error, incorrect MACz4Authentication error, security context not supported)98629864c                        e Zd Z fdZ xZS )CardApplicationISIMc                 r    t                                          dt                      t                     d S )NISIM)adfsw)rF   rG   r   sw_isimrp   s    r7   rG   zCardApplicationISIM.__init__   s,    XZZG<<<<<r6   r   rP   s   @r7   r   r      s8        = = = = = = = = =r6   r   ))__doc__	constructr   r   r   r   osmocom.utilsosmocom.tlvosmocom.constructpySim.filesystempySim.ts_51_011r   r	   r
   r   r   pySim.ts_31_102r   r   pySim.ts_31_102_telecomr   pySim.ts_31_103_sharedpySim.ts_102_221r   r   ri   TransparentEFr)   rR   
LinFixedEFr\   rf   r   r   r   r   CardADFr   r   CardApplicationr   r5   r6   r7   <module>r      s   , 9 8 8 8 8 8 8 8 8 8 8 8                 D D D D D D D D D D D D D D 6 6 6 6 6 6 6 6 4 4 4 4 4 4 $ $ $ $     # # # # # #1 } 4	
 < $ , _ . '   & 2   K!" #$ 	!!(%-  
4         m      
% 
% 
% 
% 
% 
% 
% 
%
! 
! 
! 
! 
!j 
! 
! 
!` ` ` ` ` ` ` `D* * * * *z * * **4 4 4 4 4} 4 4 4- - - - -z - - -2 2 2 2 2
 2 2 2"Q "Q "Q "Q "Qw "Q "Q "QN 5F = = = = =/ = = = = =r6   