Compare commits
4 Commits
hybrid-pqc
...
ctap2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e5e2a665f | ||
|
|
5e682d9e17 | ||
|
|
748b7e7fb8 | ||
|
|
b0c1b73897 |
19
README.md
19
README.md
@@ -24,15 +24,16 @@ few limitations:
|
|||||||
|
|
||||||
### FIDO2
|
### FIDO2
|
||||||
|
|
||||||
Although we tested and implemented our firmware based on the published
|
The stable branch implements the published
|
||||||
[CTAP2.0 specifications](https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html),
|
[CTAP2.0 specifications](https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html)
|
||||||
our implementation was not reviewed nor officially tested and doesn't claim to
|
and is FIDO certified.
|
||||||
be FIDO Certified.
|
|
||||||
We started adding features of the upcoming next version of the
|
<img alt="FIDO2 certified L1" src="docs/img/FIDO2_Certified_L1.png" width="200px">
|
||||||
[CTAP2.1 specifications](https://fidoalliance.org/specs/fido2/fido-client-to-authenticator-protocol-v2.1-rd-20191217.html).
|
|
||||||
The development is currently between 2.0 and 2.1, with updates hidden behind
|
It already contains some preview features of 2.1, that you can try by adding the
|
||||||
a feature flag.
|
flag `--ctap2.1` to the deploy command. The full
|
||||||
Please add the flag `--ctap2.1` to the deploy command to include them.
|
[CTAP2.1 specification](https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html)
|
||||||
|
is work in progress in the develop branch and is tested less thoroughly.
|
||||||
|
|
||||||
### Cryptography
|
### Cryptography
|
||||||
|
|
||||||
|
|||||||
@@ -243,6 +243,8 @@ class RemoveConstAction(argparse.Action):
|
|||||||
# https://github.com/python/cpython/blob/master/Lib/argparse.py#L138-L147
|
# https://github.com/python/cpython/blob/master/Lib/argparse.py#L138-L147
|
||||||
# https://github.com/python/cpython/blob/master/Lib/argparse.py#L1028-L1052
|
# https://github.com/python/cpython/blob/master/Lib/argparse.py#L1028-L1052
|
||||||
items = getattr(namespace, self.dest, [])
|
items = getattr(namespace, self.dest, [])
|
||||||
|
if items is None:
|
||||||
|
items = []
|
||||||
if isinstance(items, list):
|
if isinstance(items, list):
|
||||||
items = items[:]
|
items = items[:]
|
||||||
else:
|
else:
|
||||||
@@ -916,6 +918,8 @@ if __name__ == "__main__":
|
|||||||
help=("When set, the output of elf2tab is appended to this file."),
|
help=("When set, the output of elf2tab is appended to this file."),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
main_parser.set_defaults(features=["with_ctap1"])
|
||||||
|
|
||||||
# Start parsing to know if we're going to list things or not.
|
# Start parsing to know if we're going to list things or not.
|
||||||
partial_args, _ = main_parser.parse_known_args()
|
partial_args, _ = main_parser.parse_known_args()
|
||||||
|
|
||||||
@@ -977,6 +981,4 @@ if __name__ == "__main__":
|
|||||||
help=("Compiles and installs the nfct_test example that tests the "
|
help=("Compiles and installs the nfct_test example that tests the "
|
||||||
"NFC driver."))
|
"NFC driver."))
|
||||||
|
|
||||||
main_parser.set_defaults(features=["with_ctap1"])
|
|
||||||
|
|
||||||
main(main_parser.parse_args())
|
main(main_parser.parse_args())
|
||||||
|
|||||||
BIN
docs/FIDO2 Certificate Google FIDO20020210209001.pdf
Normal file
BIN
docs/FIDO2 Certificate Google FIDO20020210209001.pdf
Normal file
Binary file not shown.
BIN
docs/img/FIDO2_Certified_L1.png
Normal file
BIN
docs/img/FIDO2_Certified_L1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
@@ -17,6 +17,7 @@ You will need one the following supported boards:
|
|||||||
* [Nordic nRF52840 Dongle](https://www.nordicsemi.com/Software-and-tools/Development-Kits/nRF52840-Dongle)
|
* [Nordic nRF52840 Dongle](https://www.nordicsemi.com/Software-and-tools/Development-Kits/nRF52840-Dongle)
|
||||||
to have a more practical form factor.
|
to have a more practical form factor.
|
||||||
* [Makerdiary nRF52840-MDK USB dongle](https://wiki.makerdiary.com/nrf52840-mdk/).
|
* [Makerdiary nRF52840-MDK USB dongle](https://wiki.makerdiary.com/nrf52840-mdk/).
|
||||||
|
* [Feitian OpenSK dongle](https://feitiantech.github.io/OpenSK_USB/).
|
||||||
|
|
||||||
In the case of the Nordic USB dongle, you may also need the following extra
|
In the case of the Nordic USB dongle, you may also need the following extra
|
||||||
hardware:
|
hardware:
|
||||||
|
|||||||
2
setup.sh
2
setup.sh
@@ -46,4 +46,4 @@ mkdir -p elf2tab
|
|||||||
cargo install elf2tab --version 0.6.0 --root elf2tab/
|
cargo install elf2tab --version 0.6.0 --root elf2tab/
|
||||||
|
|
||||||
# Install python dependencies to factory configure OpenSK (crypto, JTAG lockdown)
|
# Install python dependencies to factory configure OpenSK (crypto, JTAG lockdown)
|
||||||
pip3 install --user --upgrade colorama tqdm cryptography fido2
|
pip3 install --user --upgrade colorama tqdm cryptography "fido2>=0.9.1"
|
||||||
|
|||||||
@@ -64,8 +64,7 @@ def info(msg):
|
|||||||
def get_opensk_devices(batch_mode):
|
def get_opensk_devices(batch_mode):
|
||||||
devices = []
|
devices = []
|
||||||
for dev in hid.CtapHidDevice.list_devices():
|
for dev in hid.CtapHidDevice.list_devices():
|
||||||
if (dev.descriptor["vendor_id"],
|
if (dev.descriptor.vid, dev.descriptor.pid) == OPENSK_VID_PID:
|
||||||
dev.descriptor["product_id"]) == OPENSK_VID_PID:
|
|
||||||
if dev.capabilities & hid.CAPABILITY.CBOR:
|
if dev.capabilities & hid.CAPABILITY.CBOR:
|
||||||
if batch_mode:
|
if batch_mode:
|
||||||
devices.append(ctap2.CTAP2(dev))
|
devices.append(ctap2.CTAP2(dev))
|
||||||
@@ -108,7 +107,7 @@ def main(args):
|
|||||||
|
|
||||||
cert = x509.load_pem_x509_certificate(args.certificate.read())
|
cert = x509.load_pem_x509_certificate(args.certificate.read())
|
||||||
# Some sanity/validity checks
|
# Some sanity/validity checks
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.utcnow()
|
||||||
if cert.not_valid_before > now:
|
if cert.not_valid_before > now:
|
||||||
fatal("Certificate validity starts in the future.")
|
fatal("Certificate validity starts in the future.")
|
||||||
if cert.not_valid_after <= now:
|
if cert.not_valid_after <= now:
|
||||||
@@ -138,10 +137,9 @@ def main(args):
|
|||||||
if authenticator.device.capabilities & hid.CAPABILITY.WINK:
|
if authenticator.device.capabilities & hid.CAPABILITY.WINK:
|
||||||
authenticator.device.wink()
|
authenticator.device.wink()
|
||||||
aaguid = uuid.UUID(bytes=authenticator.get_info().aaguid)
|
aaguid = uuid.UUID(bytes=authenticator.get_info().aaguid)
|
||||||
info(("Programming device {} AAGUID {} ({}). "
|
info("Programming OpenSK device AAGUID {} ({}).".format(
|
||||||
"Please touch the device to confirm...").format(
|
aaguid, authenticator.device))
|
||||||
authenticator.device.descriptor.get("product_string", "Unknown"),
|
info("Please touch the device to confirm...")
|
||||||
aaguid, authenticator.device))
|
|
||||||
try:
|
try:
|
||||||
result = authenticator.send_cbor(
|
result = authenticator.send_cbor(
|
||||||
OPENSK_VENDOR_CONFIGURE,
|
OPENSK_VENDOR_CONFIGURE,
|
||||||
|
|||||||
Reference in New Issue
Block a user