1993-07-11 - PGPcompose, a mail wrapper

Header Data

From: nate@VIS.ColoState.EDU (CVL staff member Nate Sammons)
To: cypherpunks@toad.com
Message Hash: d59431b9468715074f660ebab7b92e0467bb61d6a0f630808d301e2b4a8a9096
Message ID: <9307112128.AA15649@vangogh.VIS.ColoState.EDU>
Reply To: N/A
UTC Datetime: 1993-07-11 21:28:24 UTC
Raw Date: Sun, 11 Jul 93 14:28:24 PDT

Raw message

From: nate@VIS.ColoState.EDU (CVL staff member Nate Sammons)
Date: Sun, 11 Jul 93 14:28:24 PDT
To: cypherpunks@toad.com
Subject: PGPcompose, a mail wrapper
Message-ID: <9307112128.AA15649@vangogh.VIS.ColoState.EDU>
MIME-Version: 1.0
Content-Type: text/plain


-----BEGIN PGP SIGNED MESSAGE-----

CypherPunks,

I have been looking for a good mailer lately, or at least
a mail wrapper to sign and encrypt my mail easily.  I was
not completely satisfied with the wrappers that I could 
find, and especially since they mostly need perl.  So,
in a fit of frustration, I did what any good CypherPunk
would do: I wrote one.  It is called "PGPcompose" and 
if you invoke it with a username, it will prompt for 
the subject, open vi for editing, then ask you if you want
to sign the message, and encrypt it (either, or both),
then it asks for the key to use for encryption (if you choose
to encrypt the message).  It will then ask if you want to 
send, edit, or abort the message.  it uses /usr/ucb/mail
instead of sendmail, since I could not figure out how to
parse the ~/.mailrc file, and since it took less than 
a few hours to hack out.  Anyway, here it is, it's free,
so do whatever you want with it.

- ---------------------BEGIN PGPcompose-------------------
/* "PGPcompose" (comp) -- a replacement for the mail composition  */
/* program.  It allows for PGP signatures and encryption          */
/* for mail.  It asks for the ID of who the file is to be         */
/* encrypted for...  I did this because I have lots of            */
/* public keys, and some of the other mailers became              */
/* confused on occation and did not find the right key to         */
/* use for the encryption.  It also asks if you want to continue, */
/* abort or edit the message...                                   */
/*                                                                */
/* This software is free for the taking... if you modify it, send */
/* me the modification, since I'll be curious.                    */
/*        -nate sammons, July 11, 1993, nate@vis.colostate.edu    */


#include <stdio.h>

