def testMsg(self): fake_hid_dev = util.FakeHidDevice( bytearray([0x00, 0x00, 0x00, 0x01]), bytearray([0x01, 0x90, 0x00])) t = hidtransport.UsbHidTransport(fake_hid_dev) reply = t.SendMsgBytes([0x00, 0x01, 0x00, 0x00]) self.assertEquals(reply, bytearray([0x01, 0x90, 0x00]))
def testFragmentedResponseMsg(self): body = bytearray([x % 256 for x in range(0, 1000)]) fake_hid_dev = util.FakeHidDevice(bytearray([0x00, 0x00, 0x00, 0x01]), body) t = hidtransport.UsbHidTransport(fake_hid_dev) reply = t.SendMsgBytes([0x00, 0x01, 0x00, 0x00]) # Confirm we properly reassemble the message self.assertEquals(reply, bytearray(x % 256 for x in range(0, 1000)))
def testFragmentedApdu(self): dev = util.FakeHidDevice(cid_to_allocate=None, msg_reply=range(85, 0, -1)) dev.Write([0, 0, 0, 1, 0x83, 0, 100] + [x for x in range(57)]) dev.Write([0, 0, 0, 1, 0] + [x for x in range(57, 100)]) self.assertEquals(dev.Read(), [0, 0, 0, 1, 0x83, 0, 85] + [x for x in range(85, 28, -1)]) self.assertEquals(dev.Read(), [0, 0, 0, 1, 0] + [x for x in range(28, 0, -1)] + [0 for _ in range(31)])
def testFragmentedSendApdu(self): body = bytearray(x % 256 for x in range(0, 1000)) fake_hid_dev = util.FakeHidDevice( bytearray([0x00, 0x00, 0x00, 0x01]), [0x90, 0x00]) t = hidtransport.UsbHidTransport(fake_hid_dev) reply = t.SendMsgBytes(body) self.assertEquals(reply, bytearray([0x90, 0x00])) # 1 init packet from creating transport, 18 packets to send # the fragmented message self.assertEquals(len(fake_hid_dev.received_packets), 18)
def testErrorBusy(self): dev = util.FakeHidDevice(cid_to_allocate=None) dev.SetChannelBusyCount(2) dev.Write([0, 0, 0, 1, 0x81, 0, 3, 1, 2, 3]) self.assertEquals(dev.Read(), [0, 0, 0, 1, 0xbf, 0, 1, 6] + [0 for _ in range(56)]) dev.Write([0, 0, 0, 1, 0x81, 0, 3, 1, 2, 3]) self.assertEquals(dev.Read(), [0, 0, 0, 1, 0xbf, 0, 1, 6] + [0 for _ in range(56)]) dev.Write([0, 0, 0, 1, 0x81, 0, 3, 1, 2, 3]) self.assertEquals(dev.Read(), [0, 0, 0, 1, 0x81, 0, 3, 1, 2, 3] + [0 for _ in range(54)])
def testMsgBusy(self): fake_hid_dev = util.FakeHidDevice( bytearray([0x00, 0x00, 0x00, 0x01]), bytearray([0x01, 0x90, 0x00])) t = hidtransport.UsbHidTransport(fake_hid_dev) # Each call will retry twice: the first attempt will fail after 2 retreis, # the second will succeed on the second retry. fake_hid_dev.SetChannelBusyCount(3) with mock.patch.object(hidtransport, 'time') as _: self.assertRaisesRegexp(errors.HidError, '^Device Busy', t.SendMsgBytes, [0x00, 0x01, 0x00, 0x00]) reply = t.SendMsgBytes([0x00, 0x01, 0x00, 0x00]) self.assertEquals(reply, bytearray([0x01, 0x90, 0x00]))
def testPing(self): fake_hid_dev = util.FakeHidDevice(bytearray([0x00, 0x00, 0x00, 0x01])) t = hidtransport.UsbHidTransport(fake_hid_dev) reply = t.SendPing('1234') self.assertEquals(reply, '1234')
def testInit(self): fake_hid_dev = util.FakeHidDevice(bytearray([0x00, 0x00, 0x00, 0x01])) t = hidtransport.UsbHidTransport(fake_hid_dev) self.assertEquals(t.cid, bytearray([0x00, 0x00, 0x00, 0x01])) self.assertEquals(t.u2fhid_version, 0x01)
def testSimplePing(self): dev = util.FakeHidDevice(cid_to_allocate=None) dev.Write([0, 0, 0, 1, 0x81, 0, 3, 1, 2, 3]) self.assertEquals(dev.Read(), [0, 0, 0, 1, 0x81, 0, 3, 1, 2, 3] + [0 for _ in range(54)])