PGP 2.6.2: Frequently Asked Questions, Known Bugs, and Improvements

Version: $Revision: 1.19 $

Pretty Good Privacy (PGP) version 2.6.2 was released by MIT on October 24, 1994. It available via anonymous ftp to Alternatively, you can use a forms interface to obtain PGP from the Web.

Once you get PGP and start using it, you might want to consider using the PGP Public Keyserver, which is available on the Web. Alternatively, you can learn how to use the Keyservers by email to add your Public Key to the public keyservers.

This page lists a number of frequently asked questions about PGP 2.6.2, and also will list any known bugs that we either have fixed or do not intend to fix. By looking at this page, you might save yourself the time of sending an email, and saving us the time of answering a question many times over.

Frequently Asked Questions

Q: I just tried generating a set of keys and was told that the program could not create the files /(blah)/gjcoram/.pgp/(whatever), perhaps because I did not have a directory called /.pgp ? In any case, I had to go through the whole procedure; it said "key generation completed", and I couldn't find any keys in my directory.

A: If you read the documentation, it states that if you do not have PGPPATH set, it will put a key into the directory $HOME/.pgp, which you must have previously created. Since you didn't set PGPPATH, and you didn't create $HOME/.pgp, it failed. Perhaps it should not have said that the Key Generation completed successfully.... Maybe this should be considered a bug.

Q: I don't know what a "bin directory" means. I didn't know how to create a sub-directory "~/.pgp" because I don't know what "~" means. And I don't know how to "set the environment variable "PGPPATH"".

A: Well, this depends on whether you are on UNIX, MS-DOS, or some other platform. A bin directory is a directory that you have created in which to hold binary programs. If you are system administrator, then this usually means a system binary directory, like /usr/local/bin. If you ar just a normal user, then a bin directory can mean ~/bin, or some directory in your home directory in which you keep your personal binaries and programs. The ~ character stands for your home directory, or $HOME.

To create a directory, you use the mkdir command:

To set an environment variable depends on the platform you are on. For DOS, to set the PGPPATH environment variable, you do: For UNIX, it depends on the shell. For csh, you use the setenv command: For sh, you have to do something similar to DOS:

Known Bugs (with Fixes when available)

SunCC fails to compile sparc.S

You need to fix the makefile so that it uses this rule instead of the old one to make _sparc.s from sparc.S. 21 Aug 95
$(CPP) $(ASMDEF) sparc.S | grep -v '^# ' | sed -e '/% [iol]/s/% /%/' > _sparc.s

Using -o doesn't use that file

