Skip to content

Commit d2e7804

Browse files
committed
Harden Tokio cleanup and wasm browser evidence
1 parent 775037b commit d2e7804

31 files changed

Lines changed: 283 additions & 114 deletions

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# Changelog
22

3+
## 1.3.8 - 2026-07-15
4+
5+
- Synchronized all workspace crate package versions to `1.3.8`.
6+
- Changed Tokio read-all helpers to grow through guarded replacement
7+
allocations, wiping each old allocation before deallocation.
8+
- Applied the guarded-growth path to bounded and unbounded Tokio helpers and
9+
added regression coverage for inputs larger than the 8 KiB eager capacity.
10+
- Hardened Chromium-family wasm runtime evidence by requiring a DOM success
11+
attribute created only after successful JavaScript and wasm execution.
12+
- Added a fail-closed assertion that the browser success attribute is absent
13+
from the static smoke-test document.
14+
- Updated async cleanup and release-evidence documentation.
15+
- Moved the stronger RISC-V RVV proof and backend-admission review to `1.3.9`.
16+
- No core encode/decode logic, SIMD admission scope, unsafe boundary, or core
17+
zero-dependency posture changes.
18+
319
## 1.3.7 - 2026-07-10
420

521
- Synchronized all workspace crate package versions to `1.3.7`.

Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "base64-ng"
3-
version = "1.3.7"
3+
version = "1.3.8"
44
edition = "2024"
55
rust-version = "1.90"
66
license = "MIT OR Apache-2.0"

README.md

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ The crate starts conservative: a small scalar implementation, strict RFC 4648 be
2929

3030
## Current Status
3131

32-
The current public release is `1.3.7`.
32+
The current public release is `1.3.8`.
3333

34-
`1.3.7` is a maintenance and crate-family version synchronization patch on top
34+
`1.3.8` is a security-hardening and crate-family synchronization patch on top
3535
of the `1.3.0` implementation-completion release, the `1.3.1` Tokio
3636
writer patch, the `1.3.2` non-standard SIMD surface review, the `1.3.3`
3737
wasm SIMD runtime-dispatch and profile-ergonomics patch, the `1.3.4`
3838
big-endian QEMU evidence patch, the `1.3.5` RISC-V QEMU evidence patch, and
39-
the `1.3.6` documentation refresh.
39+
the `1.3.6` documentation refresh and `1.3.7` maintenance patch.
4040
It keeps the admitted `1.2.x` native encode acceleration posture and the
4141
admitted `1.3.0` normal strict SIMD decode scope for Standard and URL-safe
4242
alphabet families on std `x86`/`x86_64` AVX-512 VBMI, AVX2, SSSE3/SSE4.1,
@@ -54,14 +54,14 @@ and normal strict decode when the binary is compiled with
5454
`target-feature=+simd128`, the `simd` feature, and the explicit
5555
`allow-wasm32-best-effort-wipe` feature.
5656

57-
The latest patch in this line is `1.3.7`, which keeps all workspace crate
58-
versions aligned, moves release builds to Rust `1.97.0`, and refreshes audited
59-
companion dependencies and GitHub Action pins. It also hardens Tokio companion
60-
cancellation cleanup and bounds limited-helper over-read and cleanup cost
61-
without changing core encode/decode behavior or SIMD admission.
62-
The stronger RISC-V RVV proof and admission review is scheduled for `1.3.8`;
57+
The latest patch in this line is `1.3.8`, which keeps all workspace crate
58+
versions aligned and closes two low-severity evidence and cleanup gaps. Tokio
59+
read-all helpers now wipe replaced vector allocations before deallocation, and
60+
the Chromium wasm smoke gate requires a success attribute created only by
61+
runtime execution rather than matching a token present in static HTML.
62+
The stronger RISC-V RVV proof and admission review is scheduled for `1.3.9`;
6363
until then, RISC-V remains QEMU-tested scalar/fallback-only. The workspace
64-
crate family stays version-aligned at `1.3.7`.
64+
crate family stays version-aligned at `1.3.8`.
6565

6666
Implemented on this branch now:
6767

@@ -182,14 +182,14 @@ and CWE mapping lives in [docs/SECURITY_CONTROLS.md](docs/SECURITY_CONTROLS.md).
182182
## Rust Version Support
183183

184184
The minimum supported Rust version is Rust `1.90.0`. New deployments should
185-
prefer the latest tested stable Rust; as of July 10, 2026, this project tests
185+
prefer the latest tested stable Rust; as of July 15, 2026, this project tests
186186
through Rust `1.97.0`.
187187

188188
The active release toolchain is Rust `1.97.0`. MSRV remains Rust `1.90.0` and
189189
is checked separately in CI so the project can build and test with the latest
190190
stable compiler without dropping older supported users.
191191

