예제 #1
0
    def test_CAPDU(self):
        a = C_APDU(1, 2, 3, 4) # case 1
        b = C_APDU(1, 2, 3, 4, 5) # case 2
        c = C_APDU((1, 2, 3), cla = 0x23, data = "hallo") # case 3
        d = C_APDU(1, 2, 3, 4, 2, 4, 6, 0) # case 4

        print()
        print(a)
        print(b)
        print(c)
        print(d)
        print()
        print(repr(a))
        print(repr(b))
        print(repr(c))
        print(repr(d))

        print()
        for i in a, b, c, d:
            print(hexdump(i.render()))

        print()
        g = C_APDU(0x00, 0xb0, 0x9c, 0x00, 0x00, 0x00, 0x00) #case 2 extended length

        print()
        print(g)
        print(repr(g))
        print(hexdump(g.render()))

        h = C_APDU('\x0c\x2a\x00\xbe\x00\x01\x5f\x87\x82\x01\x51\x01\xf0\xa2\x21\xa1\x36\x27\xb1\x30\x31\x3e\xd0\x97\x09\xb5\xde\x73\x5e\x29\x90\xce\xf1\x3d\x8a\xfd\xe7\x92\xe5\xa4\x70\xb9\x5d\x31\xe2\x34\xe7\xe2\x06\x13\x17\x7a\x3e\xca\x06\x39\x24\x2e\x75\x8c\x29\x6d\xd8\xa3\x1b\x1a\x68\x58\xd0\x1a\x98\xd4\xd8\x19\x50\xe9\x1b\x3c\xd1\xfd\x10\x53\x5b\xf2\x3b\xff\x4a\xf6\x05\xd0\x72\xad\xae\xaa\x93\x1a\x0a\x90\xc8\xa1\xb1\xf1\x0a\xba\x5b\xd2\x23\x38\xf8\x9a\x38\x9e\xa2\x04\x8b\xcb\x8b\x8b\xc0\x80\xd9\x2a\x04\x47\x26\x83\xda\xfe\x57\x68\x6b\x00\xb9\xa2\xea\x96\xf2\x07\x7f\xc5\x9c\xee\xbe\xf3\x81\xbf\x24\x19\x1e\x49\x1e\x9a\x85\x8f\x34\xcb\x1a\x23\xae\x6d\x7f\xa4\xb6\x7b\x60\x5d\x56\x79\x1c\xec\x18\xcc\x09\xdb\xb2\xbb\xf4\x31\xee\x08\x54\x26\xd5\xde\x99\xfa\x43\xa2\x49\x8e\x60\xc0\xaa\x4f\xfd\xf7\xe5\xc8\x89\x43\x5e\x11\xa2\x28\xc4\x92\x11\xda\xba\xe4\x91\xec\x04\xc9\x2c\xbd\x91\x6a\x5e\x7e\xb9\x85\xa2\xfa\x07\xc9\x47\x24\xa4\x3b\x63\xef\x75\x65\xef\xaf\xac\x22\x75\x99\x8b\x19\xde\x95\x76\xc9\xc8\xbc\x30\x23\x48\x07\x28\x19\x1e\x49\x9e\xcb\x99\xc3\x48\xdd\x1d\x0f\x44\x62\x64\x2a\x19\x7b\xeb\xee\xdf\xa1\xa6\xae\x87\x6d\x93\x36\x2d\x35\x8f\xd9\x61\x73\xef\x2d\x39\xb5\xc5\xe2\x75\x4b\x63\x0b\x41\x94\x8c\xbb\x55\xf6\x98\x5f\x9c\x07\xca\xe3\x15\xe4\xe6\x93\xd0\xa3\x9b\x22\xfa\x62\x18\xc5\x63\xfa\x2d\x57\xbb\x29\x2d\x57\x10\xd3\x0c\x05\x80\x15\x27\x4b\xc0\x84\x23\x62\x22\x6b\xae\x39\xa2\x8f\x55\xac\x8e\x08\x34\x46\xcc\x83\xf9\x9d\x2a\x75\x00\x00')
        print()
        print(h)
        print(repr(h))
