Release v2.0.0: VaptVupt codec integration, auto codec detection, Jasmin and VaptVupt fixes, multi-arch & performance enhancements, security hardening, ACSL annotations
This commit is contained in:
parent
0e8e3b11c6
commit
c42251f0a2
15 changed files with 380 additions and 407 deletions
201
Makefile
201
Makefile
|
|
@ -1,19 +1,49 @@
|
|||
# Zupt v2.0.0 — Makefile with VaptVupt codec + Jasmin integration
|
||||
CC ?= gcc
|
||||
CFLAGS ?= -Wall -Wextra -O2 -std=c11
|
||||
CFLAGS += -Iinclude -Isrc
|
||||
LDLIBS = -lm -lpthread
|
||||
PREFIX ?= /usr/local
|
||||
BINDIR ?= $(PREFIX)/bin
|
||||
#
|
||||
# Multi-architecture: builds on x86_64, aarch64, armhf, ppc64le, s390x, riscv64.
|
||||
# Jasmin CT crypto: x86_64 only (C fallback on all other architectures).
|
||||
# AVX2 SIMD decode: x86_64 only (NEON on aarch64, scalar elsewhere).
|
||||
#
|
||||
# Packaging:
|
||||
# make Build with defaults
|
||||
# make V=1 Verbose build output
|
||||
# make install DESTDIR=/ Staged install for packaging
|
||||
# make CFLAGS="..." LDFLAGS="..." Override for distro policy (PIE, hardening)
|
||||
#
|
||||
# rpmlint / OBS compliance:
|
||||
# - LDFLAGS honored on link line (before objects for PIE)
|
||||
# - LDLIBS after objects (correct link order)
|
||||
# - DESTDIR support for staged installs
|
||||
# - Man page compressed and installed to $(MANDIR)/man1
|
||||
|
||||
# ─── Zupt core sources ───
|
||||
CC ?= gcc
|
||||
CFLAGS ?= -Wall -Wextra -O2 -std=c11
|
||||
CFLAGS += -Iinclude -Isrc
|
||||
LDFLAGS ?=
|
||||
LDLIBS ?= -lm -lpthread
|
||||
PREFIX ?= /usr/local
|
||||
BINDIR ?= $(PREFIX)/bin
|
||||
MANDIR ?= $(PREFIX)/share/man
|
||||
MAN1DIR ?= $(MANDIR)/man1
|
||||
GZIP ?= gzip
|
||||
GZIPFLAGS ?= -9 -n
|
||||
|
||||
# --- Verbose build ---
|
||||
V ?= 0
|
||||
ifeq ($(V),1)
|
||||
Q =
|
||||
else
|
||||
Q = @
|
||||
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_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
|
||||
|
||||
# ─── VAPTVUPT: VaptVupt codec sources (Apache-2.0, integrated under MIT) ───
|
||||
# --- VAPTVUPT: VaptVupt codec sources (Apache-2.0, integrated under MIT) ---
|
||||
VV_SOURCES = src/vv_encoder.c src/vv_decoder.c src/vv_ans.c \
|
||||
src/vv_huffman.c src/vv_simd.c
|
||||
|
||||
|
|
@ -21,77 +51,127 @@ SOURCES = $(ZUPT_SOURCES) $(VV_SOURCES)
|
|||
|
||||
HEADERS = include/zupt.h include/zupt_keccak.h include/zupt_mlkem.h \
|
||||
include/zupt_x25519.h include/zupt_cpuid.h include/zupt_jasmin.h \
|
||||
include/zupt_acsl.h \
|
||||
include/vaptvupt.h include/vv_huffman.h include/vv_ans.h \
|
||||
src/zupt_thread.h src/zupt_parallel.h
|
||||
|
||||
TARGET = zupt
|
||||
TARGET = zupt
|
||||
MANPAGE = doc/zupt.1
|
||||
MANPAGE_GZ = $(TARGET).1.gz
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# ARCHITECTURE DETECTION
|
||||
#
|
||||
# Jasmin CT assembly: x86_64 only (pre-compiled .s files)
|
||||
# AVX2 SIMD decode: x86_64 only (-mavx2 on VV decode/encode/simd)
|
||||
# NEON SIMD decode: aarch64 (auto-detected by compiler, no extra flags)
|
||||
# Scalar fallback: all architectures
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
# ─── AVX2 detection: enable SIMD for VaptVupt on x86-64 ───
|
||||
ARCH := $(shell uname -m)
|
||||
|
||||
# --- AVX2: enable SIMD for VaptVupt on x86_64 ---
|
||||
ifeq ($(ARCH),x86_64)
|
||||
VV_SIMD_FLAGS = -mavx2
|
||||
else
|
||||
VV_SIMD_FLAGS =
|
||||
endif
|
||||
|
||||
# ─── Jasmin: use pre-compiled .s files if present ───
|
||||
JAZZ_S = jasmin/zupt_mac_verify.s jasmin/zupt_mlkem_select.s jasmin/zupt_aes_ctr.s jasmin/zupt_x25519_fe.s jasmin/zupt_aes_ctr4.s
|
||||
JAZZ_AVAILABLE := $(wildcard $(JAZZ_S))
|
||||
# --- Jasmin: enable only on x86_64 with pre-compiled .s files ---
|
||||
JAZZ_S = jasmin/zupt_mac_verify.s jasmin/zupt_mlkem_select.s \
|
||||
jasmin/zupt_aes_ctr.s jasmin/zupt_x25519_fe.s jasmin/zupt_aes_ctr4.s
|
||||
JAZZ_O =
|
||||
|
||||
ifeq ($(JAZZ_AVAILABLE),$(JAZZ_S))
|
||||
CFLAGS += -DZUPT_USE_JASMIN
|
||||
JAZZ_O = jasmin/zupt_mac_verify.o jasmin/zupt_mlkem_select.o jasmin/zupt_aes_ctr.o jasmin/zupt_x25519_fe.o jasmin/zupt_aes_ctr4.o
|
||||
$(info [jasmin] Verified assembly found — linking CT crypto)
|
||||
ifeq ($(ARCH),x86_64)
|
||||
JAZZ_AVAILABLE := $(wildcard $(JAZZ_S))
|
||||
ifeq ($(JAZZ_AVAILABLE),$(JAZZ_S))
|
||||
CFLAGS += -DZUPT_USE_JASMIN
|
||||
JAZZ_O = jasmin/zupt_mac_verify.o jasmin/zupt_mlkem_select.o \
|
||||
jasmin/zupt_aes_ctr.o jasmin/zupt_x25519_fe.o jasmin/zupt_aes_ctr4.o
|
||||
$(info [jasmin] Enabled (x86_64) — linking CT crypto)
|
||||
else
|
||||
$(info [jasmin] Assembly not found — using C fallback)
|
||||
endif
|
||||
else
|
||||
JAZZ_O =
|
||||
$(info [jasmin] Assembly not found — using C fallback)
|
||||
$(info [jasmin] Disabled on $(ARCH) — using C fallback)
|
||||
endif
|
||||
|
||||
# ─── Object files for per-file CFLAGS (VV SIMD files need -mavx2) ───
|
||||
VV_SIMD_OBJS = src/vv_encoder.o src/vv_decoder.o src/vv_simd.o
|
||||
# --- 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
|
||||
ZUPT_OBJS = $(patsubst %.c,%.o,$(ZUPT_SOURCES))
|
||||
ALL_OBJS = $(ZUPT_OBJS) $(VV_SIMD_OBJS) $(VV_PLAIN_OBJS)
|
||||
ZUPT_OBJS = $(patsubst %.c,%.o,$(ZUPT_SOURCES))
|
||||
ALL_OBJS = $(ZUPT_OBJS) $(VV_SIMD_OBJS) $(VV_PLAIN_OBJS)
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# BUILD RULES
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
.PHONY: all clean install uninstall test test-all test-asan test-vectors test-vv fuzz-build help
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
# Jasmin pre-compiled assembly (x86_64 only)
|
||||
jasmin/%.o: jasmin/%.s
|
||||
$(CC) -c -o $@ $<
|
||||
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
# VaptVupt SIMD files: compile with AVX2
|
||||
# VaptVupt SIMD files: compile with AVX2 on x86_64
|
||||
$(VV_SIMD_OBJS): src/%.o: src/%.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) $(VV_SIMD_FLAGS) -c -o $@ $<
|
||||
$(Q)$(CC) $(CFLAGS) $(VV_SIMD_FLAGS) -c -o $@ $<
|
||||
|
||||
# VaptVupt non-SIMD files
|
||||
$(VV_PLAIN_OBJS): src/%.o: src/%.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
# Zupt core files
|
||||
$(ZUPT_OBJS): src/%.o: src/%.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
# Link: LDFLAGS before objects (for PIE), LDLIBS after (for -lm -lpthread)
|
||||
$(TARGET): $(ALL_OBJS) $(JAZZ_O)
|
||||
$(CC) $(CFLAGS) $(ALL_OBJS) $(JAZZ_O) $(LDLIBS) -o $(TARGET)
|
||||
@echo "Build complete: ./$(TARGET)"
|
||||
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(ALL_OBJS) $(JAZZ_O) -o $(TARGET) $(LDLIBS)
|
||||
@echo "Build complete: ./$(TARGET) [$(ARCH)]"
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET) zupt_asan test_vectors test_vaptvupt fuzz_decompress fuzz_vv_decompress jasmin/*.o src/*.o
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# INSTALL / UNINSTALL
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
install: $(TARGET)
|
||||
@mkdir -p $(DESTDIR)$(BINDIR)
|
||||
install -m 755 $(TARGET) $(DESTDIR)$(BINDIR)/$(TARGET)
|
||||
$(Q)mkdir -p $(DESTDIR)$(BINDIR)
|
||||
$(Q)install -m 755 $(TARGET) $(DESTDIR)$(BINDIR)/$(TARGET)
|
||||
|
||||
$(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)"; \
|
||||
else \
|
||||
echo "Warning: man page not found: $(MANPAGE)"; \
|
||||
fi
|
||||
|
||||
@echo "Installed: $(DESTDIR)$(BINDIR)/$(TARGET)"
|
||||
|
||||
uninstall:
|
||||
rm -f $(DESTDIR)$(BINDIR)/$(TARGET)
|
||||
$(Q)rm -f $(DESTDIR)$(BINDIR)/$(TARGET)
|
||||
$(Q)rm -f $(DESTDIR)$(MAN1DIR)/$(MANPAGE_GZ)
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# CLEAN
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
clean:
|
||||
$(Q)rm -f $(TARGET) $(MANPAGE_GZ) zupt_asan test_vectors test_vaptvupt \
|
||||
fuzz_decompress fuzz_vv_decompress jasmin/*.o src/*.o
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# TEST TARGETS
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
test: $(TARGET)
|
||||
@sh tests/run_quick.sh
|
||||
$(Q)sh tests/run_quick.sh
|
||||
|
||||
test-all: $(TARGET) test-vectors test-vv
|
||||
@echo "═══════════════════════════════════════════════"
|
||||
@echo "==============================================="
|
||||
@sh tests/regression.sh 2>&1 | tail -3
|
||||
@echo ""
|
||||
@sh tests/test_threaded.sh 2>&1 | tail -3
|
||||
|
|
@ -101,46 +181,61 @@ test-all: $(TARGET) test-vectors test-vv
|
|||
@./test_vectors 2>&1 | tail -2
|
||||
@echo ""
|
||||
@./test_vaptvupt 2>&1 | tail -2
|
||||
@echo "═══════════════════════════════════════════════"
|
||||
@echo "==============================================="
|
||||
|
||||
test-vectors: tests/test_vectors.c $(HEADERS)
|
||||
$(CC) -O2 -std=c11 -Iinclude -Isrc tests/test_vectors.c \
|
||||
$(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 \
|
||||
src/zupt_keccak.c src/zupt_x25519.c src/zupt_mlkem.c src/zupt_cpuid.c \
|
||||
src/zupt_mlock.c \
|
||||
$(LDLIBS) -o test_vectors
|
||||
-o test_vectors $(LDLIBS)
|
||||
|
||||
# VAPTVUPT: VaptVupt codec unit tests
|
||||
test-vv: tests/test_vaptvupt.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) $(VV_SIMD_FLAGS) tests/test_vaptvupt.c \
|
||||
$(Q)$(CC) $(CFLAGS) $(VV_SIMD_FLAGS) $(LDFLAGS) tests/test_vaptvupt.c \
|
||||
src/vv_encoder.c src/vv_decoder.c src/vv_ans.c src/vv_huffman.c \
|
||||
src/vv_simd.c src/zupt_xxh.c src/zupt_cpuid.c \
|
||||
$(LDLIBS) -o test_vaptvupt
|
||||
@./test_vaptvupt
|
||||
-o test_vaptvupt $(LDLIBS)
|
||||
$(Q)./test_vaptvupt
|
||||
|
||||
test-asan: $(SOURCES) $(HEADERS) $(JAZZ_O)
|
||||
$(CC) -Wall -Wextra -std=c11 -Iinclude -Isrc \
|
||||
$(Q)$(CC) -Wall -Wextra -std=c11 -Iinclude -Isrc \
|
||||
-fsanitize=address,undefined -g -O1 \
|
||||
$(VV_SIMD_FLAGS) \
|
||||
$(SOURCES) $(JAZZ_O) $(LDLIBS) -o zupt_asan
|
||||
$(VV_SIMD_FLAGS) $(LDFLAGS) \
|
||||
$(SOURCES) $(JAZZ_O) -o zupt_asan $(LDLIBS)
|
||||
@echo "ASAN build: ./zupt_asan"
|
||||
|
||||
# AFL++ fuzzing harnesses (requires afl-clang-fast)
|
||||
fuzz-build:
|
||||
@echo "Building AFL++ fuzzing harnesses..."
|
||||
afl-clang-fast -fsanitize=address,undefined -g -O1 -std=c11 \
|
||||
-Iinclude -Isrc $(VV_SIMD_FLAGS) \
|
||||
$(Q)afl-clang-fast -fsanitize=address,undefined -g -O1 -std=c11 \
|
||||
-Iinclude -Isrc $(VV_SIMD_FLAGS) $(LDFLAGS) \
|
||||
$(filter-out src/zupt_main.c,$(SOURCES)) tests/fuzz_decompress.c \
|
||||
$(LDLIBS) -o fuzz_decompress
|
||||
afl-clang-fast -fsanitize=address,undefined -g -O1 -std=c11 \
|
||||
-Iinclude -Isrc $(VV_SIMD_FLAGS) \
|
||||
-o fuzz_decompress $(LDLIBS)
|
||||
$(Q)afl-clang-fast -fsanitize=address,undefined -g -O1 -std=c11 \
|
||||
-Iinclude -Isrc $(VV_SIMD_FLAGS) $(LDFLAGS) \
|
||||
tests/fuzz_vv_decompress.c \
|
||||
src/vv_encoder.c src/vv_decoder.c src/vv_ans.c src/vv_huffman.c \
|
||||
src/vv_simd.c src/zupt_xxh.c src/zupt_cpuid.c \
|
||||
$(LDLIBS) -o fuzz_vv_decompress
|
||||
-o fuzz_vv_decompress $(LDLIBS)
|
||||
@echo "Fuzz harnesses built. Run:"
|
||||
@echo " afl-fuzz -i corpus -o findings -- ./fuzz_decompress"
|
||||
@echo " afl-fuzz -i corpus_vv -o findings_vv -- ./fuzz_vv_decompress"
|
||||
|
||||
help:
|
||||
@echo "make / make test / make install / make test-all / make test-asan / make test-vv / make fuzz-build / make clean"
|
||||
@echo "Zupt v2.0.0 build targets:"
|
||||
@echo " make Build zupt binary"
|
||||
@echo " make V=1 Build with verbose output"
|
||||
@echo " make test Quick test"
|
||||
@echo " make test-all Full test suite (regression + threaded + PQ + vectors + VV)"
|
||||
@echo " make test-vv VaptVupt codec unit tests"
|
||||
@echo " make test-asan Build with AddressSanitizer"
|
||||
@echo " make fuzz-build Build AFL++ fuzzing harnesses"
|
||||
@echo " make install Install to $(PREFIX)"
|
||||
@echo " make uninstall Remove from $(PREFIX)"
|
||||
@echo " make clean Remove build artifacts"
|
||||
@echo ""
|
||||
@echo "Architecture: $(ARCH)"
|
||||
@echo " x86_64: Jasmin CT crypto + AVX2 SIMD decode"
|
||||
@echo " aarch64: C crypto fallback + NEON SIMD decode"
|
||||
@echo " other: C crypto fallback + scalar decode"
|
||||
|
|
|
|||
Loading…
Reference in a new issue