Kern is an experimental project that explores the capabilities of the ESP32-P4 as a platform to perform air-gapped Bitcoin signatures and cryptography.
Early development uses the Waveshare ESP32-P4-WiFi6-Touch-LCD-4B.
ESP32-P4 does not contain radio (WiFi, BLE), but this board has a radio in a secondary chip (ESP32-C6 mini). Later the project will migrate to use radio-less, simpler and cheaper boards with ESP32-P4 only.
An OV5647 camera module is also required.
This project uses git submodules. You have two options:
When cloning the project for the first time, make sure to clone it recursively to include all submodules:
git clone --recursive https://github.com/odudex/Kern.gitIf you've already cloned the repository without the --recursive flag, you can initialize and update the submodules with:
git submodule update --init --recursiveBuild the project from the root directory with:
idf.py buildor flash the project to the device with:
idf.py flashand if you are debugging you may want to run monitor too:
idf.py monitorIf you have just installed, you can use the provided .justfile:
just build # Build the project
just flash # Flash to device
just clean # Clean build artifactsTo enable camera auto-focus, enable camera focus motor on menuconfig:
CONFIG_CAM_MOTOR_DW9714=y
CONFIG_CAMERA_OV5647_ENABLE_MOTOR_BY_GPIO0=y
-
✅ Basic UI
-
✅ Camera video pipeline
-
✅ Static QR codes
- ✅ Scan
- ✅ Display
-
Animated QR Codes
- Scan, parse and export
- ✅ UR
- ✅ pMofN
- ❌ BBQr
- Scan, parse and export
-
New Mnemonic
- ✅ From dice rolls
- ❌ From camera
-
Load Mnemonic
- ✅ From manual input (typing words)
- From QR codes
- ✅ Plain
- ✅ SeedQR
- ✅ Compact SeedQR
- ❌ Encrypted
-
Back up
- ✅ Words
- ❌ QR codes
- ❌ Encrypted
-
✅ Passphrases
-
Networks
- ✅ Mainnet
- ✅ Testnet
-
Policy types
- ✅ Single-sig
- ❌ Multisig
- ❌ Miniscript
-
Descriptors
- ❌ Loading
- ❌ Exporting, saving
- ❌ Encrypting/Decrypting
-
Script type
- ✅ Native Segwit
- ❌ Nested Segwit
- ❌ Taproot
-
❌ OTP based secure boot
-
❌ KEF encryption