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
Kern is strongly inspired by Krux, sharing similar but simplified UI elements and flow.
Blockstream Jade was a strong inspiration for the decision to use C language for efficient use of the hardware. Additionally, Kern's core library, libwally, is shared with Jade.
The simplicity and UI polish of SeedSigner and the security focus of the pioneering Specter-DIY were also strong inspirations.
-
✅ 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