 78ee74d029
			
		
	
	78ee74d029
	
	
	
		
			
			git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1925 ec53bebd-3082-4978-b11e-865c3cabbd6b
		
			
				
	
	
		
			383 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			383 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Version 4.01 14/01/97
 | |
| 	Even faster inner loop in the DES assember for x86 and a modification
 | |
| 	for IP/FP which is faster on x86.  Both of these changes are
 | |
| 	from Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>.  His
 | |
| 	changes make the assember run %40 faster on a pentium.  This is just
 | |
| 	a case of getting the instruction sequence 'just right'.
 | |
| 	All credit to 'Svend' :-)
 | |
| 	Quite a few special x86 'make' targets.
 | |
| 	A libdes-l (lite) distribution.
 | |
| 
 | |
| Version 4.00
 | |
| 	After a bit of a pause, I'll up the major version number since this
 | |
| 	is mostly a performace release.  I've added x86 assember and
 | |
| 	added more options for performance.  A %28 speedup for gcc 
 | |
| 	on a pentium and the assember is a %50 speedup.
 | |
| 	MIPS CPU's, sparc and Alpha are the main CPU's with speedups.
 | |
| 	Run des_opts to work out which options should be used.
 | |
| 	DES_RISC1/DES_RISC2 use alternative inner loops which use
 | |
| 	more registers but should give speedups on any CPU that does
 | |
| 	dual issue (pentium).  DES_UNROLL unrolls the inner loop,
 | |
| 	which costs in code size.
 | |
| 
 | |
| Version 3.26
 | |
| 	I've finally removed one of the shifts in D_ENCRYPT.  This
 | |
| 	meant I've changed the des_SPtrans table (spr.h), the set_key()
 | |
| 	function and some things in des_enc.c.  This has definitly
 | |
| 	made things faster :-).  I've known about this one for some
 | |
| 	time but I've been too lazy to follow it up :-).
 | |
| 	Noticed that in the D_ENCRYPT() macro, we can just do L^=(..)^(..)^..
 | |
| 	instead of L^=((..)|(..)|(..)..  This should save a register at
 | |
| 	least.
 | |
| 	Assember for x86.  The file to replace is des_enc.c, which is replaced
 | |
| 	by one of the assember files found in asm.  Look at des/asm/readme
 | |
| 	for more info.
 | |
| 
 | |
| 	/* Modification to fcrypt so it can be compiled to support
 | |
| 	HPUX 10.x's long password format, define -DLONGCRYPT to use this.
 | |
| 	Thanks to Jens Kupferschmidt <bt1cu@hpboot.rz.uni-leipzig.de>. */
 | |
| 
 | |
| 	SIGWINCH case put in des_read_passwd() so the function does not
 | |
| 	'exit' if this function is recieved.
 | |
| 
 | |
| Version 3.25 17/07/96
 | |
| 	Modified read_pwd.c so that stdin can be read if not a tty.
 | |
| 	Thanks to Jeff Barber <jeffb@issl.atl.hp.com> for the patches.
 | |
| 	des_init_random_number_generator() shortened due to VMS linker
 | |
| 	limits.
 | |
| 	Added RSA's DESX cbc mode.  It is a form of cbc encryption, with 2
 | |
| 	8 byte quantites xored before and after encryption.
 | |
| 	des_xcbc_encryption() - the name is funny to preserve the des_
 | |
| 	prefix on all functions.
 | |
| 
 | |
| Version 3.24 20/04/96
 | |
| 	The DES_PTR macro option checked and used by SSLeay configuration
 | |
| 
 | |
| Version 3.23 11/04/96
 | |
| 	Added DES_LONG.  If defined to 'unsigned int' on the DEC Alpha,
 | |
| 	it gives a %20 speedup :-)
 | |
| 	Fixed the problem with des.pl under perl5.  The patches were
 | |
| 	sent by Ed Kubaitis (ejk@uiuc.edu).
 | |
| 	if fcrypt.c, changed values to handle illegal salt values the way
 | |
| 	normal crypt() implementations do.  Some programs apparently use
 | |
