Skip to content

firmware: L2 CRC retry, libtropic v4.1.0, SE firmware 2.1.0 - #22

Merged
0xEthamin merged 1 commit into
mainfrom
feat/l2-crc-retry
Aug 20, 2026
Merged

firmware: L2 CRC retry, libtropic v4.1.0, SE firmware 2.1.0#22
0xEthamin merged 1 commit into
mainfrom
feat/l2-crc-retry

Conversation

@0xEthamin

Copy link
Copy Markdown
Member

Three related changes, all triggered by the libtropic 4.1.0 release.

L2 CRC RETRY. Close a parity gap dating from libtropic 4.0.0, where the driver raised a CRC fault straight to the caller with no reprise. One seam in l2/retry.rs now carries all eight L2 call sites, and the two faults get opposite cures. A chip-reported CRC error (status 0x7C) means TROPIC01 ignored the frame, so the identical request is replayed, which the datasheet confirms is safe even for a firmware-write chunk or a monotonic counter. A locally detected bad CRC on an otherwise valid response means the request may already have run, so the driver asks for a Resend_Req and never replays.

DELIBERATE DEVIATION, STRICTER THAN UPSTREAM. One shared retry budget covers a whole chunked L3 packet, where libtropic refills its budget on every successful chunk and so lets the worst case grow with message length. A link needing more than three retries on one packet is failing rather than recovering, so a hard predictable bound is preferred.

Error-path latency becomes a caller-visible concern and is documented as such, bounded per exchange by
(1 + CRC_RETRY_ATTEMPTS) * READ_MAX_TRIES * READ_RETRY_DELAY_MS.

The Startup_Req CRC relaxation stays confined by construction. The parameterised parser is private and only two named wrappers are exposed, so no caller can ask for the relaxed check. The gate reproduces libtropic condition for condition and no longer leaks into the resend path.

LIBTROPIC v4.1.0. Move the pinned reference to v4.1.0. It carries no protocol change and no API change, and model_cfg.yml is byte-identical so the cert-store golden does not move.

SE FIRMWARE TARGET 2.1.0 AND SPECT 1.3.0. App FW 2.1.0 fixes a Resend_Req arriving during a multi-chunk L3 result, which could double-encrypt the result or advance to the next chunk early. That removes at its source the hazard the resend path otherwise leaves to the host length and tag checks. SPECT 1.3.0 carries the side-channel hardening of the ECC engine: scalar additive splitting, branch-free and CSWAP-free long routines, a changed power and EM profile, and public-key validity checks on read.

Three related changes, all triggered by the libtropic 4.1.0 release.

L2 CRC RETRY. Close a parity gap dating from libtropic 4.0.0, where the
driver raised a CRC fault straight to the caller with no reprise. One seam
in l2/retry.rs now carries all eight L2 call sites, and the two faults get
opposite cures. A chip-reported CRC error (status 0x7C) means TROPIC01
ignored the frame, so the identical request is replayed, which the
datasheet confirms is safe even for a firmware-write chunk or a monotonic
counter. A locally detected bad CRC on an otherwise valid response means
the request may already have run, so the driver asks for a Resend_Req and
never replays.

DELIBERATE DEVIATION, STRICTER THAN UPSTREAM. One shared retry budget
covers a whole chunked L3 packet, where libtropic refills its budget on
every successful chunk and so lets the worst case grow with message
length. A link needing more than three retries on one packet is failing
rather than recovering, so a hard predictable bound is preferred.

Error-path latency becomes a caller-visible concern and is documented as
such, bounded per exchange by
(1 + CRC_RETRY_ATTEMPTS) * READ_MAX_TRIES * READ_RETRY_DELAY_MS.

The Startup_Req CRC relaxation stays confined by construction. The
parameterised parser is private and only two named wrappers are exposed,
so no caller can ask for the relaxed check. The gate reproduces libtropic
condition for condition and no longer leaks into the resend path.

LIBTROPIC v4.1.0. Move the pinned reference to v4.1.0. It carries no
protocol change and no API change, and model_cfg.yml is byte-identical so
the cert-store golden does not move.

SE FIRMWARE TARGET 2.1.0 AND SPECT 1.3.0. App FW 2.1.0 fixes a Resend_Req
arriving during a multi-chunk L3 result, which could double-encrypt the
result or advance to the next chunk early. That removes at its source the
hazard the resend path otherwise leaves to the host length and tag checks.
SPECT 1.3.0 carries the side-channel hardening of the ECC engine: scalar
additive splitting, branch-free and CSWAP-free long routines, a changed
power and EM profile, and public-key validity checks on read.
@0xEthamin
0xEthamin merged commit 627359b into main Aug 20, 2026
13 checks passed
@0xEthamin
0xEthamin deleted the feat/l2-crc-retry branch August 20, 2026 19:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant