Compare commits
2 Commits
65b527ba08
...
912f5d2176
Author | SHA1 | Date |
---|---|---|
Philipp Maier | 912f5d2176 | |
Philipp Maier | b8c465a72d |
20
common.py
20
common.py
|
@ -58,9 +58,15 @@ class Common():
|
||||||
show_iccid = False
|
show_iccid = False
|
||||||
show_aid = False
|
show_aid = False
|
||||||
|
|
||||||
def __init__(self, argv, getopts, getopts_long):
|
# This flag specifies whether the commandline options should offer writing auth parameters (algorithm to use
|
||||||
|
# for authentication). The commandline options are not implemented separately for each card since the method
|
||||||
|
# calls are nearly the same for all card generations.
|
||||||
|
write_auth_4g5g = False
|
||||||
|
|
||||||
|
def __init__(self, argv, getopts, getopts_long, write_auth_4g5g = False):
|
||||||
|
|
||||||
self._banner()
|
self._banner()
|
||||||
|
self.write_auth_4g5g = write_auth_4g5g
|
||||||
|
|
||||||
# Analyze commandline options
|
# Analyze commandline options
|
||||||
try:
|
try:
|
||||||
|
@ -98,7 +104,7 @@ class Common():
|
||||||
elif opt in ("-t", "--auth"):
|
elif opt in ("-t", "--auth"):
|
||||||
self.show_auth = True
|
self.show_auth = True
|
||||||
elif opt in ("-T", "--set-auth"):
|
elif opt in ("-T", "--set-auth"):
|
||||||
self.write_auth = arg.split(':',1)
|
self.write_auth = arg.split(':', 2)
|
||||||
elif opt in ("-o", "--opc"):
|
elif opt in ("-o", "--opc"):
|
||||||
self.show_opc = True
|
self.show_opc = True
|
||||||
elif opt in ("-O", "--set-op"):
|
elif opt in ("-O", "--set-op"):
|
||||||
|
@ -143,8 +149,11 @@ class Common():
|
||||||
print(" -L, --set-milenage HEXSTRING ... Set milenage parameters")
|
print(" -L, --set-milenage HEXSTRING ... Set milenage parameters")
|
||||||
print(" -k, --key ...................... Show auth key value")
|
print(" -k, --key ...................... Show auth key value")
|
||||||
print(" -K, --set-key .................. Set auth key value")
|
print(" -K, --set-key .................. Set auth key value")
|
||||||
print(" -t, --auth ..................... Show Authentication algorithms")
|
print(" -t, --auth ..................... Show authentication algorithms")
|
||||||
print(" -T, --set-auth 2G:3G ........... Set 2G/3G Auth algo (e.g. COMP128v1:COMP128v1)")
|
if self.write_auth_4g5g:
|
||||||
|
print(" -T, --set-auth 2g:3g[:4g5g] .... Set 2G/3G auth algo (e.g. COMP128v1:COMP128v1)")
|
||||||
|
else:
|
||||||
|
print(" -T, --set-auth 2g:3g ........... Set 2G/3G auth algo (e.g. COMP128v1:COMP128v1)")
|
||||||
print(" -o, --opc ...................... Show OP/c configuration")
|
print(" -o, --opc ...................... Show OP/c configuration")
|
||||||
print(" -O, --set-op HEXSTRING ......... Set OP value")
|
print(" -O, --set-op HEXSTRING ......... Set OP value")
|
||||||
print(" -C, --set-opc HEXSTRING ........ Set OPc value")
|
print(" -C, --set-opc HEXSTRING ........ Set OPc value")
|
||||||
|
@ -192,6 +201,9 @@ class Common():
|
||||||
self.sim.show_auth_params()
|
self.sim.show_auth_params()
|
||||||
|
|
||||||
if self.write_auth:
|
if self.write_auth:
|
||||||
|
if self.write_auth_4g5g and len(self.write_auth) > 2:
|
||||||
|
self.sim.write_auth_params(self.write_auth[0], self.write_auth[1], self.write_auth[2])
|
||||||
|
else:
|
||||||
self.sim.write_auth_params(self.write_auth[0], self.write_auth[1])
|
self.sim.write_auth_params(self.write_auth[0], self.write_auth[1])
|
||||||
|
|
||||||
if self.show_opc:
|
if self.show_opc:
|
||||||
|
|
|
@ -71,7 +71,7 @@ class Application(Common):
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
|
|
||||||
Application(argv, "d", ["dump"])
|
Application(argv, "d", ["dump"], True)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -71,7 +71,7 @@ class Application(Common):
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
|
|
||||||
Application(argv, "d", ["dump"])
|
Application(argv, "d", ["dump"], True)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -91,165 +91,288 @@ sysmo_isimsja5_algorithms = sysmo_isimsja2_algorithms + [
|
||||||
(SYSMO_ISIMSJA5_ALGO_TUAK, 'TUAK'),
|
(SYSMO_ISIMSJA5_ALGO_TUAK, 'TUAK'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Algorithms that use a 16 byte Key in the familiar format of sysmo-isim-sja2
|
||||||
|
sysmo_isimsjax_16_byte_key_algorithms = [
|
||||||
|
SYSMO_ISIMSJA2_ALGO_COMP12V1,
|
||||||
|
SYSMO_ISIMSJA2_ALGO_COMP12V2,
|
||||||
|
SYSMO_ISIMSJA2_ALGO_COMP12V3,
|
||||||
|
SYSMO_ISIMSJA2_ALGO_MILENAGE,
|
||||||
|
SYSMO_ISIMSJA2_ALGO_SHA1AKA,
|
||||||
|
SYSMO_ISIMSJA2_ALGO_XOR,
|
||||||
|
SYSMO_ISIMSJA5_ALGO_XOR_2G,
|
||||||
|
]
|
||||||
|
|
||||||
|
sysmo_isimsjax_op_opc = [
|
||||||
|
(True, 'OPc'),
|
||||||
|
(False, 'OP'),
|
||||||
|
]
|
||||||
|
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_PARS_MILENAGE:
|
||||||
|
use_opc = False
|
||||||
|
sres_dev_func = 1
|
||||||
|
four_byte_res = 0 #sysmo-usim-sja5 only
|
||||||
|
|
||||||
|
def __init__(self, content = None):
|
||||||
|
if content == None:
|
||||||
|
return
|
||||||
|
header = content[0]
|
||||||
|
self.use_opc = bool((header >> 4) & 1)
|
||||||
|
if (header >> 5) & 1:
|
||||||
|
self.sres_dev_func = 2
|
||||||
|
self.four_byte_res = bool((header >> 6) & 1)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
dump = ""
|
||||||
|
pfx = " "
|
||||||
|
if self.use_opc == True:
|
||||||
|
dump += pfx + "use OPc\n"
|
||||||
|
else:
|
||||||
|
dump += pfx + "use OP\n"
|
||||||
|
dump += pfx + "use SRES deviation function " + str(self.sres_dev_func) + "\n"
|
||||||
|
if self.four_byte_res:
|
||||||
|
dump += pfx + "Return 4 byte RES\n"
|
||||||
|
else:
|
||||||
|
dump += pfx + "Return full 8 byte RES\n"
|
||||||
|
return dump
|
||||||
|
|
||||||
|
def encode(self) -> int:
|
||||||
|
out = 0x00
|
||||||
|
if self.use_opc == True:
|
||||||
|
out |= 1 << 4
|
||||||
|
out |= ((self.sres_dev_func-1) & 1) << 5
|
||||||
|
out |= ((self.four_byte_res) & 1) << 6
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_PARS_SHA1AKA:
|
||||||
|
four_byte_res = 0 #sysmo-usim-sja5 only
|
||||||
|
|
||||||
|
def __init__(self, content = None):
|
||||||
|
if content == None:
|
||||||
|
return
|
||||||
|
header = content[0]
|
||||||
|
self.four_byte_res = bool((header >> 6) & 1)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
dump = ""
|
||||||
|
pfx = " "
|
||||||
|
if self.four_byte_res:
|
||||||
|
dump += pfx + "Return 4 byte RES\n"
|
||||||
|
else:
|
||||||
|
dump += pfx + "Return full 8 byte RES (default)\n"
|
||||||
|
return dump
|
||||||
|
|
||||||
|
def encode(self) -> int:
|
||||||
|
out = 0x00
|
||||||
|
out |= ((self.four_byte_res) & 1) << 6
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_PARS_XOR:
|
||||||
|
sres_dev_func = 1
|
||||||
|
four_byte_res = 0
|
||||||
|
sixteen_byte_res = 0 #Return 16 byte RES (ignores full_res)
|
||||||
|
|
||||||
|
def __init__(self, content = None):
|
||||||
|
if content == None:
|
||||||
|
return
|
||||||
|
header = content[0]
|
||||||
|
if (header >> 5) & 1:
|
||||||
|
self.sres_dev_func = 2
|
||||||
|
self.four_byte_res = bool((header >> 6) & 1)
|
||||||
|
self.sixteen_byte_res = bool((header >> 7) & 1)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
dump = ""
|
||||||
|
pfx = " "
|
||||||
|
dump += pfx + "use SRES deviation function" + str(self.sres_dev_func) + "\n"
|
||||||
|
if self.sixteen_byte_res:
|
||||||
|
dump += pfx + "Return extended 16 byte RES\n"
|
||||||
|
elif self.four_byte_res:
|
||||||
|
dump += pfx + "Return 4 byte RES\n"
|
||||||
|
else:
|
||||||
|
dump += pfx + "Return full 8 byte RES (default)\n"
|
||||||
|
return dump
|
||||||
|
|
||||||
|
def encode(self) -> int:
|
||||||
|
out = 0x00
|
||||||
|
out |= ((self.sres_dev_func-1) & 1) << 5
|
||||||
|
out |= ((self.four_byte_res) & 1) << 6
|
||||||
|
out |= ((self.sixteen_byte_res) & 1) << 7
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
class SYSMO_ISIMSJA5_ALGO_PARS_TUAK:
|
||||||
|
use_topc = False
|
||||||
|
sres_dev_func = 1
|
||||||
|
use_256_bit_key = False
|
||||||
|
|
||||||
|
def __init__(self, content = None):
|
||||||
|
if content == None:
|
||||||
|
return
|
||||||
|
header = content[0]
|
||||||
|
self.use_topc = bool((header >> 4) & 1)
|
||||||
|
if (header >> 5) & 1:
|
||||||
|
self.sres_dev_func = 2
|
||||||
|
self.use_256_bit_key = bool((header >> 6) & 1)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
dump = ""
|
||||||
|
pfx = " "
|
||||||
|
if self.use_topc == True:
|
||||||
|
dump += pfx + "use TOPc\n"
|
||||||
|
else:
|
||||||
|
dump += pfx + "use TOP\n"
|
||||||
|
dump += pfx + "use SRES deviation function " + str(self.sres_dev_func) + "\n"
|
||||||
|
if self.use_256_bit_key:
|
||||||
|
dump += pfx + "256 bit key length\n"
|
||||||
|
else:
|
||||||
|
dump += pfx + "128 bit key length\n"
|
||||||
|
return dump
|
||||||
|
|
||||||
|
|
||||||
|
def encode(self) -> int:
|
||||||
|
out = 0x00
|
||||||
|
if self.use_topc == True:
|
||||||
|
out |= 1 << 4
|
||||||
|
out |= ((self.sres_dev_func-1) & 1) << 5
|
||||||
|
out |= ((self.use_256_bit_key) & 1) << 6
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
class SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY:
|
class SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY:
|
||||||
"""
|
"""
|
||||||
Superclass model that generates that handles the header byte of
|
Superclass model that generates and parses the header byte of
|
||||||
SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY, SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_2G
|
SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY, SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_2G
|
||||||
and SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_GBA.
|
and SYSMO_ISIMSJA2_EF_USIM_AUTH_KEY_GBA.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
algo = SYSMO_ISIMSJA2_ALGO_COMP12V1
|
algo = SYSMO_ISIMSJA2_ALGO_COMP12V1
|
||||||
use_opc = False
|
algo_pars = None
|
||||||
sres_dev_func = 1
|
|
||||||
|
|
||||||
def __init__(self, content = None):
|
def __init__(self, content = None):
|
||||||
if content == None:
|
if content == None:
|
||||||
return
|
return
|
||||||
header = content[0]
|
header = content[0]
|
||||||
self.algo = header & 0x0F
|
self.algo = header & 0x0F
|
||||||
self.use_opc = bool((header >> 4) & 1)
|
if self.algo == SYSMO_ISIMSJA2_ALGO_MILENAGE:
|
||||||
if (header >> 5) & 1:
|
self.algo_pars = SYSMO_ISIMSJAX_ALGO_PARS_MILENAGE(content)
|
||||||
self.sres_dev_func = 2
|
elif self.algo == SYSMO_ISIMSJA2_ALGO_SHA1AKA:
|
||||||
else:
|
self.algo_pars = SYSMO_ISIMSJAX_ALGO_PARS_SHA1AKA(content)
|
||||||
self.sres_dev_func = 1
|
elif self.algo == SYSMO_ISIMSJA2_ALGO_XOR:
|
||||||
|
self.algo_pars = SYSMO_ISIMSJAX_ALGO_PARS_XOR(content)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
dump = ""
|
dump = ""
|
||||||
pfx = " "
|
pfx = " "
|
||||||
|
|
||||||
dump += pfx + "Algorithm: "
|
dump += pfx + "Algorithm: "
|
||||||
dump += id_to_str(sysmo_isimsja5_algorithms, self.algo)
|
dump += id_to_str(sysmo_isimsja5_algorithms, self.algo)
|
||||||
dump += "\n"
|
dump += "\n"
|
||||||
|
if self.algo_pars:
|
||||||
if self.use_opc == True:
|
dump += str(self.algo_pars)
|
||||||
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
|
return dump
|
||||||
|
|
||||||
def encode(self) -> list:
|
def encode(self):
|
||||||
out = [0x00]
|
out = [0x00]
|
||||||
out[0] = self.algo & 0x0F
|
out[0] = self.algo & 0x0F
|
||||||
if self.use_opc == True:
|
if self.algo_pars:
|
||||||
out[0] |= 1 << 4
|
out[0] |= self.algo_pars.encode()
|
||||||
out[0] |= ((self.sres_dev_func-1) & 1) << 5
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_KEY_COMP128:
|
||||||
|
|
||||||
class SYSMO_ISIMSJAX_FILE_EF_SIM_AUTH_KEY(SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY):
|
ki = [0x00] * 16
|
||||||
|
|
||||||
key = [0xAA] * 16
|
|
||||||
opc = [0xBB] * 16
|
|
||||||
|
|
||||||
def __init__(self, content = None):
|
def __init__(self, content = None):
|
||||||
if content == None:
|
if content == None:
|
||||||
return
|
return
|
||||||
|
self.ki = content[1:17]
|
||||||
|
|
||||||
SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.__init__(self, content)
|
def __str__(self) -> str:
|
||||||
self.key = content[1:17]
|
dump = ""
|
||||||
|
pfx = " "
|
||||||
|
dump += pfx + "Ki: " + hexdump(self.ki)
|
||||||
|
return dump
|
||||||
|
|
||||||
|
def encode(self) -> list:
|
||||||
|
return self.ki
|
||||||
|
|
||||||
|
|
||||||
|
#XOR has the same key length COMP128 (16 byte, no extra data)
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_KEY_XOR(SYSMO_ISIMSJAX_ALGO_KEY_COMP128):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
#SHA1AKA has the same key length COMP128 (16 byte, no extra data)
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_KEY_SHA1AKA(SYSMO_ISIMSJAX_ALGO_KEY_COMP128):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
#Milenage adds a 16 byte OP/c
|
||||||
|
class SYSMO_ISIMSJAX_ALGO_KEY_MILENAGE(SYSMO_ISIMSJAX_ALGO_KEY_COMP128):
|
||||||
|
|
||||||
|
opc = [0x00] * 16
|
||||||
|
|
||||||
|
def __init__(self, content = None):
|
||||||
|
if content == None:
|
||||||
|
return
|
||||||
|
super().__init__(content)
|
||||||
self.opc = content[17:33]
|
self.opc = content[17:33]
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
dump = ""
|
dump = ""
|
||||||
pfx = " "
|
pfx = " "
|
||||||
|
dump += super().__str__()
|
||||||
dump += SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.__str__(self)
|
dump += "\n"
|
||||||
|
|
||||||
if self.algo == SYSMO_ISIMSJA2_ALGO_MILENAGE:
|
|
||||||
dump += pfx + "Key: " + hexdump(self.key) + "\n"
|
|
||||||
dump += pfx + "OPc: " + hexdump(self.opc)
|
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
|
return dump
|
||||||
|
|
||||||
|
|
||||||
def encode(self) -> list:
|
def encode(self) -> list:
|
||||||
out = SYSMO_ISIMSJA2_FILE_EF_XSIM_AUTH_KEY.encode(self)
|
return super().encode() + self.opc
|
||||||
out += self.key + self.opc
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
class SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY):
|
class SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY):
|
||||||
|
|
||||||
full_res = True # Return full 8-byte RES or first 4 bytes only
|
algo_key = None
|
||||||
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):
|
def __init__(self, content = None):
|
||||||
if content == None:
|
# The superclass constructor must ensure that a valid algo and
|
||||||
return
|
# algo parameters are set since we need this information to pick
|
||||||
|
# the key configuration below.
|
||||||
SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY.__init__(self, content)
|
super().__init__(content)
|
||||||
header = content[0]
|
if self.algo == SYSMO_ISIMSJA2_ALGO_COMP12V1 or \
|
||||||
|
self.algo == SYSMO_ISIMSJA2_ALGO_COMP12V2 or \
|
||||||
self.full_res = bool((header >> 6) & 1)
|
self.algo == SYSMO_ISIMSJA2_ALGO_COMP12V3:
|
||||||
self.ext_res = bool((header >> 7) & 1)
|
self.algo_key = SYSMO_ISIMSJAX_ALGO_KEY_COMP128(content)
|
||||||
|
elif self.algo == SYSMO_ISIMSJA2_ALGO_MILENAGE:
|
||||||
self.key = content[1:17]
|
self.algo_key = SYSMO_ISIMSJAX_ALGO_KEY_MILENAGE(content)
|
||||||
if len(content) > 17:
|
elif self.algo == SYSMO_ISIMSJA2_ALGO_SHA1AKA:
|
||||||
self.opc = content[17:33]
|
self.algo_key = SYSMO_ISIMSJAX_ALGO_KEY_SHA1AKA(content)
|
||||||
|
elif self.algo == SYSMO_ISIMSJA2_ALGO_XOR or \
|
||||||
|
self.algo == SYSMO_ISIMSJA5_ALGO_XOR_2G:
|
||||||
|
self.algo_key = SYSMO_ISIMSJAX_ALGO_KEY_XOR(content)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
dump = ""
|
dump = ""
|
||||||
pfx = " "
|
dump += super().__str__()
|
||||||
|
dump += str(self.algo_key)
|
||||||
dump += SYSMO_ISIMSJAX_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
|
return dump
|
||||||
|
|
||||||
|
|
||||||
def encode(self) -> list:
|
def encode(self) -> list:
|
||||||
out = SYSMO_ISIMSJAX_FILE_EF_XSIM_AUTH_KEY.encode(self)
|
out = super().encode()
|
||||||
if self.full_res == True:
|
if self.algo_key:
|
||||||
out[0] |= 1 << 6
|
out += self.algo_key.encode()
|
||||||
if self.ext_res == True:
|
else:
|
||||||
out[0] |= 1 << 7
|
raise ValueError("key data encoding not supported for selected algorithm!")
|
||||||
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
|
return out
|
||||||
|
|
||||||
|
|
||||||
# EF_USIM_AUTH_KEY_2G and EF_USIM_AUTH_KEY_GBA have the same layout as
|
# EF_USIM_AUTH_KEY_2G, EF_SIM_AUTH_KEY 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
|
# EF_USIM_AUTH_KEY, so there is nothing to specialize other than the class name
|
||||||
|
class SYSMO_ISIMSJA2_FILE_EF_SIM_AUTH_KEY(SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY_2G(SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY):
|
class SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY_2G(SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -628,6 +751,15 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
print(" * ADF_ISIM/EF_ISIM_SQN:")
|
print(" * ADF_ISIM/EF_ISIM_SQN:")
|
||||||
print(SYSMO_ISIMSJAX_FILE_EF_USIM_SQN(res.apdu))
|
print(SYSMO_ISIMSJAX_FILE_EF_USIM_SQN(res.apdu))
|
||||||
|
|
||||||
|
def __display_key(self, ef, gen:str):
|
||||||
|
"""
|
||||||
|
Helper method to display key
|
||||||
|
"""
|
||||||
|
if ef.algo in sysmo_isimsjax_16_byte_key_algorithms:
|
||||||
|
print(" %s: Key: %s" % (gen, hexdump(ef.algo_key.ki)))
|
||||||
|
else:
|
||||||
|
print(" * %s: Key not applicable for selected algorithm." % gen)
|
||||||
|
|
||||||
def show_key_params(self):
|
def show_key_params(self):
|
||||||
"""
|
"""
|
||||||
Show current Key value
|
Show current Key value
|
||||||
|
@ -635,16 +767,43 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
print("Reading Key value...")
|
print("Reading Key value...")
|
||||||
self._init()
|
self._init()
|
||||||
|
|
||||||
# Note: The key is expected to be the same in all eligible files
|
|
||||||
print(" * Reading...")
|
print(" * Reading...")
|
||||||
self.__select_xsim_auth_key(isim = False, _2G = True)
|
self.__select_xsim_auth_key(isim = False, _2G = True)
|
||||||
res = self._read_binary(self.sim.filelen)
|
res = self._read_binary(self.sim.filelen)
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY_2G(res.apdu)
|
ef_2g = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
|
|
||||||
|
self.__select_xsim_auth_key(isim = False, _2G = False)
|
||||||
|
res = self._read_binary(self.sim.filelen)
|
||||||
|
ef_3g = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
|
|
||||||
|
if self.sim.has_isim:
|
||||||
|
self.__select_xsim_auth_key(isim = True, _2G = False)
|
||||||
|
res = self._read_binary(self.sim.filelen)
|
||||||
|
ef_4g5g = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
|
else:
|
||||||
|
ef_4g5g = None
|
||||||
|
|
||||||
print(" * Current Key setting:")
|
print(" * Current Key setting:")
|
||||||
print(" Key: " + hexdump(ef.key))
|
self.__display_key(ef_2g, "2g")
|
||||||
|
self.__display_key(ef_3g, "3g")
|
||||||
|
if ef_4g5g:
|
||||||
|
self.__display_key(ef_4g5g, "4g5g")
|
||||||
|
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
|
def __program_key(self, key, gen:str):
|
||||||
|
"""
|
||||||
|
Helper method to program key, EF must be selected first
|
||||||
|
"""
|
||||||
|
res = self._read_binary(self.sim.filelen)
|
||||||
|
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
|
if ef.algo in sysmo_isimsjax_16_byte_key_algorithms:
|
||||||
|
ef.algo_key.ki = key
|
||||||
|
self.sim.update_binary(ef.encode())
|
||||||
|
print(" * %s: Key programmed." % gen)
|
||||||
|
else:
|
||||||
|
print(" * %s: Key not applicable for selected algorithm." % gen)
|
||||||
|
|
||||||
def write_key_params(self, key):
|
def write_key_params(self, key):
|
||||||
"""
|
"""
|
||||||
Program new Key value
|
Program new Key value
|
||||||
|
@ -655,23 +814,12 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
print(" Key: " + hexdump(key))
|
print(" Key: " + hexdump(key))
|
||||||
print(" * Programming...")
|
print(" * Programming...")
|
||||||
self.__select_xsim_auth_key(isim = False, _2G = True)
|
self.__select_xsim_auth_key(isim = False, _2G = True)
|
||||||
res = self._read_binary(self.sim.filelen)
|
self.__program_key(key, "2g")
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY_2G(res.apdu)
|
|
||||||
ef.key = key
|
|
||||||
self.sim.update_binary(ef.encode())
|
|
||||||
|
|
||||||
self.__select_xsim_auth_key(isim = False, _2G = False)
|
self.__select_xsim_auth_key(isim = False, _2G = False)
|
||||||
res = self._read_binary(self.sim.filelen)
|
self.__program_key(key, "3g")
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
|
||||||
ef.key = key
|
|
||||||
self.sim.update_binary(ef.encode())
|
|
||||||
|
|
||||||
if self.sim.has_isim:
|
if self.sim.has_isim:
|
||||||
self.__select_xsim_auth_key(isim = True, _2G = False)
|
self.__select_xsim_auth_key(isim = True, _2G = False)
|
||||||
res = self._read_binary(self.sim.filelen)
|
self.__program_key(key, "4g5g")
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
|
||||||
ef.key = key
|
|
||||||
self.sim.update_binary(ef.encode())
|
|
||||||
|
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
|
@ -693,12 +841,21 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
algo_3g = ef.algo
|
algo_3g = ef.algo
|
||||||
|
|
||||||
|
if self.sim.has_isim:
|
||||||
|
self.__select_xsim_auth_key(isim = True, _2G = False)
|
||||||
|
res = self._read_binary(self.sim.filelen)
|
||||||
|
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
|
algo_4g5g = ef.algo
|
||||||
|
else:
|
||||||
|
algo_4g5g = algo_3g
|
||||||
|
|
||||||
print(" * Current algorithm setting:")
|
print(" * Current algorithm setting:")
|
||||||
print(" 2G: %d=%s" % (algo_2g, id_to_str(self.algorithms, algo_2g)))
|
print(" 2g: %d=%s" % (algo_2g, id_to_str(self.algorithms, algo_2g)))
|
||||||
print(" 3G: %d=%s" % (algo_3g, id_to_str(self.algorithms, algo_3g)))
|
print(" 3g: %d=%s" % (algo_3g, id_to_str(self.algorithms, algo_3g)))
|
||||||
|
print(" 4g5g: %d=%s" % (algo_3g, id_to_str(self.algorithms, algo_4g5g)))
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
def write_auth_params(self, algo_2g_str, algo_3g_str):
|
def write_auth_params(self, algo_2g_str, algo_3g_str, algo_4g5g_str = None):
|
||||||
"""
|
"""
|
||||||
Write new authentication parameters
|
Write new authentication parameters
|
||||||
"""
|
"""
|
||||||
|
@ -715,9 +872,18 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
else:
|
else:
|
||||||
algo_3g = str_to_id(self.algorithms, algo_3g_str)
|
algo_3g = str_to_id(self.algorithms, algo_3g_str)
|
||||||
|
|
||||||
|
if algo_4g5g_str:
|
||||||
|
if algo_4g5g_str.isdigit():
|
||||||
|
algo_4g5g = int(algo_4g5g_str)
|
||||||
|
else:
|
||||||
|
algo_4g5g = str_to_id(self.algorithms, algo_4g5g_str)
|
||||||
|
else:
|
||||||
|
algo_4g5g = algo_3g
|
||||||
|
|
||||||
print(" * New algorithm setting:")
|
print(" * New algorithm setting:")
|
||||||
print(" 2G: %d=%s" % (algo_2g, id_to_str(self.algorithms, algo_2g)))
|
print(" 2g: %d=%s" % (algo_2g, id_to_str(self.algorithms, algo_2g)))
|
||||||
print(" 3G: %d=%s" % (algo_3g, id_to_str(self.algorithms, algo_3g)))
|
print(" 3g: %d=%s" % (algo_3g, id_to_str(self.algorithms, algo_3g)))
|
||||||
|
print(" 4g5g: %d=%s" % (algo_4g5g, id_to_str(self.algorithms, algo_4g5g)))
|
||||||
|
|
||||||
print(" * Programming...")
|
print(" * Programming...")
|
||||||
|
|
||||||
|
@ -737,11 +903,21 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
self.__select_xsim_auth_key(isim = True, _2G = False)
|
self.__select_xsim_auth_key(isim = True, _2G = False)
|
||||||
res = self._read_binary(self.sim.filelen)
|
res = self._read_binary(self.sim.filelen)
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
ef.algo = algo_3g
|
ef.algo = algo_4g5g
|
||||||
self.sim.update_binary(ef.encode())
|
self.sim.update_binary(ef.encode())
|
||||||
|
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
|
def __display_opc(self, ef, gen:str):
|
||||||
|
"""
|
||||||
|
Helper method to display OP/OPc
|
||||||
|
"""
|
||||||
|
if ef.algo is SYSMO_ISIMSJA2_ALGO_MILENAGE:
|
||||||
|
print(" %s: %s: %s" % (gen, id_to_str(sysmo_isimsjax_op_opc, ef.algo_pars.use_opc), \
|
||||||
|
hexdump(ef.algo_key.opc)))
|
||||||
|
else:
|
||||||
|
print(" * %s: OP/OPc not applicable for selected algorithm." % gen)
|
||||||
|
|
||||||
def show_opc_params(self):
|
def show_opc_params(self):
|
||||||
"""
|
"""
|
||||||
Show OP/OPc current configuration. (see also method: write_opc_params).
|
Show OP/OPc current configuration. (see also method: write_opc_params).
|
||||||
|
@ -749,58 +925,66 @@ class Sysmo_isim_sja2(Sysmo_usim):
|
||||||
print("Reading OP/c value...")
|
print("Reading OP/c value...")
|
||||||
self._init()
|
self._init()
|
||||||
|
|
||||||
# Note: The OPc is expected to be the same in all eligible files
|
|
||||||
print(" * Reading...")
|
print(" * Reading...")
|
||||||
self.__select_xsim_auth_key(isim = False, _2G = False)
|
|
||||||
res = self._read_binary(self.sim.filelen)
|
|
||||||
ef = SYSMO_ISIMSJAX_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("")
|
|
||||||
|
|
||||||
def write_opc_params(self, select, op):
|
|
||||||
"""
|
|
||||||
Program new OPc value
|
|
||||||
"""
|
|
||||||
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)
|
self.__select_xsim_auth_key(isim = False, _2G = True)
|
||||||
res = self._read_binary(self.sim.filelen)
|
res = self._read_binary(self.sim.filelen)
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY_2G(res.apdu)
|
ef_2g = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
ef.opc = op
|
|
||||||
ef.use_opc = bool(select)
|
self.__select_xsim_auth_key(isim = False, _2G = False)
|
||||||
self.sim.update_binary(ef.encode())
|
res = self._read_binary(self.sim.filelen)
|
||||||
|
ef_3g = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
|
|
||||||
if self.sim.has_isim:
|
if self.sim.has_isim:
|
||||||
self.__select_xsim_auth_key(isim = True, _2G = False)
|
self.__select_xsim_auth_key(isim = True, _2G = False)
|
||||||
res = self._read_binary(self.sim.filelen)
|
res = self._read_binary(self.sim.filelen)
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
ef_4g5g = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
ef.opc = op
|
else:
|
||||||
ef.use_opc = bool(select)
|
ef_4g5g = None
|
||||||
self.sim.update_binary(ef.encode())
|
|
||||||
|
|
||||||
self.__select_xsim_auth_key(isim = False, _2G = False)
|
print(" * Current OP/OPc setting:")
|
||||||
|
self.__display_opc(ef_2g, "2g")
|
||||||
|
self.__display_opc(ef_3g, "3g")
|
||||||
|
if ef_4g5g:
|
||||||
|
self.__display_opc(ef_3g, "4g5g")
|
||||||
|
|
||||||
|
print("")
|
||||||
|
|
||||||
|
def __program_opc(self, select:bool, op, gen:str):
|
||||||
|
"""
|
||||||
|
Helper method to program OP/OPc, EF must be selected first
|
||||||
|
"""
|
||||||
res = self._read_binary(self.sim.filelen)
|
res = self._read_binary(self.sim.filelen)
|
||||||
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
ef = SYSMO_ISIMSJAX_FILE_EF_USIM_AUTH_KEY(res.apdu)
|
||||||
ef.opc = op
|
if ef.algo is SYSMO_ISIMSJA2_ALGO_MILENAGE:
|
||||||
ef.use_opc = bool(select)
|
ef.algo_key.opc = op
|
||||||
|
ef.algo_pars.use_opc = bool(select)
|
||||||
self.sim.update_binary(ef.encode())
|
self.sim.update_binary(ef.encode())
|
||||||
|
print(" %s %s programmed." % (gen, id_to_str(sysmo_isimsjax_op_opc, bool(select))));
|
||||||
|
else:
|
||||||
|
print(" %s OP/OPc not applicable for selected algorithm, skipping..." % gen)
|
||||||
|
|
||||||
|
def write_opc_params(self, select:bool, op):
|
||||||
|
"""
|
||||||
|
Program new OP/OPc value. The new OP/OPc value is programmed into all files where the algorithm is
|
||||||
|
configured to Milenage. When Milenage is not configured, then the respective file is not touched.
|
||||||
|
As a simplification we program the same OP/OPc configuration to all files (2G, 3G, 4G/5G). Even though
|
||||||
|
the cards would permit a different setting in each file, it is extremly unlikely that any HLR/HSS would
|
||||||
|
use such a configuration.
|
||||||
|
"""
|
||||||
|
print("Writing %s value..." % id_to_str(sysmo_isimsjax_op_opc, bool(select)))
|
||||||
|
self._init()
|
||||||
|
|
||||||
|
print(" * New OPc setting:")
|
||||||
|
print(" %s: %s" % (id_to_str(sysmo_isimsjax_op_opc, bool(select)), hexdump(op)))
|
||||||
|
|
||||||
|
print(" * Programming...")
|
||||||
|
self.__select_xsim_auth_key(isim = False, _2G = True)
|
||||||
|
self.__program_opc(select, op, "2g")
|
||||||
|
self.__select_xsim_auth_key(isim = False, _2G = False)
|
||||||
|
self.__program_opc(select, op, "3g")
|
||||||
|
if self.sim.has_isim:
|
||||||
|
self.__select_xsim_auth_key(isim = True, _2G = False)
|
||||||
|
self.__program_opc(select, op, "4g5g")
|
||||||
|
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -40,8 +41,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -62,8 +64,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 3=COMP128v3
|
2g: 3=COMP128v3
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -86,8 +89,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 3=COMP128v3
|
2g: 3=COMP128v3
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -108,8 +112,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 4=MILENAGE
|
2g: 4=MILENAGE
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -132,8 +137,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 4=MILENAGE
|
2g: 4=MILENAGE
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -154,8 +160,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 5=SHA1-AKA
|
2g: 5=SHA1-AKA
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -178,8 +185,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 5=SHA1-AKA
|
2g: 5=SHA1-AKA
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -200,8 +208,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 15=XOR
|
2g: 15=XOR
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -224,8 +233,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 15=XOR
|
2g: 15=XOR
|
||||||
3G: 1=COMP128v1
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v1
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -246,8 +256,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -270,8 +281,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -292,8 +304,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 3=COMP128v3
|
2g: 3=COMP128v3
|
||||||
3G: 15=XOR
|
3g: 15=XOR
|
||||||
|
4g5g: 15=XOR
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -316,8 +329,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 3=COMP128v3
|
2g: 3=COMP128v3
|
||||||
3G: 15=XOR
|
3g: 15=XOR
|
||||||
|
4g5g: 15=XOR
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -338,8 +352,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 2=COMP128v2
|
2g: 2=COMP128v2
|
||||||
3G: 2=COMP128v2
|
3g: 2=COMP128v2
|
||||||
|
4g5g: 2=COMP128v2
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -362,8 +377,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 2=COMP128v2
|
2g: 2=COMP128v2
|
||||||
3G: 2=COMP128v2
|
3g: 2=COMP128v2
|
||||||
|
4g5g: 2=COMP128v2
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -384,8 +400,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 3=COMP128v3
|
3g: 3=COMP128v3
|
||||||
|
4g5g: 3=COMP128v3
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -408,8 +425,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 3=COMP128v3
|
3g: 3=COMP128v3
|
||||||
|
4g5g: 3=COMP128v3
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -430,8 +448,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 4=MILENAGE
|
2g: 1=COMP128v1
|
||||||
3G: 4=MILENAGE
|
3g: 2=COMP128v2
|
||||||
|
4g5g: 3=COMP128v3
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -454,8 +473,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 4=MILENAGE
|
2g: 1=COMP128v1
|
||||||
3G: 4=MILENAGE
|
3g: 2=COMP128v2
|
||||||
|
4g5g: 2=COMP128v3
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -476,8 +496,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 5=SHA1-AKA
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -500,8 +521,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 1=COMP128v1
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=SHA1-AKA
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -522,8 +544,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 3=COMP128v3
|
2g: 5=SHA1-AKA
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 15=XOR
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -546,8 +569,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 3=COMP128v3
|
2g: 5=SHA1-AKA
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=XOR
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -568,8 +592,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 2=COMP128v2
|
2g: 4=MILENAGE
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -592,8 +617,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 2=COMP128v2
|
2g: 4=MILENAGE
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -614,8 +640,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 5=SHA1-AKA
|
2g: 1=COMP128v1
|
||||||
3G: 15=XOR
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -638,8 +665,9 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 5=SHA1-AKA
|
2g: 1=COMP128v1
|
||||||
3G: 15=XOR
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -660,8 +688,9 @@ Authenticating...
|
||||||
Programming Authentication parameters...
|
Programming Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* New algorithm setting:
|
* New algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 3=COMP128v3
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
* Programming...
|
* Programming...
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
@ -684,7 +713,248 @@ Reading Authentication parameters...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current algorithm setting:
|
* Current algorithm setting:
|
||||||
2G: 1=COMP128v1
|
2g: 3=COMP128v3
|
||||||
3G: 4=MILENAGE
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Programming Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* New algorithm setting:
|
||||||
|
2g: 2=COMP128v2
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
* Programming...
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Reading Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* Reading...
|
||||||
|
* Current algorithm setting:
|
||||||
|
2g: 2=COMP128v2
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Programming Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* New algorithm setting:
|
||||||
|
2g: 5=SHA1-AKA
|
||||||
|
3g: 15=XOR
|
||||||
|
4g5g: 15=XOR
|
||||||
|
* Programming...
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
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
|
||||||
|
4g5g: 15=XOR
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Programming Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* New algorithm setting:
|
||||||
|
2g: 1=COMP128v1
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
* Programming...
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Reading Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* Reading...
|
||||||
|
* Current algorithm setting:
|
||||||
|
2g: 1=COMP128v1
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Programming Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* New algorithm setting:
|
||||||
|
2g: 1=COMP128v1
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 5=SHA1-AKA
|
||||||
|
* Programming...
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Reading Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* Reading...
|
||||||
|
* Current algorithm setting:
|
||||||
|
2g: 1=COMP128v1
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=SHA1-AKA
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Programming Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* New algorithm setting:
|
||||||
|
2g: 2=COMP128v2
|
||||||
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 3=COMP128v3
|
||||||
|
* Programming...
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Reading Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* Reading...
|
||||||
|
* Current algorithm setting:
|
||||||
|
2g: 2=COMP128v2
|
||||||
|
3g: 1=COMP128v1
|
||||||
|
4g5g: 1=COMP128v3
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. ./test-data
|
. ./test-data
|
||||||
|
|
||||||
ALGOS="1:1 3:1 4:1 5:1 15:1 1:4 3:15 2:2 1:3 "
|
ALGOS="1:1 3:1 4:1 5:1 15:1 1:4 3:15 2:2 1:3 1:2:3 1:4:5 5:4:15 "
|
||||||
ALGOS=$ALGOS"MILENAGE:MILENAGE COMP128v1:MILENAGE COMP128v3:MILENAGE COMP128v2:MILENAGE SHA1-AKA:XOR COMP128v1:MILENAGE"
|
ALGOS=$ALGOS"MILENAGE:MILENAGE COMP128v1:MILENAGE COMP128v3:MILENAGE COMP128v2:MILENAGE SHA1-AKA:XOR COMP128v1:MILENAGE COMP128v1:MILENAGE:SHA1-AKA COMP128v2:COMP128v1:COMP128v3"
|
||||||
for algo in $ALGOS; do
|
for algo in $ALGOS; do
|
||||||
$TOOL -a $ADMPIN -T $algo
|
$TOOL -a $ADMPIN -T $algo
|
||||||
$TOOL -a $ADMPIN -t
|
$TOOL -a $ADMPIN -t
|
||||||
|
|
|
@ -1,6 +1,30 @@
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
Copyright (c) 2019-2022 sysmocom - s.f.m.c. GmbH
|
Copyright (c) 2019-2022 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...
|
||||||
|
* Detected Card IMSI: 901700000046734
|
||||||
|
ISIM Application installed
|
||||||
|
USIM Application installed
|
||||||
|
|
||||||
|
Authenticating...
|
||||||
|
* Remaining attempts: 3
|
||||||
|
* Authenticating...
|
||||||
|
* Authentication successful
|
||||||
|
* Remaining attempts: 3
|
||||||
|
|
||||||
|
Programming Authentication parameters...
|
||||||
|
* Initalizing...
|
||||||
|
* New algorithm setting:
|
||||||
|
2g: 4=MILENAGE
|
||||||
|
3g: 4=MILENAGE
|
||||||
|
4g5g: 4=MILENAGE
|
||||||
|
* Programming...
|
||||||
|
|
||||||
|
Done!
|
||||||
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
Copyright (c) 2019-2022 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
|
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...
|
Initializing smartcard terminal...
|
||||||
* Detected Card IMSI: 901700000046734
|
* Detected Card IMSI: 901700000046734
|
||||||
|
@ -18,6 +42,9 @@ Writing OPc value...
|
||||||
* New OPc setting:
|
* New OPc setting:
|
||||||
OPc: 000102030405060708090a0b0c0d0e0f
|
OPc: 000102030405060708090a0b0c0d0e0f
|
||||||
* Programming...
|
* Programming...
|
||||||
|
2g OPc programmed.
|
||||||
|
3g OPc programmed.
|
||||||
|
4g5g OPc programmed.
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -39,7 +66,9 @@ Reading OP/c value...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current OP/OPc setting:
|
* Current OP/OPc setting:
|
||||||
OPc: 000102030405060708090a0b0c0d0e0f
|
2g: OPc: 000102030405060708090a0b0c0d0e0f
|
||||||
|
3g: OPc: 000102030405060708090a0b0c0d0e0f
|
||||||
|
4g5g: OPc: 000102030405060708090a0b0c0d0e0f
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -62,6 +91,9 @@ Writing OP value...
|
||||||
* New OPc setting:
|
* New OPc setting:
|
||||||
OP: 840337c3d45397ce8ea8609ffdc47224
|
OP: 840337c3d45397ce8ea8609ffdc47224
|
||||||
* Programming...
|
* Programming...
|
||||||
|
2g OP programmed.
|
||||||
|
3g OP programmed.
|
||||||
|
4g5g OP programmed.
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -83,6 +115,8 @@ Reading OP/c value...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current OP/OPc setting:
|
* Current OP/OPc setting:
|
||||||
OP: 840337c3d45397ce8ea8609ffdc47224
|
2g: OP: 840337c3d45397ce8ea8609ffdc47224
|
||||||
|
3g: OP: 840337c3d45397ce8ea8609ffdc47224
|
||||||
|
4g5g: OP: 840337c3d45397ce8ea8609ffdc47224
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. ./test-data
|
. ./test-data
|
||||||
|
|
||||||
|
# OP/OPc is milenage specific, make sure we have milenage configured before
|
||||||
|
# testing.
|
||||||
|
$TOOL -a $ADMPIN -T "MILENAGE:MILENAGE"
|
||||||
|
|
||||||
$TOOL -a $ADMPIN -C 000102030405060708090a0b0c0d0e0f
|
$TOOL -a $ADMPIN -C 000102030405060708090a0b0c0d0e0f
|
||||||
$TOOL -a $ADMPIN -o
|
$TOOL -a $ADMPIN -o
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,9 @@ Writing Key value...
|
||||||
* New Key setting:
|
* New Key setting:
|
||||||
Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
|
Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
|
||||||
* Programming...
|
* Programming...
|
||||||
|
* 2g: Key programmed.
|
||||||
|
* 3g: Key programmed.
|
||||||
|
* 4g5g: Key programmed.
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -39,7 +42,9 @@ Reading Key value...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current Key setting:
|
* Current Key setting:
|
||||||
Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
|
2g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
|
||||||
|
3g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
|
||||||
|
4g5g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -62,6 +67,9 @@ Writing Key value...
|
||||||
* New Key setting:
|
* New Key setting:
|
||||||
Key: d7882eae7cd14f06108c55f8e5cffe93
|
Key: d7882eae7cd14f06108c55f8e5cffe93
|
||||||
* Programming...
|
* Programming...
|
||||||
|
* 2g: Key programmed.
|
||||||
|
* 3g: Key programmed.
|
||||||
|
* 4g5g: Key programmed.
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
sysmoISIM-SJA2 parameterization tool
|
sysmoISIM-SJA2 parameterization tool
|
||||||
|
@ -83,6 +91,8 @@ Reading Key value...
|
||||||
* Initalizing...
|
* Initalizing...
|
||||||
* Reading...
|
* Reading...
|
||||||
* Current Key setting:
|
* Current Key setting:
|
||||||
Key: d7882eae7cd14f06108c55f8e5cffe93
|
2g: Key: d7882eae7cd14f06108c55f8e5cffe93
|
||||||
|
3g: Key: d7882eae7cd14f06108c55f8e5cffe93
|
||||||
|
4g5g: Key: d7882eae7cd14f06108c55f8e5cffe93
|
||||||
|
|
||||||
Done!
|
Done!
|
||||||
|
|
Loading…
Reference in New Issue