From 3209ef2261e415408266e209136b1570474d02b4 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 29 May 2018 14:56:11 +0200 Subject: [PATCH] nPA: fixed Python 2/3 incompatibilities --- .../vpicc/virtualsmartcard/CardGenerator.py | 472 +++++++++--------- .../src/vpicc/virtualsmartcard/TLVutils.py | 12 +- 2 files changed, 242 insertions(+), 242 deletions(-) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py b/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py index d953a52..9f9736b 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py @@ -109,8 +109,8 @@ class CardGenerator(object): bertlv_data=[]) # EF.COM - COM = pack([(0x5F01, 4, "0107"), (0x5F36, 6, "040000"), - (0x5C, 2, "6175")]) + COM = pack([(0x5F01, 4, b"0107"), (0x5F36, 6, b"040000"), + (0x5C, 2, b"6175")]) COM = pack(((0x60, len(COM), COM),)) df.append(TransparentStructureEF(parent=df, fid=0x011E, filedescriptor=0, data=COM)) @@ -130,9 +130,9 @@ class CardGenerator(object): FRH = "FAC" + "\x00" + "010" + "\x00" +\ inttostring(14 + length, 4) + inttostring(1, 2) picture = FRH + FIB + IIB + picture - DG2 = pack([(0xA1, 8, "\x87\x02\x01\x01\x88\x02\x05\x01"), + DG2 = pack([(0xA1, 8, b"\x87\x02\x01\x01\x88\x02\x05\x01"), (0x5F2E, len(picture), picture)]) - DG2 = pack([(0x02, 1, "\x01"), (0x7F60, len(DG2), DG2)]) + DG2 = pack([(0x02, 1, b"\x01"), (0x7F60, len(DG2), DG2)]) DG2 = pack([(0x7F61, len(DG2), DG2)]) else: DG2 = "" @@ -151,179 +151,179 @@ class CardGenerator(object): def __generate_nPA(self): from virtualsmartcard.cards.nPA import nPA_SAM mappings = [ - ('\x04\x00\x7f\x00\x07\x02\x02\x04', range(1, 5), range(1, 5), + (b'\x04\x00\x7f\x00\x07\x02\x02\x04', range(1, 5), range(1, 5), "PACE"), - ('\x04\x00\x7f\x00\x07\x02\x02\x02', range(1, 3), range(1, 6), + (b'\x04\x00\x7f\x00\x07\x02\x02\x02', range(1, 3), range(1, 6), "TA"), - ('\x04\x00\x7f\x00\x07\x02\x02\x02', [1], [6], "TA"), - ('\x04\x00\x7f\x00\x07\x02\x02\x03', range(1, 3), range(1, 5), + (b'\x04\x00\x7f\x00\x07\x02\x02\x02', [1], [6], "TA"), + (b'\x04\x00\x7f\x00\x07\x02\x02\x03', range(1, 3), range(1, 5), "CA"), - ('\x04\x00\x7f\x00\x07\x02\x02\x05', range(1, 3), range(1, 6), + (b'\x04\x00\x7f\x00\x07\x02\x02\x05', range(1, 3), range(1, 6), "RI"), ] for oid_base, x_list, y_list, algo in mappings: - for oid in [oid_base + chr(x) + chr(y) for x in x_list for y in - y_list]: + for oid in [oid_base + inttostring(x) + inttostring(y) + for x in x_list for y in y_list]: ALGO_MAPPING[oid] = algo - ALGO_MAPPING["\x04\x00\x7f\x00\x07\x03\x01\x04\x03"] = "CommunityID" - ALGO_MAPPING["\x04\x00\x7f\x00\x07\x03\x01\x04\x02"] = "DateOfExpiry" - ALGO_MAPPING["\x04\x00\x7f\x00\x07\x03\x01\x04\x01"] = "DateOfBirth" + ALGO_MAPPING[b"\x04\x00\x7f\x00\x07\x03\x01\x04\x03"] = "CommunityID" + ALGO_MAPPING[b"\x04\x00\x7f\x00\x07\x03\x01\x04\x02"] = "DateOfExpiry" + ALGO_MAPPING[b"\x04\x00\x7f\x00\x07\x03\x01\x04\x01"] = "DateOfBirth" self.mf = MF() - card_access = "\x31\x81\xb3\x30\x0d\x06\x08\x04\x00\x7f\x00\x07\x02"\ - "\x02\x02\x02\x01\x02\x30\x12\x06\x0a\x04\x00\x7f\x00"\ - "\x07\x02\x02\x03\x02\x02\x02\x01\x02\x02\x01\x41\x30"\ - "\x12\x06\x0a\x04\x00\x7f\x00\x07\x02\x02\x03\x02\x02"\ - "\x02\x01\x02\x02\x01\x45\x30\x12\x06\x0a\x04\x00\x7f"\ - "\x00\x07\x02\x02\x04\x02\x02\x02\x01\x02\x02\x01\x0d"\ - "\x30\x1c\x06\x09\x04\x00\x7f\x00\x07\x02\x02\x03\x02"\ - "\x30\x0c\x06\x07\x04\x00\x7f\x00\x07\x01\x02\x02\x01"\ - "\x0d\x02\x01\x41\x30\x1c\x06\x09\x04\x00\x7f\x00\x07"\ - "\x02\x02\x03\x02\x30\x0c\x06\x07\x04\x00\x7f\x00\x07"\ - "\x01\x02\x02\x01\x0d\x02\x01\x45\x30\x2a\x06\x08\x04"\ - "\x00\x7f\x00\x07\x02\x02\x06\x16\x1e\x68\x74\x74\x70"\ - "\x3a\x2f\x2f\x62\x73\x69\x2e\x62\x75\x6e\x64\x2e\x64"\ - "\x65\x2f\x63\x69\x66\x2f\x6e\x70\x61\x2e\x78\x6d\x6c" + card_access = b"\x31\x81\xb3\x30\x0d\x06\x08\x04\x00\x7f\x00\x07\x02"\ + b"\x02\x02\x02\x01\x02\x30\x12\x06\x0a\x04\x00\x7f\x00"\ + b"\x07\x02\x02\x03\x02\x02\x02\x01\x02\x02\x01\x41\x30"\ + b"\x12\x06\x0a\x04\x00\x7f\x00\x07\x02\x02\x03\x02\x02"\ + b"\x02\x01\x02\x02\x01\x45\x30\x12\x06\x0a\x04\x00\x7f"\ + b"\x00\x07\x02\x02\x04\x02\x02\x02\x01\x02\x02\x01\x0d"\ + b"\x30\x1c\x06\x09\x04\x00\x7f\x00\x07\x02\x02\x03\x02"\ + b"\x30\x0c\x06\x07\x04\x00\x7f\x00\x07\x01\x02\x02\x01"\ + b"\x0d\x02\x01\x41\x30\x1c\x06\x09\x04\x00\x7f\x00\x07"\ + b"\x02\x02\x03\x02\x30\x0c\x06\x07\x04\x00\x7f\x00\x07"\ + b"\x01\x02\x02\x01\x0d\x02\x01\x45\x30\x2a\x06\x08\x04"\ + b"\x00\x7f\x00\x07\x02\x02\x06\x16\x1e\x68\x74\x74\x70"\ + b"\x3a\x2f\x2f\x62\x73\x69\x2e\x62\x75\x6e\x64\x2e\x64"\ + b"\x65\x2f\x63\x69\x66\x2f\x6e\x70\x61\x2e\x78\x6d\x6c" self.mf.append(TransparentStructureEF(parent=self.mf, fid=0x011c, shortfid=0x1c, data=card_access)) - card_security = "\x30\x82\x05\xA0\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01"\ - "\x07\x02\xA0\x82\x05\x91\x30\x82\x05\x8D\x02\x01\x03"\ - "\x31\x0F\x30\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04"\ - "\x02\x01\x05\x00\x30\x82\x01\x48\x06\x08\x04\x00\x7F"\ - "\x00\x07\x03\x02\x01\xA0\x82\x01\x3A\x04\x82\x01\x36"\ - "\x31\x82\x01\x32\x30\x0D\x06\x08\x04\x00\x7F\x00\x07"\ - "\x02\x02\x02\x02\x01\x02\x30\x12\x06\x0A\x04\x00\x7F"\ - "\x00\x07\x02\x02\x03\x02\x02\x02\x01\x02\x02\x01\x41"\ - "\x30\x12\x06\x0A\x04\x00\x7F\x00\x07\x02\x02\x04\x02"\ - "\x02\x02\x01\x02\x02\x01\x0D\x30\x17\x06\x0A\x04\x00"\ - "\x7F\x00\x07\x02\x02\x05\x02\x03\x30\x09\x02\x01\x01"\ - "\x02\x01\x43\x01\x01\xFF\x30\x17\x06\x0A\x04\x00\x7F"\ - "\x00\x07\x02\x02\x05\x02\x03\x30\x09\x02\x01\x01\x02"\ - "\x01\x44\x01\x01\x00\x30\x19\x06\x09\x04\x00\x7F\x00"\ - "\x07\x02\x02\x05\x02\x30\x0C\x06\x07\x04\x00\x7F\x00"\ - "\x07\x01\x02\x02\x01\x0D\x30\x1C\x06\x09\x04\x00\x7F"\ - "\x00\x07\x02\x02\x03\x02\x30\x0C\x06\x07\x04\x00\x7F"\ - "\x00\x07\x01\x02\x02\x01\x0D\x02\x01\x41\x30\x2A\x06"\ - "\x08\x04\x00\x7F\x00\x07\x02\x02\x06\x16\x1E\x68\x74"\ - "\x74\x70\x3A\x2F\x2F\x62\x73\x69\x2E\x62\x75\x6E\x64"\ - "\x2E\x64\x65\x2F\x63\x69\x66\x2F\x6E\x70\x61\x2E\x78"\ - "\x6D\x6C\x30\x62\x06\x09\x04\x00\x7F\x00\x07\x02\x02"\ - "\x01\x02\x30\x52\x30\x0C\x06\x07\x04\x00\x7F\x00\x07"\ - "\x01\x02\x02\x01\x0D\x03\x42\x00\x04\x92\x5D\xB4\xE1"\ - "\x7A\xDE\x58\x20\x9F\x96\xFA\xA0\x7F\x1F\x8A\x22\x3F"\ - "\x82\x3F\x96\xCC\x5D\x78\xCB\xEF\x5D\x17\x42\x20\x88"\ - "\xFD\xD5\x8E\x56\xBC\x42\x50\xDE\x33\x46\xB3\xC8\x32"\ - "\xCA\xE4\x86\x35\xFB\x6C\x43\x78\x9D\xE8\xB3\x10\x2F"\ - "\x43\x93\xB4\x18\xE2\x4A\x13\xD9\x02\x01\x41\xA0\x82"\ - "\x03\x1C\x30\x82\x03\x18\x30\x82\x02\xBC\xA0\x03\x02"\ - "\x01\x02\x02\x02\x01\x5C\x30\x0C\x06\x08\x2A\x86\x48"\ - "\xCE\x3D\x04\x03\x02\x05\x00\x30\x4F\x31\x0B\x30\x09"\ - "\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x0D\x30\x0B"\ - "\x06\x03\x55\x04\x0A\x0C\x04\x62\x75\x6E\x64\x31\x0C"\ - "\x30\x0A\x06\x03\x55\x04\x0B\x0C\x03\x62\x73\x69\x31"\ - "\x0C\x30\x0A\x06\x03\x55\x04\x05\x13\x03\x30\x31\x33"\ - "\x31\x15\x30\x13\x06\x03\x55\x04\x03\x0C\x0C\x63\x73"\ - "\x63\x61\x2D\x67\x65\x72\x6D\x61\x6E\x79\x30\x1E\x17"\ - "\x0D\x31\x30\x31\x30\x30\x35\x31\x31\x30\x37\x35\x32"\ - "\x5A\x17\x0D\x32\x31\x30\x34\x30\x35\x30\x38\x33\x39"\ - "\x34\x37\x5A\x30\x47\x31\x0B\x30\x09\x06\x03\x55\x04"\ - "\x06\x13\x02\x44\x45\x31\x1D\x30\x1B\x06\x03\x55\x04"\ - "\x0A\x0C\x14\x42\x75\x6E\x64\x65\x73\x64\x72\x75\x63"\ - "\x6B\x65\x72\x65\x69\x20\x47\x6D\x62\x48\x31\x0C\x30"\ - "\x0A\x06\x03\x55\x04\x05\x13\x03\x30\x37\x34\x31\x0B"\ - "\x30\x09\x06\x03\x55\x04\x03\x0C\x02\x44\x53\x30\x82"\ - "\x01\x13\x30\x81\xD4\x06\x07\x2A\x86\x48\xCE\x3D\x02"\ - "\x01\x30\x81\xC8\x02\x01\x01\x30\x28\x06\x07\x2A\x86"\ - "\x48\xCE\x3D\x01\x01\x02\x1D\x00\xD7\xC1\x34\xAA\x26"\ - "\x43\x66\x86\x2A\x18\x30\x25\x75\xD1\xD7\x87\xB0\x9F"\ - "\x07\x57\x97\xDA\x89\xF5\x7E\xC8\xC0\xFF\x30\x3C\x04"\ - "\x1C\x68\xA5\xE6\x2C\xA9\xCE\x6C\x1C\x29\x98\x03\xA6"\ - "\xC1\x53\x0B\x51\x4E\x18\x2A\xD8\xB0\x04\x2A\x59\xCA"\ - "\xD2\x9F\x43\x04\x1C\x25\x80\xF6\x3C\xCF\xE4\x41\x38"\ - "\x87\x07\x13\xB1\xA9\x23\x69\xE3\x3E\x21\x35\xD2\x66"\ - "\xDB\xB3\x72\x38\x6C\x40\x0B\x04\x39\x04\x0D\x90\x29"\ - "\xAD\x2C\x7E\x5C\xF4\x34\x08\x23\xB2\xA8\x7D\xC6\x8C"\ - "\x9E\x4C\xE3\x17\x4C\x1E\x6E\xFD\xEE\x12\xC0\x7D\x58"\ - "\xAA\x56\xF7\x72\xC0\x72\x6F\x24\xC6\xB8\x9E\x4E\xCD"\ - "\xAC\x24\x35\x4B\x9E\x99\xCA\xA3\xF6\xD3\x76\x14\x02"\ - "\xCD\x02\x1D\x00\xD7\xC1\x34\xAA\x26\x43\x66\x86\x2A"\ - "\x18\x30\x25\x75\xD0\xFB\x98\xD1\x16\xBC\x4B\x6D\xDE"\ - "\xBC\xA3\xA5\xA7\x93\x9F\x02\x01\x01\x03\x3A\x00\x04"\ - "\x3D\x6A\x7C\x2A\x6F\x20\x5F\x83\x9B\x04\x14\xEC\x58"\ - "\xC6\xC7\x1B\x75\xF5\x15\xDE\xC3\xAE\x73\x3B\x5F\x47"\ - "\x88\xDD\xC8\x15\xF0\x5B\xC1\xF6\x53\x8F\xD9\x69\x54"\ - "\xE1\xF8\x40\xA2\xE2\x18\x99\x62\xCC\xAA\x14\x90\x08"\ - "\x24\xC7\xDD\xB9\xA3\x81\xD1\x30\x81\xCE\x30\x0E\x06"\ - "\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x07\x80"\ - "\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14"\ - "\x60\x44\xF2\x45\xF2\xE0\x71\xD4\xD5\x64\xF4\xE5\x77"\ - "\xD6\x36\x69\xDB\xEB\x18\x59\x30\x41\x06\x03\x55\x1D"\ - "\x20\x04\x3A\x30\x38\x30\x36\x06\x09\x04\x00\x7F\x00"\ - "\x07\x03\x01\x01\x01\x30\x29\x30\x27\x06\x08\x2B\x06"\ - "\x01\x05\x05\x07\x02\x01\x16\x1B\x68\x74\x74\x70\x3A"\ - "\x2F\x2F\x77\x77\x77\x2E\x62\x73\x69\x2E\x62\x75\x6E"\ - "\x64\x2E\x64\x65\x2F\x63\x73\x63\x61\x30\x2B\x06\x09"\ - "\x2A\x86\x48\x86\xF7\x0D\x01\x09\x15\x04\x1E\x04\x1C"\ - "\x31\x2E\x32\x2E\x32\x37\x36\x2E\x30\x2E\x38\x30\x2E"\ - "\x31\x2E\x31\x32\x2E\x30\x2E\x32\x30\x2E\x35\x2E\x31"\ - "\x2E\x30\x30\x2B\x06\x03\x55\x1D\x10\x04\x24\x30\x22"\ - "\x80\x0F\x32\x30\x31\x30\x31\x30\x30\x35\x31\x31\x30"\ - "\x37\x35\x32\x5A\x81\x0F\x32\x30\x31\x31\x30\x32\x30"\ - "\x35\x30\x39\x33\x39\x34\x37\x5A\x30\x0C\x06\x08\x2A"\ - "\x86\x48\xCE\x3D\x04\x03\x02\x05\x00\x03\x48\x00\x30"\ - "\x45\x02\x20\x13\xE9\xE1\x7A\x9E\xFE\x8B\xD7\xD7\x27"\ - "\x62\x92\x30\x5B\xCC\xC3\x2B\x70\xC2\xB7\x60\x40\xF4"\ - "\x88\x30\x66\x62\x26\xCD\x6A\x4B\xF4\x02\x21\x00\x87"\ - "\xF4\x71\xE2\x44\x35\xB4\xC3\x4A\xF3\x57\x30\x94\xFB"\ - "\x1F\x1C\x2A\x48\xB1\x3E\xE5\xED\x67\xF1\x72\x6D\xCF"\ - "\x56\xE3\x84\xE3\x6F\x31\x82\x01\x09\x30\x82\x01\x05"\ - "\x02\x01\x01\x30\x55\x30\x4F\x31\x0B\x30\x09\x06\x03"\ - "\x55\x04\x06\x13\x02\x44\x45\x31\x0D\x30\x0B\x06\x03"\ - "\x55\x04\x0A\x0C\x04\x62\x75\x6E\x64\x31\x0C\x30\x0A"\ - "\x06\x03\x55\x04\x0B\x0C\x03\x62\x73\x69\x31\x0C\x30"\ - "\x0A\x06\x03\x55\x04\x05\x13\x03\x30\x31\x33\x31\x15"\ - "\x30\x13\x06\x03\x55\x04\x03\x0C\x0C\x63\x73\x63\x61"\ - "\x2D\x67\x65\x72\x6D\x61\x6E\x79\x02\x02\x01\x5C\x30"\ - "\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05"\ - "\x00\xA0\x4A\x30\x17\x06\x09\x2A\x86\x48\x86\xF7\x0D"\ - "\x01\x09\x03\x31\x0A\x06\x08\x04\x00\x7F\x00\x07\x03"\ - "\x02\x01\x30\x2F\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01"\ - "\x09\x04\x31\x22\x04\x20\xEF\x0F\xDA\x94\x2E\x5A\x0F"\ - "\x6F\xC9\xC5\x46\xEE\x01\xF9\x10\x31\x43\x64\x30\xF7"\ - "\x5E\x9D\x36\x54\xD3\x69\x30\x9E\x8B\xE7\x17\x48\x30"\ - "\x0C\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x02\x05\x00"\ - "\x04\x40\x30\x3E\x02\x1D\x00\x89\x75\x92\x5B\xE1\x31"\ - "\xB7\x7C\x95\x8C\x3E\xCB\x2A\x5C\x67\xFC\x5C\xE3\x1C"\ - "\xBD\x01\x41\xE3\x4B\xC7\xF0\xA4\x47\x02\x1D\x00\xCC"\ - "\x65\xE6\x2D\xDC\xF2\x93\x96\x4B\x22\xD7\xB5\x10\xD7"\ - "\x81\x88\x07\xC8\x95\x96\xBD\x34\xD8\xF9\xBB\x4C\x05"\ - "\x27" + card_security = b"\x30\x82\x05\xA0\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01"\ + b"\x07\x02\xA0\x82\x05\x91\x30\x82\x05\x8D\x02\x01\x03"\ + b"\x31\x0F\x30\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04"\ + b"\x02\x01\x05\x00\x30\x82\x01\x48\x06\x08\x04\x00\x7F"\ + b"\x00\x07\x03\x02\x01\xA0\x82\x01\x3A\x04\x82\x01\x36"\ + b"\x31\x82\x01\x32\x30\x0D\x06\x08\x04\x00\x7F\x00\x07"\ + b"\x02\x02\x02\x02\x01\x02\x30\x12\x06\x0A\x04\x00\x7F"\ + b"\x00\x07\x02\x02\x03\x02\x02\x02\x01\x02\x02\x01\x41"\ + b"\x30\x12\x06\x0A\x04\x00\x7F\x00\x07\x02\x02\x04\x02"\ + b"\x02\x02\x01\x02\x02\x01\x0D\x30\x17\x06\x0A\x04\x00"\ + b"\x7F\x00\x07\x02\x02\x05\x02\x03\x30\x09\x02\x01\x01"\ + b"\x02\x01\x43\x01\x01\xFF\x30\x17\x06\x0A\x04\x00\x7F"\ + b"\x00\x07\x02\x02\x05\x02\x03\x30\x09\x02\x01\x01\x02"\ + b"\x01\x44\x01\x01\x00\x30\x19\x06\x09\x04\x00\x7F\x00"\ + b"\x07\x02\x02\x05\x02\x30\x0C\x06\x07\x04\x00\x7F\x00"\ + b"\x07\x01\x02\x02\x01\x0D\x30\x1C\x06\x09\x04\x00\x7F"\ + b"\x00\x07\x02\x02\x03\x02\x30\x0C\x06\x07\x04\x00\x7F"\ + b"\x00\x07\x01\x02\x02\x01\x0D\x02\x01\x41\x30\x2A\x06"\ + b"\x08\x04\x00\x7F\x00\x07\x02\x02\x06\x16\x1E\x68\x74"\ + b"\x74\x70\x3A\x2F\x2F\x62\x73\x69\x2E\x62\x75\x6E\x64"\ + b"\x2E\x64\x65\x2F\x63\x69\x66\x2F\x6E\x70\x61\x2E\x78"\ + b"\x6D\x6C\x30\x62\x06\x09\x04\x00\x7F\x00\x07\x02\x02"\ + b"\x01\x02\x30\x52\x30\x0C\x06\x07\x04\x00\x7F\x00\x07"\ + b"\x01\x02\x02\x01\x0D\x03\x42\x00\x04\x92\x5D\xB4\xE1"\ + b"\x7A\xDE\x58\x20\x9F\x96\xFA\xA0\x7F\x1F\x8A\x22\x3F"\ + b"\x82\x3F\x96\xCC\x5D\x78\xCB\xEF\x5D\x17\x42\x20\x88"\ + b"\xFD\xD5\x8E\x56\xBC\x42\x50\xDE\x33\x46\xB3\xC8\x32"\ + b"\xCA\xE4\x86\x35\xFB\x6C\x43\x78\x9D\xE8\xB3\x10\x2F"\ + b"\x43\x93\xB4\x18\xE2\x4A\x13\xD9\x02\x01\x41\xA0\x82"\ + b"\x03\x1C\x30\x82\x03\x18\x30\x82\x02\xBC\xA0\x03\x02"\ + b"\x01\x02\x02\x02\x01\x5C\x30\x0C\x06\x08\x2A\x86\x48"\ + b"\xCE\x3D\x04\x03\x02\x05\x00\x30\x4F\x31\x0B\x30\x09"\ + b"\x06\x03\x55\x04\x06\x13\x02\x44\x45\x31\x0D\x30\x0B"\ + b"\x06\x03\x55\x04\x0A\x0C\x04\x62\x75\x6E\x64\x31\x0C"\ + b"\x30\x0A\x06\x03\x55\x04\x0B\x0C\x03\x62\x73\x69\x31"\ + b"\x0C\x30\x0A\x06\x03\x55\x04\x05\x13\x03\x30\x31\x33"\ + b"\x31\x15\x30\x13\x06\x03\x55\x04\x03\x0C\x0C\x63\x73"\ + b"\x63\x61\x2D\x67\x65\x72\x6D\x61\x6E\x79\x30\x1E\x17"\ + b"\x0D\x31\x30\x31\x30\x30\x35\x31\x31\x30\x37\x35\x32"\ + b"\x5A\x17\x0D\x32\x31\x30\x34\x30\x35\x30\x38\x33\x39"\ + b"\x34\x37\x5A\x30\x47\x31\x0B\x30\x09\x06\x03\x55\x04"\ + b"\x06\x13\x02\x44\x45\x31\x1D\x30\x1B\x06\x03\x55\x04"\ + b"\x0A\x0C\x14\x42\x75\x6E\x64\x65\x73\x64\x72\x75\x63"\ + b"\x6B\x65\x72\x65\x69\x20\x47\x6D\x62\x48\x31\x0C\x30"\ + b"\x0A\x06\x03\x55\x04\x05\x13\x03\x30\x37\x34\x31\x0B"\ + b"\x30\x09\x06\x03\x55\x04\x03\x0C\x02\x44\x53\x30\x82"\ + b"\x01\x13\x30\x81\xD4\x06\x07\x2A\x86\x48\xCE\x3D\x02"\ + b"\x01\x30\x81\xC8\x02\x01\x01\x30\x28\x06\x07\x2A\x86"\ + b"\x48\xCE\x3D\x01\x01\x02\x1D\x00\xD7\xC1\x34\xAA\x26"\ + b"\x43\x66\x86\x2A\x18\x30\x25\x75\xD1\xD7\x87\xB0\x9F"\ + b"\x07\x57\x97\xDA\x89\xF5\x7E\xC8\xC0\xFF\x30\x3C\x04"\ + b"\x1C\x68\xA5\xE6\x2C\xA9\xCE\x6C\x1C\x29\x98\x03\xA6"\ + b"\xC1\x53\x0B\x51\x4E\x18\x2A\xD8\xB0\x04\x2A\x59\xCA"\ + b"\xD2\x9F\x43\x04\x1C\x25\x80\xF6\x3C\xCF\xE4\x41\x38"\ + b"\x87\x07\x13\xB1\xA9\x23\x69\xE3\x3E\x21\x35\xD2\x66"\ + b"\xDB\xB3\x72\x38\x6C\x40\x0B\x04\x39\x04\x0D\x90\x29"\ + b"\xAD\x2C\x7E\x5C\xF4\x34\x08\x23\xB2\xA8\x7D\xC6\x8C"\ + b"\x9E\x4C\xE3\x17\x4C\x1E\x6E\xFD\xEE\x12\xC0\x7D\x58"\ + b"\xAA\x56\xF7\x72\xC0\x72\x6F\x24\xC6\xB8\x9E\x4E\xCD"\ + b"\xAC\x24\x35\x4B\x9E\x99\xCA\xA3\xF6\xD3\x76\x14\x02"\ + b"\xCD\x02\x1D\x00\xD7\xC1\x34\xAA\x26\x43\x66\x86\x2A"\ + b"\x18\x30\x25\x75\xD0\xFB\x98\xD1\x16\xBC\x4B\x6D\xDE"\ + b"\xBC\xA3\xA5\xA7\x93\x9F\x02\x01\x01\x03\x3A\x00\x04"\ + b"\x3D\x6A\x7C\x2A\x6F\x20\x5F\x83\x9B\x04\x14\xEC\x58"\ + b"\xC6\xC7\x1B\x75\xF5\x15\xDE\xC3\xAE\x73\x3B\x5F\x47"\ + b"\x88\xDD\xC8\x15\xF0\x5B\xC1\xF6\x53\x8F\xD9\x69\x54"\ + b"\xE1\xF8\x40\xA2\xE2\x18\x99\x62\xCC\xAA\x14\x90\x08"\ + b"\x24\xC7\xDD\xB9\xA3\x81\xD1\x30\x81\xCE\x30\x0E\x06"\ + b"\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x07\x80"\ + b"\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14"\ + b"\x60\x44\xF2\x45\xF2\xE0\x71\xD4\xD5\x64\xF4\xE5\x77"\ + b"\xD6\x36\x69\xDB\xEB\x18\x59\x30\x41\x06\x03\x55\x1D"\ + b"\x20\x04\x3A\x30\x38\x30\x36\x06\x09\x04\x00\x7F\x00"\ + b"\x07\x03\x01\x01\x01\x30\x29\x30\x27\x06\x08\x2B\x06"\ + b"\x01\x05\x05\x07\x02\x01\x16\x1B\x68\x74\x74\x70\x3A"\ + b"\x2F\x2F\x77\x77\x77\x2E\x62\x73\x69\x2E\x62\x75\x6E"\ + b"\x64\x2E\x64\x65\x2F\x63\x73\x63\x61\x30\x2B\x06\x09"\ + b"\x2A\x86\x48\x86\xF7\x0D\x01\x09\x15\x04\x1E\x04\x1C"\ + b"\x31\x2E\x32\x2E\x32\x37\x36\x2E\x30\x2E\x38\x30\x2E"\ + b"\x31\x2E\x31\x32\x2E\x30\x2E\x32\x30\x2E\x35\x2E\x31"\ + b"\x2E\x30\x30\x2B\x06\x03\x55\x1D\x10\x04\x24\x30\x22"\ + b"\x80\x0F\x32\x30\x31\x30\x31\x30\x30\x35\x31\x31\x30"\ + b"\x37\x35\x32\x5A\x81\x0F\x32\x30\x31\x31\x30\x32\x30"\ + b"\x35\x30\x39\x33\x39\x34\x37\x5A\x30\x0C\x06\x08\x2A"\ + b"\x86\x48\xCE\x3D\x04\x03\x02\x05\x00\x03\x48\x00\x30"\ + b"\x45\x02\x20\x13\xE9\xE1\x7A\x9E\xFE\x8B\xD7\xD7\x27"\ + b"\x62\x92\x30\x5B\xCC\xC3\x2B\x70\xC2\xB7\x60\x40\xF4"\ + b"\x88\x30\x66\x62\x26\xCD\x6A\x4B\xF4\x02\x21\x00\x87"\ + b"\xF4\x71\xE2\x44\x35\xB4\xC3\x4A\xF3\x57\x30\x94\xFB"\ + b"\x1F\x1C\x2A\x48\xB1\x3E\xE5\xED\x67\xF1\x72\x6D\xCF"\ + b"\x56\xE3\x84\xE3\x6F\x31\x82\x01\x09\x30\x82\x01\x05"\ + b"\x02\x01\x01\x30\x55\x30\x4F\x31\x0B\x30\x09\x06\x03"\ + b"\x55\x04\x06\x13\x02\x44\x45\x31\x0D\x30\x0B\x06\x03"\ + b"\x55\x04\x0A\x0C\x04\x62\x75\x6E\x64\x31\x0C\x30\x0A"\ + b"\x06\x03\x55\x04\x0B\x0C\x03\x62\x73\x69\x31\x0C\x30"\ + b"\x0A\x06\x03\x55\x04\x05\x13\x03\x30\x31\x33\x31\x15"\ + b"\x30\x13\x06\x03\x55\x04\x03\x0C\x0C\x63\x73\x63\x61"\ + b"\x2D\x67\x65\x72\x6D\x61\x6E\x79\x02\x02\x01\x5C\x30"\ + b"\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05"\ + b"\x00\xA0\x4A\x30\x17\x06\x09\x2A\x86\x48\x86\xF7\x0D"\ + b"\x01\x09\x03\x31\x0A\x06\x08\x04\x00\x7F\x00\x07\x03"\ + b"\x02\x01\x30\x2F\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01"\ + b"\x09\x04\x31\x22\x04\x20\xEF\x0F\xDA\x94\x2E\x5A\x0F"\ + b"\x6F\xC9\xC5\x46\xEE\x01\xF9\x10\x31\x43\x64\x30\xF7"\ + b"\x5E\x9D\x36\x54\xD3\x69\x30\x9E\x8B\xE7\x17\x48\x30"\ + b"\x0C\x06\x08\x2A\x86\x48\xCE\x3D\x04\x03\x02\x05\x00"\ + b"\x04\x40\x30\x3E\x02\x1D\x00\x89\x75\x92\x5B\xE1\x31"\ + b"\xB7\x7C\x95\x8C\x3E\xCB\x2A\x5C\x67\xFC\x5C\xE3\x1C"\ + b"\xBD\x01\x41\xE3\x4B\xC7\xF0\xA4\x47\x02\x1D\x00\xCC"\ + b"\x65\xE6\x2D\xDC\xF2\x93\x96\x4B\x22\xD7\xB5\x10\xD7"\ + b"\x81\x88\x07\xC8\x95\x96\xBD\x34\xD8\xF9\xBB\x4C\x05"\ + b"\x27" self.mf.append(TransparentStructureEF(parent=self.mf, fid=0x011d, shortfid=0x1d, data=card_security)) - ef_dir = "\x61\x32\x4F\x0F\xE8\x28\xBD\x08\x0F\xA0\x00\x00\x01\x67"\ - "\x45\x53\x49\x47\x4E\x50\x0F\x43\x49\x41\x20\x7A\x75\x20"\ - "\x44\x46\x2E\x65\x53\x69\x67\x6E\x51\x00\x73\x0C\x4F\x0A"\ - "\xA0\x00\x00\x01\x67\x45\x53\x49\x47\x4E\x61\x09\x4F\x07"\ - "\xA0\x00\x00\x02\x47\x10\x01\x61\x0B\x4F\x09\xE8\x07\x04"\ - "\x00\x7F\x00\x07\x03\x02\x61\x0C\x4F\x0A\xA0\x00\x00\x01"\ - "\x67\x45\x53\x49\x47\x4E" + ef_dir = b"\x61\x32\x4F\x0F\xE8\x28\xBD\x08\x0F\xA0\x00\x00\x01\x67"\ + b"\x45\x53\x49\x47\x4E\x50\x0F\x43\x49\x41\x20\x7A\x75\x20"\ + b"\x44\x46\x2E\x65\x53\x69\x67\x6E\x51\x00\x73\x0C\x4F\x0A"\ + b"\xA0\x00\x00\x01\x67\x45\x53\x49\x47\x4E\x61\x09\x4F\x07"\ + b"\xA0\x00\x00\x02\x47\x10\x01\x61\x0B\x4F\x09\xE8\x07\x04"\ + b"\x00\x7F\x00\x07\x03\x02\x61\x0C\x4F\x0A\xA0\x00\x00\x01"\ + b"\x67\x45\x53\x49\x47\x4E" self.mf.append(TransparentStructureEF(parent=self.mf, fid=0x2f00, shortfid=30, data=ef_dir)) eid = DF(parent=self.mf, fid=0xffff, - dfname='\xe8\x07\x04\x00\x7f\x00\x07\x03\x02') - eid.extra_fci_data = "\xab\x75\x84\x01\xa4\xaf\x70\xa0\x10\xb4\x06"\ - "\x95\x01\x20\x83\x01\x04\xb4\x06\x95\x01\x20"\ - "\x83\x01\x06\xa0\x54\xa4\x14\x95\x01\x80\x7f"\ - "\x4c\x0e\x06\x09\x04\x00\x7f\x00\x07\x03\x01"\ - "\x02\x01\x53\x01\x00\xaf\x22\xa4\x18\x95\x01"\ - "\x80\x7f\x4c\x12\x06\x09\x04\x00\x7f\x00\x07"\ - "\x03\x01\x02\x02\x53\x05\x00\x00\x00\x00\x00"\ - "\xa4\x06\x95\x01\x80\x83\x01\x47\xa4\x18\x95"\ - "\x01\x80\x7f\x4c\x12\x06\x09\x04\x00\x7f\x00"\ - "\x07\x03\x01\x02\x02\x53\x05\x00\x00\x00\x00"\ - "\x10\x7a\x06\x8a\x01\x05\x9e\x01\x03" + dfname=b'\xe8\x07\x04\x00\x7f\x00\x07\x03\x02') + eid.extra_fci_data = b"\xab\x75\x84\x01\xa4\xaf\x70\xa0\x10\xb4\x06"\ + b"\x95\x01\x20\x83\x01\x04\xb4\x06\x95\x01\x20"\ + b"\x83\x01\x06\xa0\x54\xa4\x14\x95\x01\x80\x7f"\ + b"\x4c\x0e\x06\x09\x04\x00\x7f\x00\x07\x03\x01"\ + b"\x02\x01\x53\x01\x00\xaf\x22\xa4\x18\x95\x01"\ + b"\x80\x7f\x4c\x12\x06\x09\x04\x00\x7f\x00\x07"\ + b"\x03\x01\x02\x02\x53\x05\x00\x00\x00\x00\x00"\ + b"\xa4\x06\x95\x01\x80\x83\x01\x47\xa4\x18\x95"\ + b"\x01\x80\x7f\x4c\x12\x06\x09\x04\x00\x7f\x00"\ + b"\x07\x03\x01\x02\x02\x53\x05\x00\x00\x00\x00"\ + b"\x10\x7a\x06\x8a\x01\x05\x9e\x01\x03" # FIXME access control for eid application DocumentType = self.datagroups["DocumentType"] if "DocumentType" in \ @@ -551,56 +551,56 @@ class CardGenerator(object): # DF.CIA cia = DF(parent=self.mf, fid=0xfffe, - dfname='\xE8\x28\xBD\x08\x0F\xA0\x00\x00\x01\x67\x45\x53\x49' - '\x47\x4E') + dfname=b'\xE8\x28\xBD\x08\x0F\xA0\x00\x00\x01\x67\x45\x53\x49' + b'\x47\x4E') # EF.OD / EF.ODF cia.append(TransparentStructureEF(parent=cia, fid=0x5031, shortfid=0x11, - data='\xa0\x060\x04\x04\x02D\x00\xa4' - '\x060\x04\x04\x02D\x04\xa8\x060\x04' - '\x04\x02D\x08')) + data=b'\xa0\x060\x04\x04\x02D\x00\xa4' + b'\x060\x04\x04\x02D\x04\xa8\x060\x04' + b'\x04\x02D\x08')) # EF.CIAInfo / EF.TokenInfo cia.append(TransparentStructureEF(parent=cia, fid=0x5032, shortfid=0x12, - data='06\x02\x01\x01\x80\x11eSign ' - 'Application\x03\x02\x06\xc0\xa2' - '\x1a0\x18\x02\x01\x01\x02\x02\x10A' - '\x05\x00\x03\x02\x06@\x06\t\x04\x00' - '\x7f\x00\x07\x01\x01\x04\x01')) + data=b'06\x02\x01\x01\x80\x11eSign ' + b'Application\x03\x02\x06\xc0\xa2' + b'\x1a0\x18\x02\x01\x01\x02\x02\x10A' + b'\x05\x00\x03\x02\x06@\x06\t\x04\x00' + b'\x7f\x00\x07\x01\x01\x04\x01')) # EF.PrKD / EF.PrKDF cia.append(TransparentStructureEF(parent=cia, fid=0x4400, - data='\xa080\x17\x0c\x0bPrK.ICC.QES' - '\x03\x02\x07\x80\x04\x01\x01\x02' - '\x01\x010\x15\x04\x01F\x03\x03\x06' - '\x00@\x03\x02\x03\xb8\x02\x02\x00' - '\x84\xa1\x03\x02\x01\x01\xa1\x060' - '\x040\x02\x04\x00')) + data=b'\xa080\x17\x0c\x0bPrK.ICC.QES' + b'\x03\x02\x07\x80\x04\x01\x01\x02' + b'\x01\x010\x15\x04\x01F\x03\x03\x06' + b'\x00@\x03\x02\x03\xb8\x02\x02\x00' + b'\x84\xa1\x03\x02\x01\x01\xa1\x060' + b'\x040\x02\x04\x00')) # EF.PuKD / EF.PuKDF cia.append(TransparentStructureEF(parent=cia, fid=0x4404, - data='050!\x0c\x1fZertifikat des ZDA' - ' f\xc3\xbcr die QES0\x06\x04\x01E' - '\x01\x01\xff\xa1\x080\x060\x04\x04' - '\x02\xc0\x000:0&\x0c$Zertifikat des' - ' Inhabers f\xc3\xbcr die QES0\x06' - '\x04\x01F\x01\x01\x00\xa1\x080\x060' - '\x04\x04\x02\xc0\x01')) + data=b'050!\x0c\x1fZertifikat des ZDA' + b' f\xc3\xbcr die QES0\x06\x04\x01E' + b'\x01\x01\xff\xa1\x080\x060\x04\x04' + b'\x02\xc0\x000:0&\x0c$Zertifikat des' + b' Inhabers f\xc3\xbcr die QES0\x06' + b'\x04\x01F\x01\x01\x00\xa1\x080\x060' + b'\x04\x04\x02\xc0\x01')) # EF.AOD / EF.AODF cia.append(TransparentStructureEF(parent=cia, fid=0x4408, - data='0/0\x0f\x0c\teSign-PIN\x03\x02' - '\x06@0\x03\x04\x01\x01\xa1\x170\x15' - '\x03\x03\x02H\x1c\n\x01\x01\x02\x01' - '\x06\x02\x01\x00\x80\x01\x810\x02' - '\x04\x00')) + data=b'0/0\x0f\x0c\teSign-PIN\x03\x02' + b'\x06@0\x03\x04\x01\x01\xa1\x170\x15' + b'\x03\x03\x02H\x1c\n\x01\x01\x02\x01' + b'\x06\x02\x01\x00\x80\x01\x810\x02' + b'\x04\x00')) self.mf.append(cia) # DF.eSign esign = DF(parent=self.mf, fid=0xfffd, - dfname='\xA0\x00\x00\x01\x67\x45\x53\x49\x47\x4E') + dfname=b'\xA0\x00\x00\x01\x67\x45\x53\x49\x47\x4E') # ZDA certificate - esign.append(TransparentStructureEF(parent=esign, fid=0xC000, data='')) + esign.append(TransparentStructureEF(parent=esign, fid=0xC000, data=b'')) # User's certificate - esign.append(TransparentStructureEF(parent=esign, fid=0xC001, data='')) + esign.append(TransparentStructureEF(parent=esign, fid=0xC001, data=b'')) self.mf.append(esign) self.sam = nPA_SAM(eid_pin="111111".encode('ascii'), can="222222".encode('ascii'), @@ -609,51 +609,51 @@ class CardGenerator(object): puk="3333333333".encode('ascii'), qes_pin="444444".encode('ascii'), mf=self.mf) # FIXME: add CVCA for inspection systems and signature terminals. Here # we only add the eID CVCA. - self.sam.current_SE.cvca = "\x7f\x21\x82\x01\xb6\x7f\x4e\x82\x01\x6e"\ - "\x5f\x29\x01\x00\x42\x0e\x44\x45\x43\x56"\ - "\x43\x41\x65\x49\x44\x30\x30\x31\x30\x32"\ - "\x7f\x49\x82\x01\x1d\x06\x0a\x04\x00\x7f"\ - "\x00\x07\x02\x02\x02\x02\x03\x81\x20\xa9"\ - "\xfb\x57\xdb\xa1\xee\xa9\xbc\x3e\x66\x0a"\ - "\x90\x9d\x83\x8d\x72\x6e\x3b\xf6\x23\xd5"\ - "\x26\x20\x28\x20\x13\x48\x1d\x1f\x6e\x53"\ - "\x77\x82\x20\x7d\x5a\x09\x75\xfc\x2c\x30"\ - "\x57\xee\xf6\x75\x30\x41\x7a\xff\xe7\xfb"\ - "\x80\x55\xc1\x26\xdc\x5c\x6c\xe9\x4a\x4b"\ - "\x44\xf3\x30\xb5\xd9\x83\x20\x26\xdc\x5c"\ - "\x6c\xe9\x4a\x4b\x44\xf3\x30\xb5\xd9\xbb"\ - "\xd7\x7c\xbf\x95\x84\x16\x29\x5c\xf7\xe1"\ - "\xce\x6b\xcc\xdc\x18\xff\x8c\x07\xb6\x84"\ - "\x41\x04\x8b\xd2\xae\xb9\xcb\x7e\x57\xcb"\ - "\x2c\x4b\x48\x2f\xfc\x81\xb7\xaf\xb9\xde"\ - "\x27\xe1\xe3\xbd\x23\xc2\x3a\x44\x53\xbd"\ - "\x9a\xce\x32\x62\x54\x7e\xf8\x35\xc3\xda"\ - "\xc4\xfd\x97\xf8\x46\x1a\x14\x61\x1d\xc9"\ - "\xc2\x77\x45\x13\x2d\xed\x8e\x54\x5c\x1d"\ - "\x54\xc7\x2f\x04\x69\x97\x85\x20\xa9\xfb"\ - "\x57\xdb\xa1\xee\xa9\xbc\x3e\x66\x0a\x90"\ - "\x9d\x83\x8d\x71\x8c\x39\x7a\xa3\xb5\x61"\ - "\xa6\xf7\x90\x1e\x0e\x82\x97\x48\x56\xa7"\ - "\x86\x41\x04\x33\x47\xec\xf9\x6f\xfb\x4b"\ - "\xd9\xb8\x55\x4e\xfb\xcc\xfc\x7d\x0b\x24"\ - "\x2f\x10\x71\xe2\x9b\x4c\x9c\x62\x2c\x79"\ - "\xe3\x39\xd8\x40\xaf\x67\xbe\xb9\xb9\x12"\ - "\x69\x22\x65\xd9\xc1\x6c\x62\x57\x3f\x45"\ - "\x79\xff\xd4\xde\x2d\xe9\x2b\xab\x40\x9d"\ - "\xd5\xc5\xd4\x82\x44\xa9\xf7\x87\x01\x01"\ - "\x5f\x20\x0e\x44\x45\x43\x56\x43\x41\x65"\ - "\x49\x44\x30\x30\x31\x30\x32\x7f\x4c\x12"\ - "\x06\x09\x04\x00\x7f\x00\x07\x03\x01\x02"\ - "\x02\x53\x05\xfe\x0f\x01\xff\xff\x5f\x25"\ - "\x06\x01\x00\x01\x00\x01\x08\x5f\x24\x06"\ - "\x01\x03\x01\x00\x01\x08\x5f\x37\x40\x50"\ - "\x67\x14\x5c\x68\xca\xe9\x52\x0f\x5b\xb3"\ - "\x48\x17\xf1\xca\x9c\x43\x59\x3d\xb5\x64"\ - "\x06\xc6\xa3\xb0\x06\xcb\xf3\xf3\x14\xe7"\ - "\x34\x9a\xcf\x0c\xc6\xbf\xeb\xcb\xde\xfd"\ - "\x10\xb4\xdc\xf0\xf2\x31\xda\x56\x97\x7d"\ - "\x88\xf9\xf9\x01\x82\xd1\x99\x07\x6a\x56"\ - "\x50\x64\x51" + self.sam.current_SE.cvca = b"\x7f\x21\x82\x01\xb6\x7f\x4e\x82\x01\x6e"\ + b"\x5f\x29\x01\x00\x42\x0e\x44\x45\x43\x56"\ + b"\x43\x41\x65\x49\x44\x30\x30\x31\x30\x32"\ + b"\x7f\x49\x82\x01\x1d\x06\x0a\x04\x00\x7f"\ + b"\x00\x07\x02\x02\x02\x02\x03\x81\x20\xa9"\ + b"\xfb\x57\xdb\xa1\xee\xa9\xbc\x3e\x66\x0a"\ + b"\x90\x9d\x83\x8d\x72\x6e\x3b\xf6\x23\xd5"\ + b"\x26\x20\x28\x20\x13\x48\x1d\x1f\x6e\x53"\ + b"\x77\x82\x20\x7d\x5a\x09\x75\xfc\x2c\x30"\ + b"\x57\xee\xf6\x75\x30\x41\x7a\xff\xe7\xfb"\ + b"\x80\x55\xc1\x26\xdc\x5c\x6c\xe9\x4a\x4b"\ + b"\x44\xf3\x30\xb5\xd9\x83\x20\x26\xdc\x5c"\ + b"\x6c\xe9\x4a\x4b\x44\xf3\x30\xb5\xd9\xbb"\ + b"\xd7\x7c\xbf\x95\x84\x16\x29\x5c\xf7\xe1"\ + b"\xce\x6b\xcc\xdc\x18\xff\x8c\x07\xb6\x84"\ + b"\x41\x04\x8b\xd2\xae\xb9\xcb\x7e\x57\xcb"\ + b"\x2c\x4b\x48\x2f\xfc\x81\xb7\xaf\xb9\xde"\ + b"\x27\xe1\xe3\xbd\x23\xc2\x3a\x44\x53\xbd"\ + b"\x9a\xce\x32\x62\x54\x7e\xf8\x35\xc3\xda"\ + b"\xc4\xfd\x97\xf8\x46\x1a\x14\x61\x1d\xc9"\ + b"\xc2\x77\x45\x13\x2d\xed\x8e\x54\x5c\x1d"\ + b"\x54\xc7\x2f\x04\x69\x97\x85\x20\xa9\xfb"\ + b"\x57\xdb\xa1\xee\xa9\xbc\x3e\x66\x0a\x90"\ + b"\x9d\x83\x8d\x71\x8c\x39\x7a\xa3\xb5\x61"\ + b"\xa6\xf7\x90\x1e\x0e\x82\x97\x48\x56\xa7"\ + b"\x86\x41\x04\x33\x47\xec\xf9\x6f\xfb\x4b"\ + b"\xd9\xb8\x55\x4e\xfb\xcc\xfc\x7d\x0b\x24"\ + b"\x2f\x10\x71\xe2\x9b\x4c\x9c\x62\x2c\x79"\ + b"\xe3\x39\xd8\x40\xaf\x67\xbe\xb9\xb9\x12"\ + b"\x69\x22\x65\xd9\xc1\x6c\x62\x57\x3f\x45"\ + b"\x79\xff\xd4\xde\x2d\xe9\x2b\xab\x40\x9d"\ + b"\xd5\xc5\xd4\x82\x44\xa9\xf7\x87\x01\x01"\ + b"\x5f\x20\x0e\x44\x45\x43\x56\x43\x41\x65"\ + b"\x49\x44\x30\x30\x31\x30\x32\x7f\x4c\x12"\ + b"\x06\x09\x04\x00\x7f\x00\x07\x03\x01\x02"\ + b"\x02\x53\x05\xfe\x0f\x01\xff\xff\x5f\x25"\ + b"\x06\x01\x00\x01\x00\x01\x08\x5f\x24\x06"\ + b"\x01\x03\x01\x00\x01\x08\x5f\x37\x40\x50"\ + b"\x67\x14\x5c\x68\xca\xe9\x52\x0f\x5b\xb3"\ + b"\x48\x17\xf1\xca\x9c\x43\x59\x3d\xb5\x64"\ + b"\x06\xc6\xa3\xb0\x06\xcb\xf3\xf3\x14\xe7"\ + b"\x34\x9a\xcf\x0c\xc6\xbf\xeb\xcb\xde\xfd"\ + b"\x10\xb4\xdc\xf0\xf2\x31\xda\x56\x97\x7d"\ + b"\x88\xf9\xf9\x01\x82\xd1\x99\x07\x6a\x56"\ + b"\x50\x64\x51" def __generate_cryptoflex(self): """Generate the Filesystem and SAM of a cryptoflex card""" @@ -662,7 +662,7 @@ class CardGenerator(object): self.mf = CryptoflexMF() self.mf.append(TransparentStructureEF(parent=self.mf, fid=0x0002, filedescriptor=0x01, - data="\x00\x00\x00\x01\x00\x01\x00\x00")) # EF.ICCSN + data=b"\x00\x00\x00\x01\x00\x01\x00\x00")) # EF.ICCSN self.sam = CryptoflexSAM(self.mf) def generateCard(self): diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py index c696dde..eb7be9d 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py @@ -74,7 +74,7 @@ def tlv_unpack(data): data = data[1:] length = length_ - value = data[:length] + value = b"".join(inttostring(i) for i in data[:length]) rest = data[length:] return ber_class, constructed, tag, length, value, rest @@ -114,12 +114,12 @@ def tlv_find_tag(tlv_data, tag, num_results=None): def pack(tlv_data, recalculate_length=False): - result = [] + result = b"" for data in tlv_data: tag, length, value = data[:3] if tag in (0xff, 0x00): - result.append(inttostring(tag)) + result = result + inttostring(tag) continue if not isinstance(value, bytes): @@ -143,9 +143,9 @@ def pack(tlv_data, recalculate_length=False): assert len(l) < 0x7f l = inttostring(0x80 | len(l)) + l - result.append(t) - result.append(l) - result.append(value) + result = result + t + result = result + l + result = result + value return b"".join(result)