From fdd767cf9f846f2440407132a260d4ef53d5687d Mon Sep 17 00:00:00 2001 From: Conor Patrick Date: Sat, 26 May 2018 17:27:28 -0400 Subject: [PATCH] start testing program --- ctap_test.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 ctap_test.py diff --git a/ctap_test.py b/ctap_test.py new file mode 100644 index 0000000..935f33b --- /dev/null +++ b/ctap_test.py @@ -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() + +