v2.1.0
Cryptol 2.1.0
Language Semantics
- Changed indexing of tuples to be 0-based, rather than 1-based (#82)
Cryptol> (True, False).0
True
Cryptol> (True, False).1
False
Testing, SAT, and Prove
- Added
:exhaust
command for exhaustive testing (previously possible only by setting thetests
variable high enough for full coverage) (#94) - Added
any
solver which runs all available solvers in parallel and returns the first result (#7) - Added offline mode for generating SMTLIB output, rather than invoking a solver (#85)
- Added support for Boolector and MathSAT solvers
- Improved distribution of
:check
cases (#86) - Improved performance and stability of the Cryptol symbolic simulator
REPL
- Added let-binding to the REPL (#6)
Cryptol> let f x = x + 2
Cryptol> let g x = f x + 1
Cryptol> g 5 : [32]
8
Cryptol> let f x = 0
Cryptol> g 5 : [32]
8
- Added short versions of
:
commands (listed in:help
output); the old behavior of entering a prefix of a command still works but is overridden when the prefix is also another command (#90, #99) - Added the variable
it
to the REPL, which is always bound to the value of the previously-evaluated expression or to the counterexample/satisfying assignment of a:sat
or:prove
Cryptol> 1+1 : [1]
0x0
Cryptol> it
0x0
Cryptol> :t it
it : [1]
- Changed default base to 16 (#89)
- Minor UI improvements to the REPL
- When
:check
and:prove
are run without an argument, allproperty
declarations in the current module are now checked or proved (#93)
Documentation
- Improved handling of fenced code in literate Cryptol Markdown files
- Many improvements to documentation and the Programming Cryptol book
Examples
- FNV-1a non-cryptographic hash
- Keccak hash
- ZUC cipher
- Malicious SHA
Bugs
- Fixed bug in Salsa20 example
- Fixed crash when complementing infinite sequences (#65)
- Fixed crash with large index sizes (#111)
- Fixed handling of layout blocks ended by parentheses or curly braces (#81)
- Fixed how we find the
Cryptol.cry
prelude file (#113) - Fixed minor typos and editing errors
- Fixed some crashes during Cryptol Symbolic simulation (#101)
- Fixed various bugs in the type system constraint solver
- Handle exceptions properly when running
:check
(#103) - Improved build system portability and compatibility (#23, #71)
- Modules are now only loaded once per load command (#10)
- Pretty-printer for Cryptol expressions now correctly parenthesizes infix operators
- The
@
,!
, and!!
operators now require finite-sized indexes (#111)