CSE543 - Project #2 - Gcrypt Public Key Operations

Due Date: October 12th, 2010.

This assignment demonstrates the use of the <\b>gcrypt library functions to implement a cryptographic protocol. In particular, you are to build public key pairs to encrypt and authenticate messages that can be decrypted and verified.

Follow these instructions:

  1. Obtain the tarfile from here.

  2. Unpack the tarfile in some appropriate directory on a UNIX system (there are many available at CSE -- see Notes below). You will need to get the gcrypt library (and its dependencies) if the machine does not have it installed already.

  3. You task is to implement three (3) functions: (1) GenerateKeyPair; (2) SealMessagePK; and (3) GetMessagePK. There are comments in the files to guide you to implement the proper functionality.

    These functions must complete the following tasks:

  4. You have some leeway about what format to store the encrypted data and signature. I stored the S-expressions directly, but you can extract the data. My only requirements are: (1) that encrypted data and signatures are generated and (2) that I can use the sequence of commands below to encrypt, sign, decrypt, and verify the provided data.

  5. I aim to test your code by running the following four commands with my own input data (no more than 100 bytes). This emulates a sender generating an encrypted, signed message that is then decrypted and verified by a receiver.


  1. You are to complete this on your own. Any sharing of code or help during the coding of this project is expressly forbidden. Do not discuss this project with anyone.

  2. A Makefile has been created to help you build the applications. To build, simply type "make" in the target directories.


gcrypt library -- As part of this assignment, you will be required learn and use the GNU cryptography library. Details of this library are presented in the manual. Do not contact the professor (or anyone else) for information about this library -- learning how to use it is part of the exercise.

Trent Jaeger
Last modified: Seb 20 06:43:07 EST 2010