Hands-On Cryptography with Python, by Samuel Bowne