MATH308 Number Theory and Cryptography