Overview

For this assignment, you will use your hash table ADT to create a personal password manager application (a password vault). Your application will store and retrieve passwords given a system descriptor that is provided by the user. The system descriptor can be any unique alphanumeric string. The information will be stored in a data file of your own design. You do not have to encrypt the passwords for this assignment, but are encouraged to do so if you have any intention of using the password vault. Your application must be intuitive and easy to use. Your program must have functions to authorize the user to use the program, open a password file and load it into the hash table, start a new password file, add passwords, remove passwords, retrieve passwords and update passwords.

The password program must be written in C including the hash table, hash functions, and functions to add, retrieve, edit and manage passwords. The UI should be constructed using ncurses as the UI library. Consult the ncurses tutorial in the Review section of the course for help with ncurses. The final program must run on the SOCS debian system without requiring any additional installations.

You will submit a tar.gz file to the assignment drop box. The tar.gz file will contain your source code, a make file, your documentation and your testing files. Details about the organization of these files are provided below under the Submission heading.

If you wish to encrypt passwords, consider using MD5 encryption. You may use code found on the Internet for the password encryption portion of your submission, provided it is well documented and cited.

Required Prior Knowledge

Before you attempt this assignment, please ensure that you have a good understanding of the concepts listed below. Consult the Review section or References section of the course website if you need a refresher on any of these concepts:

  • Linked Lists;
  • Using void * pointers to pass data elements to an ADT;
  • Using function pointers to pass in data management functions to the ADT (destroy, compare and print);
  • Using doxygen to generate documentation for C programs;
  • Writing and using makefiles to manage a software system build process;
  • Using tar and gzip to group and archive files and folders.

Instructions

Use a Hash Table ADT to create a personal password vault application. You may use the Hash Table you created for Lab Project 2 or you may create a new Hash Table. The hash table must be abstracted to use void * data.

The user of the application must be able to do the following:

  • Create a new password file or open an existing password file: The password vault program is intended to be a single user program that manages the passwords of a single user. If you wish to create a multiuser program you may.
  • Manage passwords: Users must be able to change passwords for an existing system, add a new system and password, retrieve passwords, and remove a system entirely from the password vault. Systems should be identified by a unique alphanumeric string. You may allow users to provide a description of each system to enhance usability if you wish. The user should not be able to edit the alphanumeric string used as the key for the hashtable.
  • Set and change the program password: The password vault should be protected by a program password. Ideally this password should be encrypted but that is not a requirement for this assignment. It is a recommended addition.
  • Use the program: Users of this program should be able to make common errors without crashing the program. They should not be able to break the program by providing input that is too long or too short, they should be provided with prompts to retry in the event that input is incorrect rather than simply closing the program, they should be prompted for input with informative, grammatically correct prompts. Make your program enjoyable to use.
Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.