main(int argc, char *argv[])
{
	int intPID;
	int signMess, cryptMess;
	char subject[130];
	char cryptWho[100];
	char charPID[10];
	char theChoice[5];
	char messageName[100];
	char messageHeaderName[100];
	char messageCypherName[100];
	char commandLine[300];
	char scriptName[100];

	FILE *tmp;
	FILE *script;
	FILE *message;

	intPID = getpid();
        tmp = fopen("/tmp/PID.tmp", "w");
	fclose(tmp);
	tmp = fopen("/tmp/PID.tmp", "a");
        fprintf(tmp, "%d", intPID);
	fclose(tmp);
	tmp = fopen("/tmp/PID.tmp", "r");
	fscanf(tmp, "%s", charPID);
        fclose(tmp);

	strcpy(messageName, "/tmp/message.tmp.");
	strcat(messageName, charPID);
	strcpy(messageCypherName, "/tmp/message.cypher.");
	strcat(messageCypherName, charPID);
	strcpy(scriptName, "/tmp/message.script.");
	strcat(scriptName, charPID);

	message = fopen(messageName, "w");

	switch(argc)
	{
	case 2: printf("PGPcompose, (c)1993 Nate Sammons\n");
		printf("Subject: ");
		gets(subject);

		editIt:
                strcpy(commandLine, "vi ");
                strcat(commandLine, messageName);
                system(commandLine);

                signIt:
                printf("Sign this message? [y,n] : ");
                gets(theChoice);
                switch(theChoice[0])
                {
                case 'y':
                case 'Y': signMess = 1;
                        break;
                case 'n':
                case 'N': signMess = 0;
                        break;
                default: goto signIt;
                        break;
                }

                cryptIt:
                printf("Encrypt this message? [y,n] : ");
                gets(theChoice);
                cypherWithWho:
                switch(theChoice[0])
                {
                case 'y':
                case 'Y': printf("  With whose key? : ");
                        gets(cryptWho);
                        if (cryptWho[1] == NULL)
			{
                                goto cypherWithWho;
			}
                        cryptMess = 1;
                        break;
                case 'n':
                case 'N': cryptMess = 0;
                        break;
                default: goto cryptIt;
                }

		Continue:
		printf("send, abort, edit? : ");
		gets(theChoice);
		switch(theChoice[0])
		{
		case 's':
		case 'S': goto sendIt;
		case 'a':
		case 'A': system("/bin/rm -rf /tmp/message*");
			system("/bin/rm -rf /tmp/PID.tmp");
			exit(0);
		case 'e':
		case 'E': goto editIt;
		default: goto Continue;
		}

		sendIt:
                if((signMess == 1) && (cryptMess == 1))
                {
		script = fopen(scriptName, "w");
                fprintf(script, "cat %s | pgp -feast +clearsig=on \"%s\" > %s\n", messageName, cryptWho, messageCypherName);
		fclose(script);
		strcpy(commandLine, "chmod +x ");
		strcat(commandLine, scriptName);
		system(commandLine);
		system(scriptName);
		script = fopen(scriptName, "w");
		fprintf(script, "cat %s | /usr/ucb/mail -s \"%s\" %s", messageCypherName, subject, argv[1]); 
		fclose(script);
		system(commandLine);
		system(scriptName);
                }

                if((signMess == 1) && (cryptMess == 0))
                {
		script = fopen(scriptName, "w");
		fprintf(script, "cat %s | pgp -fast +clearsig=on > %s\n", messageName, messageCypherName);
		fclose(script);
		strcpy(commandLine, "chmod +x ");
		strcat(commandLine, scriptName);
		system(commandLine);
		system(scriptName);
		script = fopen(scriptName, "w");
		fprintf(script, "cat %s | /usr/ucb/mail -s \"%s\" %s", messageCypherName, subject, argv[1]);
		fclose(script);
		system(commandLine);
		system(scriptName);
                }

                if((signMess == 0) && (cryptMess == 1))
                {
		script = fopen(scriptName, "w");
		fprintf(script, "cat %s | pgp -fea \"%s\" > %s\n", messageName, cryptWho, messageCypherName);
		fclose(script);
		strcpy(commandLine, "chmod +x ");
		strcat(commandLine, scriptName);
		system(commandLine);
		system(scriptName);
		script = fopen(scriptName, "w");
		fprintf(script, "cat %s | /usr/ucb/mail -s \"%s\" %s", messageCypherName, subject, argv[1]);
		fclose(script);
		system(commandLine);
		system(scriptName);
                }

                if((signMess == 0) && (cryptMess == 0))
                {
		script = fopen(scriptName, "w");
		fprintf(script, "cat %s | /usr/ucb/mail -s \"%s\" %s", messageName, subject, argv[1]);
		fclose(script);
		strcpy(commandLine, "chmod +x ");
		strcat(commandLine, scriptName);
		system(commandLine);
		system(scriptName);
                }
		system("/bin/rm -rf /tmp/message*");
		system("/bin/rm -rf /tmp/PID.tmp");
		break;
	default: printf("Useage: comp username\n");
		exit(0);
	}
}

- ---------------------END PGPcompose---------------------

- -nate sammons
+--------------------------------------------------------------------
| Nate Sammons   email: nate@VIS.ColoState.Edu
|      Colorado State University Computer Visualization Laboratory
|      Finger me at nate@monet.VIS.ColoState.Edu for my PGP key
|  #include <std.disclaimer>
|  "I have but one single desire - to tear down the sky" -A. Toomba
+----------------------+

-----BEGIN PGP SIGNATURE-----
Version: 2.3

iQCVAgUBLECF4NTgi1fmrpxlAQGhbgP6AiZCyU2+qf5O06r3mE1JB4XWDocuK175
CO/HJU/8+QekgBG7+6PewERnqLt0pVPuTVmdWkHJyQ+VJyrPRiDlWzI7G2yJqwvG
sTCI9CT6cHbp0jBRzQhj48SFcN+Gr+nZ06Nc8/93X7/+QGZVtz+0MMTFXz8oVcEe
TWYeBNkXhDg=
=P0IW
-----END PGP SIGNATURE-----





Thread