------------------------------------------------------------------- Mon Aug 31 21:30:00 UTC 2026 - Cristian Cezar Moisés - Update to 5.2.6: * Use the compiler-resistant volatile wipe fallback on macOS and NetBSD. * Make source-scanner empty-array handling compatible with Bash 3.2. * Preserve hostile archive-path fixture bytes exactly on Windows. * Preserve immutable, unpromoted 5.2.5 history and require fresh 5.2.6 gates. * Pin the OBS source service to the immutable v5.2.6 tag. ------------------------------------------------------------------- Mon Aug 31 19:55:00 UTC 2026 - Cristian Cezar Moisés - Update to 5.2.5: * Run the standalone OBS source-service chain from its isolated working directory so downstream services can find .obsinfo. * Add a packaging-policy regression for the executor working directory. * Preserve immutable, unpromoted 5.2.4 history and require fresh 5.2.5 gates. * Pin the OBS source service to the immutable v5.2.5 tag. ------------------------------------------------------------------- Mon Aug 31 18:55:00 UTC 2026 - Cristian Cezar Moisés - Update to 5.2.4: * Make the static Windows GUI package-version check robust to canonical CRLF checkouts. * Advance source-only package metadata and prepare final archive hashes. * Pin the OBS source service to the immutable v5.2.4 tag. ------------------------------------------------------------------- Mon Aug 31 18:15:00 UTC 2026 - Cristian Cezar Moisés - Update to 5.2.3: * Derive package checks from the upstream version header and stabilize the GUI version output consumed by package gates. * Replace busybox-gawk before installing the native Tumbleweed RPM tooling. * Pin the OBS source service to the immutable v5.2.3 tag. ------------------------------------------------------------------- Mon Aug 31 00:00:00 UTC 2026 - Cristian Cezar Moisés - Update to 5.2.2: * Convert the upstream and OBS inputs to a source-only release: remove precompiled library and object inputs and reject their reintroduction with reusable source-archive auditing. * Build with WITH_SDK=0 and WITH_PQBOX=0. The optional integrations now require an explicit source or packaged system dependency and never use a private precompiled fallback. * Preserve portable compiler and linker flags, architecture-local optimized translation units, scalar fallbacks, parallel build, and staged DESTDIR installation. * Build the packaged executable as PIE with full RELRO/NOW and a non-executable stack while preserving automatic debuginfo generation and avoiding manual stripping or RPATH/RUNPATH. * Update OBS source services to obs_scm pinned to the immutable v5.2.2 tag; disable submodules and Git LFS and create the compressed tarball at build time. * Run the real upstream check target from the RPM check phase without architecture-specific test suppression. * Harden archive extraction against traversal, symlink/hardlink and Windows reparse-point races; publish only fully size/checksum-verified temporary output and add structurally valid hostile-archive regression fixtures. * Reject normal, solid, and disk-backup output aliases of an input file, including alternate spellings, hardlinks, and symlinks, before creating the output; --force cannot bypass this data-loss guard. * Snapshot disk-restore input privately before opening its destructive destination and restore from the same validated stream. Reject raw devices whose capacity is unknown or smaller than the image before the first write. * Enforce DATA frame types across serial, threaded, solid, test, and disk readers, and retain the exact encrypted+dedup AAD sequence used by v5.2.1. Test an actual v5.2.1 password-encrypted DATA/DATA/REF/DATA disk fixture through list, test, generic extraction, and disk restore. * Use random private benchmark scratch directories and remove them without following links instead of using a predictable process-ID path. * Package the AGPL-3.0-or-later application together with the bundled GPL-3.0-or-later VaptVupt codec 2.65.3 and the BSD-2-Clause XXH64-derived routines; preserve all applicable notices. * Rename the application and package back to ZUPT/zupt. Install only the zupt command and add versioned Provides/Obsoletes for migration from the former vaptvupt package without shipping a duplicate executable. * Add the source-only openSUSE handoff/export workflow and validation matrix. * Add explicit password prompt, file, and inherited-descriptor inputs. * Validate the source audit, rpmbuild -bs/-ba, the complete RPM check phase, package contents and dependencies, installed round trips, and clean uninstall in a disposable openSUSE Tumbleweed 20260822 x86_64 container. OBS/Factory, other architectures, Leap, and SLE remain separate unexecuted downstream gates and are not claimed by this validation. * Correct the licensing record without revoking historical MIT grants present in earlier repository revisions; current files follow current SPDX notices. * Correct the stale public-domain statement for XXH64-derived code and retain Yann Collet's BSD-2-Clause copyright, conditions, and disclaimer. * Record the CC0-1.0 option and provenance for pq-crystals/kyber-derived ML-KEM portions, the BSD-3-Clause curve25519-donna origin of native X25519 portions, and the public-domain LZMA SDK origin of the x86 BCJ code. * Keep AppImage outside the 5.2.2 promoted set until its static runtime has a complete license/source-relink handoff; publish Windows only as a ZIP with the executable and notices. * Gate notice-bearing Linux tar.xz and Windows/macOS CLI bundles plus GUI DEB, noarch RPM, source RPM, and source-only portable ZIP artifacts; keep bare executables out of the promoted set. * Qualify historical formal-verification and constant-time wording: current source review and runtime regressions are not a proof for every compiler, CPU, or final package binary. ------------------------------------------------------------------- Fri Jul 10 18:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 5.0.0: * ML-KEM-768 is now genuinely FIPS 203-conformant (was round-3 CRYSTALS-Kyber): fixed a transposed matrix-A sampling convention, the round-3 KDF, and the implicit-rejection domain. Validated byte-for-byte against OpenSSL 3.5's FIPS 203 ML-KEM-768 (tests/test_mlkem_fips203.sh, run in %check). * BREAKING: --pq / --pq-only keys and archives from <= 4.2.1 no longer decrypt (the KEM math changed). Regenerate keys and re-encrypt. Password mode and plain compression are unaffected; wire format stays v1.6. * Security: compress data-loss and silent-plaintext guards; heap OOB read in the AVX2 decoder bounded; overflow-safe solid-mode test path; secret-wipe on hybrid-decrypt key-read error. * GUI reworked for the source-only build; truthful banner/help. ------------------------------------------------------------------- Fri Jul 10 12:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 4.2.1: * Fix: "vaptvupt info" mislabelled full post-quantum (--pq-only) archives as "PQ Hybrid (ML-KEM-768 + X25519)". info now reads the real enc_type from the encryption-header block and reports the actual mode ("ML-KEM-768 only, no classical layer" for --pq-only). Reader-side only; no wire-format change, existing 4.2.0 archives are relabelled with no re-encryption. ------------------------------------------------------------------- Thu Jul 9 12:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 4.2.0: * New native full (pure) post-quantum mode --pq-only: ML-KEM-768 (FIPS 203) as the sole key-establishment mechanism, with no classical X25519 component (envelope type 0x06; archive key SHA3-512(ml_ss || ml_ct || "ZUPT-PQ-ONLY-v1")). For compliance postures that mandate a single NIST-standardised PQ primitive with no classical KEM in the envelope (CNSA 2.0-style "PQ-only"). Keys via keygen --pq-only. In-tree crypto, built in the default source-only package. Hybrid --pq remains the recommended default; --pq-only has no classical fallback. * Security (critical): fixed AES-256-CTR keystream reuse under --dedup. Dedup blocks all use sequence 0, so the previous nonce (base_nonce XOR seq) collapsed to a single value across blocks, reusing the CTR keystream. Each block now uses a fresh random 128-bit nonce. Re-encrypt any --dedup encrypted archives written by <= 4.1.0. * keygen --sdk / --box now gives clear guidance toward native --pq / --pq-only on a source-only build. * Wire format v1.6 unchanged; the 0x06 envelope is additive. ------------------------------------------------------------------- Tue Jul 7 12:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 4.1.0: * Source-only build. The prebuilt vendored libraries (libzuptsdk, libpqvaptvupt) are removed from the tree; the package now builds with no external library dependency and ships no .so. The libzuptsdk-backed modes (Argon2id KDF, --pq-sdk, --pq-box) are gated behind an optional upstream WITH_SDK=1 build; the default password KDF is PBKDF2-SHA256 (600k) and --pq (native ML-KEM-768 + X25519) is unchanged. spec %files no longer lists the .so; %build/%install pass WITH_SDK=0. * Fix: multithreaded encrypted archives were unextractable on the native AEAD path. The parallel compress/decompress workers did not bind the F-09 frame-preface AAD that the serial path and the archive's AAD_PREFACE flag require, so every multithreaded block failed authentication. Now byte-identical across thread counts; also fixes `--kdf pbkdf2 -t N`. * Security: LZH raw code-length stack overflow and huff_lut OOB on crafted archives; integer-overflow heap OOB reads in the index and solid-mode parsers; SEQ decoder safe-zone heap overflow; per-block ENCRYPTED-flag authentication gate; PBKDF2 iteration-count DoS cap; non-elidable secret wipe in the SDK path; restored disk images now 0600. Wire format v1.6 unchanged. ------------------------------------------------------------------- Wed Jun 10 12:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 4.0.0: * Codec -> canonical VaptVupt 2.60.4 (security: OOB heap write in AVX2 exact-size decode fixed; CBMC-verified BCJ with auto-detection; ratio gate byte-identical on identical inputs). * F-16 disclosed and fixed: <= 3.8.0 wrote undecodable archives on executable content at L8/L9 (write-time BCJ defect). Re-create affected archives with 4.0.0. * New --pq-box mode (libpqvaptvupt 0.6.0): ML-KEM-768 + X25519 via HKDF-SHA256 domain-separated combiner; keygen --box; 13/13 adversarial checks; ASan/UBSan clean. * SHA-NI measured 5.8x (scalar 204 -> 1184 MB/s); estimate retired. * Clang strict build restored; wire format v1.6 unchanged; 26 suites green; vectors 16/16. ------------------------------------------------------------------- Mon Jun 1 22:31:24 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.8.0 (documentation-only; binary identical to 3.7.0, v1.6) * Add BENCHMARKS.md: consolidated reproducible measured benchmarks (compression ratio/throughput, encode-speed-vs-level, KDF-vs-per- block crypto overhead, head-to-head ratio vs zstd showing where VaptVupt loses) with the test machine + method stated per table. SHA-NI speedup marked [ESTIMATED] (test box has no SHA-NI). * README benchmark section re-dated and linked to BENCHMARKS.md. No source/crypto/wire change; test_vectors 16/0, F-09 0/1827. ------------------------------------------------------------------- Mon Jun 1 22:15:58 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.7.0 * Route the ML-KEM-768 decapsulation implicit-rejection comparison (1088-byte ciphertext) through the audited constant-time primitive zupt_ct_memeq, replacing an inline byte-OR loop. A timing leak there is a KEM decapsulation oracle (breaks IND-CCA2); it now shares the measured-constant-time path of the MAC compare. ML-KEM output semantics unchanged (verified by FIPS 203 roundtrip, implicit- rejection vector, PQ-hybrid roundtrip, wrong-key rejection). * test_ct_timing extended to the 1088-byte compare + a source-routing guard; the 1088B dudect numbers are informational (at that size the signal is memory-dominated and memcmp is not a clean control), with constant-timeness following from the 32B pass + length-independence + routing guard. No wire-format change (v1.6); F-09 0/1827. ------------------------------------------------------------------- Mon Jun 1 21:33:10 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.6.0 * Add NIST SP 800-38A AES-256-CTR known-answer vectors (F.5.5/F.5.6) to the test_vectors suite. Validates zupt_aes256_ctr against the standard on both the Jasmin AES-NI path and the C T-table fallback; AES was previously only roundtrip-tested. * Fix an inverted result check in the ML-KEM-768 self-test reporting (printed OK on failure) and fix the NTT roundtrip self-test to assert the real Montgomery-scaled invariant instead of a false identity (no more misleading stderr "NTT roundtrip FAILED"). ML-KEM correctness end-to-end was never affected. * test_vectors now 16/0 (was 14, one vacuous). No wire-format change (v1.6); F-09 0/1827, F-06 0/2000. ------------------------------------------------------------------- Mon Jun 1 16:51:09 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.5.0 * Measured constant-time MAC comparison (dudect-style). The three duplicated inline byte-OR MAC compares are consolidated into one audited primitive zupt_ct_memeq() (volatile OR-accumulate, no early exit), used by the v1.6 strict decrypt path and the F-08 integrity trailer. New timing test tests/test_ct_timing.sh applies Welch's t-test (fixed vs random tag classes) at -O2 with a leaky-memcmp positive control; the compare shows ~1% of the leak signal. * Internal hardening only: asserted constant-time becomes measured + regression-guarded. No wire-format change (v1.6); F-09 0/1827, F-06 0/2000. Jasmin zupt_mac_verify_ct path unchanged. ------------------------------------------------------------------- Mon Jun 1 12:00:57 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.4.0 * F-15: Argon2id KDF parameter transparency. New archives append a one-byte KDF profile descriptor to the 0x04 enc-header, making it self-describing about the Argon2id cost (the PBKDF2 header already recorded its iteration count). Covered by the F-08 integrity trailer; cannot be stripped undetected. * Back-compatible: legacy 33-byte Argon2id archives decrypt unchanged; unknown profiles are refused fail-closed. New test tests/test_kdf_transparency.sh incl. a build-time KDF cost-floor guard. No wire-format change (v1.6); F-09 0/1827, F-06 0/2000. ------------------------------------------------------------------- Mon Jun 1 11:46:10 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.3.0 * Incremental HMAC-SHA256 for the per-block Encrypt-then-MAC hot path: ipad/opad folded once per keyring; MAC streamed instead of concatenated into a malloc'd buffer. Removes a per-block malloc + full-ciphertext memcpy on both encrypt and decrypt sides. * Byte-identical MAC; verified by RFC 4231 vectors, an equivalence test, and byte-exact decryption of 3.2.x archives. No wire-format change (v1.6); F-09 0/1827, F-06 0/2000. ------------------------------------------------------------------- Mon Jun 1 11:18:57 UTC 2026 - Alessandro de Oliveira Faria - Package renamed zupt -> vaptvupt (project renamed in 3.0.0 due to a prior INPI Brasil trademark on "Zupt"). Provides/Obsoletes: zupt so the upgrade is automatic; the binary still installs a /usr/bin/zupt compatibility symlink and a zupt.1 man-page symlink. - Update to 3.2.0 * SHA-256 hardware acceleration (Intel SHA-NI): SHA256RNDS2/MSG1/MSG2 compression path with CPUID runtime dispatch; accelerates HMAC- SHA256 (Encrypt-then-MAC second pass) and PBKDF2 on Zen+/Ice Lake+. Bit-identical to the scalar path; scalar C fallback elsewhere (incl. aarch64). SHA-NI is constant-time by construction. * 64 SHA-NI round constants verified identical to the scalar K[] table; NIST FIPS 180-4 vectors pass on both paths. New regression test tests/test_sha256_shani.sh. * No wire-format change (v1.6); 3.1.x archives extract unchanged. ------------------------------------------------------------------- Sun May 31 23:41:40 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.1.0 * VaptVupt codec 2.48.5 -> 2.53.3 (API byte-identical; 3 .c files). Optimal parser (text -1.95%, binary -1.31%, source -4.72% smaller), large-window extreme, faster decode (~on par with zstd-19), and 6 upstream corrupt-input decoder memory-safety fixes. * F-14: heap-buffer-overflow WRITE fixed in the decode wrapper. The codec AVX2 over-copy needs >=32 B output slack (documented contract); our buffers had none. Fixed with ZUPT_VV_DECODE_SLACK (64 B) on both single-threaded and parallel decode paths. Found by ASan. * vv_decoder.c scalar build made -Werror clean (aarch64). * New regression test tests/test_vv_decode_slack.sh. * Wire format unchanged (v1.6); 3.0.x archives extract byte-exact. ------------------------------------------------------------------- Tue May 26 02:50:05 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.0.3 * Static-analysis cleanup: removed dead AND-branch in varint decoders (cppcheck knownConditionTrueFalse); explicit casts on -Wsign-conversion sites. Our non-vendored C now compiles clean under -Wconversion -Wsign-conversion -Werror. * New regression test tests/test_static_analysis.sh (7 assertions) wraps cppcheck + strict GCC; wired into make check. Skipped cleanly when cppcheck is unavailable on the build host. * No functional changes; archive format and wire compatibility unchanged at v1.6. ------------------------------------------------------------------- Tue May 26 02:27:34 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.0.2 * F-13: usage() string literal exceeded C99's 4095-char limit (was 4121 chars); split into five logical fprintf sections. -Woverlength-strings added to default CFLAGS so this kind of regression fails the build under -Werror. * Help text refreshed: examples now use `vaptvupt` (not legacy `zupt`), default codec correctly named VaptVupt LZ + ANS 2.48.5 (was stale "LZ77 + Huffman"), license attribution corrected. * New regression test tests/test_help_consistency.sh (10 assertions) wired into make check. ------------------------------------------------------------------- Tue May 26 00:43:52 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.0.1 * GUI license metadata changed to AGPL-3.0-or-later for the then-current source. The original entry incorrectly denied earlier MIT grants; the 5.2.2 erratum records that they remain valid for the exact historical material distributed under them. * GUI version-string parsing bug fix (the replace("zupt ", ...) substring also matched inside the v3.0.0 parenthetical). Window title, splash header, status bar and about-panel hero number now display "3.0.1" cleanly. * GUI about-panel enhanced: header VAPTVUPT, crypto stack now includes Argon2id, HKDF, the VaptVupt codec attribution; the commercial-licensing contact (sac\@securityops.co) is visible. * New regression test tests/test_gui_branding.sh (11 assertions) catches future regressions of all three issues. ------------------------------------------------------------------- Mon May 25 13:09:04 UTC 2026 - Alessandro de Oliveira Faria - Update to 3.0.0 (rename: zupt → vaptvupt) * Renamed from "Zupt" to "VaptVupt" due to a prior INPI Brasil trademark registration on the name "Zupt" for unrelated software. The on-disk archive extension stays .zupt for format continuity (header magic bytes \x5A\x55\x50\x54\x1A\x00 are unchanged). Binaries from 2.x extract 3.0.0 archives byte-exact and vice versa. The C-source identifier prefix (zupt_, ZUPT_) is also unchanged for ABI continuity with libzuptsdk. * Legacy /usr/bin/zupt symlink installed alongside vaptvupt for one major version cycle. * Integrated VaptVupt LZ + ANS codec 2.48.5: fixes csz==0 heap- buffer-overflow READ in vv_dstream_decompress_chunk (libFuzzer- found, medium severity), UBSan-safe pointer arithmetic in vv_copy_match, const-correctness cleanup in vv_ans entropy encoder. * Enhanced manpage (597 lines, was 422). New PERFORMANCE section with measured numbers against gzip-9 / zstd-3 / zstd-19, ENV var documentation including VAPTVUPT_BIN and VAPTVUPT_DEBUG, threat-model summary in the man page itself. * Fixed GUI binary-discovery bug: zupt-gui (now vaptvupt-gui) launched from desktop sessions with a minimal PATH that didn't include /usr/bin failed to locate the binary. New _find_vaptvupt implementation tries env vars, source-tree paths, shutil.which on both names, then a curated list of common install paths, and runs a liveness check (binary actually runs and exits 0) on each candidate. Diagnostic output via VAPTVUPT_DEBUG=1. ------------------------------------------------------------------- Sun May 24 13:08:04 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.8 * New `make check` target — distro-safe regression subset for OBS %check (no `make clean` mid-stream, no threading-flaky tests). Spec now calls `make check` on x86_64/aarch64. * License field corrected: AGPL-3.0-or-later (was MIT in 1.5.x). Commercial-terms inquiry information was documented separately. * Upstream URL updated to git.securityops.co. ------------------------------------------------------------------- Sun May 24 13:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.7 * Manpage rewrite covering all v2.4.x flags (--kdf, --comment, --comment-file, --pq-sdk, ML-KEM-768) * Shell completions for bash, zsh, fish covering 16 critical CLI flags * Fixed three stale strings that still mentioned PBKDF2 as the default KDF after the v2.4.1 flip to Argon2id ------------------------------------------------------------------- Sun May 24 12:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.6 * Comprehensive GitHub Actions CI matrix: 8 jobs covering GCC+Clang, strict warnings (-Werror + full §6 set), ASAN/UBSAN, PIE hardening, aarch64 via QEMU, `make dist` reproducibility, packaging-syntax, tag-triggered release. * New THREAT_MODEL.md (12 KB): plain-English security boundary document covering what zupt protects against AND what it explicitly does NOT. ------------------------------------------------------------------- Sun May 24 11:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.5 * Packaging completion: Fedora/RHEL .spec, NixOS flake.nix, DISTRIBUTION.md guide. openSUSE inherits this work. * New tests/test_packaging_syntax.sh asserts cross-recipe version consistency. ------------------------------------------------------------------- Sun May 24 10:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.4 * Reproducible `make dist` source tarball: sorted file order, fixed mtime via SOURCE_DATE_EPOCH, uid/gid pinned, gzip -9n. Two consecutive runs produce byte-identical sha256 (asserted by tests/test_dist_reproducible.sh). * Upstream packaging recipes for AUR, Debian, Homebrew added. ------------------------------------------------------------------- Sun May 24 09:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.3 * F-12 closed: encrypted archive comments via new block type ZUPT_BLOCK_COMMENT (0x05). Comments are UTF-8, up to 4096 bytes, encrypted using the same per-block AEAD pipeline as data blocks (including F-09 preface AAD). hdr.comment_offset is in the AIT-signed region. * CLI flags -c / --comment and --comment-file. * Exhaustive byte sweep on 1878-byte archive with comment: 0/1878 silent accepts. ------------------------------------------------------------------- Sun May 24 08:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.2 * F-11 closed: wrong-password and tampered-archive error messages collapsed into one uniform "Authentication failed (wrong key, wrong password, or tampered archive)" line. Detailed top-MAC wording moves behind --verbose. * Eliminates a verbal probe-oracle. No format change. ------------------------------------------------------------------- Sun May 24 07:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.4.1 * F-10: password-mode KDF default flipped from PBKDF2-SHA256 (600k iter) to Argon2id (memory-hard). Use `--kdf pbkdf2` for compatibility with v2.4.0-and-older readers. ------------------------------------------------------------------- Sun May 24 06:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.3.1 * F-09 closed: extended-AAD per-block MAC binds 29-byte canonical preface (block_type, codec_id, block_flags, sizes, plaintext-XXH64) into every block's HMAC. Format v1.5 → v1.6. * Exhaustive byte sweep on 1827-byte PQ-SDK archive: 0/1827 silent accepts. Full byte-level tamper detection on encrypted archives. ------------------------------------------------------------------- Sun May 24 05:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.3.0 * F-08 closed via 32-byte archive-integrity-trailer: HMAC-SHA256(mac_key, hdr[0..63] || footer[0..23]) appended after the footer. Format v1.4 → v1.5. v1.4 archives still readable with downgrade warning. ------------------------------------------------------------------- Sun May 24 04:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.2.5 * F-06 (HIGH) closed: HMAC verifier on the Jasmin path was silently accepting ~6% of single-bit tampers because `diff_v2 & diff_v1` cleared zeroed-difference bits. Fixed via (x|-x)>>63 nonzero-indicator fold before AND. 2000-trial regression: 0 silent accepts. * F-07 closed: structural block_type check at index_offset rejects malformed archives early. ------------------------------------------------------------------- Sun May 24 03:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.2.4 * Audit batch close (F-01..F-05): help-text newline, flaky tamper test, -Wshadow cleanup, orphan selftest removed, const-correct pointer params. ------------------------------------------------------------------- Sun May 24 02:00:00 UTC 2026 - Alessandro de Oliveira Faria - Update to 2.0.0 * Major version bump. libzuptsdk integration: HKDF combiner, key commitment, HPKE binding for the post-quantum path (--pq-sdk mode). Argon2id KDF available. New on-disk format v1.4 with explicit enc_type byte dispatch (0x01=PBKDF2, 0x03=PQ-SDK). * VaptVupt 2.x codec integrated as first-class compressor. * AppImage / .deb / .rpm packaging scripts added upstream. ------------------------------------------------------------------- Thu Apr 2 02:54:23 UTC 2026 - Alessandro de Oliveira Faria - Version 1.5.4 * Makefile multiarc ------------------------------------------------------------------- Thu Apr 2 02:31:57 UTC 2026 - Alessandro de Oliveira Faria - Version 1.5.4 * Object files removed ------------------------------------------------------------------- Thu Apr 2 02:30:11 UTC 2026 - Alessandro de Oliveira Faria - Version 1.5.3 * Added man page installation (zupt.1.gz) * Enabled verbose build output with V=1 support in Makefile * Fixed Makefile to honor LDFLAGS and support PIE linking * Improved rpmlint compliance for OBS/openSUSE packaging ------------------------------------------------------------------- Tue Mar 31 00:24:26 UTC 2026 - Alessandro de Oliveira Faria - Version 1.5.2 - Enable C fallback on AArch64 * Jasmin Gate integration behind x86_64 target detection * Detect target architecture using the compiler triplet `$(CC) -dumpmachine` * Prevent Jasmin x86_64 object files from being linked in AArch64 builds * Automatically use C fallback on non-x86_64 targets * Preserve `ZUPT_USE_JASMIN` only when assembly sources are present and compatible ------------------------------------------------------------------- Mon Mar 30 22:17:02 UTC 2026 - Alessandro de Oliveira Faria - Version 1.5.1 * Binaries removed ------------------------------------------------------------------- Sun Mar 29 22:10:54 UTC 2026 - Alessandro de Oliveira Faria - Version 1.5.0 - Added -Jasmin Assembly Integration * zupt_mac_verify_ct Jasmin assembly linked into zupt_decrypt_buffer(). Replaces the C XOR accumulation loop for HMAC-SHA256 comparison. * zupt_ct_select_32 Jasmin assembly linked into zupt_mlkem768_decaps(). Replaces the C cmov() function for Fujisaki-Okamoto implicit rejection. * include/zupt_jasmin.h — extern declarations for all Jasmin functions with ABI documentation. * #ifdef ZUPT_USE_JASMIN dispatch guards in zupt_crypto.c and zupt_mlkem.c with clean C fallback. * Makefile auto-detects jasmin/*.s files, assembles to .o, links into binary, sets -DZUPT_USE_JASMIN. ------------------------------------------------------------------- Mon Mar 23 18:46:51 UTC 2026 - Alessandro de Oliveira Faria - Initial package - Version 1.0.0