Designing regular array architectures using higher order functions
Proc. of a conference on Functional programming languages and computer architecture
A mechanically verified language implementation
Journal of Automated Reasoning
Synthesis of Digital Design from Recursive Equations
Synthesis of Digital Design from Recursive Equations
Computer-Aided Reasoning: An Approach
Computer-Aided Reasoning: An Approach
The verifying compiler: A grand challenge for computing research
Journal of the ACM (JACM)
Compiler verification: a bibliography
ACM SIGSOFT Software Engineering Notes
Formal certification of a compiler back-end or: programming a compiler with a proof assistant
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A robust machine code proof framework for highly secure applications
ACL2 '06 Proceedings of the sixth international workshop on the ACL2 theorem prover and its applications
Isabelle/HOL: a proof assistant for higher-order logic
Isabelle/HOL: a proof assistant for higher-order logic
Cryptol: high assurance, retargetable crypto development and validation
MILCOM'03 Proceedings of the 2003 IEEE conference on Military communications - Volume II
Formal verification of a c compiler front-end
FM'06 Proceedings of the 14th international conference on Formal Methods
Pragmatic equivalence and safety checking in Cryptol
Proceedings of the 3rd workshop on Programming languages meets program verification
Automatic formal verification of block cipher implementations
Proceedings of the 2008 International Conference on Formal Methods in Computer-Aided Design
Verified LISP Implementations on ARM, x86 and PowerPC
TPHOLs '09 Proceedings of the 22nd International Conference on Theorem Proving in Higher Order Logics
Formal Verification for High-Assurance Behavioral Synthesis
ATVA '09 Proceedings of the 7th International Symposium on Automated Technology for Verification and Analysis
Copilot: a hard real-time runtime monitor
RV'10 Proceedings of the First international conference on Runtime verification
An executable object-oriented semantics and its application to firewall verification
Software and Systems Modeling (SoSyM)
Verification condition generation via theorem proving
LPAR'06 Proceedings of the 13th international conference on Logic for Programming, Artificial Intelligence, and Reasoning
Experience report: a do-it-yourself high-assurance compiler
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security
Hi-index | 0.00 |
A verifying compiler is one that emits both object code and a proof of correspondence between object and source code.1 We report the use of ACL2 in building a verifying compiler for μCryptol, 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 μCryptol 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 μCryptol 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.