The following projects assume a PKI infrastructure. However, an alternative to PKI could be used. (PGP, GnuTLS, ...)
Shared secret (symmetrical) keys could also be an alternative.
The following projects requires the exchange of keys, certificates, etc. The class could use a local store (web server, LDAP directory, thumb drive, ...) so students could exchange the necessary information for testing.
OpenSSL could be used as the class PKI infrastructure (Certificate Authority).
Use OpenSSL As A Class PKI Certificate Authority
PyOpenSSL Documentation
How to sign data using OpenSSL with Python
Python OpenSSL Examples
Create functions to encrypt and decrypt a line of text input by the user.
Create a program to display the encrypted/decrypted text.
Use another users public encryption key to encrypt the line of text. Verify the encryption by sending the line of text to the other uses.
Create functions to digitally sign a line of text input by the user.
Create a program to display the text's digital signature.
Verify the digital signature by sending the line of text and digital signature to another user.
Create functions to encrypt and decrypt a file selected by the user.
There are two aspects to the problem:
Send the file to another user to verify.
Create functions to digitally sign and verify a file selected by the user.
Assume the file is signed and sent to another user. The other use would:
Create functions to authenticate a user. (Assume the function is used to authorize the user access to sensitive data.)
1A class web site could be another project.