Crypto 101, the introductory book on cryptography.
Clone or download


Crypto 101: the book

This is the source repository for Crypto 101, the introductory book about cryptography by lvh.


See the LICENSE file.


WARNING: Please note that building (anywhere besides on the machine lvh builds on, in any way besides the way that lvh builds it) is a very new and experimental feature, and is many different kinds of broken. If you try this, and it doesn't work out, please file an issue so we can resolve it.

Run make in the root directory of the repository to convert the source files into rendered versions of all supported formats.


Please note that for now, producing a better book is the primary goal. All other things being equal, an easier to build book is better than a harder to build book, but, for example, a better illustration that relies on a new tool is better than a worse illustration.

Emacs 24

The easiest way to get this on OS X is to install Emacs via Homebrew or by downloading it from Emacs For Mac OS X.

Keep in mind that the Makefile will build using whatever emacs is in your current environment. Notably, if you're on OS X and using Emacs for Mac OS X, there's a decent chance that emacs in your shell environment will actually refer to the massively ancient version that came shipped with your OS.


You will need a recent release of org-mode. If you install it through ELPA (Emacs 24's default package repository when you do list-packages and install things), it should be found automagically. You can override the location of your org-mode installation by setting the ORG_DIR environment variable.

LaTeX environment

You will need TeX Live with a great many installed packages. You will also need latexmk and xetex, which come with TeX Live. Any effort to make this list more precise is greatly appreciated.

On Debian, you will need at least texlive-latex-recommended and texlive-xetex.


potrace is responsible for turning some of the hand-drawn images into vector formats. It is available from most package sources, including Homebrew and Macports for OS X, and pretty much every Linux distribution's default package repository.


Inkscape is necessary to render SVG sources to PDF. If you install it on OS X using the .app, you won't have a command line script; create an executable file named inkscape somewhere on your $PATH with the following contents:

#!/usr/bin/env bash
/Applications/ $@


pygments is used to render source code. You can either install it through the usual Python channels, or your operating system's package manager. On Debian and Ubuntu, this package is called python-pygments.