WIP: Full TUAK support + refactoring

This renovates/fixes the following:

- rafactor/cleanup code
- add unit tests for sysmo-isim-sja5
- add full read/write support for TUAK parameters
- Allow setting algorims for 4g5g individually
- Generalize commandline setting "Ki" to "Key"
  (Risk of incompatibility if customers use --set-ki in scripts!)
- Add a class for each algo specific header nibble
- Add a class for each algo specific parameter body
- Display settings for each generation individually
  (SIM/2g, USIM/3g, ISIM/4g5g)
- Check algorithm before programming
  (e.g. do not allow to program OP/c when COMP128v1 is selected)
- Update key (Ki) and OPc read write functions, so that they can also
  program TUAK keys and TOPc

Todo:
- Add TUAK specific testcases
- rename testcase "05_ki.sh "to "05_key.sh"
This commit is contained in:
Philipp Maier 2023-06-05 16:01:52 +02:00
parent 513de41913
commit 8958268fc3
28 changed files with 2662 additions and 360 deletions

View File

@ -28,8 +28,8 @@ import sys, getopt
COMMON_GETOPTS = "hfa:J:nN:lL:kK:tT:oO:C:sSip"
COMMON_GETOPTS_LONG = ["help", "force", "adm1=", "set-imsi=", "mnclen",
"set-mnclen=", "milenage", "set-milenage=", "ki",
"set-ki=", "auth", "set-auth=", "opc", "set-op=",
"set-mnclen=", "milenage", "set-milenage=", "key",
"set-key=", "auth", "set-auth=", "opc", "set-op=",
"set-opc=", "seq-parameters", "reset-seq-parameters"
"iccid", "aid"]
@ -46,8 +46,8 @@ class Common():
show_mnclen = None
show_milenage = False
write_milenage = None
show_ki = None
write_ki = None
show_key = None
write_key = None
show_auth = False
write_auth = None
show_opc = False
@ -91,14 +91,14 @@ class Common():
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 ("-k", "--key"):
self.show_key = True
elif opt in ("-K", "--set-key"):
self.write_key = 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)
self.write_auth = arg.split(':', 2)
elif opt in ("-o", "--opc"):
self.show_opc = True
elif opt in ("-O", "--set-op"):
@ -141,10 +141,10 @@ class Common():
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(" -k, --key ...................... Show auth key value")
print(" -K, --set-key .................. Set auth key value")
print(" -t, --auth ..................... Show authentication algorithms")
print(" -T, --set-auth 2g:3g[:4g5g] .... 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")
@ -182,17 +182,20 @@ class Common():
if self.show_milenage:
self.sim.show_milenage_params()
if self.write_ki:
self.sim.write_ki_params(self.write_ki)
if self.write_key:
self.sim.write_key_params(self.write_key)
if self.show_ki:
self.sim.show_ki_params()
if self.show_key:
self.sim.show_key_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 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])
if self.show_opc:
self.sim.show_opc_params()

View File

@ -32,7 +32,8 @@ from common import *
class Application(Common):
getopt_dump = False
getopt_show_tuak_cfg = False
getopt_write_tuak_cfg = None
# Automatically executed by superclass
def _banner(self):
@ -46,16 +47,27 @@ class Application(Common):
for opt, arg in opts:
if opt in ("-d", "--dump"):
self.getopt_dump = True
elif opt in ("-w", "--tuak-cfg"):
self.getopt_show_tuak_cfg = True
elif opt in ("-W", "--set-tuak-cfg"):
self.getopt_write_tuak_cfg = arg.split(':', 3)
# Automatically executed by superclass when -h or --help is supplied as option
def _helptext(self):
print(" -d, --dump ..................... Dump propritary file contents")
#TODO: add a help screen to explain what RMCK means
print(" -w, --tuak-cfg ................. Show TUAK configuration")
print(" -W, --set-tuak-cfg R:M:C:K ..... Set TUAK configuration")
print("")
print(" For Option -T, the following algorithms are valid:")
print('\n'.join([' %d %s' % entry for entry in sysmo_isimsja5_algorithms]))
print("")
print(" For Option -W, the following values are applicable:")
print(" R = RES-Size in bits: 32, 64, 128 or 256")
print(" M = MAC-A and MAC-S size in bits: 64, 128 or 256")
print(" C = CK and IK size in bits: 128 or 256")
print(" K = Number of Keccak iterations: 1-255")
print("")
# Automatically executed by superclass before _execute() is called
def _init(self):
@ -67,11 +79,15 @@ class Application(Common):
if self.getopt_dump:
self.sim.dump()
elif self.getopt_show_tuak_cfg:
self.sim.show_tuak_cfg()
elif self.getopt_write_tuak_cfg:
self.sim.write_tuak_cfg(self.getopt_write_tuak_cfg[0], self.getopt_write_tuak_cfg[1], \
self.getopt_write_tuak_cfg[2], self.getopt_write_tuak_cfg[3])
def main(argv):
Application(argv, "d", ["dump"])
Application(argv, "dwW:", ["dump"])
if __name__ == "__main__":

