e54d94ed95672b2b2c7d9b1df4c888960eb2f617
[libgcrypt.git] / cipher / ChangeLog
1 2002-09-17  Werner Koch  <wk@gnupg.org>
2
3         * random.c: Replaced mutex.h by the new ath.h.  Changed all calls.
4
5 2002-09-16  Werner Koch  <wk@gnupg.org>
6
7         * arcfour.c (do_encrypt_stream): Use register modifier and modulo.
8         According to Nikos Mavroyanopoulos this increases perfromace on
9         i386 system noticable.  And I always tought gcc is clever enough.
10         * md5.c (transform): Use register modifier.
11         * rmd160.c (transform): Ditto.
12         * sha1.c (transform): Ditto.  We hope that there are 6 free registers.
13         * random.c (gcry_randomize): Rewrote to avoid malloc calls.
14
15         * rndlinux.c (gather_random): Replaced remaining fprintfs by log_*.
16         * arcfour.c (do_arcfour_setkey): Ditto.
17         * twofish.c (do_twofish_setkey): Ditto.
18         * rndegd.c (gather_random): Ditto.
19         * rijndael.c (do_setkey): Ditto.
20         * random.c (_gcry_random_dump_stats): Ditto. 
21         * primegen.c (_gcry_generate_elg_prime): Ditto.
22         * des.c (_gcry_des_get_info): Ditto.
23         * cast5.c (do_cast_setkey): Ditto.
24         * blowfish.c (do_bf_setkey): Ditto.
25
26 2002-08-26  Werner Koch  <wk@gnupg.org>
27
28         * des.c (weak_keys): Fixed one entry in the table and compared
29         all entries against the literature.
30         (selftest): Checksum the weak key table.
31
32 2002-08-21  Werner Koch  <wk@gnupg.org>
33
34         * pubkey.c: Enable keygrip calculation for "openpgp-rsa".
35
36 2002-08-17  Werner Koch  <wk@gnupg.org>
37
38         * cipher.c (setup_cipher_table): Don't overwrite the DES entry
39         with the entry for DUMMY.
40
41 2002-08-14  Werner Koch  <wk@gnupg.org>
42
43         * des.c (do_des_setkey,do_des_encrypt, do_des_decrypt): New.
44         (_gcry_des_get_info): Support plain old DES.
45         * cipher.c (setup_cipher_table): Put DES into the table.
46
47 2002-07-25  Werner Koch  <wk@gnupg.org>
48
49         * rndunix.c (_gcry_rndunix_constructor): Prefixed with _gcry_.
50         Noted by Stephan Austermuehle.
51
52 2002-07-08  Timo Schulz  <ts@winpt.org>
53
54         * rndw32.c: Replaced the m_ memory functions with the real 
55         gcry_ functions. Renamed all g10_ prefixed functions to log_.
56         
57 2002-06-12  Werner Koch  <wk@gnupg.org>
58
59         * rsa.c (generate): Use e = 65537 for now.
60
61 2002-06-11  Werner Koch  <wk@gnupg.org>
62
63         * pubkey.c (gcry_pk_get_keygrip): Allow a "protected-private-key".
64
65 2002-06-05  Timo Schulz  <ts@winpt.org>
66
67         * cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt):
68         Check that the input size is a multiple of the blocksize.
69         
70 2002-05-23  Werner Koch  <wk@gnupg.org>
71
72         * md.c (oid_table): Add an rsadsi OID for MD5.
73
74 2002-05-21  Werner Koch  <wk@gnupg.org>
75
76         * primegen.c, elgamal.c, dsa.c (progress): Do not print anything
77         by default.  Pass an extra identifying string to the callback and
78         reserved 2 argumenst for current and total counters.  Changed the
79         register function prototype.
80
81 2002-05-17  Werner Koch  <wk@gnupg.org>
82
83         * rndegd.c (rndegd_constructor): Fixed name of register function
84         and prefixed the function name with _gcry_.
85         * rndw32.c (rndw32_constructor): Ditto.
86         * tiger.c (tiger_constructor): Ditto.
87
88         * Makefile.am: Removed all dynamic loading stuff.
89         * dynload.c: Ditto. Now only used for the constructor system.
90
91 2002-05-15  Werner Koch  <wk@gnupg.org>
92
93         * random.c (gcry_random_bytes,gcry_random_bytes_secure)
94         (gcry_randomize): Make sure we are initialized.
95
96 2002-05-14  Werner Koch  <wk@gnupg.org>
97
98         Changed license of most files to the LGPL.
99
100 2002-05-02  Werner Koch  <wk@gnupg.org>
101
102         * random.c (_gcry_fast_random_poll): Initialize the module so the
103         mutex can be used.
104
105         * primegen.c (small_prime_numbers): Moved table from smallprime.c
106         * smallprime.c: Fiel removed.
107
108         * des.c (leftkey_swap, rightkey_swap, working_memcmp): Made static.
109
110         * cipher.c (gcry_cipher_map_name): Map "RIJNDAEL" to "AES".
111         * rijndael.c (rijndael_get_info): We do only support a 128 bit
112         blocksize so it makes sense to change the algorithm strings to
113         AES.
114
115         * tiger.c (tiger_final): Removed superfluous token pasting operators.
116         * md5.c (md5_final): Ditto.
117
118 2002-04-30  Werner Koch  <wk@gnupg.org>
119
120         * cipher.c: Fixed list of copyright years.
121
122 2002-03-18  Werner Koch  <wk@gnupg.org>
123
124         * random.c (initialize): Initialize the new pool lock mutex.
125         (_gcry_fast_random_poll): Add locking and moved main
126         code out to...
127         (do_fast_random_poll): new function.
128         (read_pool): Use the new function here.
129         (get_random_bytes): Add locking.
130         (_gcry_update_random_seed_file): Ditto.
131
132 2002-03-11  Werner Koch  <wk@gnupg.org>
133
134         * md.c: Add rsaSignatureWithripemd160 to OID table.
135
136 2002-02-20  Werner Koch  <wk@gnupg.org>
137
138         * sha1.c: Removed a left over comment note.  The code has been
139         rewritten from scratch in 1998.  Thanks to Niels Möller for
140         reporting this misleading comment.
141
142 2002-02-18  Werner Koch  <wk@gnupg.org>
143
144         * rndunix.c (rndunix_constructor): Use the the new prefixed
145         function name.  Reported by Jordi Mallach.
146
147 2002-02-10  Werner Koch  <wk@gnupg.org>
148
149         * random.c (mix_pool): Carry an extra failsafe_digest buffer
150         around to make the function more robust.
151
152 2002-02-08  Werner Koch  <wk@gnupg.org>
153
154         * random.c (add_randomness): Xor new data into the pool and not
155         just copy it.  This avoids any choosen input attacks which are not
156         serious in our setting because an outsider won't be able to mix
157         data in and even then we keep going with a PRNG.  Thanks to Stefan
158         Keller for pointing this out.
159
160 2002-01-04  Werner Koch  <wk@gnupg.org>
161
162         * pubkey.c (gcry_pk_genkey): Do not release skey - it is static.
163
164         * primegen.c (gen_prime): Of course we should use set_bit
165         and not set_highbit to set the second high bit.
166
167 2001-12-18  Werner Koch  <wk@gnupg.org>
168
169         * rsa.c (generate): Loop until we find the exact modulus size.
170         Changed the exponent to 41.
171         (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings.
172         * primegen.c (gen_prime): Set 2 high order bits for secret primes.
173
174         * Makefile.am (DISTCLEANFILES): Include construct.c.
175
176 2001-12-17  Werner Koch  <wk@gnupg.org>
177
178         * pubkey.c (gcry_pk_get_keygrip): New - experimental.
179
180 2001-12-11  Werner Koch  <wk@gnupg.org>
181
182         * cipher.c: Added OIDs for AES.
183         (gcry_cipher_mode_from_oid): New.
184         (gcry_cipher_map_name): Moved OID search code to ..
185         (search_oid): .. new function.
186
187 2001-12-10  Werner Koch  <wk@gnupg.org>
188
189         * pubkey.c (gcry_pk_encrypt): Find the signature algorithm by name
190         and not by number.
191         
192         * pubkey.c (gcry_pk_encrypt,gcry_pk_decrypt,gcry_pk_sign)
193         (gcry_pk_verify,gcry_pk_testkey, gcry_pk_genkey)
194         (gcry_pk_get_nbits): Release the arrays.  Noted by Nikos
195         Mavroyanopoulos.
196
197 2001-12-06  Werner Koch  <wk@gnupg.org>
198
199         * cipher.c (gcry_cipher_map_name): Look also for OIDs prefixed
200         with "oid."  or "OID.".
201
202 2001-12-05  Werner Koch  <wk@gnupg.org>
203
204         * pubkey.c (algo_info_table): Fixed entry for openpgp-rsa. 
205
206 2001-11-24  Werner Koch  <wk@gnupg.org>
207
208         * pubkey.c: Added the rsaEncryption OID to the tables.
209         (sexp_to_key): Add an arg to return the index of the algorithm,
210         changed all callers.
211         (gcry_pk_sign): Find the signature algorithm by name and not by
212         number.
213         (gcry_pk_get_nbits): Fixed so that we can now really pass a secret
214         key to get the result.
215         
216         * md.c (gcry_md_map_name): Look also for OIDs prefixed with "oid."
217         or "OID." so that an OID string can be used as an S-Exp token.
218
219 2001-11-20  Werner Koch  <wk@gnupg.org>
220
221         * md.c (gcry_md_map_name): Lookup by OID if the the name begins
222         with a digit.
223         (oid_table): New.
224         
225 2001-11-16  Werner Koch  <wk@gnupg.org>
226
227         * md.c (gcry_md_info): New operator GCRYCTL_IS_ALGO_ENABLED.
228
229 2001-11-07  Werner Koch  <wk@gnupg.org>
230
231         * md.c (gcry_md_hash_buffer): Close the handle which was left open
232         for algorithms other than rmd160.
233
234 2001-08-08  Werner Koch  <wk@gnupg.org>
235
236         * rndw32.c (gather_random): Use toolhelp in addition to the NT
237         gatherer for Windows2000.  Suggested by Sami Tolvanen.
238
239         * random.c (read_pool): Fixed length check, this used to be one
240         byte to strict.  Made an assert out of it because the caller has
241         already made sure that only poolsize bytes are requested.
242         Reported by Marcus Brinkmann.
243
244 2001-08-03  Werner Koch  <wk@gnupg.org>
245
246         * cipher.c (cipher_encrypt, cipher_decrypt): Prepare to return
247         errors. We have to change the interface to all ciphers to make
248         this really work but we should do so to prepare for hardware
249         encryption modules.
250         (gcry_cipher_encrypt, gcry_cipher_decrypt): Return the error and
251         set lasterr. 
252         (gcry_cipher_ctl): Make sure that errors from setkey are returned.
253
254 2001-08-02  Werner Koch  <wk@gnupg.org>
255
256         * rndlinux.c (gather_random): casted a size_t arg to int so that
257         the format string is correct.  Casting is okay here and avoids
258         translation changes. 
259
260         * random.c (fast_random_poll): Do not check the return code of
261         getrusage.
262
263         * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7
264         and 8.
265
266         * tiger.c (print_abc,print_data): Removed.
267
268         * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c, arcfour.c
269         (burn_stack): New.  Add wrappers for most functions to be able to
270         call burn_stack after the function invocation. This methods seems
271         to be the most portable way to zeroise the stack used. It does
272         only work on stack frame based machines but it is highly portable
273         and has no side effects.  Just setting the automatic variables at
274         the end of a function to zero does not work well because the
275         compiler will optimize them away - marking them as volatile would
276         be bad for performance.
277         * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise.
278         * random.c (burn_stack): New.
279         (mix_pool): Use it here to burn the stack of the mixblock function.
280
281         * primegen.c (_gcry_generate_elg_prime): Freed q at 3 places.
282         Thanks to Tommi Komulainen.
283
284         * arcfour.c (arcfour_setkey): Check the minimim keylength against
285         bytes and not bits.
286         (selftest): Must reset the key before decryption. 
287
288 2001-05-31  Werner Koch  <wk@gnupg.org>
289
290         * sha1.c (sha1_init): Made static.
291
292         Changed all g10_ prefixed function names as well as some mpi_
293         function names to cope with the introduced naming changes.
294         
295         * md.c (prepare_macpads): Made key const.
296
297 2001-05-28  Werner Koch  <wk@gnupg.org>
298
299         * rndegd.c (gather_random): Removed the use of tty_printf.
300
301 2001-03-29  Werner Koch  <wk@gnupg.org>
302
303         * md5.c (md5_final): Fixed calculation of hashed length.  Thanks
304         to disastry@saiknes.lv for pointing out that it was horrible wrong
305         for more than 512MB of input.
306         * sha1.c (sha1_final): Ditto.
307         * rmd160.c (rmd160_final): Ditto.
308         * tiger.c (tiger_final): Ditto.
309
310         * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to
311         avoid name clashes with an encrypt function in stdlib.h of
312         Dynix/PIX.  Thanks to Gene Carter.
313         * elgamal.c (encrypt,do_encrypt): Ditto.
314
315         * twofish.c (gnupgext_enum_func): Use only when when compiled as a
316         module.
317         * rijndael.c (gnupgext_enum_func): Ditto.
318
319         * tiger.c (tiger_get_info): Return "TIGER192" and not just
320         "TIGER".  By Edwin Woudt.
321         
322         * random.c: Always include time.h - standard requirement.  Thanks
323         to James Troup.
324
325         * rndw32.c: Fixes to the macros.
326
327 2001-01-11  Werner Koch  <wk@gnupg.org>
328
329         * cipher.c (cipher_encrypt,gcry_cipher_encrypt): Use blocksize and
330         not 8.
331
332 2000-12-19  Werner Koch  <wk@gnupg.org>
333
334         Major change:
335         Removed all GnuPG stuff and renamed this piece of software
336         to gcrypt. 
337
338 2000-11-14  Werner Koch  <wk@gnupg.org>
339
340         * dsa.c (test_keys): Replaced mpi_alloc by gcry_mpi_new and
341         mpi_free by gcry_mpi_release.
342         * elgamal.c (test_keys,generate): Ditto, also for mpi_alloc_secure.
343         * rsa.c (test_keys,generate,rsa_verify): Ditto.
344         * primegen.c (generate_elg_prime): Ditto.
345         (gen_prime): Ditto and removed nlimbs.
346
347         * rsa.c (generate): Allocate 2 more vars in secure memory.
348
349         * Makefile.am (OMIT_DEPENDENCIES): Hack to work around dependency
350         problems.
351
352 2000-10-09  Werner Koch  <wk@gnupg.org>
353
354         * arcfour.c, arcfour.h: New.
355         * cipher.c (cipher_encrypt, cipher_decrypt): Add stream mode.
356         (setup_cipher_table): Add Arcfour.
357         (gcry_cipher_open): Kludge to allow stream mode.
358
359 Wed Oct  4 13:16:18 CEST 2000  Werner Koch  <wk@openit.de>
360
361         * sha1.c (transform): Use rol() macro.  Actually this is not needed
362         for a newer gcc but there are still aoter compilers.
363
364         * rsa.c (test_keys): Use new random function. 
365
366         * md.c (gcry_md_setkey): New function to overcome problems with
367         const conflics.  
368         (gcry_md_ctl): Pass set key to the new functions.
369
370         * rijndael.c: New.
371         * cipher.c: Add Rijndael support.
372
373 Mon Sep 18 16:35:45 CEST 2000  Werner Koch  <wk@openit.de>
374
375         * rndlinux.c (open_device): Loose random device checking.
376         By Nils Ellmenreich.
377
378         * random.c (fast_random_poll): Check ENOSYS for getrusage.
379         * rndunix.c:  Add 2 sources for QNX. By Sam Roberts.
380
381         * pubkey.c (gcry_pk_algo_info): Add GCRYCTL_GET_ALGO_USAGE.
382
383         * rsa.c: Changed the comment about the patent.
384         (secret): Speed up by using the CRT.  For a 2k keys this
385         is about 3 times faster.
386         (stronger_key_check): New but unused code to check the secret key.
387         * Makefile.am: Included rsa.[ch].
388         * pubkey.c: Enabled RSA support.
389         (pubkey_get_npkey): Removed RSA workaround.
390
391 Mon Jul 31 10:04:47 CEST 2000  Werner Koch  <wk@openit.de>
392
393   * pubkey.c: Replaced all gcry_sexp_{car,cdr}_{data,mpi} by the new
394   gcry_sexp_nth_{data,mpi} functions.
395
396 Tue Jul 25 17:44:15 CEST 2000  Werner Koch  <wk@openit.de>
397
398   * pubkey.c (exp_to_key,sexp_to_sig,sexp_to_enc,gcry_pk_encrypt,
399     gcry_pk_decrypt,gcry_pk_sign,gcry_pk_genkey): Changed to work with
400     the new S-Exp interface.
401
402 Mon Jul 17 16:35:47 CEST 2000  Werner Koch  <wk@>
403
404   * random.c (gather_faked): Replaced make_timestamp by time(2) again.
405
406 Fri Jul 14 19:38:23 CEST 2000  Werner Koch  <wk@>
407
408   * md.c (gcry_md_ctl): Support GCRYCTL_{START,STOP}_DUMP.
409
410   * Makefile.am: Never compile mingw32 as module.
411
412   * Makefile.am: Tweaked module build and removed libtool
413
414   * Makefile.am:  Replaced -O1 by -O. Suggested by Alec Habig.
415
416   * elgamal.c (sign): Removed inactive code.
417
418   * rsa.c, rsa.h: New based on the old module version (only in CVS for now).
419   * pubkey.c (setup_pubkey_table): Added commented support for RSA.
420
421   * rndunix.c (waitpid): New. For UTS 2.1.  All by Dave Dykstra.
422   (my_popen): Do the FD_CLOEXEC only if it is available
423   (start_gatherer): Cope with missing _SC_OPEN_MAX
424
425   * rndunix.c: Add some more headers for QNX. By Sam Roberts.
426
427   * rndegd.c (gather_random): Shortcut level 0.
428   * rndunix.c (gather_random): Ditto.
429   * rndw32.c (gather_random): Ditto.
430
431   * rndw32.c: Replaced with code from Cryptlib and commented the old stuff.
432   * rndw32.c: Add some debuging code enabled by an environment variable.
433
434   * random.c (read_seed_file): Binary open for DOSish system
435   (update_random_seed_file): Ditto.
436   * random.c [MINGW32]: Include process.h for getpid.
437   * random.c (fast_random_poll): Add clock_gettime() as fallback for
438   system which support this POSIX.4 fucntion. By Sam Roberts.
439
440   * random.c (read_seed_file): Removed the S_ISLNK test becuase it
441   is already covered by !S_ISREG and is not defined in Unixware.
442   Reported by Dave Dykstra.
443   (update_random_seed_file): Silently ignore update request when pool
444   is not filled.
445
446   * random.c (read_seed_file): New.
447   (set_random_seed_file): New.
448   (read_pool): Try to read the seeding file.
449   (update_random_seed_file): New.
450
451   (read_pool): Do an initial extra seeding when level 2 quality random
452   is requested the first time.  This requestes at least POOLSIZE/2 bytes
453   of entropy.  Compined with the seeding file this should make normal
454   random bytes cheaper and increase the quality of the random bytes
455   used for key generation.
456
457   * random.c (read_pool): Print a more friendly error message in
458   cases when too much random is requested in one call.
459
460   * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined;
461   this is not the case for some ESIX and Unixware, although they have
462   getrusage().
463
464   * primegen.c (generate_elg_prime): All primes are now generated with
465   the lowest random quality level.  Because they are public anyway we
466   don't need stronger random and by this we do not drain the systems
467   entropy so much.
468
469   * primegen.c (register_primegen_progress): New.
470   * dsa.c (register_pk_dsa_progress): New.
471   * elgamal.c (register_pk_elg_progress): New.
472
473   * elgamal.c (wiener_map): New.
474   (gen_k): Use a much smaller k.
475   (generate): Calculate the qbits using the wiener map and
476   choose an x at a size comparable to the one choosen in gen_k
477
478   * rmd160.c (rmd160_get_info): Moved casting to the left side due to a
479   problem with UTS4.3.  Suggested by Dave Dykstra.
480   * sha1.c (sha1_get_info): Ditto.
481   * tiger.c (tiger_get_info): Ditto.
482   * md5.c (md5_get_info): Ditto
483   * des.c (des_get_info): Ditto.
484   * blowfish.c (blowfish_get_info): Ditto.
485   * cast5.c (cast5_get_info): Ditto.
486   * twofish.c (twofish_get_info): Ditto.
487
488 Fri Mar 24 11:25:45 CET 2000  Werner Koch  <wk@openit.de>
489
490         * md.c (md_open): Add hmac arg and allocate space for the pads.
491         (md_finalize): Add HMAC support.
492         (md_copy): Ditto.
493         (md_close): Ditto.
494         (gcry_md_reset): Ditto.
495         (gcry_md_ctl): Ditto.
496         (prepare_macpdas): New.
497
498 Mon Mar 13 19:22:46 CET 2000  Werner Koch  <wk@openit.de>
499
500         * md.c (gcry_md_hash_buffer): Add support for the other algorithms.
501
502 Mon Jan 31 16:37:34 CET 2000  Werner Koch  <wk@gnupg.de>
503
504         * genprime.c (generate_elg_prime): Fixed returned factors which never
505         worked for non-DSA keys.
506
507 Thu Jan 27 18:00:44 CET 2000  Werner Koch  <wk@gnupg.de>
508
509         * pubkey.c (sexp_to_key): Fixed mem leaks in case of errors.
510
511 Mon Jan 24 22:24:38 CET 2000  Werner Koch  <wk@gnupg.de>
512
513         * pubkey.c (gcry_pk_decrypt): Implemented.
514         (gcry_pk_encrypt): Implemented.
515         (gcry_pk_testkey): New.
516         (gcry_pk_genkey): New.
517         (pubkey_decrypt): Made static.
518         (pubkey_encrypt): Ditto.
519         (pubkey_check_secret_key): Ditto.
520         (pubkey_generate): Ditto.
521
522 Mon Jan 24 13:04:28 CET 2000  Werner Koch  <wk@gnupg.de>
523
524         * pubkey.c (pubkey_nbits): Removed and replaced by ...
525         (gcry_pk_get_nbits): this new one.
526
527 Wed Dec  8 21:58:32 CET 1999  Werner Koch  <wk@gnupg.de>
528
529         * dsa.c: s/mpi_powm/gcry_mpi_powm/g
530         * elgamal.c: Ditto.
531         * primegen.c: Ditto.
532
533         * : Replaced g10_opt_verbose by g10_log_verbosity().
534
535         * Makefile.am (INCLUDES): removed intl, add ../gcrypt
536
537 Fri Nov 19 17:15:20 CET 1999  Werner Koch  <wk@gnupg.de>
538
539         * dynload.c (cmp_filenames): New to replaced compare_filename() in
540         module.
541         (register_cipher_extension): Removed the tilde expansion stuff.
542         * rndeg.c (my_make_filename): New.
543
544         * : Replaced header util.h by g10lib.h
545
546         * random.c (gather_faked): Replaced make_timestamp by time(2).
547         Disabled wrning printed with tty_printf.
548         * rndlinux.c (gather_random): Always use fprintf instead of tty_xxx;
549         this should be replaced by a callback function.
550
551         * primegen.c (gen_prime): Use gcry_mpi_randomize.
552         (is_prime): Ditto.
553         * elgamal.c (test_keys): Ditto.
554         * dsa.c (test_keys): Ditto.
555
556         * cipher.c (gcry_cipher_close): Die on invalid handle.
557
558 Mon Nov 15 21:36:02 CET 1999  Werner Koch  <wk@gnupg.de>
559
560         * elgamal.c (gen_k): Use the new random API.
561         (generate): Ditto.
562         * dsa.c (gen_k): Ditto.
563         (generate): Ditto.
564
565 Sat Nov 13 17:44:23 CET 1999  Werner Koch  <wk@gnupg.de>
566
567         * pubkey.c (disable_pubkey_algo): Made static.
568         (gcry_pk_ctl): New.
569
570         * random.c (get_random_bits): Renamed to ...
571         (get_random_bytes): ... this and made static.
572         (gcry_random_bytes): New.
573         (gcry_random_bytes_secure): New.
574         (randomize_buffer): Renamed to ...
575         (gcry_randomize): ...this.
576
577         * md.c (gcry_md_hash_buffer): New.
578
579         * pubkey.c (gcry_pk_algo_info): 4 new commands.
580         (pubkey_get_npkey): Made static.
581         (pubkey_get_nskey): Made static.
582         (pubkey_get_nsig): Made static.
583         (pubkey_get_nenc): Made static.
584
585         * pubkey.c: Removed all G10ERR_xxx.
586         * cipher.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_CIPHER_ALGO.
587         * md.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_MD_ALGO.
588         * cast5.c (cast_setkey): Changed errocodes to GCRYERR_xxx.
589         * blowfish.c: Ditto.
590         * des.c: Ditto.
591         * twofish.c: Ditto.
592         * dsa.c: Ditto.
593         * elgamal.c: Ditto.
594
595         * g10c.c: Removed
596
597         * cipher.c (gcry_cipher_open): Replaced alloc functions and return NULL
598         if we are out of core.
599         * dynload.c: Replaced all memory allocation functions.
600         * md.c: Ditto.
601         * primegen.c: Ditto.
602         * pubkey.c: Ditto.
603         * random.c: Ditto.
604         * rndw32.c: Ditto.
605         * elgamal.c: Ditto.
606         * dsa.c: Ditto.
607
608 Tue Oct 26 14:10:21 CEST 1999  Werner Koch  <wk@gnupg.de>
609
610         * elgamal.c (sign): Hugh found strange code here. Replaced by BUG().
611
612         * cipher.c: Merged with gcrypt/symapi.c.
613
614         * pubkey.c (string_to_pubkey_algo): Renamed function to ...
615         (gcry_pk_map_name): ... this.
616         (pubkey_algo_to_string): Renamed function to ...
617         (gcry_pk_algo_name): ... this.
618         (gcry_pk_algo_info): New.
619         * pubkey.c: Merged with gcrypt/pkapi.c.
620
621         * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for
622         fixing this bug.
623
624         * md.c: Merged with gcrypt/mdapi.c
625
626 Wed Sep 15 14:39:59 CEST 1999  Michael Roth <mroth@nessie.de>
627
628         * des.c: Various speed improvements: One bit pre rotation
629           trick after initial permutation (Richard Outerbridge).
630           Finished test of SSLeay Tripple-DES patterns.
631
632 Wed Sep 15 16:22:17 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
633
634         * rndw32.c: New.
635
636 Mon Sep 13 10:51:29 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
637
638         * bithelp.h: New.
639         * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h
640
641 Tue Sep  7 16:23:36 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
642
643         * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert.
644
645 Mon Sep  6 19:59:08 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
646
647         * des.c (selftest): Add some testpattern
648
649 Mon Aug 30 20:38:33 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
650
651         * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using
652         in place encryption. Pointed out by Frank Stajano.
653
654 Mon Jul 26 09:34:46 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
655
656         * md5.c (md5_final): Fix for a SCO cpp bug.
657
658 Thu Jul 15 10:15:35 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
659
660         * elgamal.c (elg_check_secret_key,elg_encrypt
661         elg_decrypt,elg_sign,elg_verify): Sanity check on the args.
662         * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto.
663
664         * pubkey.c (disable_pubkey_algo): New.
665         (check_pubkey_algo2): Look at disabled algo table.
666         * cipher.c (disable_cipher_algo): New.
667         (check_cipher_algo): Look at disabled algo table.
668
669 Wed Jul  7 13:08:40 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
670
671         * Makefile.am: Support for libtool.
672
673 Fri Jul  2 11:45:54 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
674
675         * dsa.c (gen_k): Changed algorithm to consume less random bytes
676         * elgamal.c (gen_k): Ditto.
677
678         * random.c (random_dump_stats): New.
679
680 Thu Jul  1 12:47:31 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
681
682         * primegen.c, elgamal.c, dsa.c (progess): New and replaced all
683         fputc with a call to this function.
684
685 Sat Jun 26 12:15:59 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
686
687         * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs.
688
689         * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New.
690
691         * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra).
692         * Makefile.am (install-exec-hook): Removed.
693
694 Sun May 23 14:20:22 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
695
696         * cipher.c (setup_cipher_table): Enable Twofish
697
698         * random.c (fast_random_poll): Disable use of times() for mingw32.
699
700 Mon May 17 21:54:43 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
701
702         * dynload.c (register_internal_cipher_extension): Minor init fix.
703
704 Tue May  4 15:47:53 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
705
706         * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug
707         that we didn't correct for step when passing the prime to the
708         Rabin-Miller test which led to bad performance (Stefan Keller).
709         (check_prime): Add a first Fermat test.
710
711 Sun Apr 18 10:11:28 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
712
713         * cipher.c (cipher_setiv): Add ivlen arg, changed all callers.
714
715         * random.c (randomize_buffer): alway use secure memory because
716         we can't use m_is_secure() on a statically allocated buffer.
717
718         * twofish.c: Replaced some macros by a loop to reduce text size.
719         * Makefile.am (twofish): No more need for sed editing.
720
721 Fri Apr  9 12:26:25 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
722
723         * cipher.c (cipher_open): Reversed the changes for AUTO_CFB.
724
725         * blowfish.c: Dropped the Blowfish 160 mode.
726         * cipher.c (cipher_open): Ditto.
727         (setup_cipher_table): Ditto.  And removed support of twofish128
728
729 Wed Apr  7 20:51:39 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
730
731         * random.c (get_random_bits): Can now handle requests > POOLSIZE
732
733         * cipher.c (cipher_open): Now uses standard CFB for automode if
734         the blocksize is gt 8 (according to rfc2440).
735
736         * twofish.c: Applied Matthew Skala's patches for 256 bit key.
737
738 Tue Apr  6 19:58:12 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
739
740         * random.c (get_random_bits): Can now handle requests > POOLSIZE
741
742         * cipher.c (cipher_open): Now uses standard CFB for automode if
743         the blocksize is gt 8 (according to rfc2440).
744
745 Sat Mar 20 11:44:21 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
746
747         * rndlinux.c (tty_printf) [IS_MODULE]: Removed.
748
749         * rndegd.c (gather_random): Some fixes.
750
751 Wed Mar 17 13:09:03 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
752
753         * rndegd.c (do_read): New.
754         (gather_random): Changed the implementation.
755
756 Mon Mar  8 20:47:17 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
757
758         * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed.
759
760 Fri Feb 26 17:55:41 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
761
762         * md.c: Nearly a total rewrote.
763
764 Wed Feb 24 11:07:27 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
765
766         * cipher.c (context): Fixed alignment
767         * md.c: Ditto.
768
769         * rndegd.c: New
770
771 Mon Feb 22 20:04:00 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
772
773         * rndegd.c: New.
774
775 Wed Feb 10 17:15:39 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
776
777         * Makefile.am: Modules are now figured out by configure
778         * construct.c: New. Generated by configure. Changed all modules
779         to work with that.
780         * sha1.h: Removed.
781         * md5.h: Removed.
782
783         * twofish.c: Changed interface to allow Twofish/256
784
785         * rndunix.c (start_gatherer): Die on SIGPIPE.
786
787 Wed Jan 20 18:59:49 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
788
789         * rndunix.c (gather_random): Fix to avoid infinite loop.
790
791 Sun Jan 17 11:04:33 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
792
793         * des.c (is_weak_key): Replace system memcmp due to bugs
794         in SunOS's memcmp.
795         (des_get_info): Return error on failed selftest.
796         * twofish.c (twofish_setkey): Return error on failed selftest or
797         invalid keylength.
798         * cast5.c (cast_setkey): Ditto.
799         * blowfish.c (bf_setkey): Return error on failed selftest.
800
801 Tue Jan 12 11:17:18 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
802
803         * random.c (random_is_faked): New.
804
805         * tiger.c: Only compile if we have the u64 type
806
807 Sat Jan  9 16:02:23 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
808
809         * rndunix.c (gather_random): check for setuid.
810
811         * Makefile.am: Add a way to staically link random modules
812
813 Thu Jan  7 18:00:58 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
814
815         * md.c (md_stop_debug): Do a flush first.
816         (md_open): size of buffer now depends on the secure parameter
817
818 Sun Jan  3 15:28:44 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
819
820         * rndunix.c (start_gatherer): Fixed stupid ==/= bug
821
822 1998-12-31  Geoff Keating  <geoffk@ozemail.com.au>
823
824         * des.c (is_weak_key): Rewrite loop end condition.
825
826 Tue Dec 29 14:41:47 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
827
828         * random.c: add unistd.h for getpid().
829         (RAND_MAX): Fallback value for Sun.
830
831 Wed Dec 23 17:12:24 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
832
833         * md.c (md_copy): Reset debug.
834
835 Mon Dec 14 21:18:49 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
836
837         * random.c (read_random_source): Changed the interface to the
838         random gathering function.
839         (gather_faked): Use new interface.
840         * dynload.c (dynload_getfnc_fast_random_poll): Ditto.
841         (dynload_getfnc_gather_random): Ditto.
842         * rndlinux.c (gather_random): Ditto.
843         * rndunix.c (gather_random): Ditto.
844
845 Sat Dec 12 18:40:32 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
846
847         * dynload.c (SYMBOL_VERSION): New to cope with system which needs
848         underscores.
849
850         * rndunix.c: Rewrote large parts
851
852 Thu Dec 10 20:15:36 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
853
854         * dynload.c (load_extension): increased needed verbosity level.
855
856         * random.c (fast_random_poll): Fallback to a default fast random
857         poll function.
858         (read_random_source): Always use the faked entroy gatherer if no
859         gather module is available.
860         * rndlinux.c (fast_poll): Removed.
861         * rndunix.c (fast_poll): Removed.
862
863
864 Wed Nov 25 12:33:41 1998  Werner Koch  (wk@isil.d.shuttle.de)
865
866         * rand-*.c: Removed.
867         * rndlinux.c : New.
868         * rndunix.c : New.
869         * random.c : Restructured the interface to the gather modules.
870         (intialize): Call constructor functions
871         (read_radnom_source): Moved to here.
872         * dynload.c (dynload_getfnc_gather_random): New.
873         (dynload_getfnc_fast_random_poll): New.
874         (register_internal_cipher_extension): New.
875         (register_cipher_extension): Support of internal modules.
876
877 Sun Nov  8 17:44:36 1998  Werner Koch  (wk@isil.d.shuttle.de)
878
879         * rand-unix.c (read_random_source): Removed the assert.
880
881 Mon Oct 19 18:34:30 1998  me,,,  (wk@tobold)
882
883         * pubkey.c: Hack to allow us to give some info about RSA keys back.
884
885 Thu Oct 15 11:47:57 1998  Werner Koch  (wk@isil.d.shuttle.de)
886
887         * dynload.c: Support for DLD
888
889 Wed Oct 14 12:13:07 1998  Werner Koch  (wk@isil.d.shuttle.de)
890
891         * rand-unix.c: Now uses names from configure for /dev/random.
892
893 1998-10-10  SL Baur  <steve@altair.xemacs.org>
894
895         * Makefile.am: fix sed -O substitutions to catch -O6, etc.
896
897 Tue Oct  6 10:06:32 1998  Werner Koch  (wk@isil.d.shuttle.de)
898
899         * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-)
900         * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto.
901
902 Mon Sep 28 13:23:09 1998  Werner Koch  (wk@isil.d.shuttle.de)
903
904         * md.c (md_digest): New.
905         (md_reset): New.
906
907 Wed Sep 23 12:27:02 1998  Werner Koch  (wk@isil.d.shuttle.de)
908
909         * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned.
910
911 Mon Sep 21 06:22:53 1998  Werner Koch  (wk@(none))
912
913         * des.c: Some patches from Michael.
914
915 Thu Sep 17 19:00:06 1998  Werner Koch  (wk@(none))
916
917         * des.c : New file from Michael Roth <mroth@nessie.de>
918
919 Mon Sep 14 11:10:55 1998  Werner Koch  (wk@(none))
920
921         * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys.
922
923 Mon Sep 14 09:19:25 1998  Werner Koch  (wk@(none))
924
925         * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined.
926
927 Mon Sep  7 17:04:33 1998  Werner Koch  (wk@(none))
928
929         * Makefile.am: Fixes to allow a different build directory
930
931 Thu Aug  6 17:25:38 1998  Werner Koch,mobil,,,  (wk@tobold)
932
933         * random.c (get_random_byte): Removed and changed all callers
934         to use get_random_bits()
935
936 Mon Jul 27 10:30:22 1998  Werner Koch  (wk@(none))
937
938         * cipher.c : Support for other blocksizes
939         (cipher_get_blocksize): New.
940         * twofish.c: New.
941         * Makefile.am: Add twofish module.
942
943 Mon Jul 13 21:30:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
944
945         * random.c (read_pool): Simple alloc if secure_alloc is not set.
946         (get_random_bits): Ditto.
947
948 Thu Jul  9 13:01:14 1998  Werner Koch  (wk@isil.d.shuttle.de)
949
950         * dynload.c (load_extension): Function now nbails out if
951         the program is run setuid.
952
953 Wed Jul  8 18:58:23 1998  Werner Koch  (wk@isil.d.shuttle.de)
954
955         * rmd160.c (rmd160_hash_buffer): New.
956
957 Thu Jul  2 10:50:30 1998  Werner Koch  (wk@isil.d.shuttle.de)
958
959         * cipher.c (cipher_open): algos >=100 use standard CFB
960
961 Thu Jun 25 11:18:25 1998  Werner Koch  (wk@isil.d.shuttle.de)
962
963         * Makefile.am: Support for extensions
964
965 Thu Jun 18 12:09:38 1998  Werner Koch  (wk@isil.d.shuttle.de)
966
967         * random.c (mix_pool): simpler handling for level 0
968
969 Mon Jun 15 14:40:48 1998  Werner Koch  (wk@isil.d.shuttle.de)
970
971         * tiger.c: Removed from dist, will reappear as dynload module
972
973 Sat Jun 13 14:16:57 1998  Werner Koch  (wk@isil.d.shuttle.de)
974
975         * pubkey.c: Major changes to allow extensions. Changed the inteface
976         of all public key ciphers and added the ability to load extensions
977         on demand.
978
979         * misc.c: Removed.
980
981 Wed Jun 10 07:52:08 1998  Werner Koch,mobil,,,  (wk@tobold)
982
983         * dynload.c: New.
984         * cipher.c: Major changes to allow extensions.
985
986 Mon Jun  8 22:43:00 1998  Werner Koch  (wk@isil.d.shuttle.de)
987
988         * cipher.c: Major internal chnages to support extensions.
989         * blowfish.c (blowfish_get_info): New and made all internal
990         functions static, changed heder.
991         * cast5.c (cast5_get_info): Likewise.
992
993 Mon Jun  8 12:27:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
994
995         * tiger.c (transform): Fix for big endian
996
997         * cipher.c (do_cfb_decrypt): Big endian fix.
998
999 Fri May 22 07:30:39 1998  Werner Koch  (wk@isil.d.shuttle.de)
1000
1001         * md.c (md_get_oid): Add a new one for TIGER.
1002
1003 Thu May 21 13:24:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
1004
1005         * cipher.c: Add support for a dummy cipher
1006
1007 Thu May 14 15:40:36 1998  Werner Koch  (wk@isil.d.shuttle.de)
1008
1009         * rmd160.c (transform): fixed sigbus - I should better
1010         add Christian von Roques's new implemenation of rmd160_write.
1011
1012 Fri May  8 18:07:44 1998  Werner Koch  (wk@isil.d.shuttle.de)
1013
1014         * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New
1015         * random.c: Moved system specific functions to rand-****.c
1016
1017 Fri May  8 14:01:17 1998  Werner Koch  (wk@isil.d.shuttle.de)
1018
1019         * random.c (fast_random_poll): add call to gethrtime.
1020
1021 Tue May  5 21:28:55 1998  Werner Koch  (wk@isil.d.shuttle.de)
1022
1023         * elgamal.c (elg_generate): choosing x was not correct, could
1024         yield 6 bytes which are not from the random pool, tsss, tsss..
1025
1026 Tue May  5 14:09:06 1998  Werner Koch  (wk@isil.d.shuttle.de)
1027
1028         * primegen.c (generate_elg_prime): Add arg mode, changed all
1029         callers and implemented mode 1.
1030
1031 Mon Apr 27 14:41:58 1998  Werner Koch  (wk@isil.d.shuttle.de)
1032
1033         * cipher.c (cipher_get_keylen): New.
1034
1035 Sun Apr 26 14:44:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
1036
1037         * tiger.c, tiger.h: New.
1038
1039 Wed Apr  8 14:57:11 1998  Werner Koch  (wk@isil.d.shuttle.de)
1040
1041         * misc.c (check_pubkey_algo2): New.
1042
1043 Tue Apr  7 18:46:49 1998  Werner Koch  (wk@isil.d.shuttle.de)
1044
1045         * cipher.c: New
1046         * misc.c (check_cipher_algo): Moved to cipher.c
1047         * cast5.c: Moved many functions to cipher.c
1048         * blowfish.c: Likewise.
1049
1050 Sat Apr  4 19:52:08 1998  Werner Koch  (wk@isil.d.shuttle.de)
1051
1052         * cast5.c: Implemented and tested.
1053
1054 Wed Apr  1 16:38:27 1998  Werner Koch  (wk@isil.d.shuttle.de)
1055
1056         * elgamal.c (elg_generate): Faster generation of x in some cases.
1057
1058 Thu Mar 19 13:54:48 1998  Werner Koch  (wk@isil.d.shuttle.de)
1059
1060         * blowfish.c (blowfish_decode_cfb): changed XOR operation
1061         (blowfish_encode_cfb): Ditto.
1062
1063 Thu Mar 12 14:04:05 1998  Werner Koch  (wk@isil.d.shuttle.de)
1064
1065         * sha1.c (transform): Rewrote
1066
1067         * blowfish.c (encrypt): Unrolled for rounds == 16
1068         (decrypt): Ditto.
1069
1070 Tue Mar 10 16:32:08 1998  Werner Koch  (wk@isil.d.shuttle.de)
1071
1072         * rmd160.c (transform): Unrolled the loop.
1073
1074 Tue Mar 10 13:05:14 1998  Werner Koch  (wk@isil.d.shuttle.de)
1075
1076         * random.c (read_pool): Add pool_balance stuff.
1077         (get_random_bits): New.
1078
1079         * elgamal.c (elg_generate): Now uses get_random_bits to generate x.
1080
1081
1082 Tue Mar 10 11:33:51 1998  Werner Koch  (wk@isil.d.shuttle.de)
1083
1084         * md.c (md_digest_length): New.
1085
1086 Tue Mar 10 11:27:41 1998  Werner Koch  (wk@isil.d.shuttle.de)
1087
1088         * dsa.c (dsa_verify): Works.
1089
1090 Mon Mar  9 12:59:08 1998  Werner Koch  (wk@isil.d.shuttle.de)
1091
1092         * dsa.c, dsa.h: Removed some unused code.
1093
1094 Wed Mar  4 10:39:22 1998  Werner Koch  (wk@isil.d.shuttle.de)
1095
1096         * md.c (md_open): Add call to fast_random_poll.
1097         blowfish.c (blowfish_setkey): Ditto.
1098
1099 Tue Mar  3 13:32:54 1998  Werner Koch  (wk@isil.d.shuttle.de)
1100
1101         * rmd160.c (rmd160_mixblock): New.
1102         * random.c: Restructured to start with a new RNG implementation.
1103         * random.h: New.
1104
1105 Mon Mar  2 19:21:46 1998  Werner Koch  (wk@isil.d.shuttle.de)
1106
1107         * gost.c, gost.h: Removed because they did only conatin trash.
1108
1109 Sun Mar  1 16:42:29 1998  Werner Koch  (wk@isil.d.shuttle.de)
1110
1111         * random.c (fill_buffer): removed error message if n == -1.
1112
1113 Fri Feb 27 16:39:34 1998  Werner Koch  (wk@isil.d.shuttle.de)
1114
1115         * md.c (md_enable): No init if called twice.
1116
1117 Thu Feb 26 07:57:02 1998  Werner Koch  (wk@isil.d.shuttle.de)
1118
1119         * primegen.c (generate_elg_prime): Changed the progress printing.
1120         (gen_prime): Ditto.
1121
1122 Tue Feb 24 12:28:42 1998  Werner Koch  (wk@isil.d.shuttle.de)
1123
1124         * md5.c, md.5 : Replaced by a modified version of md5.c from
1125         GNU textutils 1.22.
1126
1127 Wed Feb 18 14:08:30 1998  Werner Koch  (wk@isil.d.shuttle.de)
1128
1129         * md.c, md.h : New debugging support
1130
1131 Mon Feb 16 10:08:47 1998  Werner Koch  (wk@isil.d.shuttle.de)
1132
1133         * misc.c (cipher_algo_to_string): New
1134         (pubkey_algo_to_string): New.
1135         (digest_algo_to_string): New.
1136
1137
1138  Copyright 1998,1999,2000,2001 Free Software Foundation, Inc.
1139
1140  This file is free software; as a special exception the author gives
1141  unlimited permission to copy and/or distribute it, with or without
1142  modifications, as long as this notice is preserved.
1143
1144  This file is distributed in the hope that it will be useful, but
1145  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1146  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.