* pubkey.c (pubkey_sign): Return an error if an ElGamal key is used.
[gnupg.git] / cipher / ChangeLog
1 2003-11-27  Werner Koch  <wk@gnupg.org>
2
3         * pubkey.c (pubkey_sign): Return an error if an ElGamal key is used.
4
5         * elgamal.c (gen_k): New arg SMALL_K.
6         (sign): Use it here with SMALL_K set to false
7         (do_encrypt): and here with SMALL_K set to true.
8
9 2003-10-10  Werner Koch  <wk@gnupg.org>
10
11         * primegen.c (gen_prime): Bail out if we try to generate a prime
12         with less than 16 bits. Include i18n.h.
13
14 2003-10-06  Werner Koch  <wk@gnupg.org>
15
16         * primegen.c (gen_prime): Bail out if NBITS is zero.  This is
17         Debian bug #213989 reported by Max <rusmir@tula.net>.
18
19 2003-09-04  David Shaw  <dshaw@jabberwocky.com>
20
21         * md.c (string_to_digest_algo): Enable read-write SHA-256 support.
22
23         * algorithms.h, Makefile.am, md.c (load_digest_module,
24         string_to_digest_algo), tiger.c: Drop TIGER/192 support.
25
26 2003-08-28  David Shaw  <dshaw@jabberwocky.com>
27
28         * idea-stub.c, random.c; s/__MINGW32__/_WIN32/ to help building on
29         native Windows compilers.  Requested by Brian Gladman.  From
30         Werner on stable branch.
31
32 2003-08-21  David Shaw  <dshaw@jabberwocky.com>
33
34         * random.c (getfnc_gather_random): Don't check NAME_OF_DEV_RANDOM
35         twice.  Use NAME_OF_DEV_URANDOM.
36
37 2003-05-24  David Shaw  <dshaw@jabberwocky.com>
38
39         * bithelp.h, des.c, random.c, rndlinux.c, sha1.c, blowfish.c,
40         elgamal.c, rijndael.c, rndunix.c, sha256.c, cast5.c, idea-stub.c,
41         rmd160.c, rndw32.c, sha512.c, md5.c, rmd160test.c, rsa.c, tiger.c:
42         Edit all preprocessor instructions to remove whitespace before the
43         '#'.  This is not required by C89, but there are some compilers
44         out there that don't like it.
45
46 2003-05-15  David Shaw  <dshaw@jabberwocky.com>
47
48         * cipher.c (setup_cipher_table): #ifdef IDEA.
49
50         * random.c (fast_random_poll): Only use times() if we HAVE_TIMES.
51
52         * sha512.c, tiger.c: Use the U64_C() macro to specify 64-bit
53         constants.  U64_C is defined in include/types.h and uses the
54         correct suffix depending on the underlying type of u64.
55
56         * idea-stub.c (load_module): Catch an error if the idea module
57         file is unloadable for some reason (unreadable, bad permissions,
58         etc.)
59
60         * md.c (string_to_digest_algo): Give a warning about TIGER192 not
61         being part of OpenPGP.
62
63 2003-04-15  Werner Koch  <wk@gnupg.org>
64
65         * md.c (md_start_debug): Need to open the file in binary mode.
66
67 2003-02-21  David Shaw  <dshaw@jabberwocky.com>
68
69         * cipher.c (setup_cipher_table): #ifdef all optional ciphers.
70
71         * md.c (load_digest_module): #ifdef all optional digests.
72
73 2003-02-11  David Shaw  <dshaw@jabberwocky.com>
74
75         * Makefile.am, md.c (load_digest_module): Only build in SHA384/512
76         and TIGER if specifically enabled by the 64-bit type check in
77         configure.
78
79 2003-02-04  David Shaw  <dshaw@jabberwocky.com>
80
81         * sha256.c, sha512.c: New.
82
83         * Makefile.am, algorithms.h, md.c (load_digest_module,
84         string_to_digest_algo): Add read-only support for the new SHAs.
85
86 2002-11-06  David Shaw  <dshaw@jabberwocky.com>
87
88         * rndw32.c [__CYGWIN32__]: Don't include winioctl.h - it is not
89         required anymore. (From Werner)
90
91         * random.c (read_seed_file,update_random_seed_file): Use binary
92         mode for __CYGWIN__. (From Werner)
93
94         * blowfish.c (burn_stack), cast5.c (burn_stack), des.c
95         (burn_stack), md5.c (burn_stack), random.c (burn_stack, read_pool,
96         fast_random_poll), rijndael.c (burn_stack), rmd160.c (burn_stack),
97         rndegd.c (rndegd_gather_random), rndlinux.c
98         (rndlinux_gather_random), sha1.c (burn_stack), tiger.c
99         (burn_stack), twofish.c (burn_stack): Replace various calls to
100         memset() with the more secure wipememory().
101
102 2002-11-02  David Shaw  <dshaw@jabberwocky.com>
103
104         * cipher.c (string_to_cipher_algo), md.c (string_to_digest_algo):
105         Allow the Sxxx and Hxxx format for cipher and digest names.
106
107 2002-10-31  Stefan Bellon  <sbellon@sbellon.de>
108
109         * rndriscos.c (rndriscos_gather_random): Use riscos_load_module()
110         to load CryptRandom module.
111
112 2002-10-12  Werner Koch  <wk@gnupg.org>
113
114         * rndunix.c (my_popen): Make sure that stdin and stderr are
115         connected to a file.  This is to avoid NetBSD to complain about
116         set{u,g}id programs invoked with fd 0, 2 closed.  Reported by
117         Cristian Biere.
118         (start_gatherer): Likewise. Reordered code.
119
120 2002-10-02  David Shaw  <dshaw@jabberwocky.com>
121
122         * tiger.c (tiger_get_info): Select the OID to use for TIGER at
123         compile time.
124
125 2002-09-27  David Shaw  <dshaw@jabberwocky.com>
126
127         * Makefile.am, md.c (load_digest_module): TIGER is now always
128         enabled.
129
130 2002-09-26  Werner Koch  <wk@gnupg.org>
131
132         * tiger.c (tiger_get_info): Use a regular OID.  Note that this
133         breaks all TIGER generated signatures; if we want to do something
134         about it we have to do it in ../g10/sig-check.c .
135
136 2002-09-17  Werner Koch  <wk@gnupg.org>
137
138         * rndw32.c (SIZEOF_DISK_PERFORMANCE_STRUCT): Increased to 256.
139
140 2002-09-12  Stefan Bellon  <sbellon@sbellon.de>
141
142         * rand-internal.h (rndriscos_gather_random): Added prototype.
143
144 2002-08-30  Werner Koch  <wk@gnupg.org>
145
146         * random.c: Automagically detect the entropy gatherer when
147         this feature is configured.
148         * rndegd.c (rndegd_connect_socket): New.  Factored out from ..
149         (rndegd_gather_random): here and call it.
150         (do_read): Update the counter variables correctly.  This was not a
151         problem due to the way EGD works. Bug found by Christian Biere.
152
153 2002-08-20  Werner Koch  <wk@gnupg.org>
154
155         * primegen.c (generate_elg_prime): Return all factors for mode 1.
156         Bug reported by Bob Mathews.
157
158 2002-08-12  Werner Koch  <wk@gnupg.org>
159
160         * cipher.c: Include the DUMMY cipher only when the new ALLOW_DUMMY
161         is defined. It should only be defined for hard core debugging.
162
163 2002-08-08  David Shaw  <dshaw@jabberwocky.com>
164
165         * Makefile.am, md.c (load_digest_module): Allow switching TIGER on
166         and off via configure.
167
168 2002-08-07  David Shaw  <dshaw@jabberwocky.com>
169
170         * md.c (md_algo_present): New function to check if a given algo is
171         in use for a given MD_HANDLE.
172
173 2002-08-04  Werner Koch  <wk@gnupg.org>
174
175         * blowfish.h, cast5.h, des.h: Removed after moving all prototypes to
176         * algorithms.h: here. Changed all sources to use this one.
177         
178 2002-08-03  Stefan Bellon  <sbellon@sbellon.de>
179
180         * idea-stub.c (idea_get_info): RISC OS' Norcroft C needs a cast.
181         * random.c (getfnc_gather_random): Added RISC OS support.
182         * rndriscos.c: Removed dynload code and tidied up a bit.
183
184 2002-08-03  Werner Koch  <wk@gnupg.org>
185
186         * rndegd.c (do_read): Handle case when read returns 0 to avoid
187         gpg hanging when EGD died.  By Christian Biere.
188
189 2002-08-02  Werner Koch  <wk@gnupg.org>
190
191         The big extension removal.
192         
193         * Makefile.am: Removed all extension stuff.
194         * dynload.c: Removed everything except for
195         register_cipher_extension.
196         (dynload_enum_module_names): New.
197         * dynload.h: Removed.
198         * random.c (getfnc_gather_random,getfnc_fast_random_poll):
199         New. Replaced all dynload functions with these ones.
200         * rndunix.c (rndunix_gather_random): Renamed from
201         gather_random.  Made global.  Removed all dynload stuff.
202         * rndlinux.c (rndlinux_gather_random): Likewise.
203         * rndegd.c (rndegd_gather_random): Likewise.
204         * rndw32.c (rndw32_gather_random)
205         (rndw32_gather_random_fast): Likewise.  Also removed the unsued
206         entropy dll code.
207         * md.c (new_list_item): Changed return value to indicate whether
208         an algorithms was loaded.
209         (load_digest_module): Simplified by removing all the dynload code.
210         * algorithms.h: New.
211         * md5.c (md5_get_info): Made global.  Removed all dynload stuff.
212         * rmd160.c (rmd160_get_info): Likewise. 
213         * sha1.c (sha1_get_info): Likewise.
214         * tiger.c (tiger_get_info): Likewise. Return NULL if we can't use
215         this module.
216         * idea-stub.c: New.
217         * blowfish.h (idea_get_info): Add prototype.
218         * cipher.c (setup_cipher_table): Try to load IDEA.
219         (load_cipher_modules): Removed all dynload code.
220         * pubkey.c (load_pubkey_modules): Removed the dynloading code.
221
222 2002-07-25  David Shaw  <dshaw@jabberwocky.com>
223
224         * random.c: "warning" -> "WARNING"
225
226 2002-07-02  Werner Koch  <wk@gnupg.org>
227
228         * rndw32.c (slow_gatherer_windowsNT): Use a simple array for the
229         disk performance structure and increase it to the size required by
230         W2000.
231
232 2002-06-29  Werner Koch  <wk@gnupg.org>
233
234         * rndlinux.c: Removed HAVE_LINUX_RANDOM_H conditional because it
235         was never used and the configure test did set the wrong macro
236         anyway.
237
238 2002-05-07  Stefan Bellon  <sbellon@sbellon.de>
239
240         * md.c (md_start_debug): Use EXTSEP_S instead of ".".
241
242 2002-04-24  Werner Koch  <wk@gnupg.org>
243
244         * tiger.c (tiger_final): Removed superfluous token pasting operators.
245         * md5.c (md5_final): Ditto.
246
247 2002-04-22  Stefan Bellon  <sbellon@sbellon.de>
248
249         * rndriscos.c (func_table): Made func a function pointer.
250         (init_device): Improved loading of CryptRandom module.
251
252 2002-04-18  Werner Koch  <wk@gnupg.org>
253
254         * rndlinux.c, rndegd.c, rndunix.c (func_table): Made func a
255         function pointer.  Note that we still need to change the module
256         interface to cope with data vs function pointer problems.  Hmmm,
257         even dlsym has a problem with this.
258
259 2002-04-10  David Shaw  <dshaw@jabberwocky.com>
260
261         * cipher.c (setup_cipher_table, cipher_open, cipher_encrypt,
262         cipher_decrypt, dummy_setkey, dummy_encrypt_block,
263         dummy_decrypt_block): the dummy cipher should only be built on
264         development versions.
265
266 2002-04-06  Werner Koch  <wk@gnupg.org>
267
268         * rijndael.c (rijndael_get_info): We do only support a 128 bit
269         blocksize so it makes sense to change the algorithm strings to
270         AES.
271         * cipher.c (string_to_cipher_algo): Map "RIJNDAEL" to "AES".
272
273 2002-02-14  Werner Koch  <wk@gnupg.org>
274
275         * random.c (mix_pool): Removed the failsafe stuff again.  It makes
276         the code more complicate and may give the path to more bugs.
277
278 2002-02-10  Werner Koch  <wk@gnupg.org>
279
280         * random.c (mix_pool): Carry an extra failsafe_digest buffer
281         around to make the function more robust.
282
283 2002-02-08  Werner Koch  <wk@gnupg.org>
284
285         * random.c (add_randomness): Xor new data into the pool and not
286         just copy it.  This avoids any choosen input attacks which are not
287         serious in our setting because an outsider won't be able to mix
288         data in and even then we keep going with a PRNG.  Thanks to Stefan
289         Keller for pointing this out.
290
291 2002-01-02  Stefan Bellon  <sbellon@sbellon.de>
292
293         * rndriscos.c [__riscos__]: Updated include file name.
294
295 2001-12-21  Werner Koch  <wk@gnupg.org>
296
297         * Makefile.am (DISCLEANFILES): Add construct.c
298
299 2001-12-19  Werner Koch  <wk@gnupg.org>
300
301         * rndw32.c [CYGWIN32]: Include winioctl.h.  By Disastry.
302
303 2001-11-08  Werner Koch  <wk@gnupg.org>
304
305         * primegen.c (gen_prime): Set 2 high order bits for secret primes.
306         * rsa.c (generate): Loop until we find the exact modulus size.
307         Changed the exponent to 41.
308
309 2001-10-22  Werner Koch  <wk@gnupg.org>
310
311         * Makefile.am: Need to use $(EXEEXT) where approriate.
312
313 2001-09-09  Werner Koch  <wk@gnupg.org>
314
315         * rsa.c (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings.
316
317 2001-08-24  Werner Koch  <wk@gnupg.org>
318
319         * md.c (md_write): Made buf arg const.
320
321 2001-08-22  Werner Koch  <wk@gnupg.org>
322
323         * random.c (fast_random_poll): Don't use gethrtime if it is broken.
324
325 2001-08-20  Werner Koch  <wk@gnupg.org>
326
327         Applied patches from Stefan Bellon <sbellon@sbellon.de> to support
328         RISC OS.  Nearly all of these patches are identified by the
329         __riscos__ macro.
330         * blowfish.c, twofish.c: Added pragmas for use with a Norcraft
331         compiler. 
332         * dynload.c, md5.c, rmd160.c, sha1.c: Minor patches for RISC OS.
333         * rndriscos.c: New.
334         * rnd-internal.h: Added prototype.
335         * random.c (fast_random_poll): Use '#if defined' instead of just
336         'defined'; needed for RISC OS.
337         * primegen.c (gen_prime): count? are now ints for consistence
338         with is_prime().
339
340 2001-08-08  Werner Koch  <wk@gnupg.org>
341
342         * rndw32.c (gather_random): Use toolhelp in addition to the NT
343         gatherer for Windows2000.  Suggested by Sami Tolvanen.
344
345         * random.c (read_pool): Fixed length check, this used to be one
346         byte to strict.  Made an assert out of it because the caller has
347         already made sure that only poolsize bytes are requested.
348         Reported by Marcus Brinkmann.
349
350 2001-07-18  Werner Koch  <wk@gnupg.org>
351
352         * rndlinux.c (gather_random): casted a size_t arg to int so that
353         the format string is correct.  Casting is okay here and avoids
354         translation changes. 
355
356 2001-06-12  Werner Koch  <wk@gnupg.org>
357
358         * cipher.c (string_to_cipher_algo): Use ascii_strcasecmp().
359         * md.c (string_to_digest_algo): Ditto.
360         * pubkey.c (string_to_pubkey_algo): Ditto.
361         * rndw32.c (slow_gatherer_windowsNT): Ditto.  Not really needed
362         here but anyway.
363
364 2001-04-29  Werner Koch  <wk@gnupg.org>
365
366         * random.c (fast_random_poll): Do not check the return code of
367         getrusage.
368
369 2001-04-17  Werner Koch  <wk@gnupg.org>
370
371         * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7
372         and 8.
373
374 2001-04-16  Werner Koch  <wk@gnupg.org>
375
376         * dynload.c [__MINGW32__]: Applied patch from Timo Schulz to make
377         it work under W32.  This patches is based on the one from
378         Disastry@saiknes.lv
379
380 2001-04-06  Werner Koch  <wk@gnupg.org>
381
382         * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c (burn_stack):
383         New.  Add wrappers for most functions to be able to call
384         burn_stack after the function invocation. This methods seems to be
385         the most portable way to zeroise the stack used. It does only work
386         on stack frame based machines but it is highly portable and has no
387         side effects.  Just setting the automatic variables at the end of
388         a function to zero does not work well because the compiler will
389         optimize them away - marking them as volatile would be bad for
390         performance.
391         * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise.
392         * random.c (burn_stack): New.
393         (mix_pool): Use it here to burn the stack of the mixblock function.
394         
395 2001-04-02  Werner Koch  <wk@gnupg.org>
396
397         * primegen.c (generate_elg_prime): I was not initialized for mode
398         != 1.  Freed q at 3 places.  Thanks to  Tommi Komulainen.
399
400 2001-03-28  Werner Koch  <wk@gnupg.org>
401
402         * md5.c (md5_final): Fixed calculation of hashed length.  Thanks
403         to disastry@saiknes.lv for pointing out that it was horrible wrong
404         for more than 512MB of input.
405         * sha1.c (sha1_final): Ditto.
406         * rmd160.c (rmd160_final): Ditto.
407         * tiger.c (tiger_final): Ditto.
408
409 2001-03-19  Werner Koch  <wk@gnupg.org>
410
411         * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to
412         avoid name clahses with an encrypt function in stdlib.h of
413         Dynix/PIX.  Thanks to Gene Carter.
414         * elgamal.c (encrypt,do_encrypt): Ditto.
415
416 2001-03-12  Werner Koch  <wk@gnupg.org>
417
418         * twofish.c (gnupgext_enum_func): Add some static when comnpiled
419         as a module.
420
421         * tiger.c (tiger_get_info): Return "TIGER192" and not just
422         "TIGER".  By Edwin Woudt.
423
424 2001-03-08  Werner Koch  <wk@gnupg.org>
425
426         * random.c: Always include time.h - standard requirement.  Thanks
427         to James Troup.
428
429 2001-01-18  Werner Koch  <wk@gnupg.org>
430
431         * rndw32.c: Fixed typo and wrong ifdef for VER_PLATFORM* macro
432
433 2001-01-12  Werner Koch  <wk@gnupg.org>
434
435         * cipher.c (cipher_encrypt,cipher_encrypt): Use blocksize and
436         not 8 for CBC mode (However: we don't use CBS in OpenPGP).
437
438 2000-11-22  Werner Koch  <wk@gnupg.org>
439
440         * rndegd.c (gather_random): Fixed default socket to be '=entropy'.
441         Thanks to Tomasz Kozlowski.
442
443 2000-10-12  Werner Koch  <wk@gnupg.org>
444
445         * rijndael.c: New.
446         * cipher.c: Add Rijndael support.
447
448 Wed Oct  4 15:50:18 CEST 2000  Werner Koch  <wk@openit.de>
449
450         * sha1.c (transform): Use rol() macro.  Actually this is not needed
451         for a newer gcc but there are still aoter compilers.
452
453 Thu Sep 14 14:20:38 CEST 2000  Werner Koch  <wk@openit.de>
454
455         * random.c (fast_random_poll): Check ENOSYS for getrusage.
456         * rndunix.c:  Add 2 sources for QNX. By Sam Roberts.
457
458 Wed Sep 13 18:12:34 CEST 2000  Werner Koch  <wk@openit.de>
459
460         * rsa.c (secret): Speed up by using the CRT.  For a 2k keys this
461         is about 3 times faster.
462         (stronger_key_check): New but unused code to check the secret key.
463
464 Wed Sep  6 17:55:47 CEST 2000  Werner Koch  <wk@openit.de>
465
466         * rsa.c: Changed the comment about the patent.
467         * Makefile.am: Included rsa.[ch].
468         * pubkey.c: Enabled RSA support.
469         (pubkey_get_npkey): Removed RSA workaround.
470
471 Fri Aug 25 16:05:38 CEST 2000  Werner Koch  <wk@openit.de>
472
473         * rndlinux.c (open_device): Loose random device checking.
474         By Nils Ellmenreich.
475
476         * rndegd.c (gather_random): Name of socket is nom configurable.
477
478 Wed Jun 28 11:54:44 CEST 2000  Werner Koch  <wk@>
479
480   * rsa.c, rsa.h: New based on the old module version (only in CVS for now).
481   * pubkey.c (setup_pubkey_table): Added commented support for RSA.
482
483 Fri Jun  9 10:09:52 CEST 2000  Werner Koch  <wk@openit.de>
484
485   * rndunix.c (waitpid): New. For UTS 2.1.  All by Dave Dykstra.
486   (my_popen): Do the FD_CLOEXEC only if it is available
487   (start_gatherer): Cope with missing _SC_OPEN_MAX
488
489 Sun May 28 13:55:17 CEST 2000  Werner Koch  <wk@openit.de>
490
491   * random.c (read_seed_file): Binary open for DOSish system
492   (update_random_seed_file): Ditto.
493
494   * rndw32.c: Add some debuging code enabled by an environment variable.
495
496 Tue May 23 09:19:00 CEST 2000  Werner Koch  <wk@openit.de>
497
498         * rndw32.c: Started with alternative code to replace entropy.dll
499
500 Thu May 18 11:38:54 CEST 2000  Werner Koch  <wk@openit.de>
501
502         * primegen.c (register_primegen_progress): New.
503         * dsa.c (register_pk_dsa_progress): New.
504         * elgamal.c (register_pk_elg_progress): New.
505
506 Fri Apr 14 19:37:08 CEST 2000  Werner Koch  <wk@openit.de>
507
508         * twofish.c (twofish_get_info): Fixed warning about cast.
509
510 Tue Mar 28 14:26:58 CEST 2000  Werner Koch  <wk@openit.de>
511
512         * random.c [MINGW32]: Include process.h for getpid.
513
514 Thu Mar  2 15:37:46 CET 2000  Werner Koch  <wk@gnupg.de>
515
516         * random.c (fast_random_poll): Add clock_gettime() as fallback for
517         system which support this POSIX.4 fucntion. By Sam Roberts.
518
519         * rndunix.c: Add some more headers for QNX. By Sam Roberts.
520
521         * random.c (read_seed_file): Removed the S_ISLNK test becuase it
522         is already covered by !S_ISREG and is not defined in Unixware.
523         Reported by Dave Dykstra.
524
525         * sha1.c (sha1_get_info): Removed those stupid double lines. Dave
526         is really a good lint.
527
528 Wed Feb 23 10:07:57 CET 2000  Werner Koch  <wk@gnupg.de>
529
530         * twofish.c (twofish_get_info): Add some const to the casts.  By Martin
531         Kahlert.
532
533 Mon Feb 14 14:30:20 CET 2000  Werner Koch  <wk@gnupg.de>
534
535         (update_random_seed_file): Silently ignore update request when pool
536         is not filled.
537
538 Fri Feb 11 17:44:40 CET 2000  Werner Koch  <wk@gnupg.de>
539
540         * random.c (read_seed_file): New.
541         (set_random_seed_file): New.
542         (read_pool): Try to read the seeding file.
543         (update_random_seed_file): New.
544
545         (read_pool): Do an initial extra seeding when level 2 quality random
546         is requested the first time.  This requestes at least POOLSIZE/2 bytes
547         of entropy.  Compined with the seeding file this should make normal
548         random bytes cheaper and increase the quality of the random bytes
549         used for key generation.
550
551         * rndegd.c (gather_random): Shortcut level 0.
552         * rndunix.c (gather_random): Ditto.
553         * rndw32.c (gather_random): Ditto.
554
555 Fri Jan 14 18:32:01 CET 2000  Werner Koch  <wk@gnupg.de>
556
557         * rmd160.c (rmd160_get_info): Moved casting to the left side due to a
558         problem with UTS4.3.  Suggested by Dave Dykstra.
559         * sha1.c (sha1_get_info): Ditto.
560         * tiger.c (tiger_get_info): Ditto.
561         * md5.c (md5_get_info): Ditto
562         * des.c (des_get_info): Ditto.
563         * blowfish.c (blowfish_get_info): Ditto.
564         * cast5.c (cast5_get_info): Ditto.
565         * twofish.c (twofish_get_info): Ditto.
566
567 Thu Jan 13 19:31:58 CET 2000  Werner Koch  <wk@gnupg.de>
568
569         * elgamal.c (wiener_map): New.
570         (gen_k): Use a much smaller k.
571         (generate): Calculate the qbits using the wiener map and
572         choose an x at a size comparable to the one choosen in gen_k
573
574         * random.c (read_pool): Print a more friendly error message in
575         cases when too much random is requested in one call.
576
577         * Makefile.am (tiger): Replaced -O1 by -O. Suggested by Alec Habig.
578
579 Sat Dec  4 12:30:28 CET 1999  Werner Koch  <wk@gnupg.de>
580
581         * primegen.c (generate_elg_prime): All primes are now generated with
582         the lowest random quality level.  Becuase they are public anyway we
583         don't need stronger random and by this we do not drain the systems
584         entropy so much.
585
586 Thu Oct 28 16:08:20 CEST 1999  Werner Koch  <wk@gnupg.de>
587
588         * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined;
589         this is not the case for some ESIX and Unixware, although they have
590         getrusage().
591
592         * elgamal.c (sign): Hugh found strange code here. Replaced by BUG().
593
594 Mon Oct 11 09:24:12 CEST 1999  Werner Koch  <wk@gnupg.de>
595
596         * rndw32.c (gather_random): Handle PCP_SEEDER_TOO_SMALL.
597
598 Sat Oct  9 20:34:41 CEST 1999  Werner Koch  <wk@gnupg.de>
599
600         * Makefile.am:  Tweaked module build and removed libtool
601
602 Fri Oct  8 20:32:01 CEST 1999  Werner Koch  <wk@gnupg.de>
603
604         * rndw32.c (load_and_init_winseed): Use the Registry to locate the DLL
605
606 Mon Oct  4 21:23:04 CEST 1999  Werner Koch  <wk@gnupg.de>
607
608         * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for
609         fixing this bug.
610
611 Sat Sep 18 12:51:51 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
612
613         * Makefile.am: Never compile mingw32 as module
614
615 Wed Sep 15 14:39:59 CEST 1999  Michael Roth <mroth@nessie.de>
616
617         * des.c: Various speed improvements: One bit pre rotation
618           trick after initial permutation (Richard Outerbridge).
619           Finished test of SSLeay Tripple-DES patterns.
620
621 Wed Sep 15 16:22:17 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
622
623         * rndw32.c: New.
624
625 Mon Sep 13 10:51:29 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
626
627         * bithelp.h: New.
628         * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h
629
630 Tue Sep  7 16:23:36 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
631
632         * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert.
633
634 Mon Sep  6 19:59:08 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
635
636         * des.c (selftest): Add some testpattern
637
638 Mon Aug 30 20:38:33 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
639
640         * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using
641         in place encryption. Pointed out by Frank Stajano.
642
643 Mon Jul 26 09:34:46 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
644
645         * md5.c (md5_final): Fix for a SCO cpp bug.
646
647 Thu Jul 15 10:15:35 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
648
649         * elgamal.c (elg_check_secret_key,elg_encrypt
650         elg_decrypt,elg_sign,elg_verify): Sanity check on the args.
651         * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto.
652
653         * pubkey.c (disable_pubkey_algo): New.
654         (check_pubkey_algo2): Look at disabled algo table.
655         * cipher.c (disable_cipher_algo): New.
656         (check_cipher_algo): Look at disabled algo table.
657
658 Wed Jul  7 13:08:40 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
659
660         * Makefile.am: Support for libtool.
661
662 Fri Jul  2 11:45:54 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
663
664         * dsa.c (gen_k): Changed algorithm to consume less random bytes
665         * elgamal.c (gen_k): Ditto.
666
667         * random.c (random_dump_stats): New.
668
669 Thu Jul  1 12:47:31 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
670
671         * primegen.c, elgamal.c, dsa.c (progess): New and replaced all
672         fputc with a call to this function.
673
674 Sat Jun 26 12:15:59 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
675
676         * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs.
677
678         * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New.
679
680         * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra).
681         * Makefile.am (install-exec-hook): Removed.
682
683 Sun May 23 14:20:22 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
684
685         * cipher.c (setup_cipher_table): Enable Twofish
686
687         * random.c (fast_random_poll): Disable use of times() for mingw32.
688
689 Mon May 17 21:54:43 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
690
691         * dynload.c (register_internal_cipher_extension): Minor init fix.
692
693 Tue May  4 15:47:53 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
694
695         * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug
696         that we didn't correct for step when passing the prime to the
697         Rabin-Miller test which led to bad performance (Stefan Keller).
698         (check_prime): Add a first Fermat test.
699
700 Sun Apr 18 10:11:28 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
701
702         * cipher.c (cipher_setiv): Add ivlen arg, changed all callers.
703
704         * random.c (randomize_buffer): alway use secure memory because
705         we can't use m_is_secure() on a statically allocated buffer.
706
707         * twofish.c: Replaced some macros by a loop to reduce text size.
708         * Makefile.am (twofish): No more need for sed editing.
709
710 Fri Apr  9 12:26:25 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
711
712         * cipher.c (cipher_open): Reversed the changes for AUTO_CFB.
713
714         * blowfish.c: Dropped the Blowfish 160 mode.
715         * cipher.c (cipher_open): Ditto.
716         (setup_cipher_table): Ditto.  And removed support of twofish128
717
718 Wed Apr  7 20:51:39 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
719
720         * random.c (get_random_bits): Can now handle requests > POOLSIZE
721
722         * cipher.c (cipher_open): Now uses standard CFB for automode if
723         the blocksize is gt 8 (according to rfc2440).
724
725         * twofish.c: Applied Matthew Skala's patches for 256 bit key.
726
727 Tue Apr  6 19:58:12 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
728
729         * random.c (get_random_bits): Can now handle requests > POOLSIZE
730
731         * cipher.c (cipher_open): Now uses standard CFB for automode if
732         the blocksize is gt 8 (according to rfc2440).
733
734 Sat Mar 20 11:44:21 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
735
736         * rndlinux.c (tty_printf) [IS_MODULE]: Removed.
737
738         * rndegd.c (gather_random): Some fixes.
739
740 Wed Mar 17 13:09:03 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
741
742         * rndegd.c (do_read): New.
743         (gather_random): Changed the implementation.
744
745 Mon Mar  8 20:47:17 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
746
747         * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed.
748
749 Fri Feb 26 17:55:41 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
750
751         * md.c: Nearly a total rewrote.
752
753 Wed Feb 24 11:07:27 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
754
755         * cipher.c (context): Fixed alignment
756         * md.c: Ditto.
757
758         * rndegd.c: New
759
760 Mon Feb 22 20:04:00 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
761
762         * rndegd.c: New.
763
764 Wed Feb 10 17:15:39 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
765
766         * Makefile.am: Modules are now figured out by configure
767         * construct.c: New. Generated by configure. Changed all modules
768         to work with that.
769         * sha1.h: Removed.
770         * md5.h: Removed.
771
772         * twofish.c: Changed interface to allow Twofish/256
773
774         * rndunix.c (start_gatherer): Die on SIGPIPE.
775
776 Wed Jan 20 18:59:49 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
777
778         * rndunix.c (gather_random): Fix to avoid infinite loop.
779
780 Sun Jan 17 11:04:33 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
781
782         * des.c (is_weak_key): Replace system memcmp due to bugs
783         in SunOS's memcmp.
784         (des_get_info): Return error on failed selftest.
785         * twofish.c (twofish_setkey): Return error on failed selftest or
786         invalid keylength.
787         * cast5.c (cast_setkey): Ditto.
788         * blowfish.c (bf_setkey): Return error on failed selftest.
789
790 Tue Jan 12 11:17:18 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
791
792         * random.c (random_is_faked): New.
793
794         * tiger.c: Only compile if we have the u64 type
795
796 Sat Jan  9 16:02:23 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
797
798         * rndunix.c (gather_random): check for setuid.
799
800         * Makefile.am: Add a way to staically link random modules
801
802 Thu Jan  7 18:00:58 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
803
804         * md.c (md_stop_debug): Do a flush first.
805         (md_open): size of buffer now depends on the secure parameter
806
807 Sun Jan  3 15:28:44 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
808
809         * rndunix.c (start_gatherer): Fixed stupid ==/= bug
810
811 1998-12-31  Geoff Keating  <geoffk@ozemail.com.au>
812
813         * des.c (is_weak_key): Rewrite loop end condition.
814
815 Tue Dec 29 14:41:47 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
816
817         * random.c: add unistd.h for getpid().
818         (RAND_MAX): Fallback value for Sun.
819
820 Wed Dec 23 17:12:24 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
821
822         * md.c (md_copy): Reset debug.
823
824 Mon Dec 14 21:18:49 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
825
826         * random.c (read_random_source): Changed the interface to the
827         random gathering function.
828         (gather_faked): Use new interface.
829         * dynload.c (dynload_getfnc_fast_random_poll): Ditto.
830         (dynload_getfnc_gather_random): Ditto.
831         * rndlinux.c (gather_random): Ditto.
832         * rndunix.c (gather_random): Ditto.
833
834 Sat Dec 12 18:40:32 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
835
836         * dynload.c (SYMBOL_VERSION): New to cope with system which needs
837         underscores.
838
839         * rndunix.c: Rewrote large parts
840
841 Thu Dec 10 20:15:36 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
842
843         * dynload.c (load_extension): increased needed verbosity level.
844
845         * random.c (fast_random_poll): Fallback to a default fast random
846         poll function.
847         (read_random_source): Always use the faked entroy gatherer if no
848         gather module is available.
849         * rndlinux.c (fast_poll): Removed.
850         * rndunix.c (fast_poll): Removed.
851
852
853 Wed Nov 25 12:33:41 1998  Werner Koch  (wk@isil.d.shuttle.de)
854
855         * rand-*.c: Removed.
856         * rndlinux.c : New.
857         * rndunix.c : New.
858         * random.c : Restructured the interface to the gather modules.
859         (intialize): Call constructor functions
860         (read_radnom_source): Moved to here.
861         * dynload.c (dynload_getfnc_gather_random): New.
862         (dynload_getfnc_fast_random_poll): New.
863         (register_internal_cipher_extension): New.
864         (register_cipher_extension): Support of internal modules.
865
866 Sun Nov  8 17:44:36 1998  Werner Koch  (wk@isil.d.shuttle.de)
867
868         * rand-unix.c (read_random_source): Removed the assert.
869
870 Mon Oct 19 18:34:30 1998  me,,,  (wk@tobold)
871
872         * pubkey.c: Hack to allow us to give some info about RSA keys back.
873
874 Thu Oct 15 11:47:57 1998  Werner Koch  (wk@isil.d.shuttle.de)
875
876         * dynload.c: Support for DLD
877
878 Wed Oct 14 12:13:07 1998  Werner Koch  (wk@isil.d.shuttle.de)
879
880         * rand-unix.c: Now uses names from configure for /dev/random.
881
882 1998-10-10  SL Baur  <steve@altair.xemacs.org>
883
884         * Makefile.am: fix sed -O substitutions to catch -O6, etc.
885
886 Tue Oct  6 10:06:32 1998  Werner Koch  (wk@isil.d.shuttle.de)
887
888         * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-)
889         * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto.
890
891 Mon Sep 28 13:23:09 1998  Werner Koch  (wk@isil.d.shuttle.de)
892
893         * md.c (md_digest): New.
894         (md_reset): New.
895
896 Wed Sep 23 12:27:02 1998  Werner Koch  (wk@isil.d.shuttle.de)
897
898         * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned.
899
900 Mon Sep 21 06:22:53 1998  Werner Koch  (wk@(none))
901
902         * des.c: Some patches from Michael.
903
904 Thu Sep 17 19:00:06 1998  Werner Koch  (wk@(none))
905
906         * des.c : New file from Michael Roth <mroth@nessie.de>
907
908 Mon Sep 14 11:10:55 1998  Werner Koch  (wk@(none))
909
910         * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys.
911
912 Mon Sep 14 09:19:25 1998  Werner Koch  (wk@(none))
913
914         * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined.
915
916 Mon Sep  7 17:04:33 1998  Werner Koch  (wk@(none))
917
918         * Makefile.am: Fixes to allow a different build directory
919
920 Thu Aug  6 17:25:38 1998  Werner Koch,mobil,,,  (wk@tobold)
921
922         * random.c (get_random_byte): Removed and changed all callers
923         to use get_random_bits()
924
925 Mon Jul 27 10:30:22 1998  Werner Koch  (wk@(none))
926
927         * cipher.c : Support for other blocksizes
928         (cipher_get_blocksize): New.
929         * twofish.c: New.
930         * Makefile.am: Add twofish module.
931
932 Mon Jul 13 21:30:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
933
934         * random.c (read_pool): Simple alloc if secure_alloc is not set.
935         (get_random_bits): Ditto.
936
937 Thu Jul  9 13:01:14 1998  Werner Koch  (wk@isil.d.shuttle.de)
938
939         * dynload.c (load_extension): Function now nbails out if
940         the program is run setuid.
941
942 Wed Jul  8 18:58:23 1998  Werner Koch  (wk@isil.d.shuttle.de)
943
944         * rmd160.c (rmd160_hash_buffer): New.
945
946 Thu Jul  2 10:50:30 1998  Werner Koch  (wk@isil.d.shuttle.de)
947
948         * cipher.c (cipher_open): algos >=100 use standard CFB
949
950 Thu Jun 25 11:18:25 1998  Werner Koch  (wk@isil.d.shuttle.de)
951
952         * Makefile.am: Support for extensions
953
954 Thu Jun 18 12:09:38 1998  Werner Koch  (wk@isil.d.shuttle.de)
955
956         * random.c (mix_pool): simpler handling for level 0
957
958 Mon Jun 15 14:40:48 1998  Werner Koch  (wk@isil.d.shuttle.de)
959
960         * tiger.c: Removed from dist, will reappear as dynload module
961
962 Sat Jun 13 14:16:57 1998  Werner Koch  (wk@isil.d.shuttle.de)
963
964         * pubkey.c: Major changes to allow extensions. Changed the inteface
965         of all public key ciphers and added the ability to load extensions
966         on demand.
967
968         * misc.c: Removed.
969
970 Wed Jun 10 07:52:08 1998  Werner Koch,mobil,,,  (wk@tobold)
971
972         * dynload.c: New.
973         * cipher.c: Major changes to allow extensions.
974
975 Mon Jun  8 22:43:00 1998  Werner Koch  (wk@isil.d.shuttle.de)
976
977         * cipher.c: Major internal chnages to support extensions.
978         * blowfish.c (blowfish_get_info): New and made all internal
979         functions static, changed heder.
980         * cast5.c (cast5_get_info): Likewise.
981
982 Mon Jun  8 12:27:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
983
984         * tiger.c (transform): Fix for big endian
985
986         * cipher.c (do_cfb_decrypt): Big endian fix.
987
988 Fri May 22 07:30:39 1998  Werner Koch  (wk@isil.d.shuttle.de)
989
990         * md.c (md_get_oid): Add a new one for TIGER.
991
992 Thu May 21 13:24:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
993
994         * cipher.c: Add support for a dummy cipher
995
996 Thu May 14 15:40:36 1998  Werner Koch  (wk@isil.d.shuttle.de)
997
998         * rmd160.c (transform): fixed sigbus - I should better
999         add Christian von Roques's new implemenation of rmd160_write.
1000
1001 Fri May  8 18:07:44 1998  Werner Koch  (wk@isil.d.shuttle.de)
1002
1003         * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New
1004         * random.c: Moved system specific functions to rand-****.c
1005
1006 Fri May  8 14:01:17 1998  Werner Koch  (wk@isil.d.shuttle.de)
1007
1008         * random.c (fast_random_poll): add call to gethrtime.
1009
1010 Tue May  5 21:28:55 1998  Werner Koch  (wk@isil.d.shuttle.de)
1011
1012         * elgamal.c (elg_generate): choosing x was not correct, could
1013         yield 6 bytes which are not from the random pool, tsss, tsss..
1014
1015 Tue May  5 14:09:06 1998  Werner Koch  (wk@isil.d.shuttle.de)
1016
1017         * primegen.c (generate_elg_prime): Add arg mode, changed all
1018         callers and implemented mode 1.
1019
1020 Mon Apr 27 14:41:58 1998  Werner Koch  (wk@isil.d.shuttle.de)
1021
1022         * cipher.c (cipher_get_keylen): New.
1023
1024 Sun Apr 26 14:44:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
1025
1026         * tiger.c, tiger.h: New.
1027
1028 Wed Apr  8 14:57:11 1998  Werner Koch  (wk@isil.d.shuttle.de)
1029
1030         * misc.c (check_pubkey_algo2): New.
1031
1032 Tue Apr  7 18:46:49 1998  Werner Koch  (wk@isil.d.shuttle.de)
1033
1034         * cipher.c: New
1035         * misc.c (check_cipher_algo): Moved to cipher.c
1036         * cast5.c: Moved many functions to cipher.c
1037         * blowfish.c: Likewise.
1038
1039 Sat Apr  4 19:52:08 1998  Werner Koch  (wk@isil.d.shuttle.de)
1040
1041         * cast5.c: Implemented and tested.
1042
1043 Wed Apr  1 16:38:27 1998  Werner Koch  (wk@isil.d.shuttle.de)
1044
1045         * elgamal.c (elg_generate): Faster generation of x in some cases.
1046
1047 Thu Mar 19 13:54:48 1998  Werner Koch  (wk@isil.d.shuttle.de)
1048
1049         * blowfish.c (blowfish_decode_cfb): changed XOR operation
1050         (blowfish_encode_cfb): Ditto.
1051
1052 Thu Mar 12 14:04:05 1998  Werner Koch  (wk@isil.d.shuttle.de)
1053
1054         * sha1.c (transform): Rewrote
1055
1056         * blowfish.c (encrypt): Unrolled for rounds == 16
1057         (decrypt): Ditto.
1058
1059 Tue Mar 10 16:32:08 1998  Werner Koch  (wk@isil.d.shuttle.de)
1060
1061         * rmd160.c (transform): Unrolled the loop.
1062
1063 Tue Mar 10 13:05:14 1998  Werner Koch  (wk@isil.d.shuttle.de)
1064
1065         * random.c (read_pool): Add pool_balance stuff.
1066         (get_random_bits): New.
1067
1068         * elgamal.c (elg_generate): Now uses get_random_bits to generate x.
1069
1070
1071 Tue Mar 10 11:33:51 1998  Werner Koch  (wk@isil.d.shuttle.de)
1072
1073         * md.c (md_digest_length): New.
1074
1075 Tue Mar 10 11:27:41 1998  Werner Koch  (wk@isil.d.shuttle.de)
1076
1077         * dsa.c (dsa_verify): Works.
1078
1079 Mon Mar  9 12:59:08 1998  Werner Koch  (wk@isil.d.shuttle.de)
1080
1081         * dsa.c, dsa.h: Removed some unused code.
1082
1083 Wed Mar  4 10:39:22 1998  Werner Koch  (wk@isil.d.shuttle.de)
1084
1085         * md.c (md_open): Add call to fast_random_poll.
1086         blowfish.c (blowfish_setkey): Ditto.
1087
1088 Tue Mar  3 13:32:54 1998  Werner Koch  (wk@isil.d.shuttle.de)
1089
1090         * rmd160.c (rmd160_mixblock): New.
1091         * random.c: Restructured to start with a new RNG implementation.
1092         * random.h: New.
1093
1094 Mon Mar  2 19:21:46 1998  Werner Koch  (wk@isil.d.shuttle.de)
1095
1096         * gost.c, gost.h: Removed because they did only conatin trash.
1097
1098 Sun Mar  1 16:42:29 1998  Werner Koch  (wk@isil.d.shuttle.de)
1099
1100         * random.c (fill_buffer): removed error message if n == -1.
1101
1102 Fri Feb 27 16:39:34 1998  Werner Koch  (wk@isil.d.shuttle.de)
1103
1104         * md.c (md_enable): No init if called twice.
1105
1106 Thu Feb 26 07:57:02 1998  Werner Koch  (wk@isil.d.shuttle.de)
1107
1108         * primegen.c (generate_elg_prime): Changed the progress printing.
1109         (gen_prime): Ditto.
1110
1111 Tue Feb 24 12:28:42 1998  Werner Koch  (wk@isil.d.shuttle.de)
1112
1113         * md5.c, md.5 : Replaced by a modified version of md5.c from
1114         GNU textutils 1.22.
1115
1116 Wed Feb 18 14:08:30 1998  Werner Koch  (wk@isil.d.shuttle.de)
1117
1118         * md.c, md.h : New debugging support
1119
1120 Mon Feb 16 10:08:47 1998  Werner Koch  (wk@isil.d.shuttle.de)
1121
1122         * misc.c (cipher_algo_to_string): New
1123         (pubkey_algo_to_string): New.
1124         (digest_algo_to_string): New.
1125
1126
1127
1128  Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
1129
1130  This file is free software; as a special exception the author gives
1131  unlimited permission to copy and/or distribute it, with or without
1132  modifications, as long as this notice is preserved.
1133
1134  This file is distributed in the hope that it will be useful, but
1135  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1136  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1137
1138