the following information is *tentative* and will be updated closer
to the exam date.

- explain and carry out encryption/decryption for the basic classical ciphers covered in class (shift, affine, substitution, vigenere, permutation, hill, running key and one-time pad ciphers)
- explain and perform basic cryptanalysis on the classical ciphers we've discussed (brute force, frequency analysis, kasiski test, ...)
- understand binary, modular arithmetic, and how to go back and forth from text data to numerical data
- answer basic questions and prove simple facts about algebraic structures discussed in class (binary operations, rings, fields, groups, Z/nZ)
- answer simple questions about lfsrs and know how to use them to encrypt and decrypt data (xor with keystream generated from lfsr)
- state and apply lagrange's, euler's and fermat's little theorems

- the basic setup and protocols for public-key (channel) cryptography, and the relation to symmetric-key cryptography (e.g., diffie-hellman key exchange and digital signatures)
- rsa
- the discrete log problem
- basic primality tests and factorization algorithms

- you may use the course text and my number theory notes, but no other external references (texts, online sources, robot/human assistance, ...). in particular, you are not allowed to use the canvas discussions or other external readings you may have done. (on the other hand, i won't ask technical questions about things like pollard rho that are not describe in the text or my notes, but you should know what it is and understand the ideas for how it works and how efficient it is.)
- you may use a standard python 3 distribution (no extra modules like
`math`), but you may not use or look at any of the your code from the computer labs. that say, you are allowed to read the information on the computer lab pages to help you remember how to do something in python, as well as refer to any of the guides/tutorials i link to at the bottom of lab 1

- the final will be administered online as a canvas quiz. you may take it in a 2-hour window between 8am and 4pm on our scheduled final exam day, meaning you should start by 2pm at the latest. that said, i will build in a 15-minute buffer in case you have technical issues with canvas during the exam period. (so you will have 135 minutes from the time you start, but not later than 4:15pm on may 7, to complete the exam).
- the exam will not be proctored, but will rely on an honor code that you agree to when you start the exam.
- plan to type in your answers for each problem in text boxes, similar to how most people have been writing up their answers for discussions.
- expect a mix of technical and conceptual questions. this is also similar to some of the discussion questions and the homeworks. for the technical questions, you do not need to write all of your calculations in the text box, but you should clearly explain what you did and give relevant details at key steps.
- in terms of python, this is what you may be asked to do: i may ask you to write a python function to perform a simple task. you can either just type your code in the box, or if you want you can actually test it out in python first, but you don't have to. the other thing that you should expect to use python for is to carry out some calculations. possibly you will be able to do all necessary calculations by hand, and possibly there will be 1 or 2 calculations where you need a computer, but in any case you may freely use python (modulo the restrictions above) to do any calculation you want unless i explicitly specify that the calculation should be done by hand.
- you should study as if this were an in-class, closed-book, closed-notes exam, so that you should not need to use the book, notes or python documentation while you are taking the exam. however the point of allowing the above resources on the exam is just so you can quickly look up some fact/detail in case you forgot it. (and that the university tells me i should allow this, because i guess it is supposed to make you less likely to cheat?) if you need to look up things for every problem, you probably will not have time to finish the exam.

course home