Files
papers/lux-fuzz-testing-methodology/lux-fuzz-testing-methodology.tex
zeekay dd93cb41f7 papers: cover-consistency + build pass on Lux Tier-2/3 catalogue
Sweep across the non-Tier-1 paper catalogue (Tier-1 owned by parallel
agent and excluded). All 113 processed papers already had luxcover
wired up; this commit fixes 14 build breakers and produces fresh
PDFs across the catalogue.

Fixes:
- lux-blockchain-scaling-laws: em-dash inside lstlisting -> --
- lux-corona-pq: stale \input pointing at 03-the-corona-scheme renamed
  to 03-the-corona-scheme (file already renamed on disk)
- lux-lattice-cryptography-primer: same Corona->Corona rename
- lux-formal-verification-lean4: Lean source uses unicode (×, ∀, ∃, ∈,
  ∧, ∨, ∩, ≠, ⟨, ⟩, ·, ¬) inside lstlistings. Added a literate map
  so listings render the math glyphs without UTF-8 fault.
- lux-id-did-specification: ✓/✗ in tabular replaced with \ding{51}
  / \ding{55} (pifont). Added pifont package.
- lux-ntt-simd-implementation: middle-dot in Go assembly listings;
  added literate {·}{\textperiodcentered}.
- lux-ntt-transform: μ, ×, –, — in regular text (no T1 fontenc).
  Replaced with $\mu$/$\times$/--/--- via unicode->latex sweep.
- lux-perpetuals-derivatives, lux-quantum-consensus,
  lux-quasar-consensus, lux-tee-computing-mesh: same unicode->latex
  sweep across body text. Also fixed broken math segment
  `$L_{avg} = 10$\times$$` -> `$L_{avg} = 10\times$`.
- lux-zchain: emoji glyphs in roadmap table replaced with
  parenthetical text.
- lux-triple-proof-consensus: dropped duplicate \usepackage{geometry}
  that clashed with luxcover (geometry option clash).
- pq: defined missing \Rq macro.

PDFs rebuilt for the full Tier-2/3 set.

Excluded (Tier-1, parallel agent): lp-073-pulsar, lp-stricte2epq,
dag-evm-formal, lp-010-quasar-stm-{3,4}, lp-020-quasar-consensus,
lux-institutional-custody, lux-nist-mptc-submission, pqsafe-il5,
pq-rns, plus shared/ and lps/.
2026-05-13 01:27:59 -07:00

81 lines
2.5 KiB
TeX

\documentclass[11pt,a4paper]{article}
\usepackage{../shared/luxcover}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amsfonts,amsthm}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{listings}
\input{../shared/lstlang}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{float}
\usepackage{algorithm}
\usepackage{algpseudocode}
\newtheorem{theorem}{Theorem}
\newtheorem{definition}{Definition}
\newtheorem{remark}{Remark}
\lstset{
basicstyle=\small\ttfamily,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{gray},
stringstyle=\color{red},
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny\color{gray}
}
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
urlcolor=blue
}
\title{Property-Based Testing and Fuzzing\\for Cryptographic Software}
\author{
Zach Kelling \\
Lux Industries, Inc.\thanks{Corresponding author: [email protected]}\\
\texttt{[email protected]}
}
\date{2025}
\begin{document}
\luxcoverpage
\begin{abstract}
Cryptographic code has a unique testing challenge: correctness is not about producing the
right output for a few test vectors---it is about producing the right output for all
inputs, and never leaking information through side channels, timing, or error paths.
Property-based testing and fuzzing address this by generating thousands to millions of
random inputs and checking that mathematical properties hold. This paper teaches both
techniques from first principles and applies them to Lux Network's cryptographic
implementations: Go's native fuzzing for NTT and polynomial arithmetic, Foundry fuzz
for smart contract invariants, and Halmos symbolic testing for FHE noise budget properties.
We cover property selection, coverage-guided mutation, corpus management, shrinking
failing inputs, and interpreting coverage metrics. The result is a methodology that has
found 23 bugs in production cryptographic code---bugs that unit tests and code review
missed.
\end{abstract}
\tableofcontents
\newpage
%% ============================================================
\input{sections/01-why-fuzz-cryptographic-code}
\input{sections/02-go-fuzzing-for-cryptographic-primitives}
\input{sections/03-foundry-fuzz-testing-for-smart-contracts}
\input{sections/04-halmos-symbolic-testing}
\input{sections/05-bugs-found}
\input{sections/06-shrinking-and-reproducibility}
\input{sections/07-coverage-guided-fuzzing-internals}
\input{sections/99-conclusion}
\end{document}