File diff suppressed because it is too large Load Diff

View File

@ -471,7 +471,7 @@ class Sysmo_usim_sjs1(Sysmo_usim):
# Show current KI value
def show_ki_params(self):
def show_key_params(self):
print("Reading KI value...")
print(" * Reading...")
self.sim.select(GSM_SIM_DF_GSM)
@ -484,7 +484,7 @@ class Sysmo_usim_sjs1(Sysmo_usim):
# Program new KI value
def write_ki_params(self, ki):
def write_key_params(self, ki):
print("Writing KI value...")
self._init()

View File

@ -32,3 +32,20 @@ echo ""
echo ""
echo ""
echo ""
echo "=========================================================="
echo " EXECUTING TESTS FOR SYSMO-USIM-SJA5"
echo "=========================================================="
echo ""
cd ./sja5
echo "Location $PWD"
echo ""
sh ./run-tests
if [ ! $? -eq 0 ]; then
exit 1
fi
cd ..
echo ""
echo ""
echo ""
echo ""

View File

@ -16,8 +16,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 1=COMP128v1
2g: 1=COMP128v1
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -40,8 +41,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 1=COMP128v1
2g: 1=COMP128v1
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA2 parameterization tool
@ -62,8 +64,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 3=COMP128v3
3G: 1=COMP128v1
2g: 3=COMP128v3
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -86,8 +89,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 3=COMP128v3
3G: 1=COMP128v1
2g: 3=COMP128v3
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA2 parameterization tool
@ -108,8 +112,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 4=MILENAGE
3G: 1=COMP128v1
2g: 4=MILENAGE
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -132,8 +137,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 4=MILENAGE
3G: 1=COMP128v1
2g: 4=MILENAGE
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA2 parameterization tool
@ -154,8 +160,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 5=SHA1-AKA
3G: 1=COMP128v1
2g: 5=SHA1-AKA
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -178,8 +185,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 5=SHA1-AKA
3G: 1=COMP128v1
2g: 5=SHA1-AKA
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA2 parameterization tool
@ -200,8 +208,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 15=XOR
3G: 1=COMP128v1
2g: 15=XOR
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -224,8 +233,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 15=XOR
3G: 1=COMP128v1
2g: 15=XOR
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA2 parameterization tool
@ -246,8 +256,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -270,8 +281,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA2 parameterization tool
@ -292,8 +304,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 3=COMP128v3
3G: 15=XOR
2g: 3=COMP128v3
3g: 15=XOR
4g5g: 15=XOR
* Programming...
Done!
@ -316,8 +329,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 3=COMP128v3
3G: 15=XOR
2g: 3=COMP128v3
3g: 15=XOR
4g5g: 15=XOR
Done!
sysmoISIM-SJA2 parameterization tool
@ -338,8 +352,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 2=COMP128v2
2g: 2=COMP128v2
3g: 2=COMP128v2
4g5g: 2=COMP128v2
* Programming...
Done!
@ -362,8 +377,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 2=COMP128v2
2g: 2=COMP128v2
3g: 2=COMP128v2
4g5g: 2=COMP128v2
Done!
sysmoISIM-SJA2 parameterization tool
@ -384,8 +400,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 3=COMP128v3
2g: 1=COMP128v1
3g: 3=COMP128v3
4g5g: 3=COMP128v3
* Programming...
Done!
@ -408,8 +425,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 3=COMP128v3
2g: 1=COMP128v1
3g: 3=COMP128v3
4g5g: 3=COMP128v3
Done!
sysmoISIM-SJA2 parameterization tool
@ -430,8 +448,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 4=MILENAGE
3G: 4=MILENAGE
2g: 4=MILENAGE
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -454,8 +473,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 4=MILENAGE
3G: 4=MILENAGE
2g: 4=MILENAGE
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA2 parameterization tool
@ -476,8 +496,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -500,8 +521,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA2 parameterization tool
@ -522,8 +544,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 3=COMP128v3
3G: 4=MILENAGE
2g: 3=COMP128v3
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -546,8 +569,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 3=COMP128v3
3G: 4=MILENAGE
2g: 3=COMP128v3
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA2 parameterization tool
@ -568,8 +592,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 4=MILENAGE
2g: 2=COMP128v2
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -592,8 +617,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 4=MILENAGE
2g: 2=COMP128v2
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA2 parameterization tool
@ -614,8 +640,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 5=SHA1-AKA
3G: 15=XOR
2g: 5=SHA1-AKA
3g: 15=XOR
4g5g: 15=XOR
* Programming...
Done!
@ -638,8 +665,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 5=SHA1-AKA
3G: 15=XOR
2g: 5=SHA1-AKA
3g: 15=XOR
4g5g: 15=XOR
Done!
sysmoISIM-SJA2 parameterization tool
@ -660,8 +688,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -684,7 +713,8 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!