I noticed that when you use the -o option, PGP still appends a type to it. So, for example, if you say pgp -sat -o foo bar it would output foo.pgp. I considered this a bug. The fix is a short patch to pgp.c:
*** /tmp/,RCSt1a25744   Fri Dec 23 11:07:33 1994
--- pgp.c		Fri Dec 23 11:07:34 1994
*** 1084,1091 ****
        } else {
            strcpy(name, inputfile);
-       }
-       if (no_extension(name)) {
            if (emit_radix_64)
                force_extension(name, ASC_EXTENSION);
            else if (sign_flag && separate_signature)
--- 1084,1089 ----

Problems with the 3b1 platform

Someone reported that the 3b1 platform make rules didn't work properly. This was fixed by adding memmove.o to the makefile, and by changing the 3b168010.o to 3b168000.o There are also problems with struct timeval and gettimeofday being missing, but I don't have patches for that, yet. 16 Dec 94

Bug using -o and same file

If you run PGP with -o, and give it the same output file and the input file, PGP may do the wrong thing. It appears to only be a problem with clearsigned messages. The fix is a short patch to pgp.c:
*** /tmp/,RCSt1a25686	Fri Dec 23 11:02:33 1994
--- pgp.c	Fri Dec 23 11:01:54 1994
*** 974,980 ****
  	/* for clear signatures we create a separate signature */
  	status = signfile(nestflag, separate_signature || (clearfile != NULL),
  		   my_name, workfile, tempf, literal_mode, literal_file);
! 	rmtemp(workfile);
  	workfile = tempf;
  	if (status < 0) {	/* signfile failed */
--- 974,985 ----
  	/* for clear signatures we create a separate signature */
  	status = signfile(nestflag, separate_signature || (clearfile != NULL),
  		   my_name, workfile, tempf, literal_mode, literal_file);
! 	if (clearfile) {
! 	    rmtemp(clearfile);
! 	    clearfile = workfile;
! 	} else
! 	    rmtemp(workfile);
  	workfile = tempf;
  	if (status < 0) {	/* signfile failed */
Reported 2 Dec 94; Fixed 23 Dec 94

PGP is case-sensitive with file extensions

I received this bug report. I have not verified it, yet.
When decrypting a PKZIP'ed file, and the -o command is
used to specify the output filename, and the ".ZIP"
extension is entered in upper case, PGP does not
recognize that a .ZIP extension is being supplied:

C:\DOS>pgp foo.pgp -o foo.ZIP

Plaintext filename: foo.ZIP
Plaintext file 'foo.ZIP' looks like a PKZIP file.
Should 'foo.ZIP' be renamed to '' [Y/n]?

PGP Doesn't use CTB length-of-length?

Someone reported that PGP doesn't use the length-of-length bits (1,0) of the CTB byte. This has not, yet, been verified as a real bug. 8 Nov 94

Building PGP 2.6.2 under BSD 4.3

This has been verified to fail given the released code. Patches forthcoming. 25 Oct 94

Makefile bug for Sun4-Sunos5-acc

There is a bug in the Makefile for sun4sunos5acc: The original says:
        $(MAKE) all CC=cc LD=gcc OBJS_EXT=sparc.o \
This should be changed to read:
        $(MAKE) all CC=cc LD=cc OBJS_EXT=sparc.o \
This will allow PGP to be linked properly on this platform. 25 Oct 94

Building RSAREF under VMS

The RSAREF package was not updated from 2.6.1, and when trying to build the RSAREF library for VMS, an error will occur looking for the file global.h. The fix is to copy the file from rsaref/install/unix to rsaref/source. 25 Oct 94

The Mysterious Missing strtol()

Some platforms do not have the strtol() function in their library. If you have this problem, then you should download strtol.c from here or ftp it from some site. This is just from the public domain berkeley sources in lib/libc/stdlib. 24 Oct 94

GMT not calculated correctly (Unverified bug report)

Someone sent me this bug report:

For your information, I believe PGP 2.6.1 does not calculate GMT correctly. Because I'm in central Europe, I did set the TZ environment variable to MET-1DST. Here are some examples:

	Actual time is: 17:50   05:50   12:06
	PGP reports:    06:50   18:50   01:06
This can't be true, usually GMT is just one hour behind central European 24 Oct 94

New Improvements

Linux/ELF changes

THe PGP 2.6.2 sources do not build under Linux/ELF. If you want to build 2.6.2 as an ELF binary, you need to make two changes, one each to 80386.S and zmatch.S. Near the beginning of the file you will find a #if directive for SYSV. Apply the appropriate change to the appropriate file to get it to work 13 Oct 95:

Apollo running DomainOS

If you want to build PGP on an apollo, you should use these rules. 20 Aug 95
#  Apollo running DomainOS Release 10.4 (bsd4.3)
	$(MAKE) all CC=cc LD=cc \

#  Apollo running DomainOS Release 10.4 (bsd4.3) and gcc 2.6.0
	$(MAKE) all CC=gcc LD=gcc \

SCO OpenDesktop 3.0 Development System (no GCC)

For SCO 3.0, without gcc, someone sent in this makefile rule 20 Aug 95:
	$(MAKE) all CC=cc LD=cc CPP=/lib/cpp OBJS_EXT=_80386.o \
	-DUSE_NBIO" LDFLAGS="-lsocket"

        $(MAKE) all CC=gcc LD=gcc CPP=/usr/lib/xcpp OBJS_EXT=_80386.o \
        ASMDEF=-DSYSV CFLAGS="-traditional-cpp $(RSAINCDIR) -Dsco -O \
        -DUNIX -DIDEA32 -DUSE_NBIO" LIBS_EXT=-lsocket

Data General AViiON mc88100

Try this for a Data General unix using GCC 20 Aug 95:
	$(MAKE) all CPP=/lib/cpp CC=gcc LD=gcc\

HP/UX PA-Risc assembly

If you are running HP/UX on a PA-risk platform, you may want to look at this. These patches contain HP-PA assembly patches which will supposedly speed up PGP performance on the HP/PA platform. 17 Dec 94

FreeBSD patches

If you add this rule to the makefile and then make a short change to zipup.c, you can compile PGP 2.6.2 for FreeBSD. First, the makefile change:
	$(MAKE) all LD="$(CC) -s" OBJS_EXT="_80386.o _zmatch.o" \
Then in zipup.c you need to #include "system.h" and then change the check where lseek() is defined.
*** /tmp/,RCSt1a17971	Thu Dec 22 16:16:56 1994
--- zipup.c	Thu Dec 22 15:56:49 1994
*** 14,22 ****
  #define NOCPYRT         /* this is not a main module */
  #include <ctype.h>
! #ifdef __QNX__
 #include <unistd.h>
! #endif
  #include "zip.h"
  #include "zrevisio.h"
--- 14,20 ----
  #define NOCPYRT         /* this is not a main module */
  #include <ctype.h>
! #include "system.h"		/* Mainly for <unistd.h> */
  #include "zip.h"
  #include "zrevisio.h"
*** 39,47 ****
  #    include <fcntl.h>
  #    define fhow (O_RDONLY|O_BINARY)
  #  else /* !MSDOS */
! #if !(defined(AMIGA) || defined(__NetBSD__))
       long lseek();
! #endif /* AMIGA */
  #    define fhow 0
  #  endif /* ?MSDOS */
     typedef int ftype;
--- 37,45 ----
  #    include <fcntl.h>
  #    define fhow (O_RDONLY|O_BINARY)
  #  else /* !MSDOS */
! #ifndef HAVE_UNISTD_H
       long lseek();
! #endif /* HAVE_UNISTD_H */
  #    define fhow 0
  #  endif /* ?MSDOS */
     typedef int ftype;
14 Dec 94

Fix for -z under HP/UX

This patch will fix the -z option for HP/UX to supposedly hide the options from ps. I haven't tried it, since I don't have an HP to test it on.
*** pgp.c.orig	Thu Dec  8 22:49:00 1994
--- pgp.c	Thu Dec  8 22:44:14 1994
*** 474,479 ****
--- 474,488 ----
  	hpw = xmalloc(sizeof(struct hashedpw));
  	hashpass(p, strlen(p), hpw->hash);
  	/* Wipe password */
+ #ifdef __hpux
+ 	{
+ #include <sys/pstat.h>
+ 		union pstun pst; char psbuf[80]; 
+ 		pst.pst_command =psbuf;
+ 		sprintf(psbuf, "pgp");
+ 		pstat(PSTAT_SETCMD, pst,0, 0, 0);
+ 	}
+ #endif /* __hpux */
  	while (*p)
  	    *p++ = ' ';
  	/* Add to tail of linked list of passwords */
8 Dec 94

Makefile addition for Mips R3230 running RISC/os 5.01

Try this make rule:
	$(MAKE) all CC="cc -systype svr4" LD="cc -systype svr4" \
It was sent in by a loyal customer! :-) 8 Nov 94

Makefile addition for ConvexCS

Someone with a convex sent in this makefile rule:
	$(MAKE) all CC=gcc LD=gcc \
Add this somewhere in the makefile to get it to build on this platform. 8 Nov 94

Makefile addition for SCO-386/CC

Someone sent in a makefile addition for SCO running on a 386, using the standard cc compiler:
	$(MAKE) all CPP=/usr/lib/xcpp OBJS_EXT=_80386.o ASMDEF=-DSYSV \
Add this to your makefile to get it to work. 8 Nov 94

Makefile rules for SYSV/GCC platforms

I received two new makerules for sysv machines using the GCC compiler to build PGP. One is for sysv, the other is for sysv_386.
	$(MAKE) all CC=gcc LD=gcc CPP=/lib/cpp \

# gcc tested on ESIX 4.0.3a with gcc 2.5.8
	$(MAKE) all CC=gcc LD=gcc CPP="/lib/cpp -DSYSV" \
	OBJS_EXT="_80386.o _zmatch.o" \
Just add either of these to your makefile to use them. 8 Nov 94

Exclude Keys

Someone sent me some patches to pgp to allow it to exclude keys. In particular, this patch allows you to setup an exclude file, which will disallow any keys on the exclude list to be added to the keyring. This allows someone, such as a keyserver admin, to permanently remove keys which might be offensive. This patch is too large to fit on this page, so I created an exclude patch page which has the patch on it. Note, this patch is from PGP 2.6.1, and may not patch cleanly to later versions. 1 Sep 94

Written by: Derek Atkins warlord@MIT.EDU

Last Modified: $Date: 1994/12/23 17:07:13 $