netinet{,6}: Assert in{,6}_inithead() are only used for system routing tables.
[dragonfly.git] / secure / lib / libcipher / README
CommitLineData
984263bc
MD
1
2 FreeSec - NetBSD libcrypt replacement
3
4 David Burren <davidb@werj.com.au>
5 Release 1.0, March 1994
6
7 Document ref: $FreeBSD: src/secure/lib/libcipher/README,v 1.4 1999/08/28 01:30:19 peter Exp $
1de703da 8 Document ref: $DragonFly: src/secure/lib/libcipher/README,v 1.2 2003/06/17 04:27:48 dillon Exp $
984263bc
MD
9
10
11Description
12===========
13This library is a drop-in replacement for the libcrypt used in U.S. copies
14of NetBSD, duplicating that library's functionality. A suite of verification
15and benchmark tools is provided.
16
17FreeSec 1.0 is an original implementation of the DES algorithm and the
18crypt(3) interfaces used in Unix-style operating systems. It was produced
19in Australia and as such is not covered by U.S. export restrictions (at
20least for copies that remain outside the U.S.).
21
22
23History
24=======
25An earlier version of the FreeSec library was built using the UFC-crypt
26package that is distributed as part of the GNU library. UFC-crypt did not
27support the des_cipher() or des_setkey() functions, nor the new-style
28crypt with long keys. These were implemented in FreeSec 0.2, but at least
29one bug remained, where encryption would only succeed if either the salt
30or the plaintext was zero. Because of its heritage FreeSec 0.2 was covered
31by the GNU Library Licence.
32
33FreeSec 1.0 is an original implementation by myself, and has been tested
34against the verification suite I'd been using with FreeSec 0.2 (this is not
35encumbered by any licence). FreeSec 1.0 is covered by a Berkeley-style
36licence, which better fits into the *BSD hierarchy than the earlier GNU
37licence.
38
39
40Why should you use FreeSec?
41===========================
42FreeSec is intended as a replacement for the U.S.-only NetBSD libcrypt,
43to act as a baseline for encryption functionality.
44
45Some other packages (such as Eric Young's libdes package) are faster and
46more complete than FreeSec, but typically have different licencing
47arrangements. While some applications will justify the use of these
48packages, the idea here is that everyone should have access to *at least*
49the functionality of FreeSec.
50
51
52Performance of FreeSec 1.0
53==========================
54I compare below the performance of three libcrypt implementations. As can be
55seen, it's between the U.S. library and UFC-crypt. While the performance of
56FreeSec 1.0 is good enough to keep me happy for now, I hope to improve it in
57future versions. I was interested to note that while UFC-crypt is faster on
58a 386, hardware characteristics can have markedly different effects on each
59implementation.
60
61
62386DX40, 128k cache | U.S. BSD | FreeSec 1.0 | FreeSec 0.2
63CFLAGS=-O2 | | |
64========================+===============+===============+==================
65crypt (alternate keys) | 317 | 341 | 395
66 crypt/sec | | |
67------------------------+---------------+---------------+------------------
68crypt (constant key) | 317 | 368 | 436
69 crypt/sec | | |
70------------------------+---------------+---------------+------------------
71des_cipher( , , , 1) | 6037 | 7459 | 3343
72 blocks/sec | | |
73------------------------+---------------+---------------+------------------
74des_cipher( , , , 25) | 8871 | 9627 | 15926
75 blocks/sec | | |
76
77Notes: The results tabled here are the average over 10 runs.
78 The entry/exit code for FreeSec 0.2's des_cipher() is particularly
79 inefficient, thus the anomalous result for single encryptions.
80
81
82As an experiment using a machine with a larger register set and an
83obscenely fast CPU, I obtained the following results:
84
85 60 MHz R4400 | FreeSec 1.0 | FreeSec 0.2
86 ========================+=================================
87 crypt (alternate keys) | 2545 | 2702
88 crypt/sec | |
89 ------------------------+---------------------------------
90 crypt (constant key) | 2852 | 2981
91 crypt/sec | |
92 ------------------------+---------------------------------
93 des_cipher( , , , 1) | 56443 | 21409
94 blocks/sec | |
95 ------------------------+---------------------------------
96 des_cipher( , , , 25) | 82531 | 18276
97 blocks/sec | |
98
99Obviously your mileage will vary with your hardware and your compiler...