1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
[]
= ["cli"]
[]
= "phasm-core"
= "0.2.2"
= "2024"
= "GPL-3.0-only"
= "Pure-Rust steganography engine — hide encrypted messages in JPEG photos"
= "https://github.com/cgaffga/phasmcore"
= ["Christoph Gaffga"]
= ["steganography", "jpeg", "encryption", "stego"]
= ["multimedia::images", "cryptography"]
[]
= []
= ["rayon"]
# `simd` enables hand-vectorised SIMD kernels in the H.264 encoder
# (NEON on aarch64, AVX2 on x86_64, SIMD128 on wasm32). Falls back to
# scalar paths when off OR on architectures without a kernel. All
# SIMD kernels are integer-only + FMA-free → bit-exact across iOS /
# Android / x86_64 / WASM. Set `PHASM_H264_DISABLE_SIMD=1` env var to
# force scalar even when this feature is compiled in (debug / A-B).
= []
# `video` enables the active H.264 Baseline CAVLC pipeline (production).
# Pulls in memmap2 for the path-based streaming API used by the iOS +
# Android bridges to avoid loading entire videos into heap.
= ["memmap2"]
# `h264-encoder` enables the Phase 6 pure-Rust H.264 encoder (under
# core/src/codec/h264/encoder/) plus its CABAC entropy-coder companion
# (core/src/codec/h264/cabac/). OFF by default so the GitHub-release
# CLI binary distribution NEVER bundles an H.264 encoder (Via LA AVC
# patent-pool obligations — see docs/design/h264-video-steganography.md
# §"Patent licensing — distribution plan"). Mobile bridges
# (ios-bridge, android-bridge) enable this feature explicitly. CLI
# users wanting video stego must build from source with
# `cargo install phasm-cli --features h264-encoder`.
= ["video"]
# `cabac-stego` enables the encode-time CABAC stego pipeline at
# H.264 High Profile + CABAC (Phase 6D). Implies `h264-encoder`.
# When OFF, the Rust core's video stego routes through the
# transitional CAVLC bitstream-mod pipeline (today's #77 production
# path). When ON, `h264_ghost_encode_pixels` becomes the production
# encoder-level entry point (Phase 6D.8 atomic swap target).
#
# Mobile bridges + CLI both consume this once 6D.10 lands. For now
# (6D.7-shipped + 6D.8-in-progress) this gates the cross-domain
# orchestration framework so the legacy CAVLC pipeline is never
# accidentally bypassed.
= ["h264-encoder"]
= ["js-sys", "wasm-bindgen"]
[]
= "0.11"
= "0.5"
= "0.8"
= "0.3"
= "1.4"
= "0.12"
= "0.10"
= "0.4"
= { = "1", = true }
= { = "7", = false, = ["std"] }
= "1"
= { = "0.9", = true }
= { = "0.3", = true }
= { = "0.2", = true }
# The profile that 'dist' will build with
[]
= "release"
= "thin"
# Clippy lint policy. Codec code ships spec-idiomatic patterns that clippy
# flags but we deliberately keep — index-based loops over spec-indexed
# coefficient/pixel arrays, many-param fns matching spec signatures,
# single-char names (u, v, x, y, i, j, k) that match H.264/HEVC/JPEG
# specs. Rewriting these to satisfy clippy would actively hurt
# auditability. SIMD / MT work (Phase I.1, I.2) inherits zero warnings
# from these decisions.
[]
= "allow"
= "allow"
= "allow"
= "allow"
= "allow"