| 	them :-(. The patch was sent by Bjorn Gronvall <bg@sics.se>
 | |
| 
 | |
| Version 3.22 29/11/95
 | |
| 	Bug in des(1), an error with the uuencoding stuff when the
 | |
| 	'data' is small, thanks to Geoff Keating <keagchon@mehta.anu.edu.au>
 | |
| 	for the patch.
 | |
| 
 | |
| Version 3.21 22/11/95
 | |
| 	After some emailing back and forth with 
 | |
| 	Colin Plumb <colin@nyx10.cs.du.edu>, I've tweaked a few things
 | |
| 	and in a future version I will probably put in some of the
 | |
| 	optimisation he suggested for use with the DES_USE_PTR option.
 | |
| 	Extra routines from Mark Murray <mark@grondar.za> for use in
 | |
| 	freeBSD.  They mostly involve random number generation for use
 | |
| 	with kerberos.  They involve evil machine specific system calls
 | |
| 	etc so I would normally suggest pushing this stuff into the
 | |
| 	application and/or using RAND_seed()/RAND_bytes() if you are
 | |
| 	using this DES library as part of SSLeay.
 | |
| 	Redone the read_pw() function so that it is cleaner and
 | |
| 	supports termios, thanks to Sameer Parekh <sameer@c2.org>
 | |
| 	for the initial patches for this.
 | |
| 	Renamed 3ecb_encrypt() to ecb3_encrypt().  This has been
 | |
| 	 done just to make things more consistent.
 | |
| 	I have also now added triple DES versions of cfb and ofb.
 | |
| 
 | |
| Version 3.20
 | |
| 	Damn, Damn, Damn, as pointed out by Mike_Spreitzer.PARC@xerox.com,
 | |
| 	my des_random_seed() function was only copying 4 bytes of the
 | |
| 	passed seed into the init structure.  It is now fixed to copy 8.
 | |
| 	My own suggestion is to used something like MD5 :-)
 | |
| 
 | |
| Version 3.19 
 | |
| 	While looking at my code one day, I though, why do I keep on
 | |
| 	calling des_encrypt(in,out,ks,enc) when every function that
 | |
| 	calls it has in and out the same.  So I dropped the 'out'
 | |
| 	parameter, people should not be using this function.
 | |
| 
 | |
| Version 3.18 30/08/95
 | |
| 	Fixed a few bit with the distribution and the filenames.
 | |
| 	3.17 had been munged via a move to DOS and back again.
 | |
| 	NO CODE CHANGES
 | |
| 
 | |
| Version 3.17 14/07/95
 | |
| 	Fixed ede3 cbc which I had broken in 3.16.  I have also
 | |
| 	removed some unneeded variables in 7-8 of the routines.
 | |
| 
 | |
| Version 3.16 26/06/95
 | |
| 	Added des_encrypt2() which does not use IP/FP, used by triple
 | |
| 	des routines.  Tweaked things a bit elsewhere. %13 speedup on
 | |
| 	sparc and %6 on a R4400 for ede3 cbc mode.
 | |
| 
 | |
| Version 3.15 06/06/95
 | |
| 	Added des_ncbc_encrypt(), it is des_cbc mode except that it is
 | |
| 	'normal' and copies the new iv value back over the top of the
 | |
| 	passed parameter.
 | |
| 	CHANGED des_ede3_cbc_encrypt() so that it too now overwrites
 | |
| 	the iv.  THIS WILL BREAK EXISTING CODE, but since this function
 | |
| 	only new, I feel I can change it, not so with des_cbc_encrypt :-(.
 | |
| 	I need to update the documentation.
 | |
| 
 | |
| Version 3.14 31/05/95
 | |
| 	New release upon the world, as part of my SSL implementation.
 | |
| 	New copyright and usage stuff.  Basically free for all to use
 | |
| 	as long as you say it came from me :-)
 | |
| 
 | |
| Version 3.13 31/05/95
 | |
| 	A fix in speed.c, if HZ is not defined, I set it to 100.0
 | |
| 	which is reasonable for most unixes except SunOS 4.x.
 | |
| 	I now have a #ifdef sun but timing for SunOS 4.x looked very
 | |