192-
Compatibility evidence for the `1.3.7` workspace:
192+
Compatibility evidence for the `1.3.8` workspace:
193193

194194
| Rust | Local Evidence |
195195
| --- | --- |
@@ -207,7 +207,7 @@ Compatibility evidence for the `1.3.7` workspace:
207207

208208
```toml
209209
[dependencies]
210-
base64-ng = "1.3.7"
210+
base64-ng = "1.3.8"
211211
```
212212

213213
The crate is dual-licensed:
@@ -264,7 +264,7 @@ only the crates that changed instead of republishing the whole ecosystem.
264264
`base64-ng-sanitization` provides extension helpers for
265265
`base64_ng::ct::CtEngine` that decode directly into
266266
`sanitization::SecretBytes<N>` in `no_std`, with `SecretVec` helpers behind its
267-
own `alloc` feature. The `1.3.7` companion uses exact-pinned
267+
own `alloc` feature. The `1.3.8` companion uses exact-pinned
268268
`sanitization` `=1.2.4` and exposes `sanitization::ct::Choice` comparison
269269
helpers through `SanitizationCtEqExt`. Enable the companion's
270270
`high-assurance` feature to
@@ -274,8 +274,8 @@ decode directly into `sanitization::LockedSecretBytes` or
274274

275275
```toml
276276
[dependencies]
277-
base64-ng = { version = "1.3.7", default-features = false }
278-
base64-ng-sanitization = { version = "1.3.7", default-features = false }
277+
base64-ng = { version = "1.3.8", default-features = false }
278+
base64-ng-sanitization = { version = "1.3.8", default-features = false }
279279
```
280280

281281
```rust
@@ -294,7 +294,7 @@ assert!(secret.sanitization_verify(
294294

295295
```toml
296296
[dependencies]
297-
base64-ng-sanitization = { version = "1.3.7", features = ["high-assurance"] }
297+
base64-ng-sanitization = { version = "1.3.8", features = ["high-assurance"] }
298298
```
299299

300300
```rust
@@ -313,8 +313,8 @@ newtypes around fixed byte arrays:
313313

314314
```toml
315315
[dependencies]
316-
base64-ng = { version = "1.3.7", default-features = false }
317-
base64-ng-derive = "1.3.7"
316+
base64-ng = { version = "1.3.8", default-features = false }
317+
base64-ng-derive = "1.3.8"
318318
```
319319

320320
```rust
@@ -333,7 +333,7 @@ assert_eq!(key.encode_base64::<8>().unwrap().as_str(), "aGVsbG8=");
333333

334334
```toml
335335
[dependencies]
336-
base64-ng-serde = "1.3.7"
336+
base64-ng-serde = "1.3.8"
337337
serde = { version = "1.0.228", features = ["derive"] }
338338
```
339339

@@ -352,8 +352,8 @@ Field-level modules are available for `standard`, `standard_no_pad`,
352352

353353
```toml
354354
[dependencies]
355-
base64-ng = "1.3.7"
356-
base64-ng-bytes = "1.3.7"
355+
base64-ng = "1.3.8"
356+
base64-ng-bytes = "1.3.8"
357357
bytes = "1.12.1"
358358
```
359359

@@ -370,8 +370,8 @@ projects that already admit `subtle`:
370370

371371
```toml
372372
[dependencies]
373-
base64-ng = "1.3.7"
374-
base64-ng-subtle = "1.3.7"
373+
base64-ng = "1.3.8"
374+
base64-ng-subtle = "1.3.8"
375375
```
376376

377377
```rust
@@ -392,8 +392,8 @@ remain unread:
392392

393393
```toml
394394
[dependencies]
395-
base64-ng = "1.3.7"
396-
base64-ng-tokio = "1.3.7"
395+
base64-ng = "1.3.8"
396+
base64-ng-tokio = "1.3.8"
397397
tokio = { version = "1.52.3", features = ["io-util"] }
398398
```
399399

@@ -426,7 +426,7 @@ Disable defaults for embedded or freestanding use:
426426

427427
```toml
428428
[dependencies]
429-
base64-ng = { version = "1.3.7", default-features = false }
429+
base64-ng = { version = "1.3.8", default-features = false }
430430
```
431431

432432
Enable admitted encode acceleration on supported `std` targets with the
@@ -438,7 +438,7 @@ and URL-safe alphabets after whole-input scalar validation:
438438

439439
```toml
440440
[dependencies]
441-
base64-ng = { version = "1.3.7", features = ["simd"] }
441+
base64-ng = { version = "1.3.8", features = ["simd"] }
442442
```
443443

