Understanding Cryptography: A Textbook for Students and Practitioners