View File

@ -1,6 +1,30 @@
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: 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
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
@ -18,6 +42,9 @@ Writing OPc value...
* New OPc setting:
OPc: 000102030405060708090a0b0c0d0e0f
* Programming...
2g OPc programmed.
3g OPc programmed.
4g5g OPc programmed.
Done!
sysmoISIM-SJA2 parameterization tool
@ -39,7 +66,9 @@ Reading OP/c value...
* Initalizing...
* Reading...
* Current OP/OPc setting:
OPc: 000102030405060708090a0b0c0d0e0f
2g: OPc: 000102030405060708090a0b0c0d0e0f
3g: OPc: 000102030405060708090a0b0c0d0e0f
4g5g: OPc: 000102030405060708090a0b0c0d0e0f
Done!
sysmoISIM-SJA2 parameterization tool
@ -62,6 +91,9 @@ Writing OP value...
* New OPc setting:
OP: 840337c3d45397ce8ea8609ffdc47224
* Programming...
2g OP programmed.
3g OP programmed.
4g5g OP programmed.
Done!
sysmoISIM-SJA2 parameterization tool
@ -83,6 +115,8 @@ Reading OP/c value...
* Initalizing...
* Reading...
* Current OP/OPc setting:
OP: 840337c3d45397ce8ea8609ffdc47224
2g: OP: 840337c3d45397ce8ea8609ffdc47224
3g: OP: 840337c3d45397ce8ea8609ffdc47224
4g5g: OP: 840337c3d45397ce8ea8609ffdc47224
Done!

View File

@ -1,6 +1,8 @@
#!/bin/sh
. ./test-data
$TOOL -a $ADMPIN -T "MILENAGE:MILENAGE"
$TOOL -a $ADMPIN -C 000102030405060708090a0b0c0d0e0f
$TOOL -a $ADMPIN -o

View File