| 	good :-(.  At my last job where I used SunOS 4.x, it was
 | |
| 	defined to be 60.0 (look at the old INSTALL documentation), at
 | |
| 	the last release had it changed to 100.0 since I now work with
 | |
| 	Solaris2 and SVR4 boxes.
 | |
| 	Thanks to  Rory Chisholm <rchishol@math.ethz.ch> for pointing this
 | |
| 	one out.
 | |
| 
 | |
| Version 3.12 08/05/95
 | |
| 	As pointed out by The Crypt Keeper <tck@bend.UCSD.EDU>,
 | |
| 	my D_ENCRYPT macro in crypt() had an un-necessary variable.
 | |
| 	It has been removed.
 | |
| 
 | |
| Version 3.11 03/05/95
 | |
| 	Added des_ede3_cbc_encrypt() which is cbc mode des with 3 keys
 | |
| 	and one iv.  It is a standard and I needed it for my SSL code.
 | |
| 	It makes more sense to use this for triple DES than
 | |
| 	3cbc_encrypt().  I have also added (or should I say tested :-)
 | |
| 	cfb64_encrypt() which is cfb64 but it will encrypt a partial
 | |
| 	number of bytes - 3 bytes in 3 bytes out.  Again this is for
 | |
| 	my SSL library, as a form of encryption to use with SSL
 | |
| 	telnet.
 | |
| 
 | |
| Version 3.10 22/03/95
 | |
| 	Fixed a bug in 3cbc_encrypt() :-(.  When making repeated calls
 | |
| 	to cbc3_encrypt, the 2 iv values that were being returned to
 | |
| 	be used in the next call were reversed :-(.
 | |
| 	Many thanks to Bill Wade <wade@Stoner.COM> for pointing out
 | |
| 	this error.
 | |
| 
 | |
| Version 3.09 01/02/95
 | |
| 	Fixed des_random_key to far more random, it was rather feeble
 | |
| 	with regards to picking the initial seed.  The problem was
 | |
| 	pointed out by Olaf Kirch <okir@monad.swb.de>.
 | |
| 
 | |
| Version 3.08 14/12/94
 | |
| 	Added Makefile.PL so libdes can be built into perl5.
 | |
| 	Changed des_locl.h so RAND is always defined.
 | |
| 
 | |
| Version 3.07 05/12/94
 | |
| 	Added GNUmake and stuff so the library can be build with
 | |
| 	glibc.
 | |
| 
 | |
| Version 3.06 30/08/94
 | |
| 	Added rpc_enc.c which contains _des_crypt.  This is for use in
 | |
| 	secure_rpc v 4.0
 | |
| 	Finally fixed the cfb_enc problems.
 | |
| 	Fixed a few parameter parsing bugs in des (-3 and -b), thanks
 | |
| 	to Rob McMillan <R.McMillan@its.gu.edu.au>
 | |
| 
 | |
| Version 3.05 21/04/94
 | |
| 	for unsigned long l; gcc does not produce ((l>>34) == 0)
 | |
| 	This causes bugs in cfb_enc.
 | |
| 	Thanks to Hadmut Danisch <danisch@ira.uka.de>
 | |
| 
 | |
| Version 3.04 20/04/94
 | |
| 	Added a version number to des.c and libdes.a
 | |
| 
 | |
| Version 3.03 12/01/94
 | |
| 	Fixed a bug in non zero iv in 3cbc_enc.
 | |
| 
 | |
| Version 3.02 29/10/93
 | |
| 	I now work in a place where there are 6+ architectures and 14+
 | |
| 	OS versions :-).
 | |
| 	Fixed TERMIO definition so the most sys V boxes will work :-)
 | |
| 
 | |
| Release upon comp.sources.misc
 | |
| Version 3.01 08/10/93
 | |
| 	Added des_3cbc_encrypt()
 | |
| 
 | |
| Version 3.00 07/10/93
 | |
| 	Fixed up documentation.
 | |
| 	quad_cksum definitely compatible with MIT's now.
 | |
| 
 | |
| Version 2.30 24/08/93
 | |
| 	Triple DES now defaults to triple cbc but can do triple ecb
 | |
| 	 with the -b flag.
 | |
| 	Fixed some MSDOS uuen/uudecoding problems, thanks to
 | |
| 	Added prototypes.
 | |
| 	
 | |
| Version 2.22 29/06/93
 | |
| 	Fixed a bug in des_is_weak_key() which stopped it working :-(
 | |
| 	thanks to engineering@MorningStar.Com.
 | |
| 
 | |
| Version 2.21 03/06/93
 | |
| 	des(1) with no arguments gives quite a bit of help.
 | |
| 	Added -c (generate ckecksum) flag to des(1).
 | |
| 	Added -3 (triple DES) flag to des(1).
 | |
| 	Added cfb and ofb routines to the library.
 | |
| 
 | |
| Version 2.20 11/03/93
 | |
| 	Added -u (uuencode) flag to des(1).
 | |
| 	I have been playing with byte order in quad_cksum to make it
 | |
| 	 compatible with MIT's version.  All I can say is avid this
 | |
| 	 function if possible since MIT's output is endian dependent.
 | |
| 
 | |
| Version 2.12 14/10/92
 | |
| 	Added MSDOS specific macro in ecb_encrypt which gives a %70
 | |
| 	 speed up when the code is compiled with turbo C.
 | |
| 
 | |
| Version 2.11 12/10/92
 | |
| 	Speedup in set_key (recoding of PC-1)
 | |
| 	 I now do it in 47 simple operations, down from 60.
 | |
| 	 Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
 | |
| 	 for motivating me to look for a faster system :-)
 | |
| 	 The speedup is probably less that 1% but it is still 13
 | |
| 	 instructions less :-).
 | |
