What changed, and why it matters
This commit fixes a build script used only for development/testing versions of the BitBox02 bootloader upgrade. It makes the development-stage1 bootloader images unsigned again, while keeping production images fully signature-verified. The change is a build/development tooling fix, not a security patch for shipped devices.
No immediate action required. Verify that production builds still enforce require_signatures=True and that development builds cannot be mistaken for or substituted into production release pipelines. Review CI/release scripts to ensure development assets are not shipped in production firmware.
Security signals we found
Signature verification relaxed only for development builds
Production payload validation still requires signatures
Development stage0 already skipped stage1 signature verification per commit message
Binary blobs regenerated with updated SHA256 checksums
Evidence from the diff
In scripts/bootloader_update.py, the _update_payload function now passes require_signatures=not development to _validate_complete_stage1. For production builds, signature verification remains mandatory. For development builds, signature verification is skipped so the generated development stage1 payloads can have zeroed signature slots. The regenerated .signed.bin files for development variants now reflect unsigned stage1 outputs. The commit message explicitly states this is to make make bootloader-upgrade-assets-development work again after dummy pubkeys were removed from verification.
Changed components
scripts/bootloader_update.pysrc/bootloader_upgrade/bin/*-development.v1.2.0.signed.bindevelopment bootloader upgrade asset generationInspect captured patch +9 / −6
diff --git a/scripts/bootloader_update.py b/scripts/bootloader_update.py
index ca8202b..4c72f70 100644
--- a/scripts/bootloader_update.py
+++ b/scripts/bootloader_update.py
@@ -254,7 +254,10 @@ def _stage0_expected_flags(development: bool) -> int:
def _update_payload(signed_stage1: bytes, product_id: int, development: bool) -> bytes:
- header = _validate_complete_stage1(signed_stage1, product_id, require_signatures=True)
+ # Development stage0 skips stage1 signature verification; keep signature slots zero.
+ header = _validate_complete_stage1(
+ signed_stage1, product_id, require_signatures=not development
+ )
if header["flags"] != _stage1_expected_flags(development):
raise RuntimeError("unexpected stage1 update payload flags")
if len(signed_stage1) > BOOTLOADER_UPGRADE_PAYLOAD_LEN:
@@ -324,7 +327,7 @@ def main() -> None:
"create-stage1-fw-embedding",
help="create the stage1 update payload consumed by blupgrade firmware",
description=(
- "Validate a signed stage1 image for the requested product and production "
+ "Validate a stage1 image for the requested product and production "
"or development mode, then pad it with erased-flash bytes to the fixed "
"bootloader update slot size. The output is an intermediate binary that "
"CMake converts into a firmware object file to be linked into the upgrader firmware."
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin
index 42fec9c..e2c0b01 100644
Binary files a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin and b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin differ
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin.sha256 b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin.sha256
index 5b9fd12..a7902fc 100644
--- a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin.sha256
+++ b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin.sha256
@@ -1 +1 @@
-d0527dd5acda577db5d10d7bbd99860b1ec4fd0ed75ade9067356ec9446b1510 bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin
+e12efe809ad9a17098979242eb762cf9b682ed4208e44fb21748c2256aa4489b bootloader-stage1-bitbox02-btconly-development.v1.2.0.signed.bin
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin
index ffc6a51..116417a 100644
Binary files a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin and b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin differ
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin.sha256 b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin.sha256
index de0c3e0..bbd77dd 100644
--- a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin.sha256
+++ b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin.sha256
@@ -1 +1 @@
-7bf8a1e86bfab437089d7117d404810a09312d1d12160c8bb43ed5c5e5759018 bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin
+662b663a7fe41550a56fa76defa06f54f40d599e4416082ebab77eae35878279 bootloader-stage1-bitbox02-multi-development.v1.2.0.signed.bin
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin
index 2ecc9bf..8941427 100644
Binary files a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin and b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin differ
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin.sha256 b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin.sha256
index acddf46..ca96c37 100644
--- a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin.sha256
+++ b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin.sha256
@@ -1 +1 @@
-2dd00eca43e2affd1ffc3f22343fc8b422d679c3db4dca2eae7da9e218a7a68f bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin
+348962dbf9c70205abe15f5beb5fee7fecc34b94782106510973a7f26dc1f6d1 bootloader-stage1-bitbox02nova-btconly-development.v1.2.0.signed.bin
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin
index b126ba0..63ac1d1 100644
Binary files a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin and b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin differ
diff --git a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin.sha256 b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin.sha256
index 6f6f11e..dd887bb 100644
--- a/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin.sha256
+++ b/src/bootloader_upgrade/bin/bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin.sha256
@@ -1 +1 @@
-5a77edd7c87ff04e883efb7af4eb64d3b436b6d4f060c31ab9d709af026d363c bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin
+b3568f9b473f3505d1fa925dc026b4b7e222ee971b695793485fb107d0c283cc bootloader-stage1-bitbox02nova-multi-development.v1.2.0.signed.bin
Why this scored 20/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.