a #|f@7@sdZddlZddlTddlTddgZddgZddgZddgZdd gZdd gZ dd gZ dd gZ dd gZ d Z d ZdZdZdZdZgdZgdegdZGdddZGdddZGdddZdZdZGdddeZdS)a Gadgets to modify SYSMO USIM SJS1 parameters (C) 2017 by Sysmocom s.f.m.c. GmbH All Rights Reserved Author: Philipp Maier This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . N)*o)rrr)aOr)rrrrr rrPUSim1rrrrrrrrrrrc@sbeZdZgdZgdZgdZgdZgdZdZdZ dZ dZ d Z dd d Z d dZddZd S)SYSMO_USIMSJS1_FILE_EF_MLNGC)rrrrrrrrrrrrrrrr)rrrrrrrrrrrrrrrr)rrrrrrrrrrrrrrrr)rrrrrrrrrrrrrrrr )rrrrrrrrrrrrrrrr@r `NcCs|dkr dSt|dkrdS|dd|_|dd|_|dd|_|dd|_|dd|_|d|_|d|_|d |_|d |_ |d |_ dS) Nrrrr#0r"rQRrT) lenC1C2C3C4C5R1R2R3R4R5selfcontentr7}/home/jenkins/workspace/master-sysmo-usim-tool/a1/default/a2/default/a3/default/a4/default/label/simtester/sysmo_usim_sjs1.py__init__js     z%SYSMO_USIMSJS1_FILE_EF_MLNGC.__init__cCsdt|jd}|dt|jd7}|dt|jd7}|dt|jd7}|dt|jd7}|dtt|jd7}|dtt|j d7}|d tt|j d7}|d tt|j d7}|d tt|j 7}|S) Nz C1:  z C2: z C3: z C4: z C5: z R1: z R2: z R3: z R4: z R5: ) hexdumpr*r+r,r-r.strhexr/r0r1r2r3)r5dumpr7r7r8__str__zsz$SYSMO_USIMSJS1_FILE_EF_MLNGC.__str__cCs>|j|j|j|j|j}||j|j|j|j|j g7}|S)N) r*r+r,r-r.r/r0r1r2r3r5outr7r7r8encodesz#SYSMO_USIMSJS1_FILE_EF_MLNGC.encode)N)__name__ __module__ __qualname__r*r+r,r-r.r/r0r1r2r3r9r?rBr7r7r7r8r!Ws  r!c@sJeZdZdZdZdZdZdZde>Zde>Z d ddZ d d Z d d Z dS)SYSMO_USIMSJS1_FILE_EF_SQNCrTFriNcCs|dkr dSt|dkr&tdt||dd@|_t|dd@|_t|dd@|_t|dd@|_t|ddd |_t|dd |j?|_ t|d d|j?|_ dS) Nunexpected length of %u bytesrrr#r"rr rr) r) ValueError ind_size_bitsboolsqn_check_enabledsqn_age_limit_enabledsqn_max_delta_enabled list_to_int sqnms_offset max_delta age_limitr4r7r7r8r9s z$SYSMO_USIMSJS1_FILE_EF_SQNC.__init__cCsd}d}|d||jf7}|d||jf7}|d||jf7}|d||jf7}|d||jf7}|d||jf7}|d ||jf7}|S) N z%sIND (bits): %u z%sSQN Check enabled: %u z%sSQN Age Limit enabled: %u z%sSQN Max Delta enabled: %u z$%sSQNms Offset (into SQN array): %u z%sMax Delta: %u z%sAge Limit: %u )rJrLrMrNrPrQrR)r5pfxr>r7r7r8r?sz#SYSMO_USIMSJS1_FILE_EF_SQNC.__str__cCsttdd}|jd@|d<|jr2|ddO<|jrH|ddO<|jr^|ddO<|jdd@|d <|jdd ?|d <|t|jd7}|t|j d7}|S) Nrr rGrr#r"rrrrr) listrangerJrLrMrNrP int_to_listrQrRr@r7r7r8rBsz"SYSMO_USIMSJS1_FILE_EF_SQNC.encode)N) rCrDrErJrLrMrNrPrQrRr9r?rBr7r7r7r8rFs  rFc@s*eZdZgZd ddZddZddZdS) SYSMO_USIMSJS1_FILE_EF_SQNArcCs|dkr,tdd|D]}|jdqdSt|dd|krNtdt|tdd|D](}d|}|jt|||dq\dS)NrrrrH)rW seq_arrayappendr)rIrO)r5r6Zindioffsetr7r7r8r9sz$SYSMO_USIMSJS1_FILE_EF_SQNA.__init__cCs8d}d}tt|jD]}|d|||j|f7}q|S)NrSrTz%sSEQ[%03d]: %u )rWr)rZ)r5rUr>r\r7r7r8r?s z#SYSMO_USIMSJS1_FILE_EF_SQNA.__str__cCs"g}|jD]}|t|d7}q |S)Nr)rZrX)r5rAr\r7r7r8rBs z"SYSMO_USIMSJS1_FILE_EF_SQNA.encodeN)r)rCrDrErZr9r?rBr7r7r7r8rYs rY))rZMILENAGE)r Z COMP128v1)r zXOR-2G)rGBA)rZ COMP128v2)rZ COMP128v3)rzXOR-3G)rzCIS-B))rZOP)rZOPcc@seZdZddZddZd!ddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd S)"Sysmo_usim_sjs1cCst|ddS)NzA3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 43 20 07 18 00 00 01 A5) Sysmo_usimr9)r5r7r7r8r9szSysmo_usim_sjs1.__init__cCs~td|td|jt|jjddd}tdtdt|jttt|jvrjtdntd td dS) NzReading SIM-Mode... * Reading...&rrec_noz, * Current status of Record No. 1 in EF.DIR:rS ==> USIM application enabled ==> USIM application disabledrT) print_initsimselectGSM_USIM_EF_DIR read_recordr;apduSYSMO_USIM_AIDr5resr7r7r8 show_sim_modes  zSysmo_usim_sjs1.show_sim_modeTcCstd||rt}ndgtt}tdtdt|ttt|vrZtdntdtd|jt|jj |dd td dS) NzProgramming SIM-Mode...rz' * New status of Record No.1 in EF.DIR:rSrerf * Programming...rrcrT) rgrhSYSMO_USIM_EF_DIR_REC_1_CONTENTr)r;rnrirjrk update_record)r5Z usim_enabledZ new_recordr7r7r8write_sim_modes  zSysmo_usim_sjs1.write_sim_modecCstd|td|jt|jt|d}|jdd\}}tdtd|tt |ftd|tt |ftddS)Nz$Reading Authentication parameters...rarz * Current algorithm setting: 2G: %d=%s 3G: %d=%srT) rgrhrirjSYSMO_USIMSJS1_DF_AUTHSYSMO_USIMSJS1_EF_AUTH _read_binaryrm id_to_strsysmo_usim_algorithms)r5rpalgo_2galgo_3gr7r7r8show_auth_paramss   z Sysmo_usim_sjs1.show_auth_paramscCstd||r"t|}n tt|}|r>t|}n tt|}tdtd|tt|ftd|tt|ftd|jt |jt |j ||gtddS)Nz(Programming Authentication parameters...z * New algorithm setting:rvrwrrrT) rgrhisdigitint str_to_idr|r{rirjrxry update_binary)r5Z algo_2g_strZ algo_3g_strr}r~r7r7r8write_auth_params1s       z!Sysmo_usim_sjs1.write_auth_paramscCsdtd||jt|jttd|d}t|j}tdtt |tddS)NzReading Milenage parameters...rarz- * Current Milenage Parameters in (EF.MLNGC):rT) rgrhrirjrxSYSMO_USIMSJS1_EF_MLNGCrzr!rmr<)r5rpef_mlngcr7r7r8show_milenage_paramsKs     z$Sysmo_usim_sjs1.show_milenage_paramscCshtd|tdt|}tt||jt|jttd|j| tddS)Nz"Programming Milenage parameters...z* * New Milenage Parameters for (EF.MLNGC):rrrT) rgrhr!r<rirjrxrrrB)r5Zparamsrr7r7r8write_milenage_params\s   z%Sysmo_usim_sjs1.write_milenage_paramscCsL|jt|jddd}t|jdd}|dkr8dS|dkrDdS|SdS)Nr rr]LOCKEDDISABLED)rirjSYSMO_USIMSJS1_EF_ACrzrOrm)r5rpctrr7r7r8Z__get_auth_counterls z"Sysmo_usim_sjs1.__get_auth_countercCs`|dkrd}n |dkrd}t|d}|jt|jj|dd}|dkrLdS|dkrXdS|SdS)Nrrrrr r)rXrirjrr)r5rdatarpr7r7r8Z__set_auth_counterxs  z"Sysmo_usim_sjs1.__set_auth_countercCstd||jj|jt|jddd}t|j }tdtt |d|j }|jt |j|ddd}t |j }tdtt ||}td |td dS) Nz'Reading Milenage Sequence parameters...rGrrz * Current SQN Configuration:rrz * Current SQN Array:z* Authentication Counter: %srT)rgrhricardSELECT_ADF_USIMrjSYSMO_USIMSJS1_EF_SQNCrzrFrmr<rJSYSMO_USIMSJS1_EF_SQNArY"_Sysmo_usim_sjs1__get_auth_counter)r5rpef_sqncZind_powef_sqnaZauth_ctrr7r7r8show_milenage_sqn_paramss"         z(Sysmo_usim_sjs1.show_milenage_sqn_paramscCstd|td|jjtd}|jt|j| }t d|j }|jt |j| }| dtddS)Nz- * Resetting SQN Configuration to defaults...z * Resetting...rrT)rgrhrirrrFrjrrrBrYrJr"_Sysmo_usim_sjs1__set_auth_counter)r5rrprr7r7r8reset_milenage_sqn_paramss     z)Sysmo_usim_sjs1.reset_milenage_sqn_paramscCs|td|td|jj|jt|d}tt |j d}tdtd|t |j ddftddS) NzReading OP/c value...rarz * Current OP/OPc setting: %s: %srrT) rgrhrirrrjSYSMO_USIMSJS1_EF_OPCrzr{sysmo_usim_opcmodesrmr;)r5rpZmode_strr7r7r8show_opc_paramss   zSysmo_usim_sjs1.show_opc_paramscCs~|rtdntd|tdtdtt|t|f|jt|jttd|j |g|tddS)NzWriting OPc value...zWriting OP value...z * New OPc setting:rrrrT) rgrhr{rr;rirjGSM_SIM_DF_GSMrr)r5rjopr7r7r8write_opc_paramss   z Sysmo_usim_sjs1.write_opc_paramscCsXtdtd|jt|jt|d}tdtdt|jtddS)NzReading KI value...rarz * Current KI setting: KI: rT)rgrirjrSYSMO_USIMSJS1_EF_KIrzr;rmror7r7r8show_key_paramss   zSysmo_usim_sjs1.show_key_paramscCs`td|tdtdt||jt|jttd|j|tddS)NzWriting KI value...z * New KI setting:rrrrT)rgrhr;rirjrrr)r5Zkir7r7r8write_key_paramss   z Sysmo_usim_sjs1.write_key_paramsN)T)rCrDrEr9rqrurrrrrrrrrrrrr7r7r7r8r_s   r_)__doc__sysutilsZ sysmo_usimrrrxryrrrZSYSMO_USIMSJS1_EF_EFMLNGrZSYSMO_USIMSJS1_ALGO_MILENAGEZSYSMO_USIMSJS1_ALGO_COMP12V1ZSYSMO_USIMSJS1_ALGO_XOR2GZSYSMO_USIMSJS1_ALGO_COMP128V2ZSYSMO_USIMSJS1_ALGO_COMP128V3ZSYSMO_USIMSJS1_ALGO_XOR3Grnrsr!rFrYr|rr`r_r7r7r7r8s81 63