You may assume that the input is always 64 bits long: no need to worry about breaking apart long messages.
When the number of iterations is greater than one, you will use the output message from round i as the input message to round (i+1).
You might be wondering why I am requiring you to encrypt for other than 16 rounds and other than 1 iteration. I will use the ability to change the number of rounds to test correctness. For example, if your answer is incorrect for 16 rounds, but correct for 1, it's probably a bug in how you are generating round keys.
I will use the ability to change the number of iterations to test speed and correctness. Speed: I can run it enough times to isolate the runtime of the algorithm from the runtime of I/O. Correctness: I want to make sure that you aren't hard-coding anything specific to a given message or key.
If you want to display debugging output, please put a DEBUG flag of some type in your code that defaults to off. This is optional, and I won't use it unless your encryption is incorrect and you would like me to consider you for partial credit.
numIterations
),
using 16 rounds each, to determine runtimes.
In addition, the fastest program will receive 20 bonus points.
You may not multithread iterations to gain
efficiency.