@ -13,11 +13,14 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing KI value...
Writing Key value...
* Initalizing...
* New KI setting:
KI: a0b1c2d3e4f5061728394a5b6c7d8e9f
* New Key setting:
Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
* Programming...
* 2g: Key programmed.
* 3g: Key programmed.
* 4g5g: Key programmed.
Done!
sysmoISIM-SJA2 parameterization tool
@ -35,11 +38,13 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading KI value...
Reading Key value...
* Initalizing...
* Reading...
* Current KI setting:
KI: a0b1c2d3e4f5061728394a5b6c7d8e9f
* Current Key setting:
2g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
3g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
4g5g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
Done!
sysmoISIM-SJA2 parameterization tool
@ -57,11 +62,14 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing KI value...
Writing Key value...
* Initalizing...
* New KI setting:
KI: d7882eae7cd14f06108c55f8e5cffe93
* New Key setting:
Key: d7882eae7cd14f06108c55f8e5cffe93
* Programming...
* 2g: Key programmed.
* 3g: Key programmed.
* 4g5g: Key programmed.
Done!
sysmoISIM-SJA2 parameterization tool
@ -79,10 +87,12 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading KI value...
Reading Key value...
* Initalizing...
* Reading...
* Current KI setting:
KI: d7882eae7cd14f06108c55f8e5cffe93
* Current Key setting:
2g: Key: d7882eae7cd14f06108c55f8e5cffe93
3g: Key: d7882eae7cd14f06108c55f8e5cffe93
4g5g: Key: d7882eae7cd14f06108c55f8e5cffe93
Done!

16
tests/sja5/01_auth.out Normal file
View File

@ -0,0 +1,16 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Done!

4
tests/sja5/01_auth.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
. ./test-data
$TOOL -a $ADMPIN

1104
tests/sja5/02_algo.out Normal file

File diff suppressed because it is too large Load Diff

9
tests/sja5/02_algo.sh Executable file
View File

@ -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 14:4 2:6 6:4 14:6 "
ALGOS=$ALGOS"MILENAGE:MILENAGE TUAK:TUAK COMP128v1:MILENAGE COMP128v3:MILENAGE COMP128v2:MILENAGE COMP128v2:TUAK COMP128v2:XOR-2G SHA1-AKA:XOR COMP128v1:MILENAGE XOR-2G:TUAK"
for algo in $ALGOS; do
$TOOL -a $ADMPIN -T $algo
$TOOL -a $ADMPIN -t
done

View File

@ -0,0 +1,124 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
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-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
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-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
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-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
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!

24
tests/sja5/03_milenage_par.sh Executable file
View File

@ -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

122
tests/sja5/04_op_opc.out Normal file
View File

@ -0,0 +1,122 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
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-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing OPc value...
* Initalizing...
* New OPc setting:
OPc: 000102030405060708090a0b0c0d0e0f
* Programming...
2g OPc programmed.
3g OPc programmed.
4g5g OPc programmed.
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading OP/c value...
* Initalizing...
* Reading...
* Current OP/OPc setting:
2g: OPc: 000102030405060708090a0b0c0d0e0f
3g: OPc: 000102030405060708090a0b0c0d0e0f
4g5g: OPc: 000102030405060708090a0b0c0d0e0f
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing OP value...
* Initalizing...
* New OPc setting:
OP: 840337c3d45397ce8ea8609ffdc47224
* Programming...
2g OP programmed.
3g OP programmed.
4g5g OP programmed.
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading OP/c value...
* Initalizing...
* Reading...
* Current OP/OPc setting:
2g: OP: 840337c3d45397ce8ea8609ffdc47224
3g: OP: 840337c3d45397ce8ea8609ffdc47224
4g5g: OP: 840337c3d45397ce8ea8609ffdc47224
Done!

11
tests/sja5/04_op_opc.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/sh
. ./test-data
$TOOL -a $ADMPIN -T "MILENAGE:MILENAGE"
$TOOL -a $ADMPIN -C 000102030405060708090a0b0c0d0e0f
$TOOL -a $ADMPIN -o
$TOOL -a $ADMPIN -O 840337c3d45397ce8ea8609ffdc47224
$TOOL -a $ADMPIN -o

98
tests/sja5/05_ki.out Normal file
View File