| 
 | |
| Version 2.10 06/10/92
 | |
| 	The code now works on the 64bit ETA10 and CRAY without modifications or
 | |
| 	 #defines.  I believe the code should work on any machine that
 | |
| 	 defines long, int or short to be 8 bytes long.
 | |
| 	Thanks to Shabbir J. Safdar (shabby@mentor.cc.purdue.edu)
 | |
| 	 for helping me fix the code to run on 64bit machines (he had
 | |
| 	 access to an ETA10).
 | |
| 	Thanks also to John Fletcher <john_fletcher@lccmail.ocf.llnl.gov>
 | |
| 	 for testing the routines on a CRAY.
 | |
| 	read_password.c has been renamed to read_passwd.c
 | |
| 	string_to_key.c has been renamed to string2key.c
 | |
| 
 | |
| Version 2.00 14/09/92
 | |
| 	Made mods so that the library should work on 64bit CPU's.
 | |
| 	Removed all my uchar and ulong defs.  To many different
 | |
| 	 versions of unix define them in their header files in too many
 | |
| 	 different combinations :-)
 | |
| 	IRIX - Sillicon Graphics mods (mostly in read_password.c).
 | |
| 	 Thanks to Andrew Daviel (advax@erich.triumf.ca)
 | |
| 
 | |
| Version 1.99 26/08/92
 | |
| 	Fixed a bug or 2 in enc_read.c
 | |
| 	Fixed a bug in enc_write.c
 | |
| 	Fixed a pseudo bug in fcrypt.c (very obscure).
 | |
| 
 | |
| Version 1.98 31/07/92
 | |
| 	Support for the ETA10.  This is a strange machine that defines
 | |
| 	longs and ints as 8 bytes and shorts as 4 bytes.
 | |
| 	Since I do evil things with long * that assume that they are 4
 | |
| 	bytes.  Look in the Makefile for the option to compile for
 | |
| 	this machine.  quad_cksum appears to have problems but I
 | |
| 	will don't have the time to fix it right now, and this is not
 | |
| 	a function that uses DES and so will not effect the main uses
 | |
| 	of the library.
 | |
| 
 | |
| Version 1.97 20/05/92 eay
 | |
| 	Fixed the Imakefile and made some changes to des.h to fix some
 | |
| 	problems when building this package with Kerberos v 4.
 | |
| 
 | |
| Version 1.96 18/05/92 eay
 | |
| 	Fixed a small bug in string_to_key() where problems could
 | |
| 	occur if des_check_key was set to true and the string
 | |
| 	generated a weak key.
 | |
| 
 | |
| Patch2 posted to comp.sources.misc
 | |
| Version 1.95 13/05/92 eay
 | |
| 	Added an alternative version of the D_ENCRYPT macro in
 | |
| 	ecb_encrypt and fcrypt.  Depending on the compiler, one version or the
 | |
| 	other will be faster.  This was inspired by 
 | |
| 	Dana How <how@isl.stanford.edu>, and her pointers about doing the
 | |
| 	*(ulong *)((uchar *)ptr+(value&0xfc))
 | |
| 	vs
 | |
| 	ptr[value&0x3f]
 | |
| 	to stop the C compiler doing a <<2 to convert the long array index.
 | |
| 
 | |
| Version 1.94 05/05/92 eay
 | |
| 	Fixed an incompatibility between my string_to_key and the MIT
 | |
| 	 version.  When the key is longer than 8 chars, I was wrapping
 | |
| 	 with a different method.  To use the old version, define
 | |
| 	 OLD_STR_TO_KEY in the makefile.  Thanks to
 | |
| 	 viktor@newsu.shearson.com (Viktor Dukhovni).
 | |
| 
 | |
| Version 1.93 28/04/92 eay
 | |
