From b576e8fcff3f286158c986844c10e1529cd171b1 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Sun, 25 Jan 2026 20:07:24 +0100 Subject: [PATCH] test_configurable_parameters.py: add tests for new parameters For: SmspTpScAddr MilenageRotation MilenageXoringConstants TuakNrOfKeccak Change-Id: Iecbea14fe31a9ee08d871dcde7f295d26d7bd001 Jenkins: skip-card-test --- .../unittests/test_configurable_parameters.py | 65 ++++++++ .../unittests/xo/test_configurable_parameters | 144 ++++++++++++++++++ 2 files changed, 209 insertions(+) diff --git a/tests/unittests/test_configurable_parameters.py b/tests/unittests/test_configurable_parameters.py index ea826aec..7f9c8b0c 100755 --- a/tests/unittests/test_configurable_parameters.py +++ b/tests/unittests/test_configurable_parameters.py @@ -202,6 +202,71 @@ class ConfigurableParameterTest(unittest.TestCase): val=io.BytesIO(b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16'), expect_clean_val=b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16', expect_val='01020304050607080910111213141516'), + + Paramtest(param_cls=p13n.SmspTpScAddr, + val='+1234567', + expect_clean_val=(True, '1234567'), + expect_val='+1234567'), + Paramtest(param_cls=p13n.SmspTpScAddr, + val=1234567, + expect_clean_val=(False, '1234567'), + expect_val='1234567'), + + Paramtest(param_cls=p13n.TuakNumberOfKeccak, + val='123', + expect_clean_val=123, + expect_val='123'), + Paramtest(param_cls=p13n.TuakNumberOfKeccak, + val=123, + expect_clean_val=123, + expect_val='123'), + + Paramtest(param_cls=p13n.MilenageRotationConstants, + val='0a 0b 0c 01 02', + expect_clean_val=b'\x0a\x0b\x0c\x01\x02', + expect_val='0a0b0c0102'), + Paramtest(param_cls=p13n.MilenageRotationConstants, + val=b'\x0a\x0b\x0c\x01\x02', + expect_clean_val=b'\x0a\x0b\x0c\x01\x02', + expect_val='0a0b0c0102'), + Paramtest(param_cls=p13n.MilenageRotationConstants, + val=bytearray(b'\x0a\x0b\x0c\x01\x02'), + expect_clean_val=b'\x0a\x0b\x0c\x01\x02', + expect_val='0a0b0c0102'), + + Paramtest(param_cls=p13n.MilenageXoringConstants, + val='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + ' bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + ' cccccccccccccccccccccccccccccccc' + ' 11111111111111111111111111111111' + ' 22222222222222222222222222222222', + expect_clean_val=b'\xaa' * 16 + + b'\xbb' * 16 + + b'\xcc' * 16 + + b'\x11' * 16 + + b'\x22' * 16, + expect_val='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + 'cccccccccccccccccccccccccccccccc' + '11111111111111111111111111111111' + '22222222222222222222222222222222'), + Paramtest(param_cls=p13n.MilenageXoringConstants, + val=b'\xaa' * 16 + + b'\xbb' * 16 + + b'\xcc' * 16 + + b'\x11' * 16 + + b'\x22' * 16, + expect_clean_val=b'\xaa' * 16 + + b'\xbb' * 16 + + b'\xcc' * 16 + + b'\x11' * 16 + + b'\x22' * 16, + expect_val='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + 'cccccccccccccccccccccccccccccccc' + '11111111111111111111111111111111' + '22222222222222222222222222222222'), + ] for sdkey_cls in ( diff --git a/tests/unittests/xo/test_configurable_parameters b/tests/unittests/xo/test_configurable_parameters index 6f8c679d..d64e7bad 100644 --- a/tests/unittests/xo/test_configurable_parameters +++ b/tests/unittests/xo/test_configurable_parameters @@ -127,6 +127,42 @@ ok: TS48v5_SAIP2.1A_NoBERTLV.der Opc(val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'OPc': '01020304050607080910111213141516'}:{hexstr} +ok: TS48v5_SAIP2.1A_NoBERTLV.der SmspTpScAddr(val= '+1234567':str) + clean_val= (True, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '+1234567'}:{str} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der SmspTpScAddr(val= 1234567:int) + clean_val= (False, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '1234567'}:{str} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der TuakNumberOfKeccak(val= '123':str) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der TuakNumberOfKeccak(val= 123:int) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der MilenageRotationConstants(val= '0a 0b 0c 01 02':str) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytes) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytearray) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der MilenageXoringConstants(val= 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccc 11111111111111111111111111111111 22222222222222222222222222222222':str) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + +ok: TS48v5_SAIP2.1A_NoBERTLV.der MilenageXoringConstants(val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + ok: TS48v5_SAIP2.1A_NoBERTLV.der SdKeyScp02Kvn20AesDek(val= '01020304050607080910111213141516':str) clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'SCP02-KVN20-AES-DEK': '01020304050607080910111213141516'}:{hexstr} @@ -783,6 +819,42 @@ ok: TS48v5_SAIP2.3_BERTLV_SUCI.der Opc(val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'OPc': '01020304050607080910111213141516'}:{hexstr} +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der SmspTpScAddr(val= '+1234567':str) + clean_val= (True, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '+1234567'}:{str} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der SmspTpScAddr(val= 1234567:int) + clean_val= (False, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '1234567'}:{str} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der TuakNumberOfKeccak(val= '123':str) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der TuakNumberOfKeccak(val= 123:int) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der MilenageRotationConstants(val= '0a 0b 0c 01 02':str) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytes) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytearray) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der MilenageXoringConstants(val= 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccc 11111111111111111111111111111111 22222222222222222222222222222222':str) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + +ok: TS48v5_SAIP2.3_BERTLV_SUCI.der MilenageXoringConstants(val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + ok: TS48v5_SAIP2.3_BERTLV_SUCI.der SdKeyScp02Kvn20AesDek(val= '01020304050607080910111213141516':str) clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'SCP02-KVN20-AES-DEK': '01020304050607080910111213141516'}:{hexstr} @@ -1439,6 +1511,42 @@ ok: TS48v5_SAIP2.1B_NoBERTLV.der Opc(val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'OPc': '01020304050607080910111213141516'}:{hexstr} +ok: TS48v5_SAIP2.1B_NoBERTLV.der SmspTpScAddr(val= '+1234567':str) + clean_val= (True, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '+1234567'}:{str} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der SmspTpScAddr(val= 1234567:int) + clean_val= (False, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '1234567'}:{str} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der TuakNumberOfKeccak(val= '123':str) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der TuakNumberOfKeccak(val= 123:int) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der MilenageRotationConstants(val= '0a 0b 0c 01 02':str) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytes) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytearray) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der MilenageXoringConstants(val= 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccc 11111111111111111111111111111111 22222222222222222222222222222222':str) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + +ok: TS48v5_SAIP2.1B_NoBERTLV.der MilenageXoringConstants(val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + ok: TS48v5_SAIP2.1B_NoBERTLV.der SdKeyScp02Kvn20AesDek(val= '01020304050607080910111213141516':str) clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'SCP02-KVN20-AES-DEK': '01020304050607080910111213141516'}:{hexstr} @@ -2095,6 +2203,42 @@ ok: TS48v5_SAIP2.3_NoBERTLV.der Opc(val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x1 clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'OPc': '01020304050607080910111213141516'}:{hexstr} +ok: TS48v5_SAIP2.3_NoBERTLV.der SmspTpScAddr(val= '+1234567':str) + clean_val= (True, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '+1234567'}:{str} + +ok: TS48v5_SAIP2.3_NoBERTLV.der SmspTpScAddr(val= 1234567:int) + clean_val= (False, '1234567'):tuple + read_back_val= {'SMSP-TP-SC-ADDR': '1234567'}:{str} + +ok: TS48v5_SAIP2.3_NoBERTLV.der TuakNumberOfKeccak(val= '123':str) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.3_NoBERTLV.der TuakNumberOfKeccak(val= 123:int) + clean_val= 123:int + read_back_val= {'KECCAK-N': '123'}:{str} + +ok: TS48v5_SAIP2.3_NoBERTLV.der MilenageRotationConstants(val= '0a 0b 0c 01 02':str) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.3_NoBERTLV.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytes) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.3_NoBERTLV.der MilenageRotationConstants(val= b'\n\x0b\x0c\x01\x02':bytearray) + clean_val= b'\n\x0b\x0c\x01\x02':bytes + read_back_val= {'MilenageRotation': '0a0b0c0102'}:{hexstr} + +ok: TS48v5_SAIP2.3_NoBERTLV.der MilenageXoringConstants(val= 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccc 11111111111111111111111111111111 22222222222222222222222222222222':str) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + +ok: TS48v5_SAIP2.3_NoBERTLV.der MilenageXoringConstants(val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes) + clean_val= b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11""""""""""""""""':bytes + read_back_val= {'MilenageXOR': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc1111111111111111111111111111111122222222222222222222222222222222'}:{hexstr} + ok: TS48v5_SAIP2.3_NoBERTLV.der SdKeyScp02Kvn20AesDek(val= '01020304050607080910111213141516':str) clean_val= b'\x01\x02\x03\x04\x05\x06\x07\x08\t\x10\x11\x12\x13\x14\x15\x16':bytes read_back_val= {'SCP02-KVN20-AES-DEK': '01020304050607080910111213141516'}:{hexstr}