@ -0,0 +1,98 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing Key value...
* Initalizing...
* New Key setting:
Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
* Programming...
* 2g: Key programmed.
* 3g: Key programmed.
* 4g5g: Key programmed.
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading Key value...
* Initalizing...
* Reading...
* Current Key setting:
2g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
3g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
4g5g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing Key value...
* Initalizing...
* New Key setting:
Key: d7882eae7cd14f06108c55f8e5cffe93
* Programming...
* 2g: Key programmed.
* 3g: Key programmed.
* 4g5g: Key programmed.
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading Key value...
* Initalizing...
* Reading...
* Current Key setting:
2g: Key: d7882eae7cd14f06108c55f8e5cffe93
3g: Key: d7882eae7cd14f06108c55f8e5cffe93
4g5g: Key: d7882eae7cd14f06108c55f8e5cffe93
Done!

11
tests/sja5/05_ki.sh Executable file
View File

@ -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

75
tests/sja5/06_seq.out Normal file
View File

@ -0,0 +1,75 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
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 disabled
SQN Max Delta enabled
SQN Skip first enabled
SQN Conceal AUTN enabled
SQN Conceal AUTS enabled
SQN No AMF clear disabled
Max Delta: 8589934592
Age Limit: 8589934592
Freshness Data:
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000
* Current SQN Configuration for ADF_ISIM:
IND (bits): 5
SQN Check enabled
SQN Age Limit disabled
SQN Max Delta enabled
SQN Skip first enabled
SQN Conceal AUTN enabled
SQN Conceal AUTS enabled
SQN No AMF clear disabled
Max Delta: 8589934592
Age Limit: 8589934592
Freshness Data:
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
* Resetting SQN Configuration to defaults...
* Initalizing...
* Resetting...
Done!

8
tests/sja5/06_seq.sh Executable file
View File

@ -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

132
tests/sja5/07_mnclen.out Normal file
View File

@ -0,0 +1,132 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing MNCLEN value...
* Initalizing...
* New MNCLEN setting:
MNCLEN: 0x02
* Programming...
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading MNCLEN value...
* Initalizing...
* Reading...
* Current MNCLEN setting:
MNCLEN: 0x02
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing MNCLEN value...
* Initalizing...
* New MNCLEN setting:
MNCLEN: 0x03
* Programming...
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading MNCLEN value...
* Initalizing...
* Reading...
* Current MNCLEN setting:
MNCLEN: 0x03
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing MNCLEN value...
* Initalizing...
* New MNCLEN setting:
MNCLEN: 0x02
* Programming...
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 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 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading MNCLEN value...
* Initalizing...
* Reading...
* Current MNCLEN setting:
MNCLEN: 0x02
Done!

15
tests/sja5/07_mnclen.sh Executable file
View File

@ -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

9
tests/sja5/prepare Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
. ./test-data
echo "================ PREPARING TEST CARD ================"
$TOOL -a $ADMPIN -J $IMSI
$TOOL -a $ADMPIN -S
echo "================ TEST CARD PREPARED ================="
echo ""

14
tests/sja5/regen Executable file
View File

@ -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 ""

39
tests/sja5/run-tests Executable file
View File

@ -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

5
tests/sja5/test-data Normal file
View File

@ -0,0 +1,5 @@
TOOL=../../sysmo-isim-tool.sja5.py
# data for the test scripts. The values have to match the SIM card inserted while executing the test
IMSI=901700000046734
ADMPIN=11111111 # <==== CHANGE THIS TO THE ADM1 KEY OF YOUR TEST CARD!
KI=D7882EAE7CD14F06108C55F8E5CFFE93

View File

@ -100,10 +100,13 @@ def id_to_str(table, nr):
# Convert a string back to its ID by looking it up in a given table
def str_to_id(table, string):
def str_to_id(table, string, safe_default = None):
dict_by_name = dict([(name.upper(), nr) for nr, name in table])
id = dict_by_name.get(string.upper())
if id is None:
raise ValueError('identifier (\"%s\") not in table %s' % (string, str(table)))
if safe_default != None:
return safe_default
else:
raise ValueError('identifier (\"%s\") not in table %s' % (string, str(table)))
return id