Public key cryptography can be built from many different types of mathematical assumptions, including those based on elliptic curves, lattices, isogenies, and codes