Cryptography Theory and Practice