This course will introduce recent tools for programmable cryptography, such as zero-knowledge
proofs, multi-party computation, fully homomorphic encryption, private information retrieval,
differential privacy, and trusted execution environments. These tools take as input a computation,
and execute it securely and privately over some data, for different definitions of secure and private.
We will learn what these different tools can do, learn how they work internally, learn how to prove
security for some of them, and also write some code to use and implement them.