A verifying core for a cryptographic language compiler
Lee Pike, Mark Shields, John Matthews. In the Sixth International
Workshop on the ACL2 Theorem Prover and its Applications (ACL2'06),
Seattle, Washington. 11 pages. August, 2006.
[letter pdf]
Abstract
A verifying compiler is one that emits both object code and a proof of
correspondence between object and source code. We report the use of
ACL2 in building a verifying compiler for microCryptol, a
stream-based language for encryption algorithm specification that
targets Rockwell Collins' AAMP7 microprocessor (and is designed
to compile efficiently to hardware, too). This paper reports on our
success in verifying the "core" transformations of the
compiler - those transformations over the sub-language of microCryptol
that begin after "higher-order" aspects of the language are
compiled away, and finish just before hardware or software specific
transformations are exercised. The core transformations are
responsible for aggressive optimizations. We have written an ACL2
macro that automatically generates both the correspondence theorems
and their proofs. The compiler also supplies measure functions that
ACL2 uses to automatically prove termination of microCryptol programs,
including programs with mutually-recursive cliques of streams. Our
verifying compiler has proved the correctness of its core
transformations for multiple algorithms, including TEA, RC6, and
AES. Finally, we describe an ACL2 book of primitive operations for the
general specification and verification of encryption algorithms.