Files
papers/lux-fuzz-testing-methodology/lux-fuzz-testing-methodology.tex
zeekay f4ee7a0525 Publish under the org, not a person
Bylines, paper authorship, correspondence addresses and the founder blurb under
each post named an individual. They name the organisation that published the
work instead: the brand on posts and pages, the research byline on papers, and
research@ in place of a personal address. Both are what these repositories
already used elsewhere — nothing new was coined.

Co-authors are untouched. Where a paper named someone else alongside, they stay
named; only the one byline changed. Bibliography entries, running heads,
PDF metadata and affiliations move with it, so a citation still resolves to
whoever the cited paper names.

Sample and fixture data uses the placeholder name these tests already use
elsewhere, so no assertion changed meaning.
2026-09-01 08:58:10 -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{
Lux Research \\
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}