summaryrefslogtreecommitdiff
path: root/crypt/README.ufc-crypt
diff options
context:
space:
mode:
Diffstat (limited to 'crypt/README.ufc-crypt')
-rw-r--r--crypt/README.ufc-crypt135
1 files changed, 135 insertions, 0 deletions
diff --git a/crypt/README.ufc-crypt b/crypt/README.ufc-crypt
new file mode 100644
index 0000000000..74d81dd865
--- /dev/null
+++ b/crypt/README.ufc-crypt
@@ -0,0 +1,135 @@
+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