Understanding Cryptography A Textbook for Students and Practitioners