mirror of
https://github.com/GaloisInc/cryptol.git
synced 2024-12-25 00:42:37 +03:00
61 lines
2.9 KiB
TeX
61 lines
2.9 KiB
TeX
|
\chapter*{Preface}
|
||
|
\addcontentsline{toc}{chapter}{Preface}
|
||
|
|
||
|
Cryptol is a domain-specific language for programming, executing,
|
||
|
testing, and formally reasoning about streams of bits. It
|
||
|
particularly excels at specifying and reasoning about cryptographic
|
||
|
algorithms. It has been designed to reduce the gap that currently
|
||
|
exists between the {\it specification} of a cryptographic algorithm
|
||
|
and its executable {\it implementation}. As a result, a well-written
|
||
|
Cryptol program will look very much like the specification of the
|
||
|
algorithm it implements, and is also executable.
|
||
|
|
||
|
Our goal in this book is to both teach you the Cryptol language and
|
||
|
provide a reference text for the use of the Cryptol system. The
|
||
|
Cryptol system provides: (1)~a REPL for experimentation, (2)~a parser
|
||
|
and typechecker for Cryptol programs, (3)~an interpreter for executing
|
||
|
Cryptol programs, (4)~automatically checking the correctness of
|
||
|
Cryptol programs via randomized testing, and (5)~formally verifying
|
||
|
Cryptol programs through the use of an SMT solver.
|
||
|
|
||
|
We demonstrate Cryptol in action via normal programming problems,
|
||
|
traditional cryptographic techniques (such as substitution ciphers),
|
||
|
historical cryptographic mechanisms (such as the Enigma), and modern
|
||
|
algorithms (such as DES, SHA, and AES), focusing on how they are
|
||
|
elegantly modeled using the Cryptol language. Since our emphasis is
|
||
|
on programming, we introduce some of the techniques that are useful
|
||
|
for the working programmer, including the use of Cryptol's validation
|
||
|
and verification tools that directly support high-assurance
|
||
|
programming.
|
||
|
|
||
|
Our approach is hands on. We strongly urge the reader to try out the
|
||
|
material using the Cryptol toolset directly. It would be most
|
||
|
effective to read this document while trying the code and interacting
|
||
|
with Cryptol itself. For information on how to download and use the
|
||
|
Cryptol toolset, please visit \url{www.cryptol.net}.
|
||
|
|
||
|
Most exercises come with solutions provided at the end. We urge the
|
||
|
readers to refer to solutions as a last resort as they work through
|
||
|
the exercises.
|
||
|
|
||
|
\note{This book covers Cryptol version 2, which is still under
|
||
|
development. It is possible that the syntax and semantics for the
|
||
|
language or commands will change. You may encounter bugs or
|
||
|
unexpected behaviors. Please let us know if you encounter any
|
||
|
problems, by sending email to {\tt cryptol@galois.com} or by
|
||
|
visiting our GitHub presence linked from the Cryptol website.}
|
||
|
|
||
|
The authors of this book are Levent {Erk\"{o}k}, Dylan McNamee, Joseph
|
||
|
Kiniry, Iavor Diatchki, and John Launchbury, with contributions from
|
||
|
Magnus Carlsson, Kyle Carter, Trevor Elliott, Adam Foltzer, Brian
|
||
|
Huffman, David Lazar, John Matthews, Eric Mertens, Matt Sottile, Aaron
|
||
|
Tomb, and Adam Wick.
|
||
|
|
||
|
\todo[inline]{Replace manual use of Trac URLs with \texttt{ticket}
|
||
|
macro everywhere.}
|
||
|
|
||
|
%%% Local Variables:
|
||
|
%%% mode: latex
|
||
|
%%% TeX-master: "../main/Cryptol"
|
||
|
%%% End:
|