
			DES SOFTWARE PACKAGE
			    Version 2.2


                                       _
Copyright (c) 1990,1991,1992,1993 Stig Ostholm.
All Rights Reserved


The author takes no responsibility of actions caused by the use of this
software package and does not guarantee the correctness of the functions.

This software package may be freely distributed for non-commercial purpose
as long as the copyright notice is kept. Any changes made should be
accompanied by a comment indicating who made the change, when it was made
and what was changed.

This software package, or any parts of it, may not be used or in any way
re-distributed for commercial purpose without the authors permission.
The author keeps the right to decide between of what is commercial and
what is non-commercial purpose.

Restrictions due to national laws governing the use, import or export of
cryptographic software is the responsibility of the software user/importer/
exporter to follow.



			DES SOFTWARE PACKAGE
			    Version 2.2


This software package is an implementation of the Data Encryption Standard
(DES) as described in "Federal Information Processing Standards Publication
46", 1977 January 15. The triple DES encryption described in "ANSI X9.17-1985"
has also been added.

The implementation contains a general purpose DES library and user programs
for file encryption/decryption. The library is compatible with the DES
library from MIT (Massachusetts Institute of Technology) at function call
level, as described in the manual DES(3). There are also functions
available in this implementation that are not a part of the MIT library.


The header file "des.h" contains ANSI C function prototypes for all library
functions.

This library has only been compared against the MIT library through the
manual page due to export restrictions of cryptographic software outside the
US.


Changes from the MIT library:

	* The base encryption algorithm (default: `des_dea') may be
	  changed by setting `des_core'.

	* The method of converting a text-string to a DES key may be changed
	  by setting `des_strkey'.

	* Encryption methods using an initialization vector may return
	  a modified vector from the last iteration, making it possible
	  to chain calls to an encryption/decryption function into an
	  unbroken sequence.

	* Additional functions not in the MIT library are:

		des_dea		    - Identical to des_ecb_encrypt.
		des_dea3	    - Triple DES encryption.
		des_dea3b	    - Triple DES encryption
				      (des_dea3b != des_dea3).
		des_core	    - Pointer to `des_dea' (or `des_dea3').
		des_sched	    - Same as des_key_sched without any parity
				      or weak-key test.
		des_ecb2_encrypt    - The Electronic Code Book mode of
				      encryption/decryption on a user
				      specified number of bytes.
		des_cfb8_encrypt    - The 8-bit Cipher Feed-Back mode of
				      encryption/decryption on a user
				      specified number of bytes.
		des_ofb8_encrypt    - The 8-bit Output Feed-Back mode of
				      encryption/decryption on a user
				      specified number of bytes.
		des_is_weak_key	    - Tests if the key is weak.
		des_is_semiweak_key - Tests if the key is semi-weak.
		des_no_key_schedule - Returns the number of different keys
				      in a key schedule.
		des_strkey	    - Pointer to the actual function used
				      by `des_string_to_key'.
		des_random_cblock   - Generates a random value in a 64-bit
				      block.
		des_hex_to_cblock   - returns the value of a string with a
				      64-bit hexadecimal number in a 64-bit
				      block.
		des_print_cblock    - Prints a 64-bits block as a 64-bit
				      hexadecimal value on stdout.
		des_read_cblock	    - Similar to des_read_password but
				      accepts only 64-bit hexadecimal
				      numbers.
		des_read_hexkey	    - Similar to des_read_cblock but
				      parity adjusts the value.

		encrypt		    - Encryption/decryption function 
				      described in X/Open Portability
				      Guide (December 1988).
		setkey		    - Key handling function described
				      in X/Open Portability Guide.

	* The `quad_cksum' routine is not a part for this release but
	  are separately available and easy to install in the package.
	  See the file QUAD_CKSUM for more information.


User programs:

	* descrypt	- General purpose file encryption/decryption
			  program.

	* deskey	- Show the actual DES keys used or returns random
			  keys.


Utility programs:

	These programs are useful when modifying or optimizing the code.

	* desktest	- A simple test of the DES key algorithm.

	* desbench	- Simple benchmark program for the base DES,
			  triple DES and key schedule generation.

	* desvrfy	- Simple verification program for the base DES
			  and triple DES algorithms.


Building the package:

	The building process is fairly straight-forward. There are,
	however, some special things to note:

	* Makefiles	- Some makefile configurations (such as CC) can
			  be set in the top-level makefile are then
			  propagated to the subdirectory makfiles when
			  building. Note: typing `make' in a subdirectory
			  does NOT include changes made to the top makefile.

	* make depend	- Has not been tested.

	* util/ranllib	- This is a shell-script wich does nothing.
			  This script is run if no ranlib program can
			  be found in the path since the `util/' directory
			  is appeded to the path in the top-level makefile.
			  The idea is to prevent makefiles from failing
			  on systems wihtout ranlibmm (such as SunOS 5.x).

	* lib/dea	- Some files in this library are compiled by first
			  doing test-compiles of different version and
			  performing benchmarks to find the fastest method.
			  This can be prevented by making conigurations
			  by hand and changing the makefile. Please study
			  lib/dea/Makefile before attempting this.


If you find any bugs or porting problems, please inform the author about
these problems (and fixes if there are any).


					     _
					Stig Ostholm
					Department of Computer Engineering
					Chalmers University of Technology
					----------------------------------
					Email: ostholm@ce.chalmers.se
					Phone: +46 31 772 1703
					Fax:   +46 31 772 3663
