{"id":47807149,"url":"https://github.com/librekeys/pico-fido","last_synced_at":"2026-04-03T17:48:02.423Z","repository":{"id":340993012,"uuid":"1146289120","full_name":"librekeys/pico-fido","owner":"librekeys","description":"FIDO Passkey for Raspberry Pico and ESP32","archived":false,"fork":false,"pushed_at":"2026-02-27T14:12:12.000Z","size":1338,"stargazers_count":0,"open_issues_count":2,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-27T17:46:29.906Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/librekeys.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-30T21:48:25.000Z","updated_at":"2026-02-27T14:12:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/librekeys/pico-fido","commit_stats":null,"previous_names":["librekeys/pico-fido"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/librekeys/pico-fido","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/librekeys%2Fpico-fido","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/librekeys%2Fpico-fido/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/librekeys%2Fpico-fido/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/librekeys%2Fpico-fido/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/librekeys","download_url":"https://codeload.github.com/librekeys/pico-fido/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/librekeys%2Fpico-fido/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31366616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:13:05.644Z","status":"ssl_error","status_checked_at":"2026-04-03T17:13:04.413Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-03T17:48:01.649Z","updated_at":"2026-04-03T17:48:02.399Z","avatar_url":"https://github.com/librekeys.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pico FIDO\nThis project transforms your Raspberry Pi Pico or ESP32 microcontroller into an integrated FIDO Passkey, functioning like a standard USB Passkey for authentication.\n\nIf you are looking for a OpenPGP + Fido, see: https://github.com/librekeys/pico-fido2.\n\nThis is a fork of the community edition of the project located at https://github.com/polhenarejos/pico-fido  \nFor licensing information, see the LICENSE file\n\n## Features\nPico FIDO includes the following features:\n\n- CTAP 2.1 / CTAP 1\n- WebAuthn\n- U2F\n- HMAC-Secret extension\n- CredProtect extension\n- User presence enforcement through physical button\n- User verification with PIN\n- Discoverable credentials (resident keys)\n- Credential management\n- ECDSA and EDDSA authentication\n- Support for SECP256R1, SECP384R1, SECP521R1, SECP256K1 and Ed25519 curves\n- App registration and login\n- Device selection\n- Support for vendor configuration\n- Backup with 24 words\n- Secure lock to protect the device from flash dumps\n- Permissions support (MC, GA, CM, ACFG, LBW)\n- Authenticator configuration\n- minPinLength extension\n- Self attestation\n- Enterprise attestation\n- credBlobs extension\n- largeBlobKey extension\n- Large blobs support (2048 bytes max)\n- OATH (based on YKOATH protocol specification)\n- TOTP / HOTP\n- Yubikey One Time Password\n- Challenge-response generation\n- Emulated keyboard interface\n- Button press generates an OTP that is directly typed\n- Yubico Authenticator app compatible\n- Yubico YKMAN compatible\n- Nitrokey nitropy and nitroapp compatible\n- Secure Boot and Secure Lock in RP2350 and ESP32-S3 MCUs\n- One Time Programming to store the master key that encrypts all resident keys and seeds.\n- Rescue interface to allow recovery of the device if it becomes unresponsive or undetectable.\n- LED customization with PicoKey App.\n\nAll features comply with the specifications. If you encounter unexpected behavior or deviations from the specifications, please open an issue.\n\n## Security Considerations\nMicrocontrollers RP2350 and ESP32-S3 are designed to support secure environments when Secure Boot is enabled, and optionally, Secure Lock. These features allow a master key encryption key (MKEK) to be stored in a one-time programmable (OTP) memory region, which is inaccessible from outside secure code. This master key is then used to encrypt all private and secret keys on the device, protecting sensitive data from potential flash memory dumps.\n\n**However**, the RP2040 microcontroller lacks this level of security hardware, meaning that it cannot provide the same protection. Data stored on its flash memory, including private or master keys, can be easily accessed or dumped, as encryption of the master key itself is not feasible. Consequently, if an RP2040 device is stolen, any stored private or secret keys may be exposed.\n\n## Build for Raspberry Pico\nBefore building, ensure you have installed the toolchain for the Pico and that the Pico SDK is properly located on your drive.\n\n```sh\ngit clone https://github.com/librekeys/pico-fido\ngit submodule update --init --recursive\ncd pico-fido\nmkdir build\ncd build\nPICO_SDK_PATH=/path/to/pico-sdk cmake .. -DPICO_BOARD=board_type -DUSB_VID=0x1D50 -DUSB_PID=0x619B\nmake\n```\nNote that `PICO_BOARD`, `USB_VID` and `USB_PID` are optional. If not provided, `pico` board and VID/PID `1D50:619B` will be used.\n\n\nAdditionally, you can pass the `VIDPID=value` parameter to build the firmware with a known VID/PID. The supported values are:\n\n- `NitroHSM`\n- `NitroFIDO2`\n- `NitroStart`\n- `NitroPro`\n- `Nitro3`\n- `Yubikey5`\n- `YubikeyNeo`\n- `YubiHSM`\n- `Gnuk`\n- `GnuPG`\n\nYou can use whatever VID/PID for your own personal use. **But remember that you are not authorized to distribute the binary with a VID/PID that you do not own.**\nThe VID/PID `1D50:619B` is provided to the project by [OpenMoko](https://wiki.openmoko.org/wiki/USB_Product_IDs). It can only be used for builds distributed under a free and open source license.\n\nAfter running `make`, the binary file `pico_fido.uf2` will be generated. To load this onto your Pico board:\n\n1. Put the Pico board into loading mode by holding the `BOOTSEL` button while plugging it in.\n2. Copy the `pico_fido.uf2` file to the new USB mass storage device that appears.\n3. Once the file is copied, the Pico mass storage device will automatically disconnect, and the Pico board will reset with the new firmware.\n4. A blinking LED will indicate that the device is ready to work.\n\nTo configure your device you can use the [picoforge desktop application ](https://github.com/librekeys/picoforge).\n\n## Led blink\nPico FIDO uses the led to indicate the current status. Four states are available:\n### Press to confirm\nThe Led is almost on all the time. It goes off for 100 miliseconds every second.\n\n![Press to confirm](https://user-images.githubusercontent.com/55573252/162008917-6a730eac-396c-44cc-890e-802294be30a3.gif)\n\n### Idle mode\nIn idle mode, the Pico FIDO goes to sleep. It waits for a command and it is awaken by the driver. The Led is almost off all the time. It goes on for 500 milliseconds every second.\n\n![Idle mode](https://user-images.githubusercontent.com/55573252/162008980-d5a5caad-072e-400c-98e3-2c606b4b2af9.gif)\n\n### Active mode\nIn active mode, the Pico FIDO is awaken and ready to receive a command. It blinks four times in a second.\n\n![Active](https://user-images.githubusercontent.com/55573252/162008997-1ea8cd7e-5384-4893-9dcb-b473153fc375.gif)\n\n### Processing\nWhile processing, the Pico FIDO is busy and cannot receive additional commands until the current is processed. In this state, the Led blinks 20 times in a second.\n\n![Processing](https://user-images.githubusercontent.com/55573252/162009007-df45111e-2473-4a92-97c5-15c3cd19babd.gif)\n\n## Driver\n\nPico FIDO uses the `HID` driver, which is present in all operating systems. It should be detected by all OS and browser/applications just like normal USB FIDO keys.\n\n## Tests\n\nTests can be found in the `tests` folder. They are based on [FIDO2 tests](https://github.com/solokeys/fido2-tests \"FIDO2 tests\") from Solokeys but adapted to the [python-fido2](https://github.com/Yubico/python-fido2 \"python-fido2\") v1.0 package, which is a major refactor from the previous 0.8 version and includes the latest improvements from CTAP 2.1.\n\nTo run all tests, use:\n\n```sh\npytest\n```\n\nTo run a subset of tests, use the `-k \u003ctest\u003e` flag:\n\n```sh\npytest -k test_credprotect\n```\n\n## License\n\nThis project is released under the GNU Affero General Public License v3 (AGPLv3).\nA copy of the AGPLv3 license is available in the `LICENSE` file.\n\n## Credits\nThis project uses libraries and portion of code from other projects that are detailed in the `LICENSE` file.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibrekeys%2Fpico-fido","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibrekeys%2Fpico-fido","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibrekeys%2Fpico-fido/lists"}