In this lab, you will be writing small encryption/decryption and signing/verifying programs that you can later use to prepare encrypted and authenticated messages to your friends. 

For each part of the lab, a KeyGen program has been written for you, and partial code has been provided for the other functions. Your job is to complete them. See the comments in each file for details. There are TODOs marking where you need to make changes.

For parts 2-3, you will be using the Python Cryptography library. See the documentation at https://cryptography.io/en/latest/.

In part 1, you will implement a one-time pad. 

Part 2 will use the Fernet symmetric encryption functions.

Part 3 will use the Ed25519 signing. Functions for this can be found in the cryptography library's hazardous materials layer. 

After completing all three parts and the questions, use the programs you have written to send encrypted and authenticated messages to others in the class. On a piece of paper, write down your name, the message you wrote, and the name of the person(s) to whom you sent the message. When you receive a message, write down the name of the person who sent it to you and the message you decrypted. Before leaving, turn in the paper with the messages and the sender/receiver names.

When done, please answer the questions in questions.txt and submit on Gradescope (due by 11:59pm on the day after the lab).
