CTAP2 firmware
src/
|- main.zig (entry point and callbacks)
|- nrf52/ (nrf52840 specific code)
|- tusb_config.h
|- usb_descriptors.c
To get started install the following dependencies:
Download Zig compiler version 0.12.0 from the official website and install it on your system.
sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib
sudo apt install gcc-arm-none-eabi
brew tap ArmMbed/homebrew-formulae
brew upgrade
brew install arm-none-eabi-gcc
To flash the device you need nrfutil.
Download the file and then move it to a location of your likeing, e.g. sudo cp nrfutil /usr/local/bin
.
After that run the following command:
nrfutil install nrf5sdk-tools
nrfutil install device
After you've installed the required dependencies clone the following repositories into ./libs
.
- tinyusb TODO: update to official repo
Then run ./build
to build the project. This will output a .elf
file.
This project targets the nRF52840 MDK USB Dongle, i.e. the Nordic nRF52840 (ARM Cortex-M4F) chip.
We assume that you're using DFU via Open Bootloader. You can change from UF2 to Open Bootloader (see [here])https://github.com/makerdiary/nrf52840-mdk-usb-dongle/tree/master/firmware/open_bootloader#change-to-open-bootloader-from-uf2-bootloader)).
During tests, using UF2 for flashing lead to a corruption of the bootloader. This is why we use Open Bootloader instead.
Insert the Dongle into your Pc while pressing the button on the device (LED should start blinking red).
Then just run ./flash.sh <device-path>
(e.g. ./flash.sh /dev/tty.usbmodemE04AC0F44B391
(MAC) or ./flash.sh /dev/ttyACM0
) from within the project folder.
If you don't have the permission to write to the device, you can either change its permissions (e.g., sudo chmod 666 /dev/ttyACM0
) or
add a udev rule (e.g., sudo echo 'KERNEL=="ttyACM0", MODE="0666"' > /etc/udev/rules.d/99-usb.rules
, requires reboot!).
To use the tools you need to install libfido2
.
sudo pacman -S libfido2
$ sudo apt install libfido2-1 libfido2-dev libfido2-doc fido2-tools
brew install libfido2
git clone https://github.com/Yubico/libfido2.git
cd libfido2
cmake -B build
make -C build
sudo make -C build install
The cred.sh
script can be used to create a new credential and assert.sh
can be used to verify it.
Both take a number N
that selects the /dev/hidrawN
device. If don't use Linux you might need to alter the script slightly.