BitBoxSwiss / bitbox02-firmware

Firmware code of the BitBox02 hardware wallet
https://bitbox.swiss/bitbox02
Apache License 2.0
215 stars 80 forks source link

CI

The BitBox02 is a hardware wallet that simplifies secure handling of crypto coins through storing private keys and signing transactions. The content of this repository is the bootloader and firmware used on the device. The BitBox02 is meant to be used primarily with the BitBoxApp, although third party integration is possible through the BitBox02 API.

The main functionality of the firmware is the following:

Architecture

The main chip on the device is the microcontroller from Microchip (ATSAMD51J20A). This chip is used for communication to the BitBoxApp via USB, to the user via the sliders and to the secure element (ATECC608B) via I2C.

Sliders

The sliders along the edges of the device are used for user input. There are three input gestures:

USB

The USB communication is implemented using the request-response pattern with encrypted protobuf messages. The encryption protocol used is Noise with out-of-band authentication.

Hardware docs

PCB schematics v2.1

PCB bill of materials (BOM) v2.1

PCB x-ray v2.1

Contributing

The instructions for setting up a development environment can be found in BUILD.md. Please also read our CONTRIBUTING.md before filing issues and pull requests.

Installing/upgrading firmware

There are two main ways to install or upgrade firmware on a BitBox02:

  1. by running the BitBoxApp
  2. by running ./py/load_firmware.py after installing the bitbox02 Python package, e.g. ./py/load_firmware.py firmware-btc.v9.12.0.signed.bin.

Reporting a vulnerability

See our security policy.