444444
```rust

crates/base64-ng-bytes/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "base64-ng-bytes"
3-
version = "1.3.7"
3+
version = "1.3.8"
44
edition = "2024"
55
rust-version = "1.90"
66
license = "MIT OR Apache-2.0"
@@ -23,7 +23,7 @@ default = ["std"]
2323
std = ["base64-ng/std", "bytes/std"]
2424

2525
[dependencies]
26-
base64-ng = { version = "1.3.7", path = "../..", default-features = false, features = ["alloc"] }
26+
base64-ng = { version = "1.3.8", path = "../..", default-features = false, features = ["alloc"] }
2727
bytes = { version = "1.12.1", default-features = false }
2828

2929
[lints.rust]

crates/base64-ng-derive/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "base64-ng-derive"
3-
version = "1.3.7"
3+
version = "1.3.8"
44
edition = "2024"
55
rust-version = "1.90"
66
license = "MIT OR Apache-2.0"
@@ -27,7 +27,7 @@ default = []
2727
[dependencies]
2828

2929
[dev-dependencies]
30-
base64-ng = { version = "1.3.7", path = "../..", default-features = false }
30+
base64-ng = { version = "1.3.8", path = "../..", default-features = false }
3131

3232
[lints.rust]
3333
unsafe_code = "deny"

crates/base64-ng-sanitization/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "base64-ng-sanitization"
3-
version = "1.3.7"
3+
version = "1.3.8"
44
edition = "2024"
55
rust-version = "1.90"
66
license = "MIT OR Apache-2.0"
@@ -31,7 +31,7 @@ strict-ct = ["sanitization/strict-ct"]
3131
wasm-compat = ["sanitization/wasm-compat"]
3232

3333
[dependencies]
34-
base64-ng = { version = "1.3.7", path = "../..", default-features = false }
34+
base64-ng = { version = "1.3.8", path = "../..", default-features = false }
3535
sanitization = { version = "=1.2.4", default-features = false }
3636

3737
[lints.rust]

crates/base64-ng-sanitization/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ constant-time-oriented Base64 decode into clear-on-drop secret containers.
3333

3434
```toml
3535
[dependencies]
36-
base64-ng = { version = "1.3.7", default-features = false }
37-
base64-ng-sanitization = { version = "1.3.7", default-features = false }
36+
base64-ng = { version = "1.3.8", default-features = false }
37+
base64-ng-sanitization = { version = "1.3.8", default-features = false }
3838
```
3939

4040
```rust
@@ -54,15 +54,15 @@ assert!(secret.sanitization_verify(
5454
Enable `alloc` for heap-backed `sanitization::SecretVec` helpers:
5555

5656
```toml
57-
base64-ng-sanitization = { version = "1.3.7", features = ["alloc"] }
57+
base64-ng-sanitization = { version = "1.3.8", features = ["alloc"] }
5858
```
5959

6060
For high-assurance native deployments, enable locked storage helpers. This
6161
uses `sanitization` 1.2.4's `memory-lock`, `canary-check`, and
6262
`random-canary` features and decodes directly into locked memory:
6363

6464
```toml
65-
base64-ng-sanitization = { version = "1.3.7", features = ["high-assurance"] }
65+
base64-ng-sanitization = { version = "1.3.8", features = ["high-assurance"] }
6666
```
6767

6868
```rust
@@ -115,5 +115,5 @@ For deployments that want `sanitization`'s assembly-backed comparison checks,
115115
enable the passthrough features:
116116

117117
```toml
118-
base64-ng-sanitization = { version = "1.3.7", features = ["strict-ct"] }
118+
base64-ng-sanitization = { version = "1.3.8", features = ["strict-ct"] }
119119
```

crates/base64-ng-serde/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "base64-ng-serde"
3-
version = "1.3.7"
3+
version = "1.3.8"
44
edition = "2024"
55
rust-version = "1.90"
66
license = "MIT OR Apache-2.0"
@@ -24,7 +24,7 @@ alloc = ["base64-ng/alloc", "serde/alloc"]
2424
std = ["alloc", "base64-ng/std", "serde/std"]
2525

2626
[dependencies]
27-
base64-ng = { version = "1.3.7", path = "../..", default-features = false }
27+
base64-ng = { version = "1.3.8", path = "../..", default-features = false }
2828
serde = { version = "1.0.228", default-features = false }
2929

3030
[dev-dependencies]

crates/base64-ng-subtle/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "base64-ng-subtle"
3-
version = "1.3.7"
3+
version = "1.3.8"
44
edition = "2024"
55
rust-version = "1.90"
66
license = "MIT OR Apache-2.0"
@@ -24,7 +24,7 @@ alloc = ["base64-ng/alloc"]
2424
std = ["alloc", "base64-ng/std", "subtle/std"]
2525

2626
[dependencies]
27-
base64-ng = { version = "1.3.7", path = "../..", default-features = false }
27+
base64-ng = { version = "1.3.8", path = "../..", default-features = false }
2828
subtle = { version = "2.6.1", default-features = false }
2929

3030
[lints.rust]

0 commit comments

Comments
 (0)