diff --git a/card/ICC.py b/card/ICC.py index 28b7fb2..f55bfcc 100644 --- a/card/ICC.py +++ b/card/ICC.py @@ -904,8 +904,8 @@ class ISO7816(object): Data = Data[L+2:] return fil - @staticmethod - def parse_compact_security_attribute(Data, fil): + + def parse_compact_security_attribute(self, Data, fil): ''' parses a list of bytes provided in Data interprets the content as the compact form for security parameters diff --git a/card/USIM.py b/card/USIM.py index cafe510..930d761 100644 --- a/card/USIM.py +++ b/card/USIM.py @@ -175,7 +175,23 @@ class USIM(UICC): self.USIM_AID = aid if self.dbg: log(3, '(USIM.__init__) USIM AID selection succeeded\n') - + + def SELECT_ADF_ISIM(self): + # USIM selection from AID + if self.dbg: + log(3, '(ISIM.__init__) UICC AID found:') + self.get_AID() + for aid in self.AID: + if tuple(aid[0:5]) == (0xA0, 0x00, 0x00, 0x00, 0x87) \ + and tuple(aid[5:7]) == (0x10, 0x04) : + usim = self.select(addr=aid, type='aid') + if usim is None and self.dbg: + log(2, '(ISIM.__init__) ISIM AID selection failed') + if usim is not None: + self.USIM_AID = aid + if self.dbg: + log(3, '(ISIM.__init__) ISIM AID selection succeeded\n') + @staticmethod def sw_status(sw1, sw2): status = SIM.sw_status(sw1, sw2) diff --git a/card/utils.py b/card/utils.py index 598cd4f..699a42b 100644 --- a/card/utils.py +++ b/card/utils.py @@ -216,7 +216,10 @@ def decode_BCD(data=[]): if (B&0x0F) < 10: string += str(B&0x0F) # 2nd digit (4 MSB), can be padding (e.g. 0xF) if (B>>4) < 10: string += str(B>>4) - return string + if len(string) <= 0: + return None + else: + return string def compute_luhn(digit_str=''): ''' diff --git a/common.py b/common.py new file mode 100644 index 0000000..dd9d92b --- /dev/null +++ b/common.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +User interface parts that are common for all tools + +(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 . +""" + +from utils import * +import sys, getopt + +COMMON_GETOPTS = "hfa:J:nN:lL:kK:tT:oO:C:sSi" +COMMON_GETOPTS_LONG = ["help", "force", "adm1=", "set-imsi", "mnclen", + "set-mnclen", "milenage", "set-milenage", "ki", + "set-ki=", "auth", "set-auth=", "opc", "set-op=", + "set-opc=", "seq-parameters", "reset-seq-parameters" + "iccid"] + +# Parse common commandline options and keep them as flags +class Common(): + + sim = None + + show_helptext = None + force = False + adm1 = None + write_imsi = None + write_mnclen = None + show_mnclen = None + show_milenage = False + write_milenage = None + show_ki = None + write_ki = None + show_auth = False + write_auth = None + show_opc = False + write_op = None + write_opc = None + show_seq_par = False + reset_seq_par = False + show_iccid = False + + def __init__(self, argv, getopts, getopts_long): + + self._banner() + + # Analyze commandline options + try: + opts, args = getopt.getopt(argv, COMMON_GETOPTS + getopts, + COMMON_GETOPTS_LONG + getopts_long) + except getopt.GetoptError: + print " * Error: Invalid commandline options" + sys.exit(2) + + # Set flags for common options + for opt, arg in opts: + if opt in ("-h", "--help"): + self.__common_helptext() + sys.exit(0) + elif opt in ("-f", "--force"): + self.force = True + elif opt in ("-a", "--adm1"): + self.adm1 = ascii_to_list(arg) + elif opt in ("-J", "--set-imsi"): + self.write_imsi = asciihex_to_list(pad_asciihex(arg, True, '9')) + elif opt in ("-n", "--mnclen"): + self.show_mnclen = True + elif opt in ("-N", "--set-mnclen"): + self.write_mnclen = asciihex_to_list(arg) + elif opt in ("-l", "--milenage"): + self.show_milenage = True + elif opt in ("-L", "--set-milenage"): + self.write_milenage = asciihex_to_list(arg) + elif opt in ("-k", "--ki"): + self.show_ki = True + elif opt in ("-K", "--set-ki"): + self.write_ki = asciihex_to_list(arg) + elif opt in ("-t", "--auth"): + self.show_auth = True + elif opt in ("-T", "--set-auth"): + self.write_auth = arg.split(':',1) + elif opt in ("-o", "--opc"): + self.show_opc = True + elif opt in ("-O", "--set-op"): + self.write_op = asciihex_to_list(arg) + elif opt in ("-C", "--set-opc"): + self.write_opc = asciihex_to_list(arg) + elif opt in ("-s", "--sqe-parameters"): + self.show_seq_par = True + elif opt in ("-S", "--reset-sqe-parameters"): + self.reset_seq_par = True + elif opt in ("-i", "--iccid"): + self.show_iccid = True + + # Check for ADM1 key + if not self.adm1: + print " * Error: adm1 parameter missing -- exiting..." + print "" + sys.exit(1) + + # Set flags for specific options + self._options(opts) + + # Initialize + self._init() + + # Execute tasks + self.__common_execute() + + + # Print the part of the helptext that is common for all tools + def __common_helptext(self): + print(" * Commandline options:") + print(" -h, --help ..................... Show this screen") + print(" -f, --force .................... Enforce authentication after failure") + print(" -a, --adm1 CHV ................. Administrator PIN (e.g 55538407)") + print(" -J, --set-imsi ................. Set IMSI value") + print(" -n, --mnclen ................... Show MNC length value") + print(" -N, --set-mnclen ............... Set MNC length value") + print(" -l, --milenage ................. Show milenage parameters") + print(" -L, --set-milenage HEXSTRING ... Set milenage parameters") + print(" -k, --ki ....................... Show KI value") + print(" -K, --set-ki ................... Set KI value") + print(" -t, --auth ..................... Show Authentication algorithms") + print(" -T, --set-auth 2G:3G ........... Set 2G/3G Auth algo (e.g. COMP128v1:COMP128v1)") + print(" -o, --opc ...................... Show OP/c configuration") + print(" -O, --set-op HEXSTRING ......... Set OP value") + print(" -C, --set-opc HEXSTRING ........ Set OPc value") + print(" -s --seq-parameters ........... Show MILENAGE SEQ/SQN parameters") + print(" -S --reset-seq-parameters ..... Reset MILENAGE SEQ/SQN parameters to default") + print(" -i --iccid .................... Show ICCID") + self._helptext() + + + # Execute common tasks + def __common_execute(self): + + # Autnetnication is a primary task that must always run before + # any other task is carried out + if self.sim.admin_auth(self.adm1, self.force) == False: + exit(1) + + # First run the card specific tasks + self._execute() + + # And then the common tasks + if self.write_imsi: + self.sim.write_imsi(self.write_imsi) + + if self.show_mnclen: + self.sim.show_mnclen() + + if self.write_mnclen: + self.sim.write_mnclen(self.write_mnclen) + + if self.write_milenage: + self.sim.write_milenage_params(self.write_milenage) + + if self.show_milenage: + self.sim.show_milenage_params() + + if self.write_ki: + self.sim.write_ki_params(self.write_ki) + + if self.show_ki: + self.sim.show_ki_params() + + if self.show_auth: + self.sim.show_auth_params() + + if self.write_auth: + self.sim.write_auth_params(self.write_auth[0], self.write_auth[1]) + + if self.show_opc: + self.sim.show_opc_params() + + if self.write_op: + self.sim.write_opc_params(0, self.write_op) + + if self.write_opc: + self.sim.write_opc_params(1, self.write_opc) + + if self.show_seq_par: + self.sim.show_milenage_sqn_params() + + if self.reset_seq_par: + self.sim.reset_milenage_sqn_params() + + if self.show_iccid: + self.sim.show_iccid() + + print "Done!" diff --git a/experiments.py b/experiments.py new file mode 100755 index 0000000..4d72fa0 --- /dev/null +++ b/experiments.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from utils import * +from sysmo_isim_sja2 import * + + + +if __name__ == "__main__": + + print("HELLO EF_SIM_AUTH_KEY!") + myfile = SYSMO_ISIMSJA2_FILE_EF_SIM_AUTH_KEY() + print myfile + myfile.use_opc = True + myfile.sres_dev_func = 2 + myfile.opc = [0x23] * 16 + myfile.key = [0x42] * 16 + print myfile + myfile2 = SYSMO_ISIMSJA2_FILE_EF_SIM_AUTH_KEY(myfile.encode()) + print myfile2 + + print("=========================================================") + + + + myfile = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G() + print myfile + + myfile.algo = SYSMO_ISIMSJA2_ALGO_MILENAGE; + myfile.sres_dev_func = 2 + myfile.opc = [0x23] * 16 + myfile.key = [0x42] * 16 + print myfile + + myfile2 = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(myfile.encode()) + print myfile2 + + + print("==========================================================") + + + + myfile = SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG() + print myfile + + myfile.R1 = 0xAA + myfile.R2 = 0xBB + myfile.R3 = 0xCC + myfile.R4 = 0xDD + myfile.R5 = 0xEE + myfile.C1 = [0xDE] * 16 + myfile.C2 = [0xAD] * 16 + myfile.C3 = [0xBE] * 16 + myfile.C4 = [0xEF] * 16 + myfile.C5 = [0x12] * 16 + + + print myfile + + myfile2 = SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(myfile.encode()) + print myfile2 + + + print("==========================================================") + + myfile = SYSMO_ISIMSJA2_FILE_EF_USIM_SQN() + print myfile + print myfile.encode() + + myfile2 = SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(myfile.encode()) + print myfile2 + print myfile2.encode() + + + diff --git a/simcard.py b/simcard.py index d1c6298..026da89 100644 --- a/simcard.py +++ b/simcard.py @@ -26,6 +26,7 @@ along with this program. If not, see . from card.USIM import USIM from card.SIM import SIM from card.utils import * +from utils import * # Files GSM_SIM_MF = [0x3F, 0x00] @@ -58,7 +59,6 @@ GSM_SIM_INS_UPDATE_RECORD_ABS = 0x04 class Card_res_apdu(): apdu = None sw = None - swok = True # convert Benoit Michau style result to sysmocom style result def from_mich(self, mich): @@ -66,14 +66,19 @@ class Card_res_apdu(): self.sw = [ mich[2][0], mich[2][1] ] def __str__(self): - dump = "APDU: " + hexdump(self.apdu) - dump += " SW: " + hexdump(self.sw) + dump = "" + if len(self.apdu) > 0: + dump = "APDU: " + hexdump(self.apdu) + else: + dump = "APDU: (no data)" + dump += ", SW: " + hexdump(self.sw) return dump # A class to abstract a simcard. class Simcard(): card = None + filelen = 0 #length of the currently selected file # Constructor: Create a new simcard object def __init__(self, cardtype = GSM_USIM, atr = None): @@ -88,25 +93,81 @@ class Simcard(): def __get_cla(self, usim): return self.card.CLA - # Select a file - def select(self, fid, dry = False, strict = True): + # Get file size from FCP + def __get_len_from_tlv(self, fcp): + # Note: This has been taken from http://git.osmocom.org/pysim/tree/pySim/commands.py, + # but pySim uses ascii-hex strings for its internal data representation. We use + # regular lists with integers, so we must convert to an ascii-hex string first: + fcp = ''.join('{:02x}'.format(x) for x in fcp) + + # see also: ETSI TS 102 221, chapter 11.1.1.3.1 Response for MF, + # DF or ADF + from pytlv.TLV import TLV + tlvparser = TLV(['82', '83', '84', 'a5', '8a', '8b', '8c', '80', 'ab', 'c6', '81', '88']) + + # pytlv is case sensitive! + fcp = fcp.lower() + + if fcp[0:2] != '62': + raise ValueError('Tag of the FCP template does not match, expected 62 but got %s'%fcp[0:2]) + + # Unfortunately the spec is not very clear if the FCP length is + # coded as one or two byte vale, so we have to try it out by + # checking if the length of the remaining TLV string matches + # what we get in the length field. + # See also ETSI TS 102 221, chapter 11.1.1.3.0 Base coding. + exp_tlv_len = int(fcp[2:4], 16) + if len(fcp[4:])/2 == exp_tlv_len: + skip = 4 + else: + exp_tlv_len = int(fcp[2:6], 16) + if len(fcp[4:])/2 == exp_tlv_len: + skip = 6 + + # Skip FCP tag and length + tlv = fcp[skip:] + tlv_parsed = tlvparser.parse(tlv) + + if '80' in tlv_parsed: + return int(tlv_parsed['80'], 16) + else: + return 0 + + # Get the file length from a response (select) + def __len(self, res, p2): + if p2 == 0x04: + return self.__get_len_from_tlv(res) + else: + return int(res[-1][4:8], 16) + + # Select a file and retrieve its length + def select(self, fid): + self.filelen = 0 + p2 = 0x04 res = Card_res_apdu() - res.from_mich(self.card.SELECT_FILE(P2 = 0x0C, Data = fid)) + res.from_mich(self.card.SELECT_FILE(P2 = p2, Data = fid)) + + # Stop here, on failure + if res.sw[0] != 0x61: + return res + + res.from_mich(self.card.GET_RESPONSE(res.sw[1])) + self.filelen = self.__len(res.apdu, p2) return res # Perform card holder verification - def verify_chv(self, chv, chv_no, dry = False, strict = True): + def verify_chv(self, chv, chv_no): res = Card_res_apdu() res.from_mich(self.card.VERIFY(P2 = chv_no, Data = chv)) return res # Read CHV retry counter - def chv_retrys(self, chv_no, dry = False, strict = True): + def chv_retrys(self, chv_no): res = self.card.VERIFY(P2 = chv_no) return res[2][1] & 0x0F # Perform file operation (Write) - def update_binary(self, data, offset = 0, dry = False, strict = True): + def update_binary(self, data, offset = 0): offs_high = (offset >> 8) & 0xFF offs_low = offset & 0xFF res = Card_res_apdu() @@ -114,7 +175,7 @@ class Simcard(): return res # Perform file operation (Read, byte oriented) - def read_binary(self, length, offset = 0, dry = False, strict = True): + def read_binary(self, length, offset = 0): offs_high = (offset >> 8) & 0xFF offs_low = offset & 0xFF res = Card_res_apdu() @@ -122,14 +183,14 @@ class Simcard(): return res # Perform file operation (Read, record oriented) - def read_record(self, length, rec_no = 0, dry = False, strict = True): + def read_record(self, length, rec_no = 0): res = Card_res_apdu() res.from_mich(self.card.READ_RECORD(rec_no, GSM_SIM_INS_READ_RECORD_ABS, length)) return res # Perform file operation (Read, record oriented) - def update_record(self, data, rec_no = 0, dry = False, strict = True): + def update_record(self, data, rec_no = 0): res = Card_res_apdu() res.from_mich(self.card.UPDATE_RECORD(rec_no, GSM_SIM_INS_UPDATE_RECORD_ABS, data)) return res diff --git a/sysmo-isim-tool.sja2.py b/sysmo-isim-tool.sja2.py new file mode 100755 index 0000000..280fed2 --- /dev/null +++ b/sysmo-isim-tool.sja2.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Commandline interface for sysmoUSIM-SJS1 + +(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 . +""" + +import sys, getopt +from utils import * +from simcard import * +from sysmo_isim_sja2 import * +from common import * + +class Application(Common): + + getopt_dump = False + + + # Automatically executed by superclass + def _banner(self): + print("sysmoISIM-SJA2 parameterization tool") + print("Copyright (c)2019 Sysmocom s.f.m.c. GmbH") + print("") + + + # Automatically executed by superclass + def _options(self, opts): + for opt, arg in opts: + if opt in ("-d", "--dump"): + self.getopt_dump = True + + + # Automatically executed by superclass when -h or --help is supplied as option + def _helptext(self): + print(" -d, --dump ..................... Dump propritary file contents") + print("") + print(" For Option -T, the following algorithms are valid:") + print('\n'.join([' %d %s' % entry for entry in sysmo_isimsja2_algorithms])) + print("") + + + # Automatically executed by superclass before _execute() is called + def _init(self): + self.sim = Sysmo_isim_sja2() + + + # Automatically executed by superclass + def _execute(self): + + if self.getopt_dump: + self.sim.dump() + + +def main(argv): + + Application(argv, "d", ["dump"]) + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/sysmo-usim-tool.sjs1.py b/sysmo-usim-tool.sjs1.py index d0819e6..10c1e91 100755 --- a/sysmo-usim-tool.sjs1.py +++ b/sysmo-usim-tool.sjs1.py @@ -26,196 +26,72 @@ along with this program. If not, see . import sys, getopt from utils import * from simcard import * -from sysmo_usimsjs1 import * +from sysmo_usim_sjs1 import * +from common import * + +class Application(Common): + + write_iccid = None + write_sim_mode = None # True = USIM, False = classic SIM + show_sim_mode = False + write_iccid = None + write_imsi = None -def banner(): - print "sysmoUSIM-SJS1 parameterization tool" - print "Copyright (c)2017 Sysmocom s.f.m.c. GmbH" - print "" + # Automatically executed by superclass + def _banner(self): + print("sysmoUSIM-SJS1 parameterization tool") + print("Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH") + print("") -def helptext(): - print " * Commandline options:" - print " -a, --adm1 CHV ................. Administrator PIN (e.g 55538407)" - print " -u, --usim ..................... Enable USIM mode" - print " -c, --classic .................. Disable USIM mode (make classic-sim)" - print " -m, --mode ..................... Display mode (classic-sim or USIM?)" - print " -t, --auth ..................... Show Authentication algorithms" - print " -T, --set-auth list ............ List available algorithms" - print " -T, --set-auth 2G:3G ........... Set 2G/3G Auth algo (e.g. COMP128v1:COMP128v1)" - print " -l, --milenage ................. Show milenage parameters" - print " -L, --set-milenage HEXSTRING ... Set milenage parameters" - print " -o, --opc ...................... Show OP/c configuration" - print " -O, --set-op HEXSTRING ......... Set OP value" - print " -C, --set-opc HEXSTRING ........ Set OPc value" - print " -k, --ki ....................... Show KI value" - print " -K, --set-ki ................... Set KI value" - print " -s --seq-parameters ........... Show MILENAGE SEQ/SQN parameters" - print " -S --reset-seq-parameters...... Reset MILENAGE SEQ/SQN parameters to default" - print " -I, --set-iccid ................ Set ICCID value" - print " -J, --set-imsi ................. Set IMSI value" - print " -n, --mnclen ................... Show MNC length value" - print " -N, --set-mnclen ............... Set MNC length value" - print "" + # Automatically executed by superclass + def _options(self, opts): + + for opt, arg in opts: + if opt in ("-I", "--set-iccid"): + self.write_iccid = asciihex_to_list(pad_asciihex(arg)) + elif opt in ("-u", "--usim"): + self.write_sim_mode = True + elif opt in ("-c", "--classic"): + self.write_sim_mode = False + elif opt in ("-m", "--mode"): + self.show_sim_mode = True + + + # Automatically executed by superclass when -h or --help is supplied as option + def _helptext(self): + print(" -I, --set-iccid ................ Set ICCID value") + print(" -u, --usim ..................... Enable USIM mode") + print(" -c, --classic .................. Disable USIM mode (make classic-sim)") + print(" -m, --mode ..................... Display mode (classic-sim or USIM?)") + print("") + print(" For Option -T, the following algorithms are valid:") + print('\n'.join([' %d %s' % entry for entry in sysmo_usim_algorithms])) + print("") + + + # Automatically executed by superclass before _execute() is called + def _init(self): + self.sim = Sysmo_usim_sjs1() + + + # Automatically executed by superclass + def _execute(self): + + if self.write_iccid: + self.sim.write_iccid(self.write_iccid) + + if self.write_sim_mode != None: + self.sim.write_sim_mode(self.write_sim_mode) + + if self.show_sim_mode: + self.sim.show_sim_mode() def main(argv): - banner() - getopt_adm1 = None - getopt_write_sim_mode = None # True = USIM, False = classic SIM - getopt_show_sim_mode = False - getopt_show_auth = False - getopt_write_auth = None - getopt_show_milenage = False - getopt_write_milenage = None - getopt_show_opc = False - getopt_write_op = None - getopt_write_opc = None - getopt_show_ki = None - getopt_write_ki = None - getopt_force = False - getopt_write_iccid = None - getopt_seq_par = False - getopt_reset_seq_par = False - getopt_write_imsi = None - getopt_show_mnclen = None - getopt_write_mnclen = None - - # Analyze commandline options - try: - opts, args = getopt.getopt(argv, - "ha:ucmtT:lL:oO:C:kK:fiI:sSJ:nN:", - ["help","adm1=","usim","classic", - "mode","auth","set-auth=","milenage", - "set-milenage","opc","set-op=","set-opc=", - "ki","set-ki=","force","iccid","set-iccid=", - "seq-parameters", "reset-seq-parameters", - "set-imsi", "set-mnclen", "mnclen"]) - except getopt.GetoptError: - print " * Error: Invalid commandline options" - sys.exit(2) - - for opt, arg in opts: - if opt in ("-h", "--help"): - helptext() - sys.exit() - elif opt in ("-a", "--adm1"): - getopt_adm1 = ascii_to_list(arg) - elif opt in ("-u", "--usim"): - getopt_write_sim_mode = True - elif opt in ("-c", "--classic"): - getopt_write_sim_mode = False - elif opt in ("-m", "--mode"): - getopt_show_sim_mode = True - elif opt in ("-t", "--auth"): - getopt_show_auth = True - elif opt in ("-T", "--set-auth"): - if arg.upper() == 'LIST': - print 'Valid -T arguments are algorithm number or string.' - print 'Available:' - print '\n'.join([' %d %s' % entry for entry in sysmo_usim_algorithms]) - sys.exit() - getopt_write_auth = arg.split(':',1) - elif opt in ("-l", "--milenage"): - getopt_show_milenage = True - elif opt in ("-L", "--set-milenage"): - getopt_write_milenage = asciihex_to_list(arg) - elif opt in ("-o", "--opc"): - getopt_show_opc = True - elif opt in ("-O", "--set-op"): - getopt_write_op = asciihex_to_list(arg) - elif opt in ("-C", "--set-opc"): - getopt_write_opc = asciihex_to_list(arg) - elif opt in ("-k", "--ki"): - getopt_show_ki = True - elif opt in ("-K", "--set-ki"): - getopt_write_ki = asciihex_to_list(arg) - elif opt in ("-f", "--force"): - getopt_force = True - elif opt in ("-I", "--set-iccid"): - getopt_write_iccid = asciihex_to_list(pad_asciihex(arg)) - elif opt in ("-s", "--sqe-parameters"): - getopt_seq_par = True - elif opt in ("-S", "--reset-sqe-parameters"): - getopt_reset_seq_par = True - elif opt in ("-J", "--set-imsi"): - getopt_write_imsi = asciihex_to_list(pad_asciihex(arg, True, '9')) - elif opt in ("-n", "--mnclen"): - getopt_show_mnclen = True - elif opt in ("-N", "--set-mnclen"): - getopt_write_mnclen = asciihex_to_list(arg) - - - if not getopt_adm1: - print " * Error: adm1 parameter missing -- exiting..." - print "" - sys.exit(1) - - - # Claim terminal - sim = Sysmo_usimsjs1() - - # Authenticate - if sim.admin_auth(getopt_adm1, getopt_force) == False: - exit(1) - - # Execute tasks - if getopt_write_sim_mode != None: - sim.write_sim_mode(getopt_write_sim_mode) - - if getopt_show_sim_mode: - sim.show_sim_mode() - - if getopt_write_auth: - sim.write_auth_params(getopt_write_auth[0], getopt_write_auth[1]) - - if getopt_show_auth: - sim.show_auth_params() - - if getopt_write_milenage: - ef_mlngc = SYSMO_USIMSJS1_FILE_EF_MLNGC(getopt_write_milenage) - sim.write_milenage_params(ef_mlngc) - - if getopt_show_milenage: - sim.show_milenage_params() - - if getopt_seq_par: - sim.show_milenage_sqn_params() - - if getopt_write_op: - sim.write_opc_params(0, getopt_write_op) - - if getopt_write_opc: - sim.write_opc_params(1, getopt_write_opc) - - if getopt_show_opc: - sim.show_opc_params() - - if getopt_write_ki: - sim.write_ki_params(getopt_write_ki) - - if getopt_show_ki: - sim.show_ki_params() - - if getopt_write_iccid: - sim.write_iccid(getopt_write_iccid) - - if getopt_reset_seq_par: - sim.reset_milenage_sqn_params() - - if getopt_write_imsi: - sim.write_imsi(getopt_write_imsi) - - if getopt_show_mnclen: - sim.show_mnclen() - - if getopt_write_mnclen: - sim.write_mnclen(getopt_write_mnclen) - - print "Done!" - + Application(argv, "ucmI:", ["usim", "classic", "mode", "set-iccid="]) if __name__ == "__main__": main(sys.argv[1:]) diff --git a/sysmo_isim_sja2.py b/sysmo_isim_sja2.py new file mode 100644 index 0000000..da20071 --- /dev/null +++ b/sysmo_isim_sja2.py @@ -0,0 +1,839 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Gadgets to modify SYSMO USIM SJA2 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 . +""" + +import sys +from utils import * +from sysmo_usim import * +import math + +# Partial File tree: +# The following tree is incomplete, it just contains the propritary files we +# need to perform the tasks implemented below: +# +# [MF 0x3F00] +# | +# +--[DF_SYSTEM 0xA515] +# | | +# | +--[EF_SIM_AUTH_KEY 0x6F20] (regular file) +# | +# +--[ADF_USIM] +# | | +# | +--[USIM_AUTH_KEY 0xAF20] (regular file) +# | | +# | +--[EF_USIM_AUTH_KEY_2G 0xAF22] (link to DF_SYSTEM/EF_SIM_AUTH_KEY) +# | +# +--[ADF_ISIM] +# | +# +--[USIM_AUTH_KEY 0xAF20] (regular file) +# | +# +--[EF_USIM_AUTH_KEY_2G 0xAF22] (link to DF_SYSTEM/EF_SIM_AUTH_KEY) +# +# Note: EF_MILENAGE_CFG and EF_USIM_SQN not yet listed here. + +# Propritary files +SYSMO_ISIMSJA2_DF_SYSTEM = [0xA5, 0x15] +SYSMO_ISIMSJA2_EF_SIM_AUTH_KEY = [0x6F, 0x20] # DF_SYSTEM +SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY = [0xAF, 0x20] # ADF.USIM +SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_2G = [0xAF, 0x22] # ADF.USIM +SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_GBA = [0xAF, 0x23] # ADF.USIM +SYSMO_ISIMSJA2_EF_MILENAGE_CFG = [0xAF, 0x21] # ADF.USIM +SYSMO_ISIMSJA2_EF_USIM_SQN = [0xAF, 0x30] # ADF.USIM +SYSMO_ISIMSJA2_EF_GBA_SK = [0xAF, 0x31] # ADF.USIM +SYSMO_ISIMSJA2_EF_GBA_REC_LIST = [0xAF, 0x32] # ADF.USIM +SYSMO_ISIMSJA2_EF_GBA_INT_KEY = [0xAF, 0x32] # ADF.USIM + +# Authentication algorithms +SYSMO_ISIMSJA2_ALGO_COMP12V1 = 0x01 +SYSMO_ISIMSJA2_ALGO_COMP12V2 = 0x02 +SYSMO_ISIMSJA2_ALGO_COMP12V3 = 0x03 +SYSMO_ISIMSJA2_ALGO_MILENAGE = 0x04 +SYSMO_ISIMSJA2_ALGO_SHA1AKA = 0x05 +SYSMO_ISIMSJA2_ALGO_XOR = 0x0F + +sysmo_isimsja2_algorithms = ( + (SYSMO_ISIMSJA2_ALGO_COMP12V1, 'COMP128v1'), + (SYSMO_ISIMSJA2_ALGO_COMP12V2, 'COMP128v2'), + (SYSMO_ISIMSJA2_ALGO_COMP12V3, 'XOR-2G'), + (SYSMO_ISIMSJA2_ALGO_MILENAGE, 'MILENAGE'), + (SYSMO_ISIMSJA2_ALGO_SHA1AKA , 'SHA1-AKA'), + (SYSMO_ISIMSJA2_ALGO_XOR, 'XOR'), +) + +class SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY: + """ + Superclass model that generates that handles the header byte of + SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY, SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_2G + and SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_GBA. + """ + + algo = SYSMO_ISIMSJA2_ALGO_COMP12V1 + use_opc = False + sres_dev_func = 1 + + def __init__(self, content = None): + if content == None: + return + + header = content[0] + self.algo = header & 0x0F + self.use_opc = bool((header >> 4) & 1) + + if (header >> 5) & 1: + self.sres_dev_func = 2 + else: + self.sres_dev_func = 1 + + + def __str__(self): + dump = "" + pfx = " " + + dump += pfx + "Algorithm: " + dump += id_to_str(sysmo_isimsja2_algorithms, self.algo) + dump += "\n" + + if self.use_opc == True: + dump += pfx + "Milenage: use OPc\n" + else: + dump += pfx + "Milenage: use OP\n" + + dump += pfx + "Milenage: use SRES deviation function " + str(self.sres_dev_func) + "\n" + + return dump + + + def encode(self): + out = [0x00] + out[0] = self.algo & 0x0F + if self.use_opc == True: + out[0] |= 1 << 4 + out[0] |= ((self.sres_dev_func-1) & 1) << 5 + return out + + +class SYSMO_ISIMSJA2_FILE_EF_SIM_AUTH_KEY(SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY): + + key = [0xAA] * 16 + opc = [0xBB] * 16 + + def __init__(self, content = None): + if content == None: + return + + SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.__init__(self, content) + self.key = content[1:17] + self.opc = content[17:33] + + + def __str__(self): + dump = "" + pfx = " " + + dump += SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.__str__(self) + + if self.algo == SYSMO_ISIMSJA2_ALGO_MILENAGE: + dump += pfx + "Key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + elif self.algo == SYSMO_ISIMSJA2_ALGO_XOR: + dump += pfx + "Key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + elif self.algo == SYSMO_ISIMSJA2_ALGO_SHA1AKA: + dump += pfx + "Root key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + " (unused)" + else: + dump += pfx + "Key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + " (unused)" + + return dump + + + def encode(self): + out = SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.encode(self) + out += self.key + self.opc + return out + + +class SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY): + + full_res = True # Return full 8-byte RES or first 4 bytes only + ext_res = False # Return 16 byte RES (ignores full_res, only valid with 3G XOR) + + key = [0x00] * 16 + opc = [0x00] * 16 # Only for Milenage + + def __init__(self, content = None): + if content == None: + return + + SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.__init__(self, content) + header = content[0] + + self.full_res = bool((header >> 6) & 1) + self.ext_res = bool((header >> 7) & 1) + + self.key = content[1:17] + if len(content) > 17: + self.opc = content[17:33] + + + def __str__(self): + dump = "" + pfx = " " + + dump += SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.__str__(self) + if self.full_res == True and self.ext_res == False: + dump += pfx + "3G: Return full 8-byte RES\n" + elif self.full_res == False and self.ext_res == False: + dump += pfx + "3G: Return first four bytes of RES\n" + elif self.ext_res == True: + dump += pfx + "3G: Return 16-byte RES (XOR 3G only)\n" + else: + dump += pfx + "(invalid RES length setting)" + + if self.algo != SYSMO_ISIMSJA2_ALGO_XOR and self.ext_res: + dump += pfx + "Warning: 16-byte RES is only valid with XOR 3G!\n" + + if self.algo == SYSMO_ISIMSJA2_ALGO_MILENAGE: + dump += pfx + "Key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + elif self.algo == SYSMO_ISIMSJA2_ALGO_XOR: + dump += pfx + "Key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + elif self.algo == SYSMO_ISIMSJA2_ALGO_SHA1AKA: + dump += pfx + "Root key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + " (unused)" + else: + dump += pfx + "Key: " + hexdump(self.key) + "\n" + dump += pfx + "OPc: " + hexdump(self.opc) + " (unused)" + return dump + + + def encode(self): + out = SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.encode(self) + if self.full_res == True: + out[0] |= 1 << 6 + if self.ext_res == True: + out[0] |= 1 << 7 + out += self.key + + # Note: Normally an OPc is only used with milenage, but lets + # write the value anyway, even if it is not used. + out += self.opc + return out + + +# EF_USIM_AUTH_KEY_2G and EF_USIM_AUTH_KEY_GBA have the same layout as +# EF_USIM_AUTH_KEY, so there is nothing to specialize other than the class name +class SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY): + pass + + +class SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_GBA(SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY): + pass + + +class SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG: + R1 = 0x40 + R2 = 0x00 + R3 = 0x20 + R4 = 0x40 + R5 = 0x60 + C1 = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + C2 = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01] + C3 = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02] + C4 = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04] + C5 = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08] + + + def __init__(self, content = None): + if content == None: + return + if len(content) != 85: + return + self.R1 = content[0] + self.R2 = content[1] + self.R3 = content[2] + self.R4 = content[3] + self.R5 = content[4] + self.C1 = content[5:5+16] + self.C2 = content[21:37] + self.C3 = content[37:53] + self.C4 = content[53:69] + self.C5 = content[69:85] + + + def __str__(self): + dump = " R1: " + str(hex(self.R1)) + "\n" + dump += " R2: " + str(hex(self.R2)) + "\n" + dump += " R3: " + str(hex(self.R3)) + "\n" + dump += " R4: " + str(hex(self.R4)) + "\n" + dump += " R5: " + str(hex(self.R5)) + "\n" + dump += " C1: " + hexdump(self.C1) + "\n" + dump += " C2: " + hexdump(self.C2) + "\n" + dump += " C3: " + hexdump(self.C3) + "\n" + dump += " C4: " + hexdump(self.C4) + "\n" + dump += " C5: " + hexdump(self.C5) + return dump + + + def encode(self): + out = [self.R1, self.R2, self.R3, self.R4, self.R5] + out += self.C1 + self.C2 + self.C3 + self.C4 + self.C5 + return out + + +class SYSMO_ISIMSJA2_FILE_EF_USIM_SQN: + + # Flag1: + ind_size_bits = 5 # speficy file length by 2^ind_len + sqn_check_enabled = True # perform SQN checks below + sqn_age_limit_enabled = False # perform age limit check: (SQNms-SQN) <= AGE_LIMIT) + sqn_max_delta_enabled = True # perform delta max check: (SWN-SQNms) <= DELTA MAX) + sqn_check_skip_first = True # accept any SQN on the first authentication + + # Flag2: + conceal_autn = True # Conceal the value of AUTN + conceal_auts = True # Conceal the value of AUTS + no_amf_clear = False # Do not clear AMF when computing MAC-S + + # Data: + max_delta = 2**28 << ind_size_bits + age_limit = 2**28 << ind_size_bits + freshness_data = [0x00] * (6*2**ind_size_bits) # initalize to zero + + def __init__(self, content = None): + if content == None: + return + + # Check if we have at least the header + if len(content) <= 2: + raise ValueError("unexpected length of %u bytes", len(content)) + + flag1 = content[0] + self.ind_size_bits = flag1 & 0xf + + # The parameter ind_size_bits is not user configurable, + # its a fixed configuration that is specific to the + # card profile and it can be determined by looking at the + # file length (length of the freshness data). If we find + # an ind_size_bits that is intconstant to the file length, + # we automatically set the value to the correct length + ind_size_bits_calculated = int(math.log((len(content) - 14) / 6, 2)) + if ind_size_bits_calculated != self.ind_size_bits: + print " Warning: SQN Parameter ind_size_bits is set to " + str(self.ind_size_bits) + ", resetting it to " + str(ind_size_bits_calculated) + "!" + self.ind_size_bits = ind_size_bits_calculated + + self.reset() #ensure freshness data is correctly reset + self.sqn_check_enabled = bool((flag1 >> 4) & 1) + self.sqn_age_limit_enabled = bool((flag1 >> 5) & 1) + self.sqn_max_delta_enabled = bool((flag1 >> 6) & 1) + self.sqn_check_skip_first = bool((flag1 >> 7) & 1) + + flag2 = content[1] + self.conceal_autn = bool(flag2 & 1) + self.conceal_auts = bool((flag2 >> 1) & 1) + self.no_amf_clear = bool((flag2 >> 2) & 1) + + # Check if the data body is complete + if len(content) < 14+(6*2**self.ind_size_bits): + raise ValueError("unexpected length of %u bytes" % len(content)) + + self.max_delta = list_to_int(content[2:8]) + self.age_limit = list_to_int(content[8:14]) + self.freshness_data = content[15:(6*2**self.ind_size_bits)] + + + def __str__(self): + pfx = " " + dump = "" + + dump += "%sIND (bits): %u\n" % (pfx, self.ind_size_bits) + if self.sqn_check_enabled: + dump += "%sSQN Check enabled\n" % pfx + else: + dump += "%sSQN Check disabled\n" % pfx + if self.sqn_age_limit_enabled: + dump += "%sSQN Age Limit enabled\n" % pfx + else: + dump += "%sSQN Age Limit disabled\n" % pfx + if self.sqn_max_delta_enabled: + dump += "%sSQN Max Delta enabled\n" % pfx + else: + dump += "%sSQN Max Delta disabled\n" % pfx + if self.sqn_check_skip_first: + dump += "%sSQN Skip first enabled\n" % pfx + else: + dump += "%sSQN Skip first disabled\n" % pfx + if self.conceal_autn: + dump += "%sSQN Conceal AUTN enabled\n" % pfx + else: + dump += "%sSQN Conceal AUTN disabled\n" % pfx + if self.conceal_auts: + dump += "%sSQN Conceal AUTS enabled\n" % pfx + else: + dump += "%sSQN Conceal AUTS disabled\n" % pfx + if self.no_amf_clear: + dump += "%sSQN No AMF clear enabled\n" % pfx + else: + dump += "%sSQN No AMF clear disabled\n" % pfx + dump += "%sMax Delta: %u\n" % (pfx, self.max_delta) + dump += "%sAge Limit: %u\n" % (pfx, self.age_limit) + dump += pfx + "Freshness Data:\n" + hexdump(self.freshness_data, True) + + return dump + + + def encode(self): + out = [0x00, 0x00] + + # Flag1: + out[0] = self.ind_size_bits & 0x0f + if self.sqn_check_enabled: + out[0] |= 1 << 4 + if self.sqn_age_limit_enabled: + out[0] |= 1 << 5 + if self.sqn_max_delta_enabled: + out[0] |= 1 << 6 + if self.sqn_check_skip_first: + out[0] |= 1 << 7 + + # Flag2: + if self.conceal_autn: + out[1] |= 1 << 0 + if self.conceal_auts: + out[1] |= 1 << 1 + if self.no_amf_clear: + out[1] |= 1 << 2 + + # Data: + out += int_to_list(self.max_delta, 6) + out += int_to_list(self.age_limit, 6) + out += self.freshness_data + return out + + + def reset(self): + self.freshness_data = [0x00] * (6*2**self.ind_size_bits) + + + +class Sysmo_isim_sja2(Sysmo_usim): + + def __init__(self): + card_detected = False + + # Try card model #1 + try: + atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9" + print "Trying to find card with ATR: " + atr + Sysmo_usim.__init__(self, atr) + card_detected = True + except: + print " * Card not detected!" + + if card_detected == True: + return + + + # Try card model #2 + try: + atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2" + print "Trying to find card with ATR: " + atr + Sysmo_usim.__init__(self, atr) + card_detected = True + except: + print " * Card not detected!" + + if card_detected == True: + return + + + # Exit when we are not able to detect the card + if card_detected != True: + sys.exit(1) + + + # Show current milenage parameters + def show_milenage_params(self): + print("Reading Milenage parameters...") + self._init() + + print(" * Reading...") + self.sim.card.SELECT_ADF_USIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + res = self._read_binary(85) + ef = SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(res.apdu) + + print(" * Current Milenage Parameters:") + print(str(ef)) + print("") + + + # Write new milenage parameters + def write_milenage_params(self, params): + + print("Programming Milenage parameters...") + + if (len(params) < 85): + print("Error: Short milenage parameters!") + return + params_swapped = params[80:85] + params[0:80] + + self._init() + + print(" * New Milenage Parameters for (EF.MILENAGE_CFG):") + ef_milenage_cfg = SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(params_swapped) + print str(ef_milenage_cfg) + + print(" * Programming...") + # Note: The milenage configuration file in ADF_USIM and + # ADF_ISIM are linked, however we write to both locations, + # just to be sure. + self.sim.card.SELECT_ADF_USIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + self.sim.update_binary(ef_milenage_cfg.encode()) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + self.sim.update_binary(ef_milenage_cfg.encode()) + print("") + + + # Select DF_SYSTEM/EF_SIM_AUTH_KEY + def __select_ef_sim_auth_key(self): + self.sim.select(GSM_SIM_MF) + self.sim.select(SYSMO_ISIMSJA2_DF_SYSTEM) + self.sim.select(SYSMO_ISIMSJA2_EF_SIM_AUTH_KEY) + + + # Authentication keys exist in various different files, which are + # similar, thie method simplifies the selection of those files + def __select_xsim_auth_key(self, isim = False, _2G = False): + self.sim.select(GSM_SIM_MF) + if isim: + self.sim.card.SELECT_ADF_ISIM() + else: + self.sim.card.SELECT_ADF_USIM() + + if _2G: + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_2G) + else: + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY) + + + # In the SJA2 model the key material and the algorithm configuration + # is distributed over multiple files, which may also have redundant + # contents. Files can also be hard linked to other files so that + # changes in one file may appear in another file as well. The dump + # method provides an overview of contents of all files at once in + # order to help debugging problems + def dump(self): + print("Reading propritary files...") + self._init() + + # DF_SYSTEM/EF_SIM_AUTH_KEY: + self.__select_ef_sim_auth_key() + res = self._read_binary(self.sim.filelen) + print " * DF_SYSTEM/EF_SIM_AUTH_KEY:" + print SYSMO_ISIMSJA2_FILE_EF_SIM_AUTH_KEY(res.apdu) + + # ADF_USIM/EF_USIM_AUTH_KEY_2G: + self.__select_xsim_auth_key(isim = False, _2G = True) + res = self._read_binary(self.sim.filelen) + print " * ADF_USIM/EF_USIM_AUTH_KEY_2G:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + + # ADF_USIM/EF_ISIM_AUTH_KEY_2G: + self.__select_xsim_auth_key(isim = True, _2G = True) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_ISIM_AUTH_KEY_2G:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + + # ADF_USIM/EF_USIM_AUTH_KEY: + self.__select_xsim_auth_key(isim = False, _2G = False) + res = self._read_binary(self.sim.filelen) + print " * ADF_USIM/EF_USIM_AUTH_KEY:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + + # ADF_ISIM/EF_ISIM_AUTH_KEY: + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_ISIM_AUTH_KEY:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + + # ADF_USIM/EF_MILENAGE_CFG: + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_USIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + res = self._read_binary(self.sim.filelen) + print " * ADF_USIM/EF_MILENAGE_CFG:" + print SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(res.apdu) + + # ADF_ISIM/EF_MILENAGE_CFG: + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_MILENAGE_CFG:" + print SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(res.apdu) + + # ADF_USIM/EF_USIM_SQN: + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_USIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + print " * ADF_USIM/EF_USIM_SQN:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + + # ADF_USIM/EF_ISIM_SQN: + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + print " * ADF_USIM/EF_ISIM_SQN:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + + + # Show current KI value + def show_ki_params(self): + print("Reading KI value...") + self._init() + + # Note: The KI is expected to be the same in all eligible files + print(" * Reading...") + self.__select_xsim_auth_key(isim = False, _2G = True) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + + print(" * Current KI setting:") + print(" KI: " + hexdump(ef.key)) + print("") + + + # Program new KI value + def write_ki_params(self, ki): + print("Writing KI value...") + self._init() + + print(" * New KI setting:") + print(" KI: " + hexdump(ki)) + + print(" * Programming...") + + self.__select_xsim_auth_key(isim = False, _2G = True) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + ef.key = ki + self.sim.update_binary(ef.encode()) + + self.__select_xsim_auth_key(isim = False, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.key = ki + self.sim.update_binary(ef.encode()) + + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.key = ki + self.sim.update_binary(ef.encode()) + + print("") + + + # Show current athentication parameters + # (Which algorithim is used for which rat?) + def show_auth_params(self): + print("Reading Authentication parameters...") + self._init() + + print(" * Reading...") + self.__select_xsim_auth_key(isim = False, _2G = True) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + algo_2g = ef.algo + + self.__select_xsim_auth_key(isim = False, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + algo_3g = ef.algo + + print(" * Current algorithm setting:") + print(" 2G: %d=%s" % (algo_2g, id_to_str(sysmo_isimsja2_algorithms, algo_2g))) + print(" 3G: %d=%s" % (algo_3g, id_to_str(sysmo_isimsja2_algorithms, algo_3g))) + print("") + + + # Program new authentication parameters + def write_auth_params(self, algo_2g_str, algo_3g_str): + print("Programming Authentication parameters...") + self._init() + + if algo_2g_str.isdigit(): + algo_2g = int(algo_2g_str) + else: + algo_2g = str_to_id(sysmo_isimsja2_algorithms, algo_2g_str) + + if algo_3g_str.isdigit(): + algo_3g = int(algo_3g_str) + else: + algo_3g = str_to_id(sysmo_isimsja2_algorithms, algo_3g_str) + + print(" * New algorithm setting:") + print(" 2G: %d=%s" % (algo_2g, id_to_str(sysmo_isimsja2_algorithms, algo_2g))) + print(" 3G: %d=%s" % (algo_3g, id_to_str(sysmo_isimsja2_algorithms, algo_3g))) + + print(" * Programming...") + + self.__select_xsim_auth_key(isim = False, _2G = True) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + ef.algo = algo_2g + self.sim.update_binary(ef.encode()) + + self.__select_xsim_auth_key(isim = False, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.algo = algo_3g + self.sim.update_binary(ef.encode()) + + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.algo = algo_3g + self.sim.update_binary(ef.encode()) + + print("") + + + # Show current OPc value + def show_opc_params(self): + print("Reading OP/c value...") + self._init() + + # Note: The OPc is expected to be the same in all eligible files + print(" * Reading...") + self.__select_xsim_auth_key(isim = False, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + + if ef.use_opc: + mode_str = "OPc" + else: + mode_str = "OP" + + print(" * Current OP/OPc setting:") + print(" %s: %s" % (mode_str, hexdump(ef.opc))) + print("") + + + # Program new OPc value + def write_opc_params(self, select, op): + if select: + print("Writing OPc value...") + mode_str = "OPc" + else: + print("Writing OP value...") + mode_str = "OP" + self._init() + + print(" * New OPc setting:") + print(" %s: %s" % (mode_str, hexdump(op))) + + print(" * Programming...") + + self.__select_xsim_auth_key(isim = False, _2G = True) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + ef.opc = op + ef.use_opc = bool(select) + self.sim.update_binary(ef.encode()) + + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.opc = op + ef.use_opc = bool(select) + self.sim.update_binary(ef.encode()) + + self.__select_xsim_auth_key(isim = False, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.opc = op + ef.use_opc = bool(select) + self.sim.update_binary(ef.encode()) + + print("") + + + # Show current milenage SQN parameters + def show_milenage_sqn_params(self): + print("Reading Milenage Sequence parameters...") + self._init() + + print(" * Current SQN Configuration for ADF_USIM:") + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_USIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + + print(" * Current SQN Configuration for ADF_ISIM:") + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + + print("") + + + # Reset milenage SQN configuration + def reset_milenage_sqn_params(self): + print(" * Resetting SQN Configuration to defaults...") + self._init() + + print(" * Resetting...") + self.sim.select(GSM_SIM_MF) + + self.sim.card.SELECT_ADF_USIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + ef.reset() + self.sim.update_binary(ef.encode()) + + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + ef.reset() + self.sim.update_binary(ef.encode()) + + print("") diff --git a/sysmo_usim.py b/sysmo_usim.py new file mode 100644 index 0000000..0d55a8e --- /dev/null +++ b/sysmo_usim.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +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 . +""" + +from card import * +from simcard import * +from utils import * +import sys + +# CHV Types +SYSMO_USIM_ADM1 = 0x0A + +class Sysmo_usim: + + sim = None + + def __init__(self, atr): + print("Initializing smartcard terminal...") + self.sim = Simcard(GSM_USIM, toBytes(atr)) + self.sim.card.SELECT_ADF_USIM() + print(" * Detected Card IMSI: %s" % self.sim.card.get_imsi()) + print("") + + def _warn_failed_auth(self, attempts = 3, keytype = "ADM1"): + print(" === Authentication problem! The Card will permanently ===") + print(" === lock down after %d failed attemts! Double check %s! ===" % (attempts, keytype)) + print("") + + def _warn_remaining_auth(self, attempts = 3, keytype = "ADM1"): + print(" * Error: Only two authentication attempts remaining, we don't") + print(" want to risk another failed authentication attempt!") + print(" (double check ADM1 and use option -f to override)") + print("") + + + # Initalize card (select master file) + def _init(self): + print " * Initalizing..." + self.sim.select(GSM_SIM_MF) + + + # Read files sensitively + def _read_binary(self, length, offset=0): + res = self.sim.read_binary(length, offset) + if len(res.apdu) != length: + print(" Error: could not read file (sw=%02x%02x) -- abort!\n" % (res.sw[0], res.sw[1])) + exit(1) + return res + + + # Authenticate as administrator + def admin_auth(self, adm1, force = False): + print("Authenticating...") + rc = True + rem_attemts = self.sim.chv_retrys(SYSMO_USIM_ADM1) + + print(" * Remaining attempts: " + str(rem_attemts)) + + # Stop if a decreased ADM1 retry counter is detected + if(rem_attemts < 3) and force == False: + self._warn_remaining_auth() + self._warn_failed_auth() + return False + + if(len(adm1) != 8): + print(" * Error: Short ADM1, a valid ADM1 is 8 digits long!") + print("") + self._warn_failed_auth() + return False + + # Try to authenticate + try: + print(" * Authenticating...") + res = self.sim.verify_chv(adm1, SYSMO_USIM_ADM1) + if res.sw != [0x90, 0x00]: + raise + print(" * Authentication successful") + except: + print(" * Error: Authentication failed!") + rc = False + + # Read back and display remaining attemts + rem_attemts = self.sim.chv_retrys(SYSMO_USIM_ADM1) + print(" * Remaining attempts: " + str(rem_attemts)) + print("") + + if rc == False: + self._warn_failed_auth() + return rc + + + # Show current ICCID value + def show_iccid(self): + print("Reading ICCID value...") + self._init() + print(" * Reading...") + print(" * Card ICCID: %s" % self.sim.card.get_ICCID()) + print("") + + + # Program new ICCID value + # Note: Since the ICCID is a stanard file writing to it works the same + # way for all card models. However, the ICCID may be linked to the + # license management of the card O/S, so changing it might cause + # problems for some cards models. (USE WITH CAUTION!) + def write_iccid(self, iccid): + print("Writing ICCID value...") + self._init() + + print(" * New ICCID setting:") + print(" ICCID: " + hexdump(iccid)) + + self.sim.select(GSM_SIM_EF_ICCID) + + print(" * Programming...") + self.sim.update_binary(swap_nibbles(iccid)) + print("") + + + # Program new IMSI value + def write_imsi(self, imsi): + print("Writing IMSI value...") + self._init() + + print(" * New ISMI setting:") + print(" IMSI: " + hexdump(imsi)) + + self.sim.select(GSM_SIM_DF_GSM) + self.sim.select(GSM_SIM_EF_IMSI) + + imsi = [len(imsi)] + swap_nibbles(imsi) + + print(" * Programming...") + self.sim.update_binary(imsi) + print("") + + + # Show current mnc length value + def show_mnclen(self): + print("Reading MNCLEN value...") + self._init() + + print(" * Reading...") + self.sim.select(GSM_SIM_DF_GSM) + self.sim.select(GSM_SIM_EF_AD) + res = self.sim.read_binary(4) + + print(" * Current MNCLEN setting:") + print(" MNCLEN: " + "0x%02x" % res.apdu[3]) + print("") + + + # Program new mnc length value + def write_mnclen(self, mnclen): + print("Writing MNCLEN value...") + self._init() + + print(" * New MNCLEN setting:") + print(" MNCLEN: " + "0x" + hexdump(mnclen)) + + if len(mnclen) != 1: + print(" * Error: mnclen value must consist of a single byte!") + return + + self.sim.select(GSM_SIM_DF_GSM) + self.sim.select(GSM_SIM_EF_AD) + + res = self.sim.read_binary(4) + new_ad = res.apdu[0:3] + mnclen + + print(" * Programming...") + self.sim.update_binary(new_ad) + print("") diff --git a/sysmo_usimsjs1.py b/sysmo_usim_sjs1.py similarity index 76% rename from sysmo_usimsjs1.py rename to sysmo_usim_sjs1.py index 67398fe..cfba081 100644 --- a/sysmo_usimsjs1.py +++ b/sysmo_usim_sjs1.py @@ -51,9 +51,8 @@ along with this program. If not, see . # +--[EF_IMSI 0x6F07] import sys -from card import * -from simcard import * from utils import * +from sysmo_usim import * # Files (propritary) SYSMO_USIMSJS1_EF_KI = [0x00, 0xFF] @@ -66,9 +65,6 @@ SYSMO_USIMSJS1_EF_SQNA = [0x00, 0xFA] # ADF.USIM SYSMO_USIMSJS1_EF_EFMLNG = [0x00, 0xFB] # ADF.USIM SYSMO_USIMSJS1_EF_AC = [0x00, 0xFE] # ADF.USIM -# CHV Types -SYSMO_USIMSJS1_ADM1 = 0x0A - # Authentication algorithms (See sysmousim.pdf cap. 8.5) SYSMO_USIMSJS1_ALGO_MILENAGE = 0x01 SYSMO_USIMSJS1_ALGO_COMP12V1 = 0x03 @@ -122,7 +118,7 @@ class SYSMO_USIMSJS1_FILE_EF_MLNGC: self.R3 = content[82] self.R4 = content[83] self.R5 = content[84] - + def __str__(self): dump = " C1: " + hexdump(self.C1) + "\n" dump += " C2: " + hexdump(self.C2) + "\n" @@ -237,78 +233,17 @@ sysmo_usim_opcmodes = ( (1, 'OPc'), ) -class Sysmo_usimsjs1: - sim = None +class Sysmo_usim_sjs1(Sysmo_usim): def __init__(self): - print("Initializing smartcard terminal...") - self.sim = Simcard(GSM_USIM, toBytes("3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 43 20 07 18 00 00 01 A5")) - print(" * Detected Card ICCID: %s" % self.sim.card.get_ICCID()) - self.sim.card.SELECT_ADF_USIM() - print(" * Detected Card IMSI: %s" % self.sim.card.get_imsi()) - print("") - - - def __warn_failed_auth(self, attempts = 3, keytype = "ADM1"): - print(" === Authentication problem! The Card will permanently ===") - print(" === lock down after %d failed attemts! Double check %s! ===" % (attempts, keytype)) - print("") - - - # Authenticate as administrator - def admin_auth(self, adm1, force = False): - print("Authenticating...") - rc = True - rem_attemts = self.sim.chv_retrys(SYSMO_USIMSJS1_ADM1) - - print(" * Remaining attempts: " + str(rem_attemts)) - - # Stop if a decreased ADM1 retry counter is detected - if(rem_attemts < 3) and force == False: - print(" * Error: Only two authentication attempts remaining, we don't") - print(" want to risk another failed authentication attempt!") - print(" (double check ADM1 and use option -f to override)") - print("") - self.__warn_failed_auth() - return False - - if(len(adm1) != 8): - print(" * Error: Short ADM1, a valid ADM1 is 8 digits long!") - print("") - self.__warn_failed_auth() - return False - - # Try to authenticate - try: - print(" * Authenticating...") - self.sim.verify_chv(adm1, SYSMO_USIMSJS1_ADM1) - print(" * Authentication successful") - except: - print(" * Error: Authentication failed!") - self.__warn_failed_auth() - rc = False - - # Read back and display remaining attemts - rem_attemts = self.sim.chv_retrys(SYSMO_USIMSJS1_ADM1) - print(" * Remaining attempts: " + str(rem_attemts)) - print("") - - if rc == False: - self.__warn_failed_auth() - return rc - - - # Initalize card (select master file) - def __init(self): - print " * Initalizing..." - self.sim.select(GSM_SIM_MF) + Sysmo_usim.__init__(self, "3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 43 20 07 18 00 00 01 A5") # Show the enable status of the USIM application (app is enabled or disabled?) def show_sim_mode(self): print("Reading SIM-Mode...") - self.__init() + self._init() print(" * Reading...") self.sim.select(GSM_USIM_EF_DIR) @@ -327,7 +262,7 @@ class Sysmo_usimsjs1: # Show the enable status of the USIM application (app is enabled or disabled?) def write_sim_mode(self, usim_enabled = True): print("Programming SIM-Mode...") - self.__init() + self._init() if usim_enabled: new_record = SYSMO_USIM_EF_DIR_REC_1_CONTENT @@ -350,13 +285,13 @@ class Sysmo_usimsjs1: # Show current athentication parameters # (Which algorithim is used for which rat?) def show_auth_params(self): - print("Programming Authentication parameters...") - self.__init() + print("Reading Authentication parameters...") + self._init() print(" * Reading...") self.sim.select(SYSMO_USIMSJS1_DF_AUTH) self.sim.select(SYSMO_USIMSJS1_EF_AUTH) - res = self.sim.read_binary(0x02) + res = self._read_binary(0x02) algo_2g, algo_3g = res.apdu[:2] @@ -368,8 +303,8 @@ class Sysmo_usimsjs1: # Program new authentication parameters def write_auth_params(self, algo_2g_str, algo_3g_str): - print("Reading Authentication parameters...") - self.__init() + print("Programming Authentication parameters...") + self._init() if algo_2g_str.isdigit(): algo_2g = int(algo_2g_str) @@ -395,13 +330,13 @@ class Sysmo_usimsjs1: # Show current milenage parameters def show_milenage_params(self): print("Reading Milenage parameters...") - self.__init() + self._init() self.sim.select(SYSMO_USIMSJS1_DF_AUTH) self.sim.select(SYSMO_USIMSJS1_EF_MLNGC) print(" * Reading...") - res = self.sim.read_binary(85) + res = self._read_binary(85) ef_mlngc = SYSMO_USIMSJS1_FILE_EF_MLNGC(res.apdu) print(" * Current Milenage Parameters in (EF.MLNGC):") @@ -410,11 +345,12 @@ class Sysmo_usimsjs1: # Write new milenage parameters - def write_milenage_params(self, ef_mlngc): + def write_milenage_params(self, params): print("Programming Milenage parameters...") - self.__init() + self._init() print(" * New Milenage Parameters for (EF.MLNGC):") + ef_mlngc = SYSMO_USIMSJS1_FILE_EF_MLNGC(params) print str(ef_mlngc) self.sim.select(SYSMO_USIMSJS1_DF_AUTH) @@ -427,7 +363,7 @@ class Sysmo_usimsjs1: def __get_auth_counter(self): self.sim.select(SYSMO_USIMSJS1_EF_AC) - res = self.sim.read_binary(4, offset=0) + res = self._read_binary(4, offset=0) ctr = list_to_int(res.apdu[0:4]) if ctr == 0: return "LOCKED" @@ -456,12 +392,12 @@ class Sysmo_usimsjs1: # Show current milenage SQN parameters def show_milenage_sqn_params(self): print("Reading Milenage Sequence parameters...") - self.__init() + self._init() self.sim.card.SELECT_ADF_USIM() self.sim.select(SYSMO_USIMSJS1_EF_SQNC) - res = self.sim.read_binary(15, offset = 0) + res = self._read_binary(15, offset = 0) ef_sqnc = SYSMO_USIMSJS1_FILE_EF_SQNC(res.apdu) print(" * Current SQN Configuration:") print str(ef_sqnc) @@ -469,7 +405,7 @@ class Sysmo_usimsjs1: # SQN Array ind_pow = 2**ef_sqnc.ind_size_bits self.sim.select(SYSMO_USIMSJS1_EF_SQNA) - res = self.sim.read_binary(ind_pow*6, offset=0) + res = self._read_binary(ind_pow*6, offset=0) ef_sqna = SYSMO_USIMSJS1_FILE_EF_SQNA(res.apdu) print(" * Current SQN Array:") print str(ef_sqna) @@ -482,7 +418,7 @@ class Sysmo_usimsjs1: # Reset milenage SQN configuration def reset_milenage_sqn_params(self): print(" * Resetting SQN Configuration to defaults...") - self.__init() + self._init() print(" * Resetting...") self.sim.card.SELECT_ADF_USIM() @@ -495,18 +431,18 @@ class Sysmo_usimsjs1: res = self.sim.update_binary(ef_sqna.encode()) self.__set_auth_counter("DISABLED") - print("") + print("") # Show current OPc value def show_opc_params(self): print("Reading OP/c value...") - self.__init() + self._init() print(" * Reading...") self.sim.card.SELECT_ADF_USIM() self.sim.select(SYSMO_USIMSJS1_EF_OPC) - res = self.sim.read_binary(17) + res = self._read_binary(17) mode_str = id_to_str(sysmo_usim_opcmodes, res.apdu[0]) @@ -517,11 +453,11 @@ class Sysmo_usimsjs1: # Program new OPc value def write_opc_params(self, select, op): - if op: - print("Writing OP value...") - else: + if select: print("Writing OPc value...") - self.__init() + else: + print("Writing OP value...") + self._init() print(" * New OPc setting:") print(" %s: %s" % (id_to_str(sysmo_usim_opcmodes, select), hexdump(op))) @@ -540,7 +476,7 @@ class Sysmo_usimsjs1: print(" * Reading...") self.sim.select(GSM_SIM_DF_GSM) self.sim.select(SYSMO_USIMSJS1_EF_KI) - res = self.sim.read_binary(16) + res = self._read_binary(16) print(" * Current KI setting:") print(" KI: " + hexdump(res.apdu)) @@ -550,7 +486,7 @@ class Sysmo_usimsjs1: # Program new KI value def write_ki_params(self, ki): print("Writing KI value...") - self.__init() + self._init() print(" * New KI setting:") print(" KI: " + hexdump(ki)) @@ -561,74 +497,3 @@ class Sysmo_usimsjs1: print(" * Programming...") self.sim.update_binary(ki) print("") - - - # Program new ICCID value - def write_iccid(self, iccid): - print("Writing ICCID value...") - self.__init() - - print(" * New ICCID setting:") - print(" ICCID: " + hexdump(iccid)) - - self.sim.select(GSM_SIM_EF_ICCID) - - print(" * Programming...") - self.sim.update_binary(swap_nibbles(iccid)) - print("") - - - # Program new IMSI value - def write_imsi(self, imsi): - print("Writing IMSI value...") - self.__init() - - print(" * New ISMI setting:") - print(" IMSI: " + hexdump(imsi)) - - self.sim.select(GSM_SIM_DF_GSM) - self.sim.select(GSM_SIM_EF_IMSI) - - imsi = [len(imsi)] + swap_nibbles(imsi) - - print(" * Programming...") - self.sim.update_binary(imsi) - print("") - - - # Show current KI value - def show_mnclen(self): - print("Reading MNCLEN value...") - self.__init() - - print(" * Reading...") - self.sim.select(GSM_SIM_DF_GSM) - self.sim.select(GSM_SIM_EF_AD) - res = self.sim.read_binary(4) - - print(" * Current MNCLEN setting:") - print(" MNCLEN: " + "0x%02x" % res.apdu[3]) - print("") - - - # Program new MNCLEN value - def write_mnclen(self, mnclen): - print("Writing MNCLEN value...") - self.__init() - - print(" * New MNCLEN setting:") - print(" MNCLEN: " + "0x" + hexdump(mnclen)) - - if len(mnclen) != 1: - print(" * Error: mnclen value must consist of a single byte!") - return - - self.sim.select(GSM_SIM_DF_GSM) - self.sim.select(GSM_SIM_EF_AD) - - res = self.sim.read_binary(4) - new_ad = res.apdu[0:3] + mnclen - - print(" * Programming...") - self.sim.update_binary(new_ad) - print("") diff --git a/tests/run-tests b/tests/run-tests index d424093..c55bc4b 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -1,39 +1,28 @@ #!/bin/sh +echo "==========================================================" +echo " EXECUTING TESTS FOR SYSMO-USIM-SJS1" +echo "==========================================================" +echo "" +cd ./sjs1 +echo "Location $PWD" +echo "" +sh ./run-tests +cd .. +echo "" +echo "" +echo "" +echo "" -# default: execute all tests -TESTS="01_auth.sh 02_mode_read.sh 03_mode_write.sh 04_algo.sh 05_milenage_par.sh 06_op_opc.sh 07_ki.sh 08_seq.sh 09_mnclen.sh" - -# if command line specifies some specific tests, execute only those -if [ $# -ge 1 ]; then - TESTS=$* -fi - -TMP=`tempfile` -NUM_FAIL=0 - -# prepare test card -./prepare - -for T in $TESTS; do - echo "==> Executing Testcase $T" - EXPOUT=${T%%.sh}.out - rm $TMP - ./$T > $TMP - diff -u $EXPOUT $TMP - if [ $? -eq 0 ]; then - echo "Test $T passed" - else - echo "Test $T FAILED!" - NUM_FAIL=$((NUM_FAIL+1)) - fi -done - -echo -echo -echo "Summary: $NUM_FAIL Tests failed" - -if [ $NUM_FAIL -gt 0 ]; then - exit 1 -else - exit 0 -fi +echo "==========================================================" +echo " EXECUTING TESTS FOR SYSMO-USIM-SJA2" +echo "==========================================================" +echo "" +cd ./sja2 +echo "Location $PWD" +echo "" +sh ./run-tests +cd .. +echo "" +echo "" +echo "" +echo "" diff --git a/tests/sja2/01_auth.out b/tests/sja2/01_auth.out new file mode 100644 index 0000000..27262c0 --- /dev/null +++ b/tests/sja2/01_auth.out @@ -0,0 +1,17 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Done! diff --git a/tests/01_auth.sh b/tests/sja2/01_auth.sh similarity index 100% rename from tests/01_auth.sh rename to tests/sja2/01_auth.sh diff --git a/tests/sja2/02_algo.out b/tests/sja2/02_algo.out new file mode 100644 index 0000000..127097b --- /dev/null +++ b/tests/sja2/02_algo.out @@ -0,0 +1,720 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 1=COMP128v1 + 3G: 1=COMP128v1 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 1=COMP128v1 + 3G: 1=COMP128v1 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 3=XOR-2G + 3G: 1=COMP128v1 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 3=XOR-2G + 3G: 1=COMP128v1 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 4=MILENAGE + 3G: 1=COMP128v1 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 4=MILENAGE + 3G: 1=COMP128v1 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 5=SHA1-AKA + 3G: 1=COMP128v1 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 5=SHA1-AKA + 3G: 1=COMP128v1 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 15=XOR + 3G: 1=COMP128v1 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 15=XOR + 3G: 1=COMP128v1 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 1=COMP128v1 + 3G: 4=MILENAGE + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 1=COMP128v1 + 3G: 4=MILENAGE + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 3=XOR-2G + 3G: 15=XOR + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 3=XOR-2G + 3G: 15=XOR + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 2=COMP128v2 + 3G: 2=COMP128v2 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 2=COMP128v2 + 3G: 2=COMP128v2 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 1=COMP128v1 + 3G: 3=XOR-2G + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 1=COMP128v1 + 3G: 3=XOR-2G + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 4=MILENAGE + 3G: 4=MILENAGE + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 4=MILENAGE + 3G: 4=MILENAGE + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 1=COMP128v1 + 3G: 4=MILENAGE + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 1=COMP128v1 + 3G: 4=MILENAGE + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 3=XOR-2G + 3G: 4=MILENAGE + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 3=XOR-2G + 3G: 4=MILENAGE + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 2=COMP128v2 + 3G: 4=MILENAGE + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 2=COMP128v2 + 3G: 4=MILENAGE + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 5=SHA1-AKA + 3G: 15=XOR + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 5=SHA1-AKA + 3G: 15=XOR + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 1=COMP128v1 + 3G: 4=MILENAGE + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 1=COMP128v1 + 3G: 4=MILENAGE + +Done! diff --git a/tests/sja2/02_algo.sh b/tests/sja2/02_algo.sh new file mode 100755 index 0000000..4461a8e --- /dev/null +++ b/tests/sja2/02_algo.sh @@ -0,0 +1,9 @@ +#!/bin/sh +. ./test-data + +ALGOS="1:1 3:1 4:1 5:1 15:1 1:4 3:15 2:2 1:3 " +ALGOS=$ALGOS"MILENAGE:MILENAGE COMP128v1:MILENAGE XOR-2G:MILENAGE COMP128v2:MILENAGE SHA1-AKA:XOR COMP128v1:MILENAGE" +for algo in $ALGOS; do + $TOOL -a $ADMPIN -T $algo + $TOOL -a $ADMPIN -t +done diff --git a/tests/sja2/02_mode_read.out b/tests/sja2/02_mode_read.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/03_milenage_par.out b/tests/sja2/03_milenage_par.out new file mode 100644 index 0000000..4f2cf95 --- /dev/null +++ b/tests/sja2/03_milenage_par.out @@ -0,0 +1,128 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Milenage parameters... + * Initalizing... + * New Milenage Parameters for (EF.MILENAGE_CFG): + R1: 0xaa + R2: 0xbb + R3: 0xcc + R4: 0xdd + R5: 0xee + C1: 1234567890abcdef1234567890abcdef + C2: f1234567890abcdef1234567890abcde + C3: ef1234567890abcdef1234567890abcd + C4: def1234567890abcdef1234567890abc + C5: cdef1234567890abcdef1234567890ab + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Milenage parameters... + * Initalizing... + * Reading... + * Current Milenage Parameters: + R1: 0xaa + R2: 0xbb + R3: 0xcc + R4: 0xdd + R5: 0xee + C1: 1234567890abcdef1234567890abcdef + C2: f1234567890abcdef1234567890abcde + C3: ef1234567890abcdef1234567890abcd + C4: def1234567890abcdef1234567890abc + C5: cdef1234567890abcdef1234567890ab + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Milenage parameters... + * Initalizing... + * New Milenage Parameters for (EF.MILENAGE_CFG): + R1: 0x40 + R2: 0x0 + R3: 0x20 + R4: 0x40 + R5: 0x60 + C1: 00000000000000000000000000000000 + C2: 00000000000000000000000000000001 + C3: 00000000000000000000000000000002 + C4: 00000000000000000000000000000004 + C5: 00000000000000000000000000000008 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Milenage parameters... + * Initalizing... + * Reading... + * Current Milenage Parameters: + R1: 0x40 + R2: 0x0 + R3: 0x20 + R4: 0x40 + R5: 0x60 + C1: 00000000000000000000000000000000 + C2: 00000000000000000000000000000001 + C3: 00000000000000000000000000000002 + C4: 00000000000000000000000000000004 + C5: 00000000000000000000000000000008 + +Done! diff --git a/tests/05_milenage_par.sh b/tests/sja2/03_milenage_par.sh similarity index 100% rename from tests/05_milenage_par.sh rename to tests/sja2/03_milenage_par.sh diff --git a/tests/sja2/03_mode_write.out b/tests/sja2/03_mode_write.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/04_algo.out b/tests/sja2/04_algo.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/04_op_opc.out b/tests/sja2/04_op_opc.out new file mode 100644 index 0000000..ad44880 --- /dev/null +++ b/tests/sja2/04_op_opc.out @@ -0,0 +1,92 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing OPc value... + * Initalizing... + * New OPc setting: + OPc: 000102030405060708090a0b0c0d0e0f + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading OP/c value... + * Initalizing... + * Reading... + * Current OP/OPc setting: + OPc: 000102030405060708090a0b0c0d0e0f + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing OP value... + * Initalizing... + * New OPc setting: + OP: 840337c3d45397ce8ea8609ffdc47224 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading OP/c value... + * Initalizing... + * Reading... + * Current OP/OPc setting: + OP: 840337c3d45397ce8ea8609ffdc47224 + +Done! diff --git a/tests/06_op_opc.sh b/tests/sja2/04_op_opc.sh similarity index 100% rename from tests/06_op_opc.sh rename to tests/sja2/04_op_opc.sh diff --git a/tests/sja2/05_ki.out b/tests/sja2/05_ki.out new file mode 100644 index 0000000..a6c3ffe --- /dev/null +++ b/tests/sja2/05_ki.out @@ -0,0 +1,92 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing KI value... + * Initalizing... + * New KI setting: + KI: a0b1c2d3e4f5061728394a5b6c7d8e9f + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading KI value... + * Initalizing... + * Reading... + * Current KI setting: + KI: a0b1c2d3e4f5061728394a5b6c7d8e9f + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing KI value... + * Initalizing... + * New KI setting: + KI: 94c7f52c8c7337fad1af3a73b17b56ac + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading KI value... + * Initalizing... + * Reading... + * Current KI setting: + KI: 94c7f52c8c7337fad1af3a73b17b56ac + +Done! diff --git a/tests/07_ki.sh b/tests/sja2/05_ki.sh similarity index 100% rename from tests/07_ki.sh rename to tests/sja2/05_ki.sh diff --git a/tests/sja2/05_milenage_par.out b/tests/sja2/05_milenage_par.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/06_op_opc.out b/tests/sja2/06_op_opc.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/06_seq.out b/tests/sja2/06_seq.out new file mode 100644 index 0000000..4773cff --- /dev/null +++ b/tests/sja2/06_seq.out @@ -0,0 +1,77 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Milenage Sequence parameters... + * Initalizing... + * Current SQN Configuration for ADF_USIM: + IND (bits): 5 + SQN Check enabled + SQN Age Limit enabled + SQN Max Delta enabled + SQN Skip first enabled + SQN Conceal AUTN enabled + SQN Conceal AUTS enabled + SQN No AMF clear enabled + Max Delta: 281474976710655 + Age Limit: 281474976710655 + Freshness Data: + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000 + * Current SQN Configuration for ADF_ISIM: + IND (bits): 5 + SQN Check enabled + SQN Age Limit enabled + SQN Max Delta enabled + SQN Skip first enabled + SQN Conceal AUTN enabled + SQN Conceal AUTS enabled + SQN No AMF clear enabled + Max Delta: 281474976710655 + Age Limit: 281474976710655 + Freshness Data: + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + + * Resetting SQN Configuration to defaults... + * Initalizing... + * Resetting... + +Done! diff --git a/tests/08_seq.sh b/tests/sja2/06_seq.sh similarity index 100% rename from tests/08_seq.sh rename to tests/sja2/06_seq.sh diff --git a/tests/sja2/07_ki.out b/tests/sja2/07_ki.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/07_mnclen.out b/tests/sja2/07_mnclen.out new file mode 100644 index 0000000..76e8af5 --- /dev/null +++ b/tests/sja2/07_mnclen.out @@ -0,0 +1,138 @@ +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing MNCLEN value... + * Initalizing... + * New MNCLEN setting: + MNCLEN: 0x02 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading MNCLEN value... + * Initalizing... + * Reading... + * Current MNCLEN setting: + MNCLEN: 0x02 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing MNCLEN value... + * Initalizing... + * New MNCLEN setting: + MNCLEN: 0x03 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading MNCLEN value... + * Initalizing... + * Reading... + * Current MNCLEN setting: + MNCLEN: 0x03 + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Writing MNCLEN value... + * Initalizing... + * New MNCLEN setting: + MNCLEN: 0x02 + * Programming... + +Done! +sysmoISIM-SJA2 parameterization tool +Copyright (c)2019 Sysmocom s.f.m.c. GmbH + +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9 +Initializing smartcard terminal... + * Card not detected! +Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2 +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading MNCLEN value... + * Initalizing... + * Reading... + * Current MNCLEN setting: + MNCLEN: 0x02 + +Done! diff --git a/tests/09_mnclen.sh b/tests/sja2/07_mnclen.sh similarity index 100% rename from tests/09_mnclen.sh rename to tests/sja2/07_mnclen.sh diff --git a/tests/sja2/08_seq.out b/tests/sja2/08_seq.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/sja2/09_mnclen.out b/tests/sja2/09_mnclen.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/prepare b/tests/sja2/prepare similarity index 100% rename from tests/prepare rename to tests/sja2/prepare diff --git a/tests/sja2/regen b/tests/sja2/regen new file mode 100755 index 0000000..4cc2c8e --- /dev/null +++ b/tests/sja2/regen @@ -0,0 +1,14 @@ +#!/bin/sh + +echo "Regenerating test output..." +./prepare +./01_auth.sh > ./01_auth.out +./02_algo.sh > ./02_algo.out +./03_milenage_par.sh > ./03_milenage_par.out +./04_op_opc.sh > ./04_op_opc.out +./05_ki.sh > ./05_ki.out +./06_seq.sh > ./06_seq.out +./07_mnclen.sh > ./07_mnclen.out + +echo "Reference output regenerated!" +echo "" diff --git a/tests/sja2/run-tests b/tests/sja2/run-tests new file mode 100755 index 0000000..1eb6261 --- /dev/null +++ b/tests/sja2/run-tests @@ -0,0 +1,39 @@ +#!/bin/sh + +# default: execute all tests +TESTS="01_auth.sh 02_algo.sh 03_milenage_par.sh 04_op_opc.sh 05_ki.sh 06_seq.sh 07_mnclen.sh" + +# if command line specifies some specific tests, execute only those +if [ $# -ge 1 ]; then + TESTS=$* +fi + +TMP=`tempfile` +NUM_FAIL=0 + +# prepare test card +./prepare + +for T in $TESTS; do + echo "==> Executing Testcase $T" + EXPOUT=${T%%.sh}.out + rm $TMP + ./$T > $TMP + diff -u $EXPOUT $TMP + if [ $? -eq 0 ]; then + echo "Test $T passed" + else + echo "Test $T FAILED!" + NUM_FAIL=$((NUM_FAIL+1)) + fi +done + +echo +echo +echo "Summary: $NUM_FAIL Tests failed" + +if [ $NUM_FAIL -gt 0 ]; then + exit 1 +else + exit 0 +fi diff --git a/tests/sja2/test-data b/tests/sja2/test-data new file mode 100644 index 0000000..a89b390 --- /dev/null +++ b/tests/sja2/test-data @@ -0,0 +1,6 @@ +TOOL=../../sysmo-isim-tool.sja2.py +# data for the test scripts. The values have to match the SIM card inserted while executing the test +ICCID=8988211320300000028 +IMSI=262423203000002 +ADMPIN=72273953 # <==== CHANGE THIS TO THE ADM1 KEY OF YOUR TEST CARD! +KI=94c7f52c8c7337fad1af3a73b17b56ac diff --git a/tests/01_auth.out b/tests/sjs1/01_auth.out similarity index 73% rename from tests/01_auth.out rename to tests/sjs1/01_auth.out index 8727385..13affc9 100644 --- a/tests/01_auth.out +++ b/tests/sjs1/01_auth.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/sjs1/01_auth.sh b/tests/sjs1/01_auth.sh new file mode 100755 index 0000000..d18b455 --- /dev/null +++ b/tests/sjs1/01_auth.sh @@ -0,0 +1,4 @@ +#!/bin/sh +. ./test-data + +$TOOL -a $ADMPIN diff --git a/tests/02_mode_read.out b/tests/sjs1/02_mode_read.out similarity index 84% rename from tests/02_mode_read.out rename to tests/sjs1/02_mode_read.out index 8b0b0fd..aee398b 100644 --- a/tests/02_mode_read.out +++ b/tests/sjs1/02_mode_read.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/02_mode_read.sh b/tests/sjs1/02_mode_read.sh similarity index 100% rename from tests/02_mode_read.sh rename to tests/sjs1/02_mode_read.sh diff --git a/tests/03_mode_write.out b/tests/sjs1/03_mode_write.out similarity index 83% rename from tests/03_mode_write.out rename to tests/sjs1/03_mode_write.out index 2e3cefa..2951aa1 100644 --- a/tests/03_mode_write.out +++ b/tests/sjs1/03_mode_write.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -20,10 +19,9 @@ Programming SIM-Mode... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: None Authenticating... @@ -41,10 +39,9 @@ Reading SIM-Mode... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: None Authenticating... @@ -62,10 +59,9 @@ Programming SIM-Mode... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/03_mode_write.sh b/tests/sjs1/03_mode_write.sh similarity index 100% rename from tests/03_mode_write.sh rename to tests/sjs1/03_mode_write.sh diff --git a/tests/04_algo.out b/tests/sjs1/04_algo.out similarity index 81% rename from tests/04_algo.out rename to tests/sjs1/04_algo.out index 7f2aa87..21e30fa 100644 --- a/tests/04_algo.out +++ b/tests/sjs1/04_algo.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -11,7 +10,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Reading Authentication parameters... +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 1=MILENAGE @@ -20,10 +19,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -32,7 +30,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -41,31 +39,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 - * Detected Card IMSI: 262423203000002 - -Authenticating... - * Remaining attempts: 3 - * Authenticating... - * Authentication successful - * Remaining attempts: 3 - -Reading Authentication parameters... - * Initalizing... - * New algorithm setting: - 2G: 3=COMP128v1 - 3G: 1=MILENAGE - * Programming... - -Done! -sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH - -Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -76,17 +52,16 @@ Authenticating... Programming Authentication parameters... * Initalizing... - * Reading... - * Current algorithm setting: + * New algorithm setting: 2G: 3=COMP128v1 3G: 1=MILENAGE + * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -96,6 +71,26 @@ Authenticating... * Remaining attempts: 3 Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 3=COMP128v1 + 3G: 1=MILENAGE + +Done! +sysmoUSIM-SJS1 parameterization tool +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH + +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 4=XOR-2G @@ -104,10 +99,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -116,7 +110,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -125,31 +119,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 - * Detected Card IMSI: 262423203000002 - -Authenticating... - * Remaining attempts: 3 - * Authenticating... - * Authentication successful - * Remaining attempts: 3 - -Reading Authentication parameters... - * Initalizing... - * New algorithm setting: - 2G: 5=GBA - 3G: 1=MILENAGE - * Programming... - -Done! -sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH - -Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -160,17 +132,16 @@ Authenticating... Programming Authentication parameters... * Initalizing... - * Reading... - * Current algorithm setting: + * New algorithm setting: 2G: 5=GBA 3G: 1=MILENAGE + * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -180,6 +151,26 @@ Authenticating... * Remaining attempts: 3 Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 5=GBA + 3G: 1=MILENAGE + +Done! +sysmoUSIM-SJS1 parameterization tool +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH + +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 6=COMP128v2 @@ -188,10 +179,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -200,7 +190,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -209,10 +199,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -221,7 +210,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Reading Authentication parameters... +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 7=COMP128v3 @@ -230,10 +219,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -242,7 +230,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -251,10 +239,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -263,7 +250,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Reading Authentication parameters... +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 9=CIS-B @@ -272,10 +259,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -284,7 +270,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -293,31 +279,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 - * Detected Card IMSI: 262423203000002 - -Authenticating... - * Remaining attempts: 3 - * Authenticating... - * Authentication successful - * Remaining attempts: 3 - -Reading Authentication parameters... - * Initalizing... - * New algorithm setting: - 2G: 5=GBA - 3G: 8=XOR-3G - * Programming... - -Done! -sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH - -Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -328,17 +292,16 @@ Authenticating... Programming Authentication parameters... * Initalizing... - * Reading... - * Current algorithm setting: + * New algorithm setting: 2G: 5=GBA 3G: 8=XOR-3G + * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -349,17 +312,16 @@ Authenticating... Reading Authentication parameters... * Initalizing... - * New algorithm setting: - 2G: 3=COMP128v1 + * Reading... + * Current algorithm setting: + 2G: 5=GBA 3G: 8=XOR-3G - * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -370,17 +332,16 @@ Authenticating... Programming Authentication parameters... * Initalizing... - * Reading... - * Current algorithm setting: + * New algorithm setting: 2G: 3=COMP128v1 3G: 8=XOR-3G + * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -390,6 +351,26 @@ Authenticating... * Remaining attempts: 3 Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 3=COMP128v1 + 3G: 8=XOR-3G + +Done! +sysmoUSIM-SJS1 parameterization tool +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH + +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 1=MILENAGE @@ -398,10 +379,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -410,7 +390,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -419,31 +399,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 - * Detected Card IMSI: 262423203000002 - -Authenticating... - * Remaining attempts: 3 - * Authenticating... - * Authentication successful - * Remaining attempts: 3 - -Reading Authentication parameters... - * Initalizing... - * New algorithm setting: - 2G: 3=COMP128v1 - 3G: 1=MILENAGE - * Programming... - -Done! -sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH - -Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -454,17 +412,16 @@ Authenticating... Programming Authentication parameters... * Initalizing... - * Reading... - * Current algorithm setting: + * New algorithm setting: 2G: 3=COMP128v1 3G: 1=MILENAGE + * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -474,6 +431,26 @@ Authenticating... * Remaining attempts: 3 Reading Authentication parameters... + * Initalizing... + * Reading... + * Current algorithm setting: + 2G: 3=COMP128v1 + 3G: 1=MILENAGE + +Done! +sysmoUSIM-SJS1 parameterization tool +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH + +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 4=XOR-2G @@ -482,10 +459,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -494,7 +470,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -503,10 +479,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -515,7 +490,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Reading Authentication parameters... +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 6=COMP128v2 @@ -524,10 +499,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -536,7 +510,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -545,10 +519,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -557,7 +530,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Reading Authentication parameters... +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 7=COMP128v3 @@ -566,10 +539,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -578,7 +550,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -587,10 +559,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -599,7 +570,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Reading Authentication parameters... +Programming Authentication parameters... * Initalizing... * New algorithm setting: 2G: 9=CIS-B @@ -608,10 +579,9 @@ Reading Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -620,7 +590,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Programming Authentication parameters... +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: @@ -629,31 +599,9 @@ Programming Authentication parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 - * Detected Card IMSI: 262423203000002 - -Authenticating... - * Remaining attempts: 3 - * Authenticating... - * Authentication successful - * Remaining attempts: 3 - -Reading Authentication parameters... - * Initalizing... - * New algorithm setting: - 2G: 5=GBA - 3G: 8=XOR-3G - * Programming... - -Done! -sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH - -Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -664,17 +612,16 @@ Authenticating... Programming Authentication parameters... * Initalizing... - * Reading... - * Current algorithm setting: + * New algorithm setting: 2G: 5=GBA 3G: 8=XOR-3G + * Programming... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -685,17 +632,16 @@ Authenticating... Reading Authentication parameters... * Initalizing... - * New algorithm setting: - 2G: 3=COMP128v1 - 3G: 1=MILENAGE - * Programming... + * Reading... + * Current algorithm setting: + 2G: 5=GBA + 3G: 8=XOR-3G Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -705,6 +651,26 @@ Authenticating... * Remaining attempts: 3 Programming Authentication parameters... + * Initalizing... + * New algorithm setting: + 2G: 3=COMP128v1 + 3G: 1=MILENAGE + * Programming... + +Done! +sysmoUSIM-SJS1 parameterization tool +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH + +Initializing smartcard terminal... + * Detected Card IMSI: 262423203000002 + +Authenticating... + * Remaining attempts: 3 + * Authenticating... + * Authentication successful + * Remaining attempts: 3 + +Reading Authentication parameters... * Initalizing... * Reading... * Current algorithm setting: diff --git a/tests/04_algo.sh b/tests/sjs1/04_algo.sh similarity index 100% rename from tests/04_algo.sh rename to tests/sjs1/04_algo.sh diff --git a/tests/05_milenage_par.out b/tests/sjs1/05_milenage_par.out similarity index 87% rename from tests/05_milenage_par.out rename to tests/sjs1/05_milenage_par.out index 607ca76..baa3826 100644 --- a/tests/05_milenage_par.out +++ b/tests/sjs1/05_milenage_par.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -28,10 +27,9 @@ Programming Milenage parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -57,10 +55,9 @@ Reading Milenage parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -86,10 +83,9 @@ Programming Milenage parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/sjs1/05_milenage_par.sh b/tests/sjs1/05_milenage_par.sh new file mode 100755 index 0000000..78c9a1a --- /dev/null +++ b/tests/sjs1/05_milenage_par.sh @@ -0,0 +1,24 @@ +#!/bin/sh +. ./test-data + +# Write and reread with test data +C1="1234567890ABCDEF1234567890ABCDEF" +C2="F1234567890ABCDEF1234567890ABCDE" +C3="EF1234567890ABCDEF1234567890ABCD" +C4="DEF1234567890ABCDEF1234567890ABC" +C5="CDEF1234567890ABCDEF1234567890AB" +R12345="AA:BB:CC:DD:EE" +PARAMS=$C1$C2$C3$C4$C5$R12345 +$TOOL -a $ADMPIN -L $PARAMS +$TOOL -a $ADMPIN -l + +# Write and reread with factory defaults +C1="00000000000000000000000000000000" +C2="00000000000000000000000000000001" +C3="00000000000000000000000000000002" +C4="00000000000000000000000000000004" +C5="00000000000000000000000000000008" +R12345="40:00:20:40:60" +PARAMS=$C1$C2$C3$C4$C5$R12345 +$TOOL -a $ADMPIN -L $PARAMS +$TOOL -a $ADMPIN -l diff --git a/tests/06_op_opc.out b/tests/sjs1/06_op_opc.out similarity index 79% rename from tests/06_op_opc.out rename to tests/sjs1/06_op_opc.out index d9703a3..783973b 100644 --- a/tests/06_op_opc.out +++ b/tests/sjs1/06_op_opc.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -11,7 +10,7 @@ Authenticating... * Authentication successful * Remaining attempts: 3 -Writing OP value... +Writing OPc value... * Initalizing... * New OPc setting: OPc: 000102030405060708090a0b0c0d0e0f @@ -19,10 +18,9 @@ Writing OP value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -39,10 +37,9 @@ Reading OP/c value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -59,10 +56,9 @@ Writing OP value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/sjs1/06_op_opc.sh b/tests/sjs1/06_op_opc.sh new file mode 100755 index 0000000..b3e9e41 --- /dev/null +++ b/tests/sjs1/06_op_opc.sh @@ -0,0 +1,9 @@ +#!/bin/sh +. ./test-data + +$TOOL -a $ADMPIN -C 000102030405060708090a0b0c0d0e0f +$TOOL -a $ADMPIN -o + +$TOOL -a $ADMPIN -O 840337c3d45397ce8ea8609ffdc47224 +$TOOL -a $ADMPIN -o + diff --git a/tests/07_ki.out b/tests/sjs1/07_ki.out similarity index 80% rename from tests/07_ki.out rename to tests/sjs1/07_ki.out index 03de707..0612cc9 100644 --- a/tests/07_ki.out +++ b/tests/sjs1/07_ki.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -19,10 +18,9 @@ Writing KI value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -38,10 +36,9 @@ Reading KI value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -58,10 +55,9 @@ Writing KI value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/sjs1/07_ki.sh b/tests/sjs1/07_ki.sh new file mode 100755 index 0000000..93ee6a6 --- /dev/null +++ b/tests/sjs1/07_ki.sh @@ -0,0 +1,11 @@ +#!/bin/sh +. ./test-data + +# set to arbitrary value + read back +$TOOL -a $ADMPIN -K a0b1c2d3e4f5061728394a5b6c7d8e9f +$TOOL -a $ADMPIN -k + +# set to original value + read back +$TOOL -a $ADMPIN -K $KI +$TOOL -a $ADMPIN -k + diff --git a/tests/08_seq.out b/tests/sjs1/08_seq.out similarity index 88% rename from tests/08_seq.out rename to tests/sjs1/08_seq.out index d6ced3f..0741475 100644 --- a/tests/08_seq.out +++ b/tests/sjs1/08_seq.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -60,10 +59,9 @@ Reading Milenage Sequence parameters... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/sjs1/08_seq.sh b/tests/sjs1/08_seq.sh new file mode 100755 index 0000000..3dc715a --- /dev/null +++ b/tests/sjs1/08_seq.sh @@ -0,0 +1,8 @@ +#!/bin/sh +. ./test-data + +# we can only read them for now, which will of course change once we perform auth against it +$TOOL -a $ADMPIN -s + +# test if resetting SQN parameters works +$TOOL -a $ADMPIN -S diff --git a/tests/09_mnclen.out b/tests/sjs1/09_mnclen.out similarity index 79% rename from tests/09_mnclen.out rename to tests/sjs1/09_mnclen.out index cdd951b..c1b047d 100644 --- a/tests/09_mnclen.out +++ b/tests/sjs1/09_mnclen.out @@ -1,8 +1,7 @@ sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -19,10 +18,9 @@ Writing MNCLEN value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -39,10 +37,9 @@ Reading MNCLEN value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -59,10 +56,9 @@ Writing MNCLEN value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -79,10 +75,9 @@ Reading MNCLEN value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... @@ -99,10 +94,9 @@ Writing MNCLEN value... Done! sysmoUSIM-SJS1 parameterization tool -Copyright (c)2017 Sysmocom s.f.m.c. GmbH +Copyright (c)2017-2019 Sysmocom s.f.m.c. GmbH Initializing smartcard terminal... - * Detected Card ICCID: 8988211320300000028 * Detected Card IMSI: 262423203000002 Authenticating... diff --git a/tests/sjs1/09_mnclen.sh b/tests/sjs1/09_mnclen.sh new file mode 100755 index 0000000..19580d7 --- /dev/null +++ b/tests/sjs1/09_mnclen.sh @@ -0,0 +1,15 @@ +#!/bin/sh +. ./test-data + +# set to 2 (default) + read back +$TOOL -a $ADMPIN -N 02 +$TOOL -a $ADMPIN -n + +# set to 3 + read back +$TOOL -a $ADMPIN -N 03 +$TOOL -a $ADMPIN -n + +# set to 2 (default) + read back +$TOOL -a $ADMPIN -N 02 +$TOOL -a $ADMPIN -n + diff --git a/tests/sjs1/prepare b/tests/sjs1/prepare new file mode 100755 index 0000000..763d648 --- /dev/null +++ b/tests/sjs1/prepare @@ -0,0 +1,9 @@ +#!/bin/sh + +. ./test-data + +echo "================ PREPARING TEST CARD ================" +$TOOL -a $ADMPIN -I $ICCID +$TOOL -a $ADMPIN -J $IMSI +echo "================ TEST CARD PREPARED =================" +echo "" diff --git a/tests/regen b/tests/sjs1/regen similarity index 95% rename from tests/regen rename to tests/sjs1/regen index 29228e6..5405dc7 100755 --- a/tests/regen +++ b/tests/sjs1/regen @@ -1,7 +1,7 @@ #!/bin/sh echo "Regenerating test output..." - +./prepare ./01_auth.sh > ./01_auth.out ./02_mode_read.sh > ./02_mode_read.out ./03_mode_write.sh > ./03_mode_write.out @@ -13,4 +13,4 @@ echo "Regenerating test output..." ./09_mnclen.sh > ./09_mnclen.out echo "Reference output regenerated!" -echo "" \ No newline at end of file +echo "" diff --git a/tests/sjs1/run-tests b/tests/sjs1/run-tests new file mode 100755 index 0000000..d424093 --- /dev/null +++ b/tests/sjs1/run-tests @@ -0,0 +1,39 @@ +#!/bin/sh + +# default: execute all tests +TESTS="01_auth.sh 02_mode_read.sh 03_mode_write.sh 04_algo.sh 05_milenage_par.sh 06_op_opc.sh 07_ki.sh 08_seq.sh 09_mnclen.sh" + +# if command line specifies some specific tests, execute only those +if [ $# -ge 1 ]; then + TESTS=$* +fi + +TMP=`tempfile` +NUM_FAIL=0 + +# prepare test card +./prepare + +for T in $TESTS; do + echo "==> Executing Testcase $T" + EXPOUT=${T%%.sh}.out + rm $TMP + ./$T > $TMP + diff -u $EXPOUT $TMP + if [ $? -eq 0 ]; then + echo "Test $T passed" + else + echo "Test $T FAILED!" + NUM_FAIL=$((NUM_FAIL+1)) + fi +done + +echo +echo +echo "Summary: $NUM_FAIL Tests failed" + +if [ $NUM_FAIL -gt 0 ]; then + exit 1 +else + exit 0 +fi diff --git a/tests/test-data b/tests/sjs1/test-data similarity index 87% rename from tests/test-data rename to tests/sjs1/test-data index 0fc0f54..bb697eb 100644 --- a/tests/test-data +++ b/tests/sjs1/test-data @@ -1,4 +1,4 @@ -TOOL=../sysmo-usim-tool.sjs1.py +TOOL=../../sysmo-usim-tool.sjs1.py # data for the test scripts. The values have to match the SIM card inserted while executing the test ICCID=8988211320300000028 IMSI=262423203000002 diff --git a/utils.py b/utils.py index 2562f6c..18fc963 100644 --- a/utils.py +++ b/utils.py @@ -36,7 +36,7 @@ def hexdump(array, multilne = False, width = 30, prefix = " "): result += prefix result += ''.join('{:02x}'.format(x) for x in buf) result += "\n" - return result + return result.rstrip() else: return ''.join('{:02x}'.format(x) for x in array)