v4.0.0: codec 2.60.4 security release, --pq-box sealed-box mode, F-16 fix
Some checks failed
CI / build-and-test (clang) (push) Has been cancelled
CI / build-and-test (gcc) (push) Has been cancelled
CI / strict-warnings (clang, -Wall -Wextra -Wpedantic -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wnull-dereference -O2 -std=c11 -Werror) (push) Has been cancelled
CI / strict-warnings (gcc, -Wall -Wextra -Wpedantic -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wnull-dereference -Wformat-security -Wlogical-op -Wjump-misses-init -Wdouble-promotion -O2 -std=c11 -Werror) (push) Has been cancelled
CI / sanitizers (push) Has been cancelled
CI / pie-hardening (push) Has been cancelled
CI / cross-aarch64 (push) Has been cancelled
CI / dist-reproducibility (push) Has been cancelled
CI / packaging-syntax (push) Has been cancelled
CI / release (push) Has been cancelled
Some checks failed
CI / build-and-test (clang) (push) Has been cancelled
CI / build-and-test (gcc) (push) Has been cancelled
CI / strict-warnings (clang, -Wall -Wextra -Wpedantic -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wnull-dereference -O2 -std=c11 -Werror) (push) Has been cancelled
CI / strict-warnings (gcc, -Wall -Wextra -Wpedantic -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wnull-dereference -Wformat-security -Wlogical-op -Wjump-misses-init -Wdouble-promotion -O2 -std=c11 -Werror) (push) Has been cancelled
CI / sanitizers (push) Has been cancelled
CI / pie-hardening (push) Has been cancelled
CI / cross-aarch64 (push) Has been cancelled
CI / dist-reproducibility (push) Has been cancelled
CI / packaging-syntax (push) Has been cancelled
CI / release (push) Has been cancelled
Major release. Highlights: - Codec: vendored VaptVupt codec moves to canonical 2.60.4 security release. Fixes a high-severity OOB heap write in the AVX2 decode fast path (reachable on a valid stream sized to exactly content_size, both tail variants). Brings CBMC-formally-verified BCJ filters with automatic ELF/PE/Mach-O detection. Compressed output stays byte-identical (ratio gate Δ 0.00%); wire format unchanged at v1.6. - New --pq-box sealed-box recipient mode (vendored libpqvaptvupt 0.6.0): ML-KEM-768 + X25519 combined via HKDF-SHA256 with domain separation, AES-256-CTR + HMAC-SHA256 EtM. Legacy --pq and --pq-sdk stay readable. - F-16: discloses and fixes a pre-existing data-loss defect in the <= 3.8.0 in-tree BCJ encoder. Full back-compat matrix decodes byte-exact under 4.0.0; every readable pre-4.0 archive remains readable. Repository hygiene: - Sync full 4.0.0 source tree (codec, crypto, SDK, GUI, packaging, tests). - Remove internal scratch files (PROMPT.md, FORMAL_AUDIT_PROMPT.md) and superseded version-specific docs (INTEGRATION_PROTOCOL_2.60.4.md, docs/FINDINGS-2.x.md) and a stray test binary. - Refresh README download/install section to real 4.0.0 release assets; bump version badge to 4.0.0. - Add .gitignore for build outputs (keeps vendored prebuilt libraries).
This commit is contained in:
parent
7619c4c577
commit
544a2cd647
98 changed files with 15615 additions and 1397 deletions
368
doc/zupt.1
368
doc/zupt.1
|
|
@ -1,368 +0,0 @@
|
|||
.TH ZUPT 1 "2026-05-01" "Zupt 2.2.3" "User Commands"
|
||||
.SH NAME
|
||||
zupt \- backup-oriented compression utility with hybrid post-quantum encryption
|
||||
.SH SYNOPSIS
|
||||
.B zupt compress
|
||||
.RI [ OPTIONS ]
|
||||
.I output.zupt files/dirs...
|
||||
.br
|
||||
.B zupt extract
|
||||
.RI [ OPTIONS ]
|
||||
.I archive.zupt
|
||||
.br
|
||||
.B zupt list
|
||||
.RI [ OPTIONS ]
|
||||
.I archive.zupt
|
||||
.br
|
||||
.B zupt test
|
||||
.RI [ OPTIONS ]
|
||||
.I archive.zupt
|
||||
.br
|
||||
.B zupt info
|
||||
.I archive.zupt
|
||||
.br
|
||||
.B zupt bench
|
||||
.RI [ --compare ]
|
||||
.I files/dirs...
|
||||
.br
|
||||
.B zupt disk
|
||||
.B backup\fR | \fBrestore
|
||||
.RI [ OPTIONS ]
|
||||
.br
|
||||
.B zupt keygen
|
||||
.RI [ -o
|
||||
.IR file ]
|
||||
.RI [ --pub ]
|
||||
.RI [ --sdk ]
|
||||
.RI [ -k
|
||||
.IR privkey ]
|
||||
.br
|
||||
.B zupt version
|
||||
.br
|
||||
.B zupt help
|
||||
|
||||
.SH DESCRIPTION
|
||||
.B zupt
|
||||
is a backup-oriented compression utility with multi-threaded compression,
|
||||
integrity verification, password-based encryption, and hybrid post-quantum
|
||||
public-key encryption (ML-KEM-768 + X25519). Two PQ encryption modes are
|
||||
supported: a legacy combiner kept for backward compatibility, and a
|
||||
state-of-the-art mode backed by libzuptsdk (HKDF-SHA3 hybrid combiner with
|
||||
domain separation, key commitment, HPKE binding RFC 9180, anti-fault
|
||||
decapsulation, and Argon2id RFC 9106 password derivation).
|
||||
|
||||
.SH COMMANDS
|
||||
.TP
|
||||
.B compress, c
|
||||
Create a compressed archive from one or more files or directories.
|
||||
.TP
|
||||
.B extract, x
|
||||
Extract files from an archive.
|
||||
.TP
|
||||
.B list, l
|
||||
List archive contents without extracting.
|
||||
.TP
|
||||
.B test, t
|
||||
Verify archive integrity (decompresses without writing files).
|
||||
.TP
|
||||
.B info
|
||||
Show archive metadata; works without password and without keys.
|
||||
.TP
|
||||
.B bench
|
||||
Compare compression levels 1\(en9 on the given input.
|
||||
.TP
|
||||
.B disk backup\fR / \fBrestore
|
||||
Full-disk backup/restore with sparse-region detection, progress
|
||||
reporting, and proper sync discipline (\fBO_SYNC\fR + \fBfsync\fR + \fBsync\fR).
|
||||
.TP
|
||||
.B keygen
|
||||
Generate or export hybrid PQ keypair. With
|
||||
.B --sdk
|
||||
flag, generates a libzuptsdk v2 keypair (private key file plus
|
||||
.IR file .pub
|
||||
public key file). Without
|
||||
.BR --sdk ,
|
||||
generates a legacy keypair compatible with
|
||||
.BR --pq .
|
||||
|
||||
.SH GLOBAL OPTIONS
|
||||
.TP
|
||||
.BR -v ", " --verbose
|
||||
Verbose per-file output.
|
||||
.TP
|
||||
.BR -q ", " --quiet
|
||||
Suppress non-error output.
|
||||
.TP
|
||||
.BR -t ", " --threads " " \fIN\fR
|
||||
Thread count: 0 = auto, 1 = single, 2\(en64 = explicit.
|
||||
|
||||
.SH COMPRESS OPTIONS
|
||||
.TP
|
||||
.BR -l ", " --level " " \fI1-9\fR
|
||||
Compression level. Default 7. 1\(en2 fast/small window;
|
||||
3\(en5 balanced; 6\(en7 high; 8\(en9 maximum (1MB window, deep search).
|
||||
.TP
|
||||
.BR -b ", " --block " " \fISIZE\fR
|
||||
Block size in bytes. Default 128KB.
|
||||
.TP
|
||||
.BR -s ", " --store
|
||||
Store without compression.
|
||||
.TP
|
||||
.BR -f ", " --fast
|
||||
Use the fast LZ codec (less compression, higher throughput).
|
||||
.TP
|
||||
.BR --vv ", " --vaptvupt
|
||||
Use the VaptVupt codec (LZ77 + tANS entropy, SIMD decode).
|
||||
.TP
|
||||
.B --lzhp
|
||||
Use Zupt-LZHP (LZ77 + Huffman, no SIMD required).
|
||||
.TP
|
||||
.BR -p ", " --password " " \fIPW\fR
|
||||
Encrypt with AES-256. If
|
||||
.I PW
|
||||
is empty, prompt the user.
|
||||
.TP
|
||||
.BR --pq " " \fIPUBKEY\fR
|
||||
Encrypt using legacy PQ combiner (XOR + SHA3-512). Kept for
|
||||
compatibility. New archives should prefer
|
||||
.BR --pq-sdk .
|
||||
.TP
|
||||
.BR --pq-sdk " " \fIPUBKEY\fR
|
||||
Encrypt using libzuptsdk v2 (recommended): HKDF-SHA3 hybrid combiner
|
||||
with domain separation, 32-byte key commitment, HPKE binding (RFC 9180),
|
||||
anti-fault decapsulation, AEAD via XChaCha20-Poly1305, password mode
|
||||
via Argon2id (RFC 9106). The
|
||||
.I PUBKEY
|
||||
file is the
|
||||
.IR file .pub
|
||||
produced by
|
||||
.BR "zupt keygen --sdk" .
|
||||
.TP
|
||||
.BR -D ", " --dedup
|
||||
Block-level deduplication. Identical blocks across files are stored once.
|
||||
.TP
|
||||
.B --solid
|
||||
Solid mode: concatenate files into a single stream before compression.
|
||||
|
||||
.SH EXTRACT / LIST / TEST OPTIONS
|
||||
.TP
|
||||
.BR -o ", " --output " " \fIDIR\fR
|
||||
Output directory (extract only). Default: current directory.
|
||||
.TP
|
||||
.BR -p ", " --password " " \fIPW\fR
|
||||
Decryption password.
|
||||
.TP
|
||||
.BR --pq " " \fIPRIVKEY\fR
|
||||
Decrypt a legacy PQ archive.
|
||||
.TP
|
||||
.BR --pq-sdk " " \fIPRIVKEY\fR
|
||||
Decrypt an SDK v2 PQ archive.
|
||||
|
||||
.SH KEYGEN OPTIONS
|
||||
.TP
|
||||
.BR -o " " \fIFILE\fR
|
||||
Output keyfile path (required).
|
||||
.TP
|
||||
.B --pub
|
||||
Export public key from an existing private key (used with
|
||||
.BR -k ).
|
||||
.TP
|
||||
.BR -k " " \fIPRIVKEY\fR
|
||||
Source private keyfile when exporting public key.
|
||||
.TP
|
||||
.BR --sdk ", " --pq-sdk
|
||||
Generate an SDK v2 keypair. Writes
|
||||
.I FILE
|
||||
(private key) and
|
||||
.IR FILE .pub
|
||||
(public key) in one step. Use these keys with
|
||||
.BR --pq-sdk .
|
||||
|
||||
.SH EXAMPLES
|
||||
.TP
|
||||
Compress without encryption:
|
||||
.B
|
||||
zupt c backup.zupt ~/Documents/
|
||||
|
||||
.TP
|
||||
Compress with password:
|
||||
.B
|
||||
zupt c -l 9 -p 'my-pass' secure.zupt data/
|
||||
|
||||
.TP
|
||||
Generate legacy keypair, encrypt, decrypt:
|
||||
.nf
|
||||
zupt keygen -o mykey.key
|
||||
zupt keygen --pub -o pub.key -k mykey.key
|
||||
zupt c --pq pub.key backup.zupt ~/Documents/
|
||||
zupt x --pq mykey.key backup.zupt -o ~/restored/
|
||||
.fi
|
||||
|
||||
.TP
|
||||
Generate SDK v2 keypair, encrypt, decrypt (recommended):
|
||||
.nf
|
||||
zupt keygen --sdk -o mykey.priv
|
||||
# creates mykey.priv (private) and mykey.priv.pub (public)
|
||||
zupt c --pq-sdk mykey.priv.pub backup.zupt ~/Documents/
|
||||
zupt x --pq-sdk mykey.priv backup.zupt
|
||||
.fi
|
||||
|
||||
.TP
|
||||
Full-disk backup with PQ encryption:
|
||||
.nf
|
||||
zupt keygen --sdk -o disk.priv
|
||||
zupt disk backup --pq-sdk disk.priv.pub /dev/sda backup.img.zupt
|
||||
.fi
|
||||
|
||||
.SH FILES
|
||||
.TP
|
||||
.I /usr/bin/zupt
|
||||
The zupt binary.
|
||||
.TP
|
||||
.I /usr/lib/x86_64-linux-gnu/libzuptsdk.so.2
|
||||
The libzuptsdk shared library (Linux x86_64).
|
||||
.TP
|
||||
.I /usr/include/zuptsdk.h
|
||||
libzuptsdk public C API.
|
||||
.TP
|
||||
.I /usr/share/doc/zupt/
|
||||
Documentation, changelog, audit reports.
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.TP
|
||||
.B ZUPT_THREADS
|
||||
Default thread count when
|
||||
.B -t
|
||||
is not specified.
|
||||
.TP
|
||||
.B ZUPT_TMPDIR
|
||||
Temporary directory for intermediate files (default:
|
||||
.IR /tmp ).
|
||||
|
||||
.SH EXIT STATUS
|
||||
.TP
|
||||
.B 0
|
||||
Success.
|
||||
.TP
|
||||
.B 1
|
||||
General error (invalid arguments, file not found, etc.).
|
||||
.TP
|
||||
.B 2
|
||||
Authentication failure (wrong password, wrong key, tampered ciphertext).
|
||||
.TP
|
||||
.B 3
|
||||
I/O error.
|
||||
.TP
|
||||
.B 4
|
||||
Archive format error (corrupt, unsupported version, malformed header).
|
||||
|
||||
.SH SECURITY
|
||||
.B zupt 2.2+
|
||||
recommends
|
||||
.B --pq-sdk
|
||||
for new archives. The legacy
|
||||
.B --pq
|
||||
mode uses an XOR+SHA3-512 hybrid combiner that has been superseded
|
||||
by HKDF-SHA3 with domain separation in the SDK path. Both modes
|
||||
remain supported for archive interoperability.
|
||||
|
||||
For password-encrypted archives, prefer the SDK path: it uses
|
||||
Argon2id (RFC 9106) with OWASP-compliant minimum parameters
|
||||
(64 MiB memory, 3 iterations, 1 thread), versus PBKDF2-SHA256 in
|
||||
the legacy path.
|
||||
|
||||
.B Path traversal protection.
|
||||
zupt 2.2.3+ rejects archive entries containing
|
||||
.IR ".." ,
|
||||
absolute paths
|
||||
.RI ( /foo
|
||||
or
|
||||
.IR C:\\foo ),
|
||||
or embedded NUL bytes. On POSIX systems, output files are opened with
|
||||
.B O_NOFOLLOW
|
||||
so that pre-existing symlinks at the extraction target are not followed
|
||||
(defense against TOCTOU attacks where an attacker plants a symlink in the
|
||||
output directory before extraction). On Windows, this defense relies on
|
||||
directory ACLs.
|
||||
|
||||
.B Operational guidance for untrusted archives.
|
||||
Always extract into an empty dedicated directory, audit symlinks before
|
||||
extraction, and never run extraction as root.
|
||||
|
||||
.SH BUGS
|
||||
Report at
|
||||
.UR https://git.securityops.co/cristiancmoises/zupt/issues
|
||||
.UE
|
||||
or by email to
|
||||
.MT zupt@riseup.net
|
||||
.ME .
|
||||
|
||||
.SH AUTHOR
|
||||
Cristian Cezar Moisés
|
||||
.MT zupt@riseup.net
|
||||
.ME
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR zupt-gui (1),
|
||||
.BR tar (1),
|
||||
.BR gzip (1).
|
||||
|
||||
.SH STANDARDS
|
||||
Zupt implements algorithms from FIPS 197 (AES), FIPS 202 (Keccak/SHA-3),
|
||||
FIPS 203 (ML-KEM), and follows RFC 5297 (AES-SIV), RFC 5869 (HKDF),
|
||||
RFC 7748 (X25519), RFC 8439 (ChaCha20-Poly1305), RFC 9106 (Argon2),
|
||||
and RFC 9180 (HPKE). Cryptographic primitive selection is aligned
|
||||
with Brazilian Instrução Normativa ITI nº 35/2026, which incorporated
|
||||
ML-KEM-768/1024 into the ICP-Brasil framework.
|
||||
|
||||
.SH LICENSE
|
||||
.PP
|
||||
Zupt itself (CLI, GUI, libzuptsdk, Jasmin source) is licensed under the
|
||||
.B GNU Affero General Public License version 3 or later
|
||||
(AGPL-3.0-or-later). The bundled VaptVupt LZ codec
|
||||
.RB ( src/vv_*.c ", " src/vaptvupt_api.c )
|
||||
is licensed under the
|
||||
.B GNU General Public License version 3 or later
|
||||
(GPL-3.0-or-later). VaptVupt is GPL not AGPL so that, with sufficient
|
||||
maturity, it can be considered for upstreaming into the Linux or BSD
|
||||
kernels.
|
||||
.PP
|
||||
Commercial licenses (relief from copyleft terms) are available for both
|
||||
components. Contact
|
||||
.MT sac@securityops.co
|
||||
.ME .
|
||||
.PP
|
||||
See
|
||||
.B /usr/share/doc/zupt/LICENSE
|
||||
and
|
||||
.B /usr/share/doc/zupt/THIRD-PARTY-NOTICES.md
|
||||
for the full text and complete attribution.
|
||||
|
||||
.SH PROJECT
|
||||
.PP
|
||||
Home page:
|
||||
.UR https://git.securityops.co/cristiancmoises/zupt
|
||||
.UE
|
||||
.PP
|
||||
Related projects (all by Cristian Cezar Moisés, hosted on
|
||||
git.securityops.co):
|
||||
.IP \(bu 2
|
||||
.B zupt-android
|
||||
\(em
|
||||
.UR https://git.securityops.co/cristiancmoises/zupt-android
|
||||
.UE
|
||||
.IP \(bu 2
|
||||
.B zupt-web
|
||||
\(em
|
||||
.UR https://git.securityops.co/cristiancmoises/zupt-web
|
||||
.UE
|
||||
.IP \(bu 2
|
||||
.B libzuptsdk
|
||||
\(em
|
||||
.UR https://git.securityops.co/cristiancmoises/libzuptsdk
|
||||
.UE
|
||||
.IP \(bu 2
|
||||
.B vaptvupt
|
||||
(standalone GPL codec) \(em
|
||||
.UR https://git.securityops.co/cristiancmoises/vaptvupt
|
||||
.UE
|
||||
1
doc/zupt.1
Symbolic link
1
doc/zupt.1
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
vaptvupt.1
|
||||
Loading…
Reference in a new issue