mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	* crypt/crypt.texi: Update documentation of US export restrictions to match the 14 Jan 2000 regulations. 2000-02-28 Geoff Keating <geoffk@cygnus.com> * Makeconfig (all-subdirs): Add 'crypt' subdirectory. * sysdeps/unix/sysv/linux/configure.in (inhibit_glue): Don't complain if there is no crypt add-on. * crypt/configure: Removed. * crypt/crypt.texi: Update documentation of US export restrictions to match the 14 Jan 2000 regulations. 2000-02-28 Geoff Keating <geoffk@cygnus.com> * crypt: New subdirectory, merged in from the crypt add-on.
		
			
				
	
	
		
			136 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
The following is the README for UFC-crypt, with those portions deleted
 | 
						|
that are known to be incorrect for the implementation used with the
 | 
						|
GNU C library.
 | 
						|
 | 
						|
 | 
						|
	UFC-crypt: ultra fast 'crypt' implementation
 | 
						|
	============================================
 | 
						|
 | 
						|
	@(#)README	2.27 11 Sep 1996
 | 
						|
 | 
						|
Design goals/non goals:
 | 
						|
----------------------
 | 
						|
 | 
						|
- Crypt implementation plugin compatible with crypt(3)/fcrypt.
 | 
						|
 | 
						|
- High performance when used for password cracking.
 | 
						|
 | 
						|
- Portable to most 32/64 bit machines.
 | 
						|
 | 
						|
- Startup time/mixed salt performance not critical.
 | 
						|
 | 
						|
Features of the implementation:
 | 
						|
------------------------------
 | 
						|
 | 
						|
- On most machines, UFC-crypt runs 30-60 times faster than crypt(3) when
 | 
						|
  invoked repeated times with the same salt and varying passwords.
 | 
						|
 | 
						|
- With mostly constant salts, performance is about two to three times
 | 
						|
  that of the default fcrypt implementation shipped with Alec
 | 
						|
  Muffets 'Crack' password cracker. For instructions on how to
 | 
						|
  plug UFC-crypt into 'Crack', see below.
 | 
						|
 | 
						|
- With alternating salts, performance is only about twice
 | 
						|
  that of crypt(3).
 | 
						|
 | 
						|
- Requires 165 kb for tables.
 | 
						|
 | 
						|
Author & licensing etc
 | 
						|
----------------------
 | 
						|
 | 
						|
UFC-crypt is created by Michael Glad, email: glad@daimi.aau.dk, and has
 | 
						|
been donated to the Free Software Foundation, Inc. It is covered by the
 | 
						|
GNU library license version 2, see the file 'COPYING.LIB'.
 | 
						|
 | 
						|
NOTES FOR USERS OUTSIDE THE US:
 | 
						|
------------------------------
 | 
						|
 | 
						|
The US government limits the export of DES based software/hardware.
 | 
						|
This software is written in Aarhus, Denmark. It can therefore be retrieved
 | 
						|
from ftp sites outside the US without breaking US law. Please do not
 | 
						|
ftp it from american sites.
 | 
						|
 | 
						|
Benchmark table:
 | 
						|
---------------
 | 
						|
 | 
						|
The table shows how many operations per second UFC-crypt can
 | 
						|
do on various machines.
 | 
						|
 | 
						|
|--------------|-------------------------------------------|
 | 
						|
|Machine       |  SUN*  SUN*   HP*     DecStation   HP     |
 | 
						|
|              | 3/50   ELC  9000/425e    3100    9000/720 |
 | 
						|
|--------------|-------------------------------------------|
 | 
						|
| Crypt(3)/sec |  4.6    30     15         25        57    |
 | 
						|
| Ufc/sec      |  220   990    780       1015      3500    |
 | 
						|
|--------------|-------------------------------------------|
 | 
						|
| Speedup      |   48    30     52         40        60    |
 | 
						|
|--------------|-------------------------------------------|
 | 
						|
 | 
						|
*) Compiled using special assembly language support module.
 | 
						|
 | 
						|
It seems as if performance is limited by CPU bus and data cache capacity.
 | 
						|
This also makes the benchmarks debatable compared to a real test with
 | 
						|
UFC-crypt wired into Crack. However, the table gives an outline of
 | 
						|
what can be expected.
 | 
						|
 | 
						|
Optimizations:
 | 
						|
-------------
 | 
						|
 | 
						|
Here are the optimizations used relative to an ordinary implementation
 | 
						|
such as the one said to be used in crypt(3).
 | 
						|
 | 
						|
Major optimizations
 | 
						|
*******************
 | 
						|
 | 
						|
- Keep data packed as bits in integer variables -- allows for
 | 
						|
  fast permutations & parallel xor's in CPU hardware.
 | 
						|
 | 
						|
- Let adjacent final & initial permutations collapse.
 | 
						|
 | 
						|
- Keep working data in 'E expanded' format all the time.
 | 
						|
 | 
						|
- Implement DES 'f' function mostly by table lookup
 | 
						|
 | 
						|
- Calculate the above function on 12 bit basis rather than 6
 | 
						|
  as would be the most natural.
 | 
						|
 | 
						|
- Implement setup routines so that performance is limited by the DES
 | 
						|
  inner loops only.
 | 
						|
 | 
						|
- Instead of doing salting in the DES inner loops, modify the above tables
 | 
						|
  each time a new salt is seen. According to the BSD crypt code this is
 | 
						|
  ugly :-)
 | 
						|
 | 
						|
Minor (dirty) optimizations
 | 
						|
***************************
 | 
						|
 | 
						|
- combine iterations of DES inner loop so that DES only loops
 | 
						|
  8 times. This saves a lot of variable swapping.
 | 
						|
 | 
						|
- Implement key access by a walking pointer rather than coding
 | 
						|
  as array indexing.
 | 
						|
 | 
						|
- As described, the table based f function uses a 3 dimensional array:
 | 
						|
 | 
						|
	sb ['number of 12 bit segment']['12 bit index']['48 bit half index']
 | 
						|
 | 
						|
  Code the routine with 4 (one dimensional) vectors.
 | 
						|
 | 
						|
- Design the internal data format & uglify the DES loops so that
 | 
						|
  the compiler does not need to do bit shifts when indexing vectors.
 | 
						|
 | 
						|
Revision history
 | 
						|
****************
 | 
						|
 | 
						|
UFC patchlevel 0: base version; released to alt.sources on Sep 24 1991
 | 
						|
UFC patchlevel 1: patch released to alt.sources on Sep 27 1991.
 | 
						|
		  No longer rebuilds sb tables when seeing a new salt.
 | 
						|
UFC-crypt pl0:	  Essentially UFC pl 1. Released to comp.sources.misc
 | 
						|
		  on Oct 22 1991.
 | 
						|
UFC-crypt pl1:    Released to comp.sources.misc in march 1992
 | 
						|
		  * setkey/encrypt routines added
 | 
						|
		  * added validation/benchmarking programs
 | 
						|
		  * reworked keyschedule setup code
 | 
						|
		  * memory demands reduced
 | 
						|
		  * 64 bit support added
 |