Mario Infante and Keith Long
Questions Answers:
(a) Brief Description
A program that will encrypt and decrypt plaintext using four different types of ciphers.
(b) Current User Stories
- As a user I can input plaintext so that the program will encrypt the plaintext using the cipher of my choice.
- As a user I can output a text file of the encrypted plaintext via GUI so that I can have an encrypted text file saved to my local machine.
(c) Brief Assessment of Program
The software runs and displays a GUI that allows you to input a plaintext and use either of the four ciphers to encrypt plaintext input. There's also a decrypt option that will take an encrypted text and will decrypt it with one of the ciphers.
(d) Possible Future User Stories
-
As a user I can use an RSA cipher so that I would have a simulation as to how RSA public and private keys work in encryption and decryption.
-
As a user I can use the cipher GUI to encrypt and decrypt entire text files.
(e) Assessment of README.md
The README.md is very useful and thorough when explaining how all the ciphers are implemented. Some screenshots of the GUI would be useful to visualize what the program looks like when run.
(f) Assessment of Build.xml
The target "jar" is the only target that would need a description. We don't believe there is any old legacy JWS stuff in the xml file.
(g) Assessment of Current Issues
There are enough issues for us to earn 1000 points on this project. The issues are definitely clear except for the "make the gui better" issues.
(h) Additional Issues
- One issues that I've found is the use of J in the BIFID cipher, it does not encrypt/decrypt well. #48
- Align the buttons on the GUI.
- Minimize the size of the Vigenere and Bifid Cipher key windows.
- (Both of the above would fall under "Make GUI look Better")
(i) Assessment of Code
The cipher classes are written in their own classes with unique encrypt, decrypt, and random key generating methods. The GUI classes are separated by main GUI, all cipher GUI, and the actions of the main GUI.
Yes, the purpose of each class is clear and the methods are concise and perform a specific action.
It is obvious how the classes relate to one another, although the individual cipher classes do not interact with each other, it can be seen that there are useful classes such as KeyGenerator and MathUtil that assist the cipher classes in performing their encryption/decryption.
The code is definitely easy to read and understand, the comments clearly explain what the methods do. However, a few comments are missing from the Bifid Cipher methods and it would be useful to add comments for clarity.
All the ciphers are mainly constrained to their own class while occasionally referencing other classes for mathematical purposes or for the random key generator. Some of the cipher classes have more intricate encryption techniques that require extra methods to keep the code looking clean. The GUI is separated into three classes, CryptographyGUI, GUIActionMethod, and AllCipherGUI. The GUIActionMethod is the class that performs most of the actions while the other two layout the visual aspects of the GUI. There is also a small Main class, however, that class seems to only be used for direct and specific testing purposes. The actual main method can be found in the CryptographyGUI class.
(j) JUnit Assessment
There are junit tests that test individual methods within the cipher classes and there are also tests for the MathUtil class. Getters and setters are tested, then correct encryption and decryption is tested, lastly the possible thrown exceptions are tested to see if they catch illegal arguments. We can expand the test coverage because there's always room to add more tests to cover all letters of the alphabet and hidden illegal expressions to see if they'll be caught.