Choice of Project ...

 ... is up to you, but see the grading prolicy described below,
The project must of course be related to the course material:  You
could, for example, implement a particular encryption scheme, or a
cryptographic protocol, or an algorithm for breaking an encryption
method, etc.  However, it is not necessary for the topic of your
project to be covered in class or even in the book -- you could choose
something from some other book or even from a journal or conference
paper. You can use any programming language you want.  Even if you want
to implement a topic that will be covered in class, you should not wait
for that to happen because it may be too close to (or even after) the
project is due; you should read it on your own so that you can get an
early start.  

For a project to involve no (or very little) programming, it must 
produce a research paper that contains a novel result that is acceptable 
in a quality research conference.  I will judge whether the new result 
is acceptable based on the written paper and on a detailed presentation
given to me by the group (in which I will also judge each member's
understanding of the result).  Note that this is a risky option (e.g., 
the problem tackled may be too difficult to solve, or the solution may
be trivial and hence non-publishable, etc -- even experienced researchers
can mis-judge a research problem's level of difficulty or novelty).  The 
comments below apply to traditional projects (that involve a substantial 
programming implementation effort) rather than to the "research paper" 
option, for which the paper and presentation deadline are both "before the 
last day of classes".

Project Due Dates

On or before week 13 of the semester ...

 
 ... you should turn in a report that contains (1) a listing of your 
program, (2) the separate document that describes it and (3) 
your test data and results.  You will lose 10% of the project grade 
for each day these items are late.

After you turn in your report but before the last day of classes ...

 
 ... you will demonstrate your project to the TA and/or me.
Some of the grading (mostly correctness and efficiency) will be 
based on this demonstration.

How the Project will be graded

Quality of the plan--15%

How difficult is the attempted project?  How creative is it?  How
innovative is it?  For example, designing a new cryptographic algorithm
is worth more points than doing a well known standard algorithm.

Correctness--35%

Do all of the parts of the program work essentially correctly?

Style and Documentation--20%

Does the program exhibit high standards of programming style and layout?
Does the internal documentation have helpful and enlightening comments?
Do you tell the source of any code which you did not write? Is there a well
written separate document to explain the project?  (You should write the
separate document first and revise it after the program is finished.)

Efficiency--15%

Is the program reasonably efficient?  If it takes an hour to construct a
120-digit prime, it is not efficient.  If your DES takes an hour to
encipher a 1K byte file, it is not efficient.

Testing--15%

Part of the project is to create test data which will test all parts of
the program.  Did you exhibit your test data and the results of the
testing?  Did you explain why the test results really show that all of
your program works?

Honesty

The three people on a team are supposed to cooperate to write the program.
All other collaboration is forbidden.  You need not write all the code in 
your program.  However, you should tell us what code you did not write and 
where you obtained it.