| 	Fixed the VMS mods so that echo is now turned off in
 | |
| 	 read_password.  Thanks again to brennan@coco.cchs.su.oz.AU.
 | |
| 	MSDOS support added.  The routines can be compiled with
 | |
| 	 Turbo C (v2.0) and MSC (v5.1).  Make sure MSDOS is defined.
 | |
| 
 | |
| Patch1 posted to comp.sources.misc
 | |
| Version 1.92 13/04/92 eay
 | |
| 	Changed D_ENCRYPT so that the rotation of R occurs outside of
 | |
| 	 the loop.  This required rotating all the longs in sp.h (now
 | |
| 	 called spr.h). Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
 | |
| 	speed.c has been changed so it will work without SIGALRM.  If
 | |
| 	 times(3) is not present it will try to use ftime() instead.
 | |
| 
 | |
| Version 1.91 08/04/92 eay
 | |
| 	Added -E/-D options to des(1) so it can use string_to_key.
 | |
| 	Added SVR4 mods suggested by witr@rwwa.COM
 | |
| 	Added VMS mods suggested by brennan@coco.cchs.su.oz.AU.  If
 | |
| 	anyone knows how to turn of tty echo in VMS please tell me or
 | |
| 	implement it yourself :-).
 | |
| 	Changed FILE *IN/*OUT to *DES_IN/*DES_OUT since it appears VMS
 | |
| 	does not like IN/OUT being used.
 | |
| 
 | |
| Libdes posted to comp.sources.misc
 | |
| Version 1.9 24/03/92 eay
 | |
| 	Now contains a fast small crypt replacement.
 | |
| 	Added des(1) command.
 | |
| 	Added des_rw_mode so people can use cbc encryption with
 | |
| 	enc_read and enc_write.
 | |
| 
 | |
| Version 1.8 15/10/91 eay
 | |
| 	Bug in cbc_cksum.
 | |
| 	Many thanks to Keith Reynolds (keithr@sco.COM) for pointing this
 | |
| 	one out.
 | |
| 
 | |
| Version 1.7 24/09/91 eay
 | |
| 	Fixed set_key :-)
 | |
| 	set_key is 4 times faster and takes less space.
 | |
| 	There are a few minor changes that could be made.
 | |
| 
 | |
| Version 1.6 19/09/1991 eay
 | |
| 	Finally go IP and FP finished.
 | |
| 	Now I need to fix set_key.
 | |
| 	This version is quite a bit faster that 1.51
 | |
| 
 | |
| Version 1.52 15/06/1991 eay
 | |
| 	20% speedup in ecb_encrypt by changing the E bit selection
 | |
| 	to use 2 32bit words.  This also required modification of the
 | |
| 	sp table.  There is still a way to speedup the IP and IP-1
 | |
| 	(hints from outer@sq.com) still working on this one :-(.
 | |
| 
 | |
| Version 1.51 07/06/1991 eay
 | |
| 	Faster des_encrypt by loop unrolling
 | |
| 	Fixed bug in quad_cksum.c (thanks to hughes@logos.ucs.indiana.edu)
 | |
| 
 | |
| Version 1.50 28/05/1991 eay
 | |
| 	Optimised the code a bit more for the sparc.  I have improved the
 | |
| 	speed of the inner des_encrypt by speeding up the initial and
 | |
| 	final permutations.
 | |
| 
 | |
| Version 1.40 23/10/1990 eay
 | |
| 	Fixed des_random_key, it did not produce a random key :-(
 | |
| 
 | |
| Version 1.30  2/10/1990 eay
 | |
| 	Have made des_quad_cksum the same as MIT's, the full package
 | |
| 	should be compatible with MIT's
 | |
| 	Have tested on a DECstation 3100
 | |
| 	Still need to fix des_set_key (make it faster).
 | |
| 	Does des_cbc_encrypts at 70.5k/sec on a 3100.
 | |
| 
 | |
| Version 1.20 18/09/1990 eay
 | |
| 	Fixed byte order dependencies.
 | |
| 	Fixed (I hope) all the word alignment problems.
 | |
| 	Speedup in des_ecb_encrypt.
 | |
| 
 | |
| Version 1.10 11/09/1990 eay
 | |
| 	Added des_enc_read and des_enc_write.
 | |
| 	Still need to fix des_quad_cksum.
 | |
| 	Still need to document des_enc_read and des_enc_write.
 | |
| 
 | |
| Version 1.00 27/08/1990 eay
 | |
| 
 |