/* General stuff */
COPYRIGHT	- Copyright info.
MODES.DES	- A description of the features of the different modes of DES.
FILES		- This file.
INSTALL		- How to make things compile.
Imakefile	- For use with kerberos.
README		- What this package is.
VERSION		- Which version this is and what was changed.
KERBEROS	- Kerberos version 4 notes.
Makefile.PL	- An old makefile to build with perl5, not current.
Makefile.ssl	- The SSLeay makefile
Makefile.uni	- The normal unix makefile.
GNUmakefile	- The makefile for use with glibc.
makefile.bc	- A Borland C makefile
times		- Some outputs from 'speed' on some machines.
vms.com		- For use when compiling under VMS

/* My SunOS des(1) replacement */
des.c		- des(1) source code.
des.man		- des(1) manual.

/* Testing and timing programs. */
destest.c	- Source for libdes.a test program.
speed.c		- Source for libdes.a timing program.
rpw.c		- Source for libdes.a testing password reading routines.

/* libdes.a source code */
des_crypt.man	- libdes.a manual page.
des.h		- Public libdes.a header file.
ecb_enc.c	- des_ecb_encrypt() source, this contains the basic DES code.
ecb3_enc.c	- des_ecb3_encrypt() source.
cbc_ckm.c	- des_cbc_cksum() source.
cbc_enc.c	- des_cbc_encrypt() source.
ncbc_enc.c	- des_cbc_encrypt() that is 'normal' in that it copies
		  the new iv values back in the passed iv vector.
ede_enc.c	- des_ede3_cbc_encrypt() cbc mode des using triple DES.
cbc3_enc.c	- des_3cbc_encrypt() source, don't use this function.
cfb_enc.c	- des_cfb_encrypt() source.
cfb64enc.c	- des_cfb64_encrypt() cfb in 64 bit mode but setup to be
		  used as a stream cipher.
cfb64ede.c	- des_ede3_cfb64_encrypt() cfb in 64 bit mode but setup to be
		  used as a stream cipher and using triple DES.
ofb_enc.c	- des_cfb_encrypt() source.
ofb64_enc.c	- des_ofb_encrypt() ofb in 64 bit mode but setup to be
		  used as a stream cipher.
ofb64ede.c	- des_ede3_ofb64_encrypt() ofb in 64 bit mode but setup to be
		  used as a stream cipher and using triple DES.
enc_read.c	- des_enc_read() source.
enc_writ.c	- des_enc_write() source.
pcbc_enc.c	- des_pcbc_encrypt() source.
qud_cksm.c	- quad_cksum() source.
rand_key.c	- des_random_key() source.
read_pwd.c	- Source for des_read_password() plus related functions.
set_key.c	- Source for des_set_key().
str2key.c	- Covert a string of any length into a key.
fcrypt.c	- A small, fast version of crypt(3).
des_locl.h	- Internal libdes.a header file.
podd.h		- Odd parity tables - used in des_set_key().
sk.h		- Lookup tables used in des_set_key().
spr.h		- What is left of the S tables - used in ecb_encrypt().
des_ver.h	- header file for the external definition of the
		  version string.
des.doc		- SSLeay documentation for the library.

/* The perl scripts - you can ignore these files they are only
 * included for the curious */
des.pl		- des in perl anyone? des_set_key and des_ecb_encrypt
		  both done in a perl library.
testdes.pl	- Testing program for des.pl
doIP		- Perl script used to develop IP xor/shift code.
doPC1		- Perl script used to develop PC1 xor/shift code.
doPC2		- Generates sk.h.
PC1		- Output of doPC1 should be the same as output from PC1.
PC2		- used in development of doPC2.
shifts.pl	- Perl library used by my perl scripts.

/* I started making a perl5 dynamic library for libdes
 * but did not fully finish, these files are part of that effort. */
DES.pm
DES.pod
DES.xs
t
typemap

/* The following are for use with sun RPC implementaions. */
rpc_des.h
rpc_enc.c

/* The following are contibuted by Mark Murray <mark@grondar.za>.  They
 * are not normally built into libdes due to machine specific routines
 * contained in them.  They are for use in the most recent incarnation of
 * export kerberos v 4 (eBones). */
supp.c
new_rkey.c


