mirror of
https://github.com/CovidBraceletPrj/CovidBracelet.git
synced 2025-04-18 07:57:36 +02:00
100 lines
3.9 KiB
Markdown
100 lines
3.9 KiB
Markdown
# Covid Bracelet, compatibile with Covid Apps on iOS and Android [](https://github.com/CovidBraceletPrj/CovidBracelet/actions) [](https://github.com/CovidBraceletPrj/CovidBracelet/actions)
|
|
|
|
|
|
**Contributions Welcome!**
|
|
|
|
|
|
|
|
## Features
|
|
* Sends and receives exposure beacons as specified by Google and Apple for Covid Contact Tracing
|
|
* Rolling, encrypted, anonymous beacons
|
|
* Compatible with Apple iOS and Android phones
|
|
* With rolling proximity identifiers and encrypted metadata
|
|
* Proximity identifiers and BLE addresses change every 10 minutes
|
|
* Stores own keys for 14 days
|
|
* Stores contacts of more than 5 minute duration
|
|
* Upon infection upload keys to a public database
|
|
* Retrieve keys of infections from database
|
|
* computes rolling proximity identifiers
|
|
* compares to stored contacts to check for exposure
|
|
|
|
Builds on on Zephyr OS and NRF52 BLE SOCs. Note: as we for now do not use the flash for key storage, this currently only works on nrf52480 or you can just store a very small number of keys. Moving the keys to flash is on the TODO list and will fix this.
|
|
|
|
## Get Started:
|
|
This project is based on platformIO, see: [https://platformio.org/platformio-ide](https://platformio.org/platformio-ide)
|
|
|
|
## Testing
|
|
To run the tests for the desktop environment select the test task for desktop or run:
|
|
```
|
|
platformio test -e desktop
|
|
```
|
|
|
|
**Note: this is a proof of concept and not ready for production**
|
|
|
|
## Demo Video
|
|
|
|
[](https://youtu.be/tYGsFJC3LtE)
|
|
|
|
## Open / Possible next steps
|
|
* firmware of the air updates (signed): done in testing
|
|
* fix entropy: keys are always the same on boot up
|
|
* time sync
|
|
* set device name, user id or so in Flash
|
|
* set scanning interval to the correct value, for now we just use the default
|
|
* set advertisement interval, correct value, for now we just use the default: should be 200-270 milliseconds
|
|
* store long-term contacts in flash
|
|
* set transmit power and store this in the corona beacons
|
|
* get infections from DB, check their signatures
|
|
* extensive logging: crash, reboot, battery level, charging state, contacts, memory useage, flash usage,
|
|
* extensive compatibility testing with Apple iOS and Android devices
|
|
* contininous integration testing
|
|
* Energy efficiency
|
|
* BLE advertisements sets
|
|
* Secure GATT services and authentication of base statation in general
|
|
* More platforms: with display etc.
|
|
|
|
## TODOs Wristband
|
|
Possible platforms for real-world deployment many, as many of the cheap fitness trackers base on NRF52 or chips with similar capabilities.
|
|
However, many would need the firmware to be shipped to manufactures.
|
|
* Watch UI
|
|
* Pine Time could be good for testing
|
|
|
|
## TODOs App and Basestation
|
|
* extend this beyond the simple basestation
|
|
* read keys form national databases
|
|
|
|
|
|
|
|
|
|
## Updates Over the Air
|
|
|
|
### Compiling the Bootloader
|
|
The bootloader is responsible to manage the application images.
|
|
|
|
Make sure that you have installed the correct toolchain
|
|
|
|
export GNUARMEMB_TOOLCHAIN_PATH="~/Applications/ARM"
|
|
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
|
|
You might need to install missing python modules
|
|
|
|
1. Install west "python3 -m pip install west"
|
|
2. Create temporary directory "mkdir boot && cd boot"
|
|
3. Init west "west init --mr v2.3.0"
|
|
4. Update west "west update"
|
|
5. Update ./bootloader/mcuboot/boot/zephyr/keys.c and update it with custom keys (required for production usage)
|
|
5. Build the bootloader "west build -d build -b nrf52840dk_nrf52840 -s ./bootloader/mcuboot/boot/zephyr" (if you encounter errors, remove the build directory before retrying)
|
|
|
|
|
|
### Install packages for signing
|
|
|
|
```
|
|
~/.platformio/penv/bin/python3 -m pip install cryptography cbor intelhex
|
|
```
|
|
|
|
|
|
TODO:
|
|
|
|
Check arguments for imgtool signing
|
|
* slot size
|
|
* alignment
|
|
* header size |