mirror of
https://github.com/lux-apps/papers.git
synced 2026-10-30 18:15:21 +00:00
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.
81 lines
2.5 KiB
TeX
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}
|