start testing program

pull/11/merge
Conor Patrick 2018-05-26 17:27:28 -04:00
rodzic 8120829c2f
commit fdd767cf9f
1 zmienionych plików z 103 dodań i 0 usunięć

103
ctap_test.py 100644
Wyświetl plik

@ -0,0 +1,103 @@
# Script for testing correctness of CTAP2/CTAP1 security token
from __future__ import print_function, absolute_import, unicode_literals
from fido2.hid import CtapHidDevice, CTAPHID
from fido2.client import Fido2Client
from fido2.ctap import CtapError
from fido2.ctap1 import CTAP1
from fido2.ctap2 import *
from fido2.cose import *
from fido2.utils import Timeout
import sys,os
from random import randint
from binascii import hexlify
import array,struct
# Set up a FIDO 2 client using the origin https://example.com
def ForceU2F(client,device):
client.ctap = CTAP1(device)
client.pin_protocol = None
client._do_make_credential = client._ctap1_make_credential
client._do_get_assertion = client._ctap1_get_assertion
class Tester():
def __init__(self,):
self.origin = 'https://examplo.org'
def find_device(self,):
dev = next(CtapHidDevice.list_devices(), None)
if not dev:
raise RuntimeError('No FIDO device found')
self.dev = dev
self.ctap = CTAP2(dev)
def send_data(self, cmd, data):
#print('<<', hexlify(data))
if type(data) != type(b''):
data = data.encode()
with Timeout(1.0) as event:
return self.dev.call(cmd, data,event)
def test_hid(self,):
pingdata = os.urandom(100)
try:
r = self.send_data(CTAPHID.PING, pingdata)
if (r != pingdata):
raise ValueError('Ping data not echo\'d')
except CtapError as e:
print('100 byte Ping failed:', e)
print('PASS: 100 byte ping')
pingdata = os.urandom(7609)
try:
r = self.send_data(CTAPHID.PING, pingdata)
if (r != pingdata):
raise ValueError('Ping data not echo\'d')
except CtapError as e:
print('7609 byte Ping failed:', e)
print('PASS: 7609 byte ping')
try:
r = self.send_data(CTAPHID.WINK, '')
except CtapError as e:
print('wink failed:', e)
print('PASS: wink')
try:
r = self.send_data(CTAPHID.WINK, 'we9gofrei8g')
raise RuntimeError('Wink is not supposed to have payload')
except CtapError as e:
assert(e.code == CtapError.ERR.INVALID_LENGTH)
print('PASS: malformed wink')
try:
r = self.send_data(CTAPHID.CBOR, '')
raise RuntimeError('Cbor is supposed to have payload')
except CtapError as e:
assert(e.code == CtapError.ERR.INVALID_LENGTH)
pass
print('PASS: no data cbor')
try:
r = self.send_data(CTAPHID.MSG, '')
raise RuntimeError('MSG is supposed to have payload')
except CtapError as e:
assert(e.code == CtapError.ERR.INVALID_LENGTH)
pass
print('PASS: no data msg')
if __name__ == '__main__':
t = Tester()
t.find_device()
t.test_hid()