Public-key cryptography is essential to modern communications. Two of its most important building-blocks are key exchange, which allows us to initiate secure communication over an insecure channel, and digital signatures, which identify and authenticate data. While these primitive operations are well-understood from a theoretical point of view, actually implementing them in a practical, efficient way becomes even greater challenge when we move to smaller computing devices. Here the memory, time, and energy available for computation are at a premium; this is a big problem for cryptography, which typically requires intensive computation to assure an acceptable level of security. This talk will explain how we have applied the theory of Kummer surfaces — classic objects in algebraic geometry — to produce compact, high-speed software for secure key exchange and signatures on microcontrollers.