Files
punktfunk/crates/pf-vkdecode/Cargo.toml
T
enricobuehler 2b13b6353a deps: move the RustCrypto wave to aes 0.9 / aes-gcm 0.11 / sha2 0.11 / hmac 0.13 / cbc 0.2 / chacha20poly1305 0.11
These six share the `crypto-common` and `digest` traits, so they move as ONE change — a
partial bump leaves crates on incompatible trait generations that cannot interoperate.

The point is to delete a footgun, not for version hygiene. `aes` 0.8 only enabled ARMv8
hardware AES on aarch64 behind `--cfg aes_armv8`, and `polyval` 0.6 gated its PMULL GHASH
path behind `--cfg polyval_armv8`. A RUSTFLAGS env var OVERRIDES config rustflags
ENTIRELY, so any aarch64 lane that sets its own (cargo-ndk does this internally for every
Android build) silently dropped both and fell back to software AES on the per-packet
decrypt path. `aes` 0.9 runtime-detects via `cpufeatures` on aarch64 and `polyval` 0.7
selects its armv8 intrinsics backend by target_arch, so neither cfg exists any more.

API changes this generation forces:
  - `AeadInPlace` -> `AeadInOut`; `{encrypt,decrypt}_in_place_detached` ->
    `{encrypt,decrypt}_inout_detached` taking an `InOutBuf`.
  - `generic-array` -> `hybrid-array`: `Array::from_slice` is deprecated in favour of the
    infallible `&[u8; N] -> &Array<u8, UN>` reference cast, or `TryFrom` for runtime slices.
  - `Mac::new_from_slice` moved to `KeyInit::new_from_slice`.
  - `BlockEncrypt`/`BlockDecrypt` -> `BlockCipherEncrypt`/`BlockCipherDecrypt`;
    `BlockEncryptMut` -> `BlockModeEncrypt`; `encrypt_padded_vec_mut` -> `encrypt_padded_vec`.

`rsa` 0.9 is the one crate that cannot come along: it is built on `digest` 0.10 and its
0.10 line is still release-candidate only, which is not something the Moonlight pairing
ceremony should ride. Its `sha2` feature re-exports the digest its own traits speak, so the
three sites where a digest appears as an `rsa` TYPE PARAMETER (cert.rs, pairing.rs, tls.rs)
now take `rsa::sha2::Sha256` explicitly; everything else in the crate is on sha2 0.11.

The GameStream wire formats are untouched — AES-128-ECB no-padding, the CBC audio path, and
the GCM control-stream seal all keep their exact byte behaviour; only the type plumbing moved.
2026-08-13 13:39:09 +02:00

28 lines
1.1 KiB
TOML

[package]
name = "pf-vkdecode"
description = "Native Vulkan Video H.264 decode for the clients (M2): StdVideo parameter-set/picture conversion and DPB slot management over pf-bitstream's AuPlans — the CPU-testable half; session, memory and command recording follow in WP-B (design/client-native-decode.md §3.2)"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
[dependencies]
ash = "0.38"
# Direct dependency on the vendored parser crate, not just pf-bitstream: the parameter-set
# conversion consumes the parser's `Sps`/`Pps` types wholesale (pf-bitstream re-exports only
# `Level`/`SliceHeader`), and the same path means the one crate instance the workspace already
# builds — no duplicate types.
cros-codecs = { path = "../pf-bitstream/vendor/cros-codecs" }
pf-bitstream = { path = "../pf-bitstream" }
tracing = "0.1"
[dev-dependencies]
# The GPU parity test hashes decoded frames against libavcodec goldens (already
# in the workspace lock via other crates).
sha2 = "0.11"
[lints]
workspace = true