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
246
Makefile
246
Makefile
|
|
@ -24,7 +24,11 @@
|
|||
# FreeBSD, OpenBSD (with system make compatibility shims).
|
||||
|
||||
CC ?= cc
|
||||
CFLAGS ?= -Wall -Wextra -O2 -std=c11
|
||||
# v3.0.2: -Woverlength-strings catches usage()-style string literals
|
||||
# that violate the C99 4095-char single-string limit. F-13 was hit
|
||||
# in v3.0.1 when usage() drifted past the limit; the warning now
|
||||
# fails the build under -Werror downstream.
|
||||
CFLAGS ?= -Wall -Wextra -Woverlength-strings -O2 -std=c11
|
||||
CFLAGS += -Iinclude -Isrc
|
||||
LDFLAGS ?=
|
||||
LDLIBS ?= -lm
|
||||
|
|
@ -53,8 +57,8 @@ endif
|
|||
|
||||
# --- Zupt core sources ---
|
||||
ZUPT_SOURCES = src/zupt_main.c src/zupt_format.c src/zupt_lz.c src/zupt_lzh.c \
|
||||
src/zupt_xxh.c src/zupt_sha256.c src/zupt_aes256.c src/zupt_crypto.c \
|
||||
src/zupt_crypto_sdk.c \
|
||||
src/zupt_xxh.c src/zupt_sha256.c src/zupt_sha256_shani.c src/zupt_aes256.c src/zupt_crypto.c \
|
||||
src/zupt_crypto_sdk.c src/zupt_crypto_pqbox.c \
|
||||
src/zupt_predict.c src/zupt_parallel.c src/zupt_keccak.c \
|
||||
src/zupt_x25519.c src/zupt_mlkem.c src/zupt_cpuid.c src/zupt_mlock.c \
|
||||
src/zupt_filetype.c src/zupt_disk.c src/zupt_dedup.c
|
||||
|
|
@ -63,11 +67,19 @@ ZUPT_SOURCES = src/zupt_main.c src/zupt_format.c src/zupt_lz.c src/zupt_lzh.c \
|
|||
ZUPTSDK_DIR ?= vendor/zuptsdk
|
||||
ZUPTSDK_ABS := $(abspath $(ZUPTSDK_DIR))
|
||||
CFLAGS += -I$(ZUPTSDK_DIR)/include
|
||||
PQVV_DIR ?= vendor/pqvaptvupt
|
||||
CFLAGS += -I$(PQVV_DIR)/include
|
||||
LDFLAGS += -L$(ZUPTSDK_DIR) -Wl,-rpath,$(ZUPTSDK_ABS) -Wl,-rpath,'$$ORIGIN/$(ZUPTSDK_DIR)'
|
||||
LDLIBS += -lzuptsdk
|
||||
PQVV_ABS := $(abspath $(PQVV_DIR))
|
||||
LDFLAGS += -L$(PQVV_DIR) -Wl,-rpath,$(PQVV_ABS) -Wl,-rpath,'$$ORIGIN/$(PQVV_DIR)'
|
||||
# Installed layout: vendored libs live in $(PREFIX)/lib/$(TARGET)/ — give the
|
||||
# binary a matching relative rpath so `make install` is self-contained.
|
||||
LDFLAGS += -Wl,-rpath,'$$ORIGIN/../lib/vaptvupt'
|
||||
LDLIBS += -lpqvaptvupt
|
||||
|
||||
# --- VAPTVUPT: VaptVupt codec sources (Apache-2.0, integrated under MIT) ---
|
||||
VV_SOURCES = src/vv_encoder.c src/vv_decoder.c src/vv_ans.c \
|
||||
# --- VAPTVUPT: VaptVupt codec sources (GPL-3.0-or-later; tool is AGPL-3.0-or-later) ---
|
||||
VV_SOURCES = src/vv_encoder.c src/vv_decoder.c src/vv_ans.c src/vv_bcj.c \
|
||||
src/vv_huffman.c src/vv_simd.c src/vv_xxh64.c src/vaptvupt_api.c
|
||||
|
||||
SOURCES = $(ZUPT_SOURCES) $(VV_SOURCES)
|
||||
|
|
@ -79,8 +91,9 @@ HEADERS = include/zupt.h include/zupt_keccak.h include/zupt_mlkem.h \
|
|||
include/vv_platform.h \
|
||||
src/zupt_thread.h src/zupt_parallel.h
|
||||
|
||||
TARGET = zupt
|
||||
MANPAGE = doc/zupt.1
|
||||
TARGET = vaptvupt
|
||||
LEGACY_LINK = zupt
|
||||
MANPAGE = doc/vaptvupt.1
|
||||
MANPAGE_GZ = $(TARGET).1.gz
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
|
@ -97,8 +110,10 @@ ARCH := $(shell uname -m)
|
|||
# --- AVX2: enable SIMD for VaptVupt on x86_64 ---
|
||||
ifeq ($(ARCH),x86_64)
|
||||
VV_SIMD_FLAGS = -mavx2
|
||||
SHANI_FLAGS = -msha -mssse3 -msse4.1
|
||||
else
|
||||
VV_SIMD_FLAGS =
|
||||
SHANI_FLAGS =
|
||||
endif
|
||||
|
||||
# --- Jasmin: enable only on x86_64 with pre-compiled .s files ---
|
||||
|
|
@ -123,7 +138,14 @@ endif
|
|||
# --- Object files ---
|
||||
# VV SIMD files need -mavx2 on x86_64 (no-op on other arches)
|
||||
VV_SIMD_OBJS = src/vv_encoder.o src/vv_decoder.o src/vv_simd.o
|
||||
VV_PLAIN_OBJS = src/vv_ans.o src/vv_huffman.o src/vv_xxh64.o src/vaptvupt_api.o
|
||||
|
||||
# Vendored codec sources follow the UPSTREAM warning policy (kept byte-exact
|
||||
# to canonical releases for clean future drop-ins). Two benign clang-only
|
||||
# categories are silenced here instead of patching upstream files:
|
||||
# vv_decoder.c: unused helper retained upstream; vv_ans.c: stats variable.
|
||||
VV_WPOLICY = -Wno-unused-function -Wno-unused-but-set-variable
|
||||
$(VV_SOURCES:.c=.o): CFLAGS += $(VV_WPOLICY)
|
||||
VV_PLAIN_OBJS = src/vv_ans.o src/vv_huffman.o src/vv_xxh64.o src/vv_bcj.o src/vaptvupt_api.o
|
||||
ZUPT_OBJS = $(patsubst %.c,%.o,$(ZUPT_SOURCES))
|
||||
ALL_OBJS = $(ZUPT_OBJS) $(VV_SIMD_OBJS) $(VV_PLAIN_OBJS)
|
||||
|
||||
|
|
@ -165,7 +187,7 @@ endif
|
|||
# BUILD RULES
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
.PHONY: all clean install uninstall test test-all test-asan test-asan-run test-vectors test-vv fuzz-build fuzz-format fuzz-format-run help audit-licenses
|
||||
.PHONY: all clean install uninstall test test-all test-asan test-asan-run test-vectors test-vv fuzz-build fuzz-format fuzz-format-run help audit-licenses dist check
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
|
|
@ -210,8 +232,10 @@ audit-licenses:
|
|||
fi
|
||||
|
||||
# Jasmin pre-compiled assembly (x86_64 only)
|
||||
# Jasmin emits GNU-as syntax (macros with C-style trailing comments);
|
||||
# clang's integrated assembler rejects it, so assemble with as(1) directly.
|
||||
jasmin/%.o: jasmin/%.s
|
||||
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
$(Q)as -o $@ $<
|
||||
|
||||
# VaptVupt SIMD files: compile with AVX2 on x86_64
|
||||
$(VV_SIMD_OBJS): src/%.o: src/%.c $(HEADERS)
|
||||
|
|
@ -221,16 +245,27 @@ $(VV_SIMD_OBJS): src/%.o: src/%.c $(HEADERS)
|
|||
$(VV_PLAIN_OBJS): src/%.o: src/%.c $(HEADERS)
|
||||
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
# Zupt core files
|
||||
$(ZUPT_OBJS): src/%.o: src/%.c $(HEADERS)
|
||||
# Zupt core files (the SHA-NI object has its own rule below with -msha)
|
||||
ZUPT_OBJS_GENERIC = $(filter-out src/zupt_sha256_shani.o,$(ZUPT_OBJS))
|
||||
$(ZUPT_OBJS_GENERIC): src/%.o: src/%.c $(HEADERS)
|
||||
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
# SHA-NI path needs -msha -mssse3 -msse4.1 on x86_64.
|
||||
# On non-x86_64, SHANI_FLAGS is empty and the file is a no-op TU.
|
||||
src/zupt_sha256_shani.o: src/zupt_sha256_shani.c $(HEADERS)
|
||||
$(Q)$(CC) $(CFLAGS) $(SHANI_FLAGS) -c -o $@ $<
|
||||
|
||||
# Final link step. Order matters: CFLAGS before LDFLAGS, then objects,
|
||||
# then LDLIBS — keeps GCC/Clang happy when LDFLAGS contains -pie or
|
||||
# similar position-sensitive flags.
|
||||
$(TARGET): $(ALL_OBJS) $(JAZZ_O)
|
||||
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(ALL_OBJS) $(JAZZ_O) -o $(TARGET) $(LDLIBS)
|
||||
@echo "Build complete: ./$(TARGET) [$(ARCH)]"
|
||||
@# v3.0.0: in-tree legacy symlink. Existing tests, scripts and IDE
|
||||
@# launchers reference `./zupt`; we keep that working without
|
||||
@# modifying 27 test files. The install rule emits the same symlink
|
||||
@# at $(BINDIR)/zupt for runtime users.
|
||||
$(Q)ln -sf $(TARGET) $(LEGACY_LINK)
|
||||
@echo "Build complete: ./$(TARGET) [$(ARCH)] (legacy: ./$(LEGACY_LINK) -> $(TARGET))"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# INSTALL / UNINSTALL
|
||||
|
|
@ -239,21 +274,112 @@ $(TARGET): $(ALL_OBJS) $(JAZZ_O)
|
|||
install: $(TARGET)
|
||||
$(Q)mkdir -p $(DESTDIR)$(BINDIR)
|
||||
$(Q)install -m 755 $(TARGET) $(DESTDIR)$(BINDIR)/$(TARGET)
|
||||
# v3.0.0 (INPI Brasil rename): legacy `zupt` symlink so existing
|
||||
# scripts and shell history keep working. Distros may strip this
|
||||
# after one major version cycle.
|
||||
$(Q)ln -sf $(TARGET) $(DESTDIR)$(BINDIR)/$(LEGACY_LINK)
|
||||
|
||||
$(Q)if [ -f "$(MANPAGE)" ]; then \
|
||||
mkdir -p $(DESTDIR)$(MAN1DIR); \
|
||||
$(GZIP) $(GZIPFLAGS) -c "$(MANPAGE)" > "$(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ)"; \
|
||||
chmod 0644 "$(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ)"; \
|
||||
echo "Installed: $(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ)"; \
|
||||
ln -sf "$(MANPAGE_GZ)" "$(DESTDIR)$(MAN1DIR)/$(LEGACY_LINK).1.gz"; \
|
||||
echo "Installed: $(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ) (+ $(LEGACY_LINK).1.gz symlink)"; \
|
||||
else \
|
||||
echo "Warning: man page not found: $(MANPAGE)"; \
|
||||
fi
|
||||
|
||||
@echo "Installed: $(DESTDIR)$(BINDIR)/$(TARGET)"
|
||||
# Shell completions (v2.4.7+). Honour distro path conventions where
|
||||
# possible; downstream packagers can override DESTDIR + the specific
|
||||
# dirs as needed.
|
||||
$(Q)if [ -f completions/vaptvupt.bash ]; then \
|
||||
mkdir -p "$(DESTDIR)$(PREFIX)/share/bash-completion/completions"; \
|
||||
install -m 0644 completions/vaptvupt.bash \
|
||||
"$(DESTDIR)$(PREFIX)/share/bash-completion/completions/$(TARGET)"; \
|
||||
ln -sf "$(TARGET)" "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/$(LEGACY_LINK)"; \
|
||||
echo "Installed: $(DESTDIR)$(PREFIX)/share/bash-completion/completions/$(TARGET) (+ $(LEGACY_LINK) symlink)"; \
|
||||
fi
|
||||
$(Q)if [ -f completions/_vaptvupt ]; then \
|
||||
mkdir -p "$(DESTDIR)$(PREFIX)/share/zsh/site-functions"; \
|
||||
install -m 0644 completions/_vaptvupt \
|
||||
"$(DESTDIR)$(PREFIX)/share/zsh/site-functions/_$(TARGET)"; \
|
||||
ln -sf "_$(TARGET)" "$(DESTDIR)$(PREFIX)/share/zsh/site-functions/_$(LEGACY_LINK)"; \
|
||||
echo "Installed: $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_$(TARGET) (+ _$(LEGACY_LINK) symlink)"; \
|
||||
fi
|
||||
$(Q)if [ -f completions/vaptvupt.fish ]; then \
|
||||
mkdir -p "$(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d"; \
|
||||
install -m 0644 completions/vaptvupt.fish \
|
||||
"$(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/$(TARGET).fish"; \
|
||||
echo "Installed: $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/$(TARGET).fish"; \
|
||||
fi
|
||||
|
||||
# Vendored runtime libraries (NEEDED by the binary): libzuptsdk
|
||||
# (password KDF + --pq-sdk) and libpqvaptvupt (--pq-box, v4.0.0+).
|
||||
$(Q)mkdir -p $(DESTDIR)$(PREFIX)/lib/vaptvupt
|
||||
$(Q)install -m 755 vendor/zuptsdk/libzuptsdk.so.2.0.0 $(DESTDIR)$(PREFIX)/lib/vaptvupt/libzuptsdk.so.2.0.0
|
||||
$(Q)ln -sf libzuptsdk.so.2.0.0 $(DESTDIR)$(PREFIX)/lib/vaptvupt/libzuptsdk.so.2
|
||||
$(Q)ln -sf libzuptsdk.so.2.0.0 $(DESTDIR)$(PREFIX)/lib/vaptvupt/libzuptsdk.so
|
||||
$(Q)install -m 755 vendor/pqvaptvupt/libpqvaptvupt.so.0.6.0 $(DESTDIR)$(PREFIX)/lib/vaptvupt/libpqvaptvupt.so.0.6.0
|
||||
$(Q)ln -sf libpqvaptvupt.so.0.6.0 $(DESTDIR)$(PREFIX)/lib/vaptvupt/libpqvaptvupt.so.0
|
||||
$(Q)ln -sf libpqvaptvupt.so.0.6.0 $(DESTDIR)$(PREFIX)/lib/vaptvupt/libpqvaptvupt.so
|
||||
|
||||
@echo "Installed: $(DESTDIR)$(BINDIR)/$(TARGET) (legacy: $(DESTDIR)$(BINDIR)/$(LEGACY_LINK) -> $(TARGET))"
|
||||
|
||||
uninstall:
|
||||
$(Q)rm -f $(DESTDIR)$(BINDIR)/$(TARGET)
|
||||
$(Q)rm -f $(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ)
|
||||
$(Q)rm -rf $(DESTDIR)$(PREFIX)/lib/vaptvupt
|
||||
$(Q)rm -f $(DESTDIR)$(BINDIR)/$(TARGET) $(DESTDIR)$(BINDIR)/$(LEGACY_LINK)
|
||||
$(Q)rm -f $(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ) $(DESTDIR)$(MAN1DIR)/$(LEGACY_LINK).1.gz
|
||||
$(Q)rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/$(TARGET) \
|
||||
$(DESTDIR)$(PREFIX)/share/bash-completion/completions/$(LEGACY_LINK)
|
||||
$(Q)rm -f $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_zupt
|
||||
$(Q)rm -f $(DESTDIR)$(PREFIX)/share/fish/vendor_completions.d/zupt.fish
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# DIST — reproducible source tarball for distro packaging
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
#
|
||||
# `make dist` produces zupt-VERSION.tar.gz that is BYTE-IDENTICAL given
|
||||
# the same input source tree. Properties:
|
||||
#
|
||||
# - Files sorted by name (stable order regardless of filesystem layout)
|
||||
# - mtime fixed to SOURCE_DATE_EPOCH (or to the version-string-derived
|
||||
# epoch when SOURCE_DATE_EPOCH is unset)
|
||||
# - uid/gid fixed to root (0/0) via --owner / --group
|
||||
# - gzip wrapped with --no-name (no embedded timestamp/filename)
|
||||
# - No binaries, no .o, no .so. Source only.
|
||||
#
|
||||
# Used by AUR / Debian / Homebrew / RPM upstream packaging.
|
||||
# Output: /tmp/zupt-VERSION.tar.gz so it doesn't pollute the source tree.
|
||||
|
||||
DIST_VERSION = $(shell grep '^\#define ZUPT_VERSION_STRING' include/zupt.h | awk -F'"' '{print $$2}')
|
||||
DIST_NAME = $(TARGET)-$(DIST_VERSION)
|
||||
DIST_DIR = /tmp/$(DIST_NAME).distbuild
|
||||
DIST_TARBALL = /tmp/$(DIST_NAME).tar.gz
|
||||
SOURCE_DATE_EPOCH ?= 1747699200 # 2025-05-20 UTC — stable epoch for this release line
|
||||
|
||||
dist: clean
|
||||
$(Q)rm -rf $(DIST_DIR) $(DIST_TARBALL)
|
||||
$(Q)mkdir -p $(DIST_DIR)/$(DIST_NAME)
|
||||
$(Q)git ls-files 2>/dev/null > $(DIST_DIR)/filelist.txt || \
|
||||
find . \( -type f -o -type l \) \! -path './.git/*' \! -path './*.o' \! -name '*.o' \! -name '$(TARGET)' \
|
||||
\! -name '$(LEGACY_LINK)' \
|
||||
\! -name 'zupt_asan' \! -name 'test_vectors' \! -name 'test_vaptvupt' \
|
||||
\! -name 'fuzz_decompress' \! -name 'fuzz_vv_decompress' \
|
||||
\! -path './.distbuild*' 2>/dev/null | sed 's|^\./||' | sort > $(DIST_DIR)/filelist.txt
|
||||
$(Q)tar -cf - --files-from=$(DIST_DIR)/filelist.txt | tar -xf - -C $(DIST_DIR)/$(DIST_NAME)
|
||||
$(Q)find $(DIST_DIR)/$(DIST_NAME) -exec touch -d "@$(SOURCE_DATE_EPOCH)" {} +
|
||||
$(Q)tar --sort=name \
|
||||
--owner=0 --group=0 --numeric-owner \
|
||||
--mtime="@$(SOURCE_DATE_EPOCH)" \
|
||||
-C $(DIST_DIR) -cf - $(DIST_NAME) \
|
||||
| gzip -9n > $(DIST_TARBALL)
|
||||
$(Q)rm -rf $(DIST_DIR)
|
||||
@echo ""
|
||||
@echo " Reproducible source tarball:"
|
||||
@echo " $(DIST_TARBALL)"
|
||||
@echo " sha256: `sha256sum $(DIST_TARBALL) | awk '{print $$1}'`"
|
||||
@echo " bytes: `wc -c < $(DIST_TARBALL)`"
|
||||
@echo " Reproducibility: re-run 'make dist' on the same tree, sha256 MUST match."
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# CLEAN
|
||||
|
|
@ -275,6 +401,24 @@ test: $(TARGET)
|
|||
$(Q)bash tests/test_path_traversal.sh
|
||||
$(Q)bash tests/test_arg_order.sh
|
||||
$(Q)bash tests/test_block_swap.sh
|
||||
$(Q)bash tests/test_f08_topmac.sh
|
||||
$(Q)bash tests/test_f09_preface.sh
|
||||
$(Q)bash tests/test_f10_kdf_default.sh
|
||||
$(Q)bash tests/test_f11_authfail_message.sh
|
||||
$(Q)bash tests/test_f12_comment.sh
|
||||
$(Q)bash tests/test_gui_branding.sh
|
||||
$(Q)bash tests/test_help_consistency.sh
|
||||
$(Q)bash tests/test_static_analysis.sh
|
||||
$(Q)bash tests/test_vv_decode_slack.sh
|
||||
$(Q)bash tests/test_sha256_shani.sh
|
||||
$(Q)bash tests/test_hmac_incremental.sh
|
||||
$(Q)bash tests/test_kdf_transparency.sh
|
||||
$(Q)bash tests/test_ct_timing.sh
|
||||
$(Q)bash tests/test_codec_exact_size.sh
|
||||
$(Q)bash tests/test_pqbox.sh
|
||||
$(Q)bash tests/test_packaging_syntax.sh
|
||||
$(Q)bash tests/test_completions_manpage.sh
|
||||
$(Q)bash tests/test_dist_reproducible.sh
|
||||
|
||||
test-all: $(TARGET) test-vectors test-vv
|
||||
@echo "==============================================="
|
||||
|
|
@ -289,13 +433,71 @@ test-all: $(TARGET) test-vectors test-vv
|
|||
@./test_vaptvupt 2>&1 | tail -2
|
||||
@echo "==============================================="
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# CHECK — distro-friendly safe subset
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
#
|
||||
# Targeted at downstream packagers (openSUSE OBS, Debian, Fedora) who
|
||||
# need a `%check` / `override_dh_auto_test` target that:
|
||||
#
|
||||
# - Runs in a few minutes (not the full byte-sweep arc)
|
||||
# - Doesn't call `make clean` mid-stream (rules out test_dist_reproducible.sh)
|
||||
# - Doesn't depend on tools that may be absent in the build chroot
|
||||
# (no python3 PyYAML, no ruby, no dpkg-parsechangelog)
|
||||
# - Doesn't depend on multi-threading that's flaky under emulation
|
||||
# (skips test_threaded.sh and test_pq.sh's MT subset)
|
||||
# - Covers the security-critical regressions: F-06 HMAC, F-08 AIT,
|
||||
# F-09 byte-level integrity, F-10 KDF default, F-11 auth-fail
|
||||
# wording, F-12 comments
|
||||
# - Verifies cryptographic primitives against NIST/RFC vectors
|
||||
#
|
||||
# This is the recommended target for OBS %check sections.
|
||||
|
||||
check: $(TARGET) test-vectors
|
||||
$(Q)sh tests/run_quick.sh
|
||||
$(Q)bash tests/test_audit.sh
|
||||
$(Q)bash tests/test_path_traversal.sh
|
||||
$(Q)bash tests/test_arg_order.sh
|
||||
$(Q)bash tests/test_block_swap.sh
|
||||
$(Q)bash tests/test_f08_topmac.sh
|
||||
$(Q)bash tests/test_f10_kdf_default.sh
|
||||
$(Q)bash tests/test_f11_authfail_message.sh
|
||||
$(Q)bash tests/test_f12_comment.sh
|
||||
$(Q)bash tests/test_gui_branding.sh
|
||||
$(Q)bash tests/test_help_consistency.sh
|
||||
$(Q)bash tests/test_static_analysis.sh
|
||||
$(Q)bash tests/test_vv_decode_slack.sh
|
||||
$(Q)bash tests/test_sha256_shani.sh
|
||||
$(Q)bash tests/test_hmac_incremental.sh
|
||||
$(Q)bash tests/test_kdf_transparency.sh
|
||||
$(Q)bash tests/test_ct_timing.sh
|
||||
$(Q)bash tests/test_codec_exact_size.sh
|
||||
$(Q)bash tests/test_pqbox.sh
|
||||
$(Q)./test_vectors
|
||||
@echo ""
|
||||
@echo " ═════════════════════════════════════════"
|
||||
@echo " All distro-safe checks passed."
|
||||
@echo " ═════════════════════════════════════════"
|
||||
|
||||
test-vectors: tests/test_vectors.c $(HEADERS)
|
||||
$(Q)$(CC) -O2 -std=c11 -Iinclude -Isrc $(LDFLAGS) tests/test_vectors.c \
|
||||
src/zupt_sha256.c src/zupt_crypto.c src/zupt_aes256.c src/zupt_xxh.c \
|
||||
$(Q)$(CC) -O2 -std=c11 -Iinclude -Isrc $(SHANI_FLAGS) $(LDFLAGS) tests/test_vectors.c \
|
||||
src/zupt_sha256.c src/zupt_sha256_shani.c src/zupt_crypto.c src/zupt_aes256.c src/zupt_xxh.c \
|
||||
src/zupt_keccak.c src/zupt_x25519.c src/zupt_mlkem.c src/zupt_cpuid.c \
|
||||
src/zupt_mlock.c \
|
||||
-o test_vectors $(LDLIBS)
|
||||
|
||||
# F-06 regression — HMAC accept-on-disjoint-bits (Zupt 2.2.5).
|
||||
# Inherits $(CFLAGS) so ZUPT_USE_JASMIN is defined on x86_64 (exercising
|
||||
# the original buggy path). Links the same crypto modules as test-vectors
|
||||
# plus the Jasmin .o files when available.
|
||||
test-f06: tests/test_f06_hmac.c $(HEADERS) $(JAZZ_O)
|
||||
$(Q)$(CC) $(CFLAGS) $(SHANI_FLAGS) $(LDFLAGS) tests/test_f06_hmac.c \
|
||||
src/zupt_sha256.c src/zupt_sha256_shani.c src/zupt_crypto.c src/zupt_aes256.c src/zupt_xxh.c \
|
||||
src/zupt_keccak.c src/zupt_cpuid.c src/zupt_mlock.c \
|
||||
src/zupt_x25519.c src/zupt_mlkem.c $(JAZZ_O) \
|
||||
-o test_f06 $(LDLIBS)
|
||||
$(Q)./test_f06
|
||||
|
||||
# VAPTVUPT: VaptVupt codec unit tests
|
||||
test-vv: tests/test_vaptvupt.c $(HEADERS)
|
||||
$(Q)$(CC) $(CFLAGS) $(VV_SIMD_FLAGS) $(LDFLAGS) tests/test_vaptvupt.c \
|
||||
|
|
@ -307,8 +509,8 @@ test-vv: tests/test_vaptvupt.c $(HEADERS)
|
|||
test-asan: $(SOURCES) $(HEADERS) $(JAZZ_O)
|
||||
$(Q)$(CC) -Wall -Wextra -std=c11 -Iinclude -Isrc -I$(ZUPTSDK_DIR)/include \
|
||||
-fsanitize=address,undefined -g -O1 \
|
||||
$(VV_SIMD_FLAGS) -L$(ZUPTSDK_DIR) -Wl,-rpath,$(ZUPTSDK_ABS) \
|
||||
$(SOURCES) $(JAZZ_O) -o zupt_asan -lzuptsdk $(LDLIBS)
|
||||
$(VV_SIMD_FLAGS) $(SHANI_FLAGS) -I$(PQVV_DIR)/include -L$(ZUPTSDK_DIR) -Wl,-rpath,$(ZUPTSDK_ABS) \
|
||||
$(SOURCES) $(JAZZ_O) -o zupt_asan -lzuptsdk -L$(PQVV_DIR) -Wl,-rpath,$(PQVV_ABS) $(LDLIBS)
|
||||
@echo "ASAN build: ./zupt_asan"
|
||||
|
||||
# Build the format-parser fuzz harness. Runs against ./zupt_asan to catch
|
||||
|
|
@ -371,7 +573,7 @@ fuzz-build:
|
|||
@echo " afl-fuzz -i corpus_vv -o findings_vv -- ./fuzz_vv_decompress"
|
||||
|
||||
help:
|
||||
@echo "Zupt v2.0.0 build targets:"
|
||||
@echo "Zupt v$(shell grep '^#define ZUPT_VERSION_STRING' include/zupt.h | awk -F'\"' '{print $$2}') build targets:"
|
||||
@echo " make Build zupt binary"
|
||||
@echo " make V=1 Build with verbose output"
|
||||
@echo " make test Quick test"
|
||||
|
|
|
|||
Loading…
Reference in a new issue