re-enable some usbhid tests

This commit is contained in:
Conor Patrick 2018-10-25 21:55:09 -04:00
parent bdf2a47e72
commit 26920551b2

View File

@ -61,6 +61,7 @@ class Tester():
self.origin = 'https://examplo.org'
def find_device(self,):
print (list(CtapHidDevice.list_devices()))
dev = next(CtapHidDevice.list_devices(), None)
if not dev:
raise RuntimeError('No FIDO device found')
@ -118,34 +119,34 @@ class Tester():
def test_long_ping(self):
amt = 1000
while 1 :
pingdata = os.urandom(amt)
pingdata = os.urandom(amt)
try:
t1 = time.time() * 1000
r = self.send_data(CTAPHID.PING, pingdata)
t2 = time.time() * 1000
delt = t2 - t1
#if (delt < 140 ):
#raise RuntimeError('Fob is too fast (%d ms)' % delt)
if (delt > 555 * (amt/1000)):
raise RuntimeError('Fob is too slow (%d ms)' % delt)
if (r != pingdata):
raise ValueError('Ping data not echo\'d')
print('1000 byte ping time: %s ms' % delt)
except CtapError as e:
print('7609 byte Ping failed:', e)
raise RuntimeError('ping failed')
print('PASS: 7609 byte ping')
#sys.flush(sys.sto)
sys.stdout.flush()
def test_hid(self,check_timeouts = False):
if check_timeouts:
print('Test idle')
try:
t1 = time.time() * 1000
r = self.send_data(CTAPHID.PING, pingdata)
t2 = time.time() * 1000
delt = t2 - t1
#if (delt < 140 ):
#raise RuntimeError('Fob is too fast (%d ms)' % delt)
if (delt > 555 * (amt/1000)):
raise RuntimeError('Fob is too slow (%d ms)' % delt)
if (r != pingdata):
raise ValueError('Ping data not echo\'d')
print('1000 byte ping time: %s ms' % delt)
except CtapError as e:
print('7609 byte Ping failed:', e)
raise RuntimeError('ping failed')
print('PASS: 7609 byte ping')
#sys.flush(sys.sto)
sys.stdout.flush()
def test_hid(self,):
#print('Test idle')
#try:
#cmd,resp = self.recv_raw()
#except socket.timeout:
#print('Pass: Idle')
cmd,resp = self.recv_raw()
except socket.timeout:
print('Pass: Idle')
print('Test init')
r = self.send_data(CTAPHID.INIT, '\x11\x11\x11\x11\x11\x11\x11\x11')
@ -216,18 +217,19 @@ class Tester():
self.check_error(resp, CtapError.ERR.INVALID_LENGTH)
print('PASS: invalid length')
#r = self.send_data(CTAPHID.PING, '\x44'*200)
#print('Sending packets that skip a sequence number.')
#self.send_raw('\x81\x04\x90')
#self.send_raw('\x00')
#self.send_raw('\x01')
## skip 2
#self.send_raw('\x03')
#cmd,resp = self.recv_raw()
#self.check_error(resp, CtapError.ERR.INVALID_SEQ)
#cmd,resp = self.recv_raw()
#assert(cmd == 0xbf) # timeout
#print('PASS: invalid sequence')
r = self.send_data(CTAPHID.PING, '\x44'*200)
print('Sending packets that skip a sequence number.')
self.send_raw('\x81\x04\x90')
self.send_raw('\x00')
self.send_raw('\x01')
# skip 2
self.send_raw('\x03')
cmd,resp = self.recv_raw()
self.check_error(resp, CtapError.ERR.INVALID_SEQ)
if check_timeouts:
cmd,resp = self.recv_raw()
assert(cmd == 0xbf) # timeout
print('PASS: invalid sequence')
print('Resync and send ping')
try:
@ -262,13 +264,13 @@ class Tester():
cmd,r = self.recv_raw() # init response
assert(cmd == 0x86)
self.set_cid(oldcid)
#print('wait for timeout')
#cmd,r = self.recv_raw() # timeout response
#assert(cmd == 0xbf)
if check_timeouts:
#print('wait for timeout')
cmd,r = self.recv_raw() # timeout response
assert(cmd == 0xbf)
print('PASS: resync and timeout')
print('Test timeout')
self.send_data(CTAPHID.INIT, '\x11\x22\x33\x44\x55\x66\x77\x88')
t1 = time.time() * 1000
@ -294,14 +296,15 @@ class Tester():
assert(r[0] == CtapError.ERR.INVALID_SEQ)
print('PASS: Test not cont')
print('Check random cont ignored')
#self.send_data(CTAPHID.INIT, '\x11\x22\x33\x44\x55\x66\x77\x88')
#self.send_raw('\x01\x10\x00')
#try:
#cmd,r = self.recv_raw() # timeout response
#except socket.timeout:
#pass
print('PASS: random cont')
if check_timeouts:
print('Check random cont ignored')
self.send_data(CTAPHID.INIT, '\x11\x22\x33\x44\x55\x66\x77\x88')
self.send_raw('\x01\x10\x00')
try:
cmd,r = self.recv_raw() # timeout response
except socket.timeout:
pass
print('PASS: random cont')
print('Check busy')
t1 = time.time() * 1000
@ -336,11 +339,13 @@ class Tester():
self.send_raw('\x81\x00\x63')
self.send_raw('\x00')
cmd,r = self.recv_raw() # busy response
self.set_cid(cid1) # finish 1st channel ping
self.send_raw('\x00')
self.set_cid(cid2)
cmd,r = self.recv_raw() # busy response
assert(cmd == 0xbf)
assert(r[0] == CtapError.ERR.CHANNEL_BUSY)
@ -349,18 +354,19 @@ class Tester():
assert(cmd == 0x81)
assert(len(r) == 0x63)
#cmd,r = self.recv_raw() # timeout
#assert(cmd == 0xbf)
#assert(r[0] == CtapError.ERR.TIMEOUT)
if check_timeouts:
cmd,r = self.recv_raw() # timeout
assert(cmd == 0xbf)
assert(r[0] == CtapError.ERR.TIMEOUT)
print('PASS: busy interleaved')
print('Test idle, wait for timeout')
sys.stdout.flush()
try:
cmd,resp = self.recv_raw()
except socket.timeout:
print('Pass: Idle')
if check_timeouts:
print('Test idle, wait for timeout')
sys.stdout.flush()
try:
cmd,resp = self.recv_raw()
except socket.timeout:
print('Pass: Idle')
print('Test cid 0 is invalid')
self.set_cid('\x00\x00\x00\x00')
@ -593,12 +599,9 @@ def test_find_brute_force():
if __name__ == '__main__':
t = Tester()
t.find_device()
#t.test_hid()
#t.test_long_ping()
# t.test_hid()
# t.test_long_ping()
t.test_fido2()
#test_find_brute_force()
#t.test_fido2_simple()
t.test_fido2_brute_force()
#t.test_fido2_brute_force()