PGP/VMS Version 2.3
-------------------

All rights to PGP are reserved by Phil Zimmermann. All contributed modules
are also subject to the copyrights of their individual authors, on the same
conditions. Certain algorithms used by PGP are subject to patent restrictions
and this software as a whole may be subject to export control in certain
countries. Read the PGP Guide for full copyright information and for details
about export control.

These notes are intended for those people using and working with PGP under
the VAX/VMS operating system. These are intended to supplement rather than
replace the PGP guide. You should read and understand the guide, particularly
the section about key management.

If you unzip under VMS using the public domain Zipper - you will probably have
a problem with file characteristics. If you have the PD FILE utility, you can
fix this by saying:

$ FILE/type=stream  *.*

Otherwise you can fix using either TPU or CONVERT/FDL.
 
PGP/VMS was written using the VAX C compiler, which you must have to
compile it. If you wish to use another compiler, see the developers notes.
PGP is provided with an MMS description file. To build using this file, go
to the directory containing the uncompressed files and type the following:

$ MMS PGP.EXE

You may wish to delete the object files at this point, they are not needed
unless you are working on the code. To build a version under the VAX/VMS
debugger, define the DCL symbol PGP_DEBUG=1. The debugger version will be
built without any optimisation and will be *significantly* slower.

If you do not have MMS you may execute the DCL supplied command procedure 
VMSBUILD.COM to compile and link PGP.

Once you have built PGP, it should be placed somewhere that is protected
against tampering. It is not impossible that someone may replace PGP.EXE 
with a patched version designed to capture keys. You may wish to use the 
CHECKSUM utility (CHECKSUM/IMAGE PGP.EXE) to control against modifications, 
however CHECKSUM does not use very effective algorithms and may itself be 
compromised.

You should then use PGP by defining it as an "external command" in your
LOGIN.COM, or alternative the system wide login command procedure, SYLOGIN.
This is done simply with the following line of DCL:

$ PGP:==$device:[directory]PGP

After executing this line (remember the dollar sign before the device name), 
you should be able to display a help text by typing:

$ PGP

PGP will want to retain the keyrings and some other information. These are
stored in the device and directory pointed to by the logical name PGPPATH.
You should copy the files LANGUAGE.TXT and CONFIG.TXT to this directory.

Your secret keyring contains information that could be cryptographically
analysed - it must be protected against world access. However, your secret key
ring is encrypted so is protected against casual browsing. If anyone that you
can not trust has privileged access to your system, your plaintext files are
vulnerable and potentially, also your keyrings.

Note that keyrings should be directly transportable between VMS, MSDOS
and other PGP implementations. Text files may not be portable because of the
different text record representations across operating systems. If you wish
to send a text file to a system other than VAX/VMS, you are recommended to
use the 'canonical-form' switch '-t'.

If you wish to take binary files such as backup savesets between two systems
running VMS, you can use the special flag 'i' with the encrypt function to
preserve the file and record characteristics. When decrypting, PGP will read
the 'i' flag and the type of the system that created the file. If both systems
are VMS, the file will be correctly decrypted with the correct file
characteristics.

Special Notes For V2.2 And Following
------------------------------------

This version improves the keyboard handling. Specifically, it addresses
the CPU bound loop whilst reading terminal input and provides better prompt
and keyboard handling.

Developers Notes
----------------

There are two key conditionals throughout the source for the VAX/VMS
implementation:

VAXC -  Allows specific optimisations permitted by the VAX C compiler and
        overcomes problems with the differences between VAX C and ANSI C.

VMS  -  This allows VMS specific file handling and some optimisations. It
        should be noted that the primitives do not work with RISC/VMS until
        someone has done some work on porting VAX.MAR.

There was also some preliminary work done on porting this to GNU C and indeed
an earlier (developers) version ran under GNU C. The code affected is usually
conditionalised with GCC. If someone wishes to complete this and (hopefully)
integrate the inline assembler stuff used for moves and zero-fills, this
would be very useful.

The MMS command procedure and VMSBUILD.COM build from sources in a directory
pointed to by the logical SRC and objects pointed to by OBJ. This makes life
a little easier as you can use a search list for the sources so you can keep
the distribution intect.
 
All optimizations were checked out using DEC's PCA, and this version appears
to be optimal under VAX C.

As for cleaning up, there are verious areas which could be improved:

1)      PGP's own erase on delete could be replaced by the standard VMS 
        function so the file system does the work.

Contributing Authors
--------------------

This port was originally performed by Hugh Kennedy with assistance from
Mark Barsoum and others.

Support
-------

This software is provided in the public domain and without charge other than
for copying. For support issues concerning PGP and VAX/VMS, you are welcome 
to contact me via Electronic Mail on Compuserve using ID 70042,710 and on the 
Internet with 70042.710@compuserve.com. This software is provided "as-is" and 
any support given will be of an informal nature.

Hugh A.J. Kennedy, 11th February 1992
Minor editing for 2.3 release, Colin Plumb, 14 June 1993
