Context
This issue should coordinate the different acitivities for a new release. The v1.9.0 release is now 20 month old. So let's do a v1.10.0.
It's a bit special as want to change release-keys and therefore the new release's upgrade binary needs to contain the bootloader inclusing the (new) keys.
Steps
# something like
docker run --platform linux/amd64 -ti -v $(pwd):/app -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) stepansnigirev/diy-firmware ./build_firmware.sh main bootloader assemble
docker run --rm -it -v $(pwd):/specter-diy -w /specter-diy stepansnigirev/diy-firmware python3 ./bootloader/tools/upgrade-generator.py import-sig -s "sigHere=" ./release/specter_upgrade.bin
Details
(.env) ➜ specter-diy_old git:(master) ✗ bootloader/tools/.env/bin/python3.9 bootloader/tools/introspect-binary.py release/specter_upgrade.bin
📋 Loaded keys from: /home/kim/src/specter-diy_old/bootloader/tools/../keys/production/pubkeys.c
Vendor keys: 4
Maintainer keys: 4
📦 Upgrade file analysis:
Payload sections: 2
Type: Bootloader
Required signatures: 2
Message hash: b1.0.1-1.10.0-1984mrfplq705g8qw85sguw728cves4vl9hmhfefwwywnh86ajglqyvc7dc
🔐 Signature analysis:
Found 2 signature(s)
🔐 Signature verification:
✅ maintainer (Backup_m/99h): 7c5de6a71d2abae563945e05d767626a
✅ maintainer (Stepan): 33793141d1557bc6b4249e0be8ef6b46
✅ Threshold verification:
Valid signatures: 2/2
Signed by: Backup_m/99h(maintainer), Stepan(maintainer)
Result: Upgrade file is valid and can be installed
🔑 Public key analysis:
Searching for embedded keys in payload sections...
Found 4 embedded public key(s):
✅ k9ert (maintainer/vendor): c8638d869d056ce1b18677e2b0bfaa60
✅ Mike (maintainer/vendor): cf0239e7708148c0fe2bc1ff485d950e
✅ Stepan (maintainer/vendor): 33793141d1557bc6b4249e0be8ef6b46
✅ Backup_m/99h (maintainer/vendor): 7c5de6a71d2abae563945e05d767626a
✅ Key verification:
Result: Upgrade contains the public keys needed for future upgrade verification
(.env) ➜ specter-diy_old git:(master) ✗
docker run --rm -it -v $(pwd):/specter-diy -w /specter-diy stepansnigirev/diy-firmware python3 ./bootloader/tools/upgrade-generator.py import-sig -s "Iw60/b3N60Ng9rsWmSmF4Cz1XHsHK4s/s4sUob4eJlSMGVumrWhr7ZNcvPLpfCvox+J3guMRr4j99KjC+1z3og0=" ./release/specter_upgrade.bin
docker run --rm -it -v $(pwd):/specter-diy -w /specter-diy stepansnigirev/diy-firmware python3 ./bootloader/tools/upgrade-generator.py import-sig -s "H9kO/gE5gQJ36FiXaIOIzgXARlMtUDc1JALRgKA6HYpdba8U2D36J7ToS3ZVe2mlL5qBHFFbJ5Rv8RAN8YQRAXM=" ./release/specter_upgrade.bin
Details
(.env) ➜ specter-diy_old git:(master) ✗ bootloader/tools/.env/bin/python3.9 bootloader/tools/introspect-binary.py release/specter_upgrade.bin
📋 Loaded keys from: /home/kim/src/specter-diy_old/bootloader/tools/../keys/production/pubkeys.c
Vendor keys: 4
Maintainer keys: 4
📦 Upgrade file analysis:
Payload sections: 2
Type: Bootloader
Required signatures: 2
Message hash: b1.0.1-1.10.1-19j32lx39tm4l5h06nwz5q5jhhuqv0j3e24g96rcglk499uh8fafszmerfd
🔐 Signature analysis:
Found 2 signature(s)
🔐 Signature verification:
✅ maintainer (Mike): cf0239e7708148c0fe2bc1ff485d950e
✅ maintainer (k9ert): c8638d869d056ce1b18677e2b0bfaa60
✅ Threshold verification:
Valid signatures: 2/2
Signed by: Mike(maintainer), k9ert(maintainer)
Result: Upgrade file is valid and can be installed
🔑 Public key analysis:
Searching for embedded keys in payload sections...
Found 4 embedded public key(s):
✅ k9ert (maintainer/vendor): c8638d869d056ce1b18677e2b0bfaa60
✅ Mike (maintainer/vendor): cf0239e7708148c0fe2bc1ff485d950e
✅ Stepan (maintainer/vendor): 33793141d1557bc6b4249e0be8ef6b46
✅ Backup_m/99h (maintainer/vendor): 7c5de6a71d2abae563945e05d767626a
✅ Key verification:
Result: Upgrade contains the public keys needed for future upgrade verification
- [x] zip and [upload](https://github.com/
/issues/330#issuecomment-4099615783) `zip v1.10.1_signed.zip release release/*`
- [ ] Test the release upgrade (
@Schnuartz )
- [ ] Create release-changelog for v1.10.0 ([here](https://github.com/
/issues/330#issuecomment-4099840826))
- [ ] Review changelog
- [ ] Create release page in github, upload binaries, hashes and signatures
Planned Release notes (for `v1.10.0`):
Release notes
Important: This release includes a bootloader update with new signing keys. The upgrade binary contains the updated bootloader, which will be applied automatically during the upgrade process.
Upgrade process
Copy specter_upgrade_v1.10.0.bin to the SD card and insert it into the device. The bootloader will check the signatures of the upgrade file and update the firmware.
Flashing on empty board
If your discovery board is empty or you have a very old firmware (below 1.4.0) - connect your board over miniUSB with power jumper set to STLK and copy-paste initial_firmware_v1.10.0.bin file to the mounted drive.
If you have problems flashing initial firmware consider using stlink-tools. A command to flash firmware:
st-flash write path/to/initial_firmware.bin 0x8000000
If you want to use self-signed bootloader and firmware check out the instructions in the bootloader repo
sha256.signed.txt file contains sha256 hashes of the firmware binary files and signed with the "Specter Signer 2026" GPG key.
You can get the public key from here.
Fingerprint of the key is 9DC3 3CA8 3058 9DE3 B322 5C26 EEF5 756B 2EA4 2349
Reproducible build
You can build binaries identical to the ones in this release yourself. Follow this instruction, when the build is almost complete the script will output a message for signing and ask you for the signatures.
Verify that upgrade message is:
b1.0.1-1.10.0-1984mrfplq705g8qw85sguw728cves4vl9hmhfefwwywnh86ajglqyvc7dc
Add first signature:
ID2rAxeSFrfCmPcHt57XCMHZSFyp2fB+52vix8iAqDooLwd1sBRMW1j59AGqamgsTQ0CUj5eZ3ky0XpY/+rXlkY=
Add second signature:
H9mlVmjGnyRddlfbD8CMwQpq7D0m/9OWSd44q5J6OcHVcMj9OoALFSsdgXnvb0GL7PlwLBUoePC06ExLhSvcpnw=
Then hit enter and check that sha256.txt has the same hashes as in sha256.signed.txt file.
Context
This issue should coordinate the different acitivities for a new release. The
v1.9.0release is now 20 month old. So let's do av1.10.0.It's a bit special as want to change release-keys and therefore the new release's upgrade binary needs to contain the bootloader inclusing the (new) keys.
Steps
Modify boot/main/boot.pyrelease: prepare release #340Details
b1.0.1-1.10.1-19j32lx39tm4l5h06nwz5q5jhhuqv0j3e24g96rcglk499uh8fafszmerfdIw60/b3N60Ng9rsWmSmF4Cz1XHsHK4s/s4sUob4eJlSMGVumrWhr7ZNcvPLpfCvox+J3guMRr4j99KjC+1z3og0=H9kO/gE5gQJ36FiXaIOIzgXARlMtUDc1JALRgKA6HYpdba8U2D36J7ToS3ZVe2mlL5qBHFFbJ5Rv8RAN8YQRAXM=Details
Planned Release notes (for `v1.10.0`):
Release notes
Important: This release includes a bootloader update with new signing keys. The upgrade binary contains the updated bootloader, which will be applied automatically during the upgrade process.
Upgrade process
Copy
specter_upgrade_v1.10.0.binto the SD card and insert it into the device. The bootloader will check the signatures of the upgrade file and update the firmware.Flashing on empty board
If your discovery board is empty or you have a very old firmware (below 1.4.0) - connect your board over miniUSB with power jumper set to
STLKand copy-pasteinitial_firmware_v1.10.0.binfile to the mounted drive.If you have problems flashing initial firmware consider using stlink-tools. A command to flash firmware:
If you want to use self-signed bootloader and firmware check out the instructions in the bootloader repo
sha256.signed.txt file contains sha256 hashes of the firmware binary files and signed with the "Specter Signer 2026" GPG key.
You can get the public key from here.
Fingerprint of the key is
9DC3 3CA8 3058 9DE3 B322 5C26 EEF5 756B 2EA4 2349Reproducible build
You can build binaries identical to the ones in this release yourself. Follow this instruction, when the build is almost complete the script will output a message for signing and ask you for the signatures.
Verify that upgrade message is:
Add first signature:
Add second signature:
Then hit enter and check that
sha256.txthas the same hashes as insha256.signed.txtfile.