예제 #2
0
    def test_CAPDU(self):
        a = C_APDU(1, 2, 3, 4)  # case 1
        b = C_APDU(1, 2, 3, 4, 5)  # case 2
        c = C_APDU((1, 2, 3), cla=0x23, data="hallo")  # case 3
        d = C_APDU(1, 2, 3, 4, 2, 4, 6, 0)  # case 4

        print()
        print(a)
        print(b)
        print(c)
        print(d)
        print()
        print(repr(a))
        print(repr(b))
        print(repr(c))
        print(repr(d))

        print()
        for i in a, b, c, d:
            print(hexdump(i.render()))

        # case 2 extended length
        print()
        g = C_APDU(0x00, 0xb0, 0x9c, 0x00, 0x00, 0x00, 0x00)

        print()
        print(g)
        print(repr(g))
        print(hexdump(g.render()))

        h = C_APDU('\x0c\x2a\x00\xbe\x00\x01\x5f\x87\x82\x01\x51\x01\xf0\xa2'
                   '\x21\xa1\x36\x27\xb1\x30\x31\x3e\xd0\x97\x09\xb5\xde\x73'
                   '\x5e\x29\x90\xce\xf1\x3d\x8a\xfd\xe7\x92\xe5\xa4\x70\xb9'
                   '\x5d\x31\xe2\x34\xe7\xe2\x06\x13\x17\x7a\x3e\xca\x06\x39'
                   '\x24\x2e\x75\x8c\x29\x6d\xd8\xa3\x1b\x1a\x68\x58\xd0\x1a'
                   '\x98\xd4\xd8\x19\x50\xe9\x1b\x3c\xd1\xfd\x10\x53\x5b\xf2'
                   '\x3b\xff\x4a\xf6\x05\xd0\x72\xad\xae\xaa\x93\x1a\x0a\x90'
                   '\xc8\xa1\xb1\xf1\x0a\xba\x5b\xd2\x23\x38\xf8\x9a\x38\x9e'
                   '\xa2\x04\x8b\xcb\x8b\x8b\xc0\x80\xd9\x2a\x04\x47\x26\x83'
                   '\xda\xfe\x57\x68\x6b\x00\xb9\xa2\xea\x96\xf2\x07\x7f\xc5'
                   '\x9c\xee\xbe\xf3\x81\xbf\x24\x19\x1e\x49\x1e\x9a\x85\x8f'
                   '\x34\xcb\x1a\x23\xae\x6d\x7f\xa4\xb6\x7b\x60\x5d\x56\x79'
                   '\x1c\xec\x18\xcc\x09\xdb\xb2\xbb\xf4\x31\xee\x08\x54\x26'
                   '\xd5\xde\x99\xfa\x43\xa2\x49\x8e\x60\xc0\xaa\x4f\xfd\xf7'
                   '\xe5\xc8\x89\x43\x5e\x11\xa2\x28\xc4\x92\x11\xda\xba\xe4'
                   '\x91\xec\x04\xc9\x2c\xbd\x91\x6a\x5e\x7e\xb9\x85\xa2\xfa'
                   '\x07\xc9\x47\x24\xa4\x3b\x63\xef\x75\x65\xef\xaf\xac\x22'
                   '\x75\x99\x8b\x19\xde\x95\x76\xc9\xc8\xbc\x30\x23\x48\x07'
                   '\x28\x19\x1e\x49\x9e\xcb\x99\xc3\x48\xdd\x1d\x0f\x44\x62'
                   '\x64\x2a\x19\x7b\xeb\xee\xdf\xa1\xa6\xae\x87\x6d\x93\x36'
                   '\x2d\x35\x8f\xd9\x61\x73\xef\x2d\x39\xb5\xc5\xe2\x75\x4b'
                   '\x63\x0b\x41\x94\x8c\xbb\x55\xf6\x98\x5f\x9c\x07\xca\xe3'
                   '\x15\xe4\xe6\x93\xd0\xa3\x9b\x22\xfa\x62\x18\xc5\x63\xfa'
                   '\x2d\x57\xbb\x29\x2d\x57\x10\xd3\x0c\x05\x80\x15\x27\x4b'
                   '\xc0\x84\x23\x62\x22\x6b\xae\x39\xa2\x8f\x55\xac\x8e\x08'
                   '\x34\x46\xcc\x83\xf9\x9d\x2a\x75\x00\x00')
        print()
        print(h)
        print(repr(h))
예제 #3
0
 def execute(self, msg):
     c = C_APDU(msg)
     if (c.ins == 0xa4 and c.p1 == 0x02):
         # The belpic applet is a bit loose with interpretation of
         # the ISO 7816 standard on the A4 command:
         # - The MF can be selected by name from anywhere with P1 ==
         #   0x02, rather than 0x00 as ISO 7816 requires
         if (c.data == '3F00'.decode('hex')):
             logging.info("Original APDU:\n%s\nRewritten to:\n", str(c))
             c.p1 = 0
             msg = c.render()
         # - Child DFs can be selected with P1 == 0x02, rather than
         #   0x01 as ISO 7816 requires
         if (c.data == 'DF00'.decode('hex')
                 or c.data == 'DF01'.decode('hex')):
             logging.info("Original APDU:\n%s\nRewritten to:\n", str(c))
             c.p1 = 1
             msg = c.render()
     return Iso7816OS.execute(self, msg)