didericis-claude
b5753b5921
tracker-policy-pr / check-pr (pull_request) Successful in 10s
test / integration-docker (pull_request) Successful in 1m6s
test / unit (pull_request) Successful in 2m12s
test / coverage (pull_request) Successful in 39s
fix(secret): authenticate bottled-secret encryption ( #468 )
...
The per-bottle egress-secret encryption (secret_store.py) was
unauthenticated CTR/XOR: decrypting with the WRONG ENV_VAR_SECRET
produced garbage that decrypt_value only rejected when it wasn't valid
UTF-8. For short token values that garbage is coincidentally valid UTF-8
~5% of the time, so `reprovision_from_secret` would occasionally "succeed"
with a wrong key and inject a garbage egress credential — and
test_reprovision_rejects_missing_rows_and_wrong_key failed ~5% of runs
(flaky CI, surfaced by this stack's unit job).
Switch to authenticated encrypt-then-MAC: append an HMAC-SHA256 tag over
`nonce || ciphertext`, keyed by a domain-separated MAC subkey derived from
the ENV_VAR_SECRET. decrypt_value verifies the tag (constant-time) before
returning any plaintext, so a wrong key or tampered ciphertext is rejected
deterministically. Blob format is now `nonce || ciphertext || tag`
(the stored rows are transient — re-written every launch — so no
migration is needed).
Pre-existing bug on main, unrelated to the transport work, but it blocks
this stack's CI. Tests: wrong key rejected 200/200; tampered ciphertext
rejected; round-trips unchanged. Deterministic now (was ~5% flaky).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-26 13:32:54 -04:00
..
2026-07-14 17:07:56 -04:00
2026-07-24 14:15:04 -04:00
2026-07-21 13:15:05 -04:00
2026-07-26 06:55:49 +00:00
2026-07-17 00:36:43 -04:00
2026-07-11 13:24:47 -04:00
2026-07-21 22:54:26 -04:00
2026-07-26 06:55:49 +00:00
2026-07-25 16:10:21 -04:00
2026-07-24 21:25:20 -04:00
2026-07-24 21:25:20 -04:00
2026-07-11 13:24:47 -04:00
2026-07-21 04:54:40 +00:00
2026-07-14 02:38:20 -04:00
2026-07-14 02:38:20 -04:00
2026-07-22 17:36:51 +00:00
2026-07-24 17:25:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-24 14:15:04 -04:00
2026-07-25 22:34:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-21 14:25:38 -04:00
2026-07-20 19:13:08 +00:00
2026-07-24 17:25:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-26 06:55:49 +00:00
2026-06-07 11:35:35 -04:00
2026-07-14 16:46:46 -04:00
2026-07-24 14:15:04 -04:00
2026-07-23 21:39:07 +00:00
2026-07-25 14:13:54 -04:00
2026-07-21 13:15:05 -04:00
2026-07-25 22:27:18 +00:00
2026-07-24 14:15:04 -04:00
2026-06-25 04:12:43 -04:00
2026-06-30 15:08:14 -04:00
2026-07-26 08:14:00 +00:00
2026-07-24 12:53:52 -04:00
2026-06-03 23:04:17 -04:00
2026-07-24 17:00:51 -04:00
2026-06-25 03:08:47 -04:00
2026-07-14 02:38:20 -04:00
2026-07-14 02:38:20 -04:00
2026-07-26 08:14:00 +00:00
2026-07-25 14:07:57 -04:00
2026-07-25 14:07:57 -04:00
2026-07-26 08:30:57 +00:00
2026-07-21 14:52:44 -04:00
2026-07-21 13:56:29 -04:00
2026-07-24 17:00:51 -04:00
2026-07-24 17:00:51 -04:00
2026-07-25 23:30:12 +00:00
2026-07-14 17:12:12 -04:00
2026-07-26 06:55:49 +00:00
2026-07-24 17:14:26 -04:00
2026-07-26 06:55:49 +00:00
2026-07-24 17:00:51 -04:00
2026-07-24 21:25:20 -04:00
2026-07-23 21:39:07 +00:00
2026-07-25 14:54:28 -04:00
2026-07-25 03:44:15 -04:00
2026-07-21 13:56:29 -04:00
2026-07-25 18:01:49 -04:00
2026-07-25 16:10:21 -04:00
2026-07-26 01:32:53 +00:00
2026-07-25 15:48:16 -04:00
2026-07-14 02:38:20 -04:00
2026-07-24 16:27:56 -04:00
2026-07-24 17:00:51 -04:00
2026-07-24 13:04:39 -04:00
2026-07-24 16:27:56 -04:00
2026-07-24 17:00:51 -04:00
2026-07-24 17:00:51 -04:00
2026-07-21 13:56:29 -04:00
2026-07-25 15:21:03 -04:00
2026-07-25 22:34:25 -04:00
2026-06-24 15:37:57 -04:00
2026-07-25 16:10:21 -04:00
2026-07-08 12:38:15 -04:00
2026-07-25 15:48:16 -04:00
2026-07-23 21:39:07 +00:00
2026-06-23 03:02:03 +00:00
2026-07-23 21:39:07 +00:00
2026-07-20 23:08:59 -04:00
2026-07-25 13:52:31 -04:00
2026-07-25 16:10:21 -04:00
2026-07-25 22:34:25 -04:00
2026-07-26 01:32:53 +00:00
2026-06-22 23:54:02 -04:00
2026-07-24 13:04:39 -04:00
2026-07-23 21:28:39 +00:00
2026-07-22 18:35:31 +00:00
2026-06-22 23:54:02 -04:00
2026-06-22 23:54:02 -04:00
2026-06-26 21:19:27 -04:00
2026-07-23 21:28:39 +00:00
2026-06-22 23:54:02 -04:00
2026-07-24 13:04:39 -04:00
2026-07-26 01:32:53 +00:00
2026-07-26 13:32:54 -04:00
2026-07-14 02:38:20 -04:00
2026-07-26 06:55:49 +00:00
2026-07-24 14:15:04 -04:00
2026-07-14 02:38:20 -04:00
2026-07-26 08:35:37 +00:00
2026-07-26 13:32:54 -04:00
2026-07-26 13:32:54 -04:00
2026-07-24 17:00:51 -04:00
2026-07-24 18:24:20 -04:00
2026-07-24 15:26:52 -04:00
2026-07-26 13:32:54 -04:00
2026-07-26 06:55:49 +00:00
2026-07-26 13:32:54 -04:00
2026-07-11 13:24:47 -04:00
2026-07-24 18:17:48 -04:00
2026-06-01 22:24:17 -04:00
2026-07-25 14:13:54 -04:00
2026-07-14 17:07:56 -04:00
2026-07-25 15:21:03 -04:00
2026-07-25 22:34:25 -04:00
2026-07-25 22:34:25 -04:00
2026-07-21 13:56:29 -04:00
2026-07-24 17:25:25 -04:00
2026-07-24 17:25:25 -04:00
2026-07-24 15:03:37 -04:00
2026-07-26 06:06:04 +00:00
2026-07-24 15:09:27 -04:00
2026-07-26 02:54:56 -04:00
2026-07-26 01:40:19 +00:00
2026-07-26 08:14:00 +00:00
2026-07-25 22:34:25 -04:00
2026-07-09 17:21:57 +00:00