Preface
1.
Introduction
1.1.
Kerckhoff's Principle
1.2.
Symmetric encryption
1.3.
Secret sharing
1.4.
Asymmetric encryption
1.5.
P versus NP problem
1.6.
Trapdoor and one way functions
1.7.
Randomness
1.8.
Hashes and Random Oracle
1.9.
Zero Knowledge Proofs
1.10.
Fully Homomorphic Encryption
1.11.
Secure Multi-Party Computation
2.
Building Blocks
2.1.
XOR and one-time pads
2.2.
Natural Numbers
2.3.
Integers
2.4.
Divisibility and greatest common divisors
2.5.
Modular arithmetic and congruences
2.6.
Groups
2.7.
Rings
2.8.
Fields
2.9.
Fermat's little theorem and Euler, Cauchy and Lagrange theorems
2.10.
Discrete logarithm
2.11.
Primitive roots
2.12.
Polynomials
2.13.
Polynomial interpolation
2.14.
The Arithmetic of Elliptic Curves
2.15.
Pairings and field extensions
2.16.
Lattices
2.17.
Ring learning with errors
3.
Secret sharing
3.1.
Diffie–Hellman key exchange
3.2.
Elliptic Curves Diffie Helman
3.3.
ElGamal
4.
Symmetric encryption
4.1.
Information vs Computational Security
4.2.
Bit Operations
4.3.
Stream and block ciphers
4.4.
AES
4.5.
ChaCha20 and XChaCha20
4.6.
MiMC
4.7.
Rescue and Vision
5.
Asymmetric encryption
5.1.
Primality Testing
5.2.
RSA
5.3.
Fast Multiplication Algorithms
5.4.
Elliptic Curves
5.5.
The discrete logarithm problem
6.
Hash functions
6.1.
Merkle Tree
6.2.
BLAKE2b
6.3.
Pedersen
6.4.
Poseidon
7.
Pseudorandom number generators
8.
Signatures
8.1.
Schnorr
8.2.
MuSig
9.
Message Authentication Codes
9.1.
Poly1305
10.
SNARKs
10.1.
Overview
10.2.
Arithmetization
10.3.
Probabilistically Checkable Proof
10.4.
Interactive oracle proof
10.5.
Polynomial commitments
10.6.
Multiscalar Multiplication
10.7.
Groth16
10.8.
Plonk
11.
STARKs
11.1.
AIR
12.
Fully Homomorphic Encryption
13.
Secure Multi-Party Computation
Light
Rust (default)
Coal
Navy
Ayu
Cryptography in Rust for Hackers
Pseudorandom number generators