An axiomatic basis for computer programming
Communications of the ACM
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
A Syntactic Approach to Foundational Proof-Carrying Code
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
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
Modular development of certified program verifiers with a proof assistant
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
A Compositional Natural Semantics and Hoare Logic for Low-Level Languages
Electronic Notes in Theoretical Computer Science (ENTCS)
Building certified libraries for PCC: dynamic storage allocation
ESOP'03 Proceedings of the 12th European conference on Programming
Formal verification of the heap manager of an operating system using separation logic
ICFEM'06 Proceedings of the 8th international conference on Formal Methods and Software Engineering
A compositional logic for control flow
VMCAI'06 Proceedings of the 7th international conference on Verification, Model Checking, and Abstract Interpretation
Formal proof of provable security by game-playing in a proof assistant
ProvSec'07 Proceedings of the 1st international conference on Provable security
On construction of a library of formally verified low-level arithmetic functions
Proceedings of the 27th Annual ACM Symposium on Applied Computing
Certifying assembly with formal security proofs: The case of BBS
Science of Computer Programming
On construction of a library of formally verified low-level arithmetic functions
Innovations in Systems and Software Engineering
Hi-index | 0.00 |
It is customary to write performance-critical parts of arithmetic functions in assembly: this enables finely-tuned algorithms that use specialized processor instructions. However, such optimizations make formal verification of arithmetic functions technically challenging, mainly because of many bit-level manipulations of data. In this paper, we propose an approach for formal verification of arithmetic functions in assembly. It consists in the implementation in the Coq proof assistant of (1) a Hoare logic for assembly programs augmented with loops and (2) a certified translator to ready-to-run assembly with jumps. To properly handle formal verification of bit-level manipulations of data, we propose an original encoding of machine integers. For concreteness, we use the SmartMIPS assembly language, an extension of the MIPS instruction set for smartcards, and we explain the formal verification of an optimized implementation of the Montgomery multiplication, a de facto-standard for the implementation of many cryptosystems.