diff --git a/main.py b/main.py index 5fd8f8f..b5e19d0 100644 --- a/main.py +++ b/main.py @@ -49,6 +49,7 @@ import ctypes from fido2.ctap2 import Ctap2 from fido2 import cbor import nfc +from fido2.nfc import CtapNfcDevice config = configparser.ConfigParser() diff --git a/test.py b/test.py index e07f922..2b17600 100644 --- a/test.py +++ b/test.py @@ -1,26 +1,38 @@ -import nfc -import time +from fido2.pcsc import CtapPcscDevice +from fido2.utils import sha256 +from fido2.ctap1 import Ctap1 +import sys -def connected(tag): - print("Tag detected:", tag) - return True -def read_nfc(): - try: - clf = nfc.ContactlessFrontend('usb') # Ensure this matches your connection - print("NFC reader initialized.") - except Exception as e: - print("Failed to initialize NFC reader:", e) - return +dev = next(CtapPcscDevice.list_devices(), None) +if not dev: + print("No NFC u2f device found") + sys.exit(1) - try: - while True: - print("Waiting for NFC tag...") - clf.connect(rdwr={'on-connect': connected}) - time.sleep(1) - except Exception as e: - print("Error reading NFC tag:", e) - finally: - clf.close() +chal = sha256(b"AAA") +appid = sha256(b"BBB") -read_nfc() +ctap1 = Ctap1(dev) + +print("version:", ctap1.get_version()) + +# True - make extended APDU and send it to key +# ISO 7816-3:2006. page 33, 12.1.3 Decoding conventions for command APDUs +# ISO 7816-3:2006. page 34, 12.2 Command-response pair transmission by T=0 +# False - make group of short (less than 255 bytes length) APDU +# and send them to key. ISO 7816-3:2005, page 9, 5.1.1.1 Command chaining +dev.use_ext_apdu = False + +reg = ctap1.register(chal, appid) +print("register:", reg) + + +reg.verify(appid, chal) +print("Register message verify OK") + + +auth = ctap1.authenticate(chal, appid, reg.key_handle) +print("authenticate result: ", auth) + +res = auth.verify(appid, chal, reg.public_key) +print("Authenticate message verify OK") \ No newline at end of file