Add a method to disable the weak key detection.
[libgcrypt.git] / tests / ChangeLog
1 2008-11-05  Werner Koch  <wk@g10code.com>
2
3         * fipsdrv.c (run_encrypt_decrypt): Disable weak key detection.
4
5 2008-10-31  Werner Koch  <wk@g10code.com>
6
7         * fipsdrv.c (run_rsa_sign): Buffer needs to be larger for SHA512.
8
9 2008-10-27  Werner Koch  <wk@g10code.com>
10
11         * fipsdrv.c (run_encrypt_decrypt): Make IV_BUFFER optional.
12         (main): Ditto.
13         * cavs_driver.pl: Remove the --no-fips flags.
14         (libgcrypt_encdec($$$$$)): Make IV optional.
15         (libgcrypt_state_cipher($$$$$)): Ditto.
16
17 2008-10-24  Werner Koch  <wk@g10code.com>
18
19         * benchmark.c (md_bench): Do not test MD5 in fips mode.
20         * basic.c (check_digests, check_hmac): Ditto.
21
22 2008-10-06  Werner Koch  <wk@g10code.com>
23
24         * cavs_driver.pl: New version from upstream.
25         (libgcrypt_rsa_verify($$$$)): Pass pkcs1.
26         (libgcrypt_rsa_sign($$$)): Pass pkcs1 and hash algo.
27
28         * fipsdrv.c (run_rsa_sign): Hash data in pkcs1 mode.
29         (run_rsa_verify): Ditto.
30         (read_key_file): Rename to read_private_key_file.  Factor public
31         key code out to..
32         (read_public_key_file): .. new.
33
34 2008-10-02  Werner Koch  <wk@g10code.com>
35
36         * fipsdrv.c (print_buffer): Add base64 printing code.
37         (base64_decode, read_key_file, parse_tag, read_sig_file): New.
38         (run_rsa_gen, run_rsa_sign): New.
39         (main): Add modes rsa-gen, rsa-sign and rsa-verify.
40
41         
42 2008-09-29  Werner Koch  <wk@g10code.com>
43
44         * fipsdrv.c: Merge code from fipsrngdrv.c
45         * fipsrngdrv.c: Remove.
46
47 2008-09-26  Werner Koch  <wk@g10code.com>
48
49         * Makefile.am: Distribute cavs_driver.pl.
50         * cavs_tests.sh: New. 
51         * fipsdrv.c: New.
52
53 2008-09-18  Werner Koch  <wk@g10code.com>
54
55         * benchmark.c (main): Do not disable secure memory in FIPS mode.
56
57 2008-09-18  Werner Koch  <wk@g10code.com>
58
59         * basic.c (main): Do not disable secure memory in FIPS mode.
60
61 2008-09-16  Werner Koch  <wk@g10code.com>
62
63         * fipsrngdrv.c (main): Bail out on write error.  Implement verbose
64         option.
65         (main): Use flag to disable dup block checks.
66
67 2008-09-15  Werner Koch  <wk@g10code.com>
68
69         * fipsrngdrv.c: New.
70
71 2008-09-09  Werner Koch  <wk@g10code.com>
72
73         * basic.c (main): New option --selftest.
74
75 2008-08-29  Werner Koch  <wk@g10code.com>
76
77         * keygrip.c: Update to also check ECDSA.
78
79 2008-08-28  Werner Koch  <wk@g10code.com>
80
81         * rsa-16k.key: New sample key.
82
83 2008-08-27  Werner Koch  <wk@g10code.com>
84
85         * pkbench.c (read_file): New.
86         (process_key_pair_file): Replace mmap by read_file.
87         (main): Add a --fips option.
88         * Makefile.am (EXTRA_DIST): Remove.
89         (EXTRA_PROGRAMS): Add pkbench.
90
91         * basic.c (main): Extended FIPS self-test test.
92
93 2008-08-26  Werner Koch  <wk@g10code.com>
94
95         * basic.c (get_keys_new): Use transient-key flag. 
96         * benchmark.c (main): First check options then do the libgcrypt
97         initialization.
98         (rsa_bench): Use transient-key flag if not in fips mode.
99
100 2008-08-20  Werner Koch  <wk@g10code.com>
101
102         * t-mpi-bit.c (test_lshift): New.
103         (mpi2bitstr_nlz, lshiftbitstring): New.
104         (main): Run test.
105
106 2008-08-18  Werner Koch  <wk@g10code.com>
107
108         * basic.c (main): Add option --fips.
109
110 2008-08-15  Werner Koch  <wk@g10code.com>
111
112         * register.c (main): Check for fips mode.
113         (check_run): Take care of fips mode.
114
115         * basic.c (check_cbc_mac_cipher, check_ciphers, check_digests)
116         (check_hmac, check_pubkey): Do not test unavalaible algorithms in
117         fips mode.
118         (main): Check for fips mode.
119
120 2008-04-22  Werner Koch  <wk@g10code.com>
121
122         * basic.c (check_one_cipher): Also check in-place encryption.
123
124 2008-03-17  Werner Koch  <wk@g10code.com>
125
126         * benchmark.c (main): Add option --cipher-repetition.
127         (cipher_bench): Use it.
128
129 2008-03-12  Werner Koch  <wk@g10code.com>
130
131         * benchmark.c (rsa_bench): Add arg NO_BLINDING.
132         (main): Add option --no-blinding.
133
134 2007-12-05  Werner Koch  <wk@g10code.com>
135
136         * pubkey.c (sample_private_key_1_1,sample_private_key_1_2): New.
137         (get_keys_sample): Add arg SECRET_VARIANT.
138         (check_run): Check all variants.  Also check gcry_pk_testkey.
139         (check_keys_crypt): Add DECRYPT_FAIL_CODE.
140         (check_keys): Ditto.
141
142 2007-11-30  Werner Koch  <wk@g10code.com>
143
144         * benchmark.c (main): Add optione --verbose and reworked the
145         option parsing.
146         (random_bench): Dump random stats.
147
148 2007-10-31  Werner Koch  <wk@g10code.com>
149
150         * benchmark.c (start_timer, stop_timer, elapsed_time) [W32]: Fixed.
151
152 2007-06-20  Werner Koch  <wk@g10code.com>
153
154         * benchmark.c (rsa_bench): New.
155         (main): New command "rsa".
156
157 2007-05-03  Werner Koch  <wk@g10code.com>
158
159         * Makefile.am (EXTRA_DIST): Do not build pkbench.c
160
161 2007-05-02  David Shaw  <dshaw@jabberwocky.com>
162
163         * basic.c (check_ciphers): Add Camellia.
164
165 2007-04-30  David Shaw  <dshaw@jabberwocky.com>
166
167         * basic.c (check_ciphers): #if out ciphers we don't have.  Add
168         test for GCRY_CIPHER_RFC2268_40.
169
170 2007-04-30  Werner Koch  <wk@g10code.com>
171
172         * version.c: New.
173         * Makefile.am (TESTS): Add version.
174
175 2007-04-30  Marcus Brinkmann  <marcus@g10code.de>
176
177         * benchmark.c (ecc_bench): Release KEY_SPEC.
178
179 2007-04-28  Marcus Brinkmann  <marcus@g10code.de>
180
181         * ac-data.c (check_run): Don't give redundant GCRY_AC_FLAG_DEALLOC
182         in addition to GCRY_AC_FLAG_COPY.  Don't release LABEL1 or MPI0,
183         as those are donated to libgcrypt, but do release MPI0 and MPI2.
184
185 2007-04-12  Marcus Brinkmann  <marcus@g10code.de>
186
187         * ac-schemes.c (scheme_spec): Revert last change.
188         
189         * ac-schemes.c (scheme_spec): Remove const qualifier from member M.
190         (es_check): Remove const qualifier from C and M2.
191
192 2007-03-28  Werner Koch  <wk@g10code.com>
193
194         * pkbench.c (generate_key): Support named curves.
195
196         * benchmark.c (dsa_bench): New args ITERATIONS and PRINT_HEADER.
197         (main): Call dsa and ecc benchs.
198         (show_sexp): New.
199
200         * Makefile.am (TESTS): Move pkbench to EXTRA_PROGRAMS.
201
202 2007-03-22  Werner Koch  <wk@g10code.com>
203
204         * benchmark.c (die): New.
205         (ecc_bench): New.
206
207         * pkbench.c (main): Reworked to provide proper option handling.
208
209 2007-03-13  Werner Koch  <wk@g10code.com>
210
211         * mpitests.c: Reformatted to GNU standards.
212         (main): Add options --verbose and --debug for future use.
213
214 2007-03-13  Werner Dittmann <Werner.Dittmann@t-online.de>  (wk)
215
216         * mpitests.c: New.
217
218 2007-02-23  Werner Koch  <wk@g10code.com>
219
220         * Makefile.am (TEST): Run benchmark as last. 
221
222         * ac-data.c (check_sexp_conversion): Print label only in verbose
223         mode.
224
225         * pubkey.c (main): Run test just 2 times instead of 10.
226         (get_elg_key_new): New.
227         (check_run): Also run tests with Elgamal keys.
228         (check_keys): New arg NBITS_DATA.
229         (get_elg_key_new): Use only 400 for the 512 bit Elgamal test.
230
231         * random.c: New.
232
233 2007-02-22  Werner Koch  <wk@g10code.com>
234
235         * basic.c (check_pubkey_sign): Also try signing using an OID.
236
237         * Makefile.am (TESTS) [W32]: Removed pkbench for now.
238         * pkbench.c (benchmark): Fixed for W32.
239
240 2007-02-21  Werner Koch  <wk@g10code.com>
241
242         * hmac.c (check_one_mac): Make pointer args const.
243         * basic.c (check_one_md): Ditto.
244         (check_one_hmac): Ditto.
245
246         * keygen.c (progress_cb): Filter out line feeds.
247         * basic.c (progress_handler): Ditto.
248
249 2006-12-18  Werner Koch  <wk@g10code.com>
250
251         * Makefile.am (AM_CFLAGS, AM_CPPFLAGS): Splitted and merged with
252         Moritz' changes.
253         (INCLUDES): Removed.
254
255         * keygen.c (progress_handler): New.
256         (main): Use it in verbose mode.
257
258 2006-11-05  Moritz Schulte  <moritz@g10code.com>
259
260         * Makefile.am (AM_CFLAGS): Added -I$(top_builddir)/src so that the
261         new gcrypt.h is used, not the one installed in the system.
262
263 2006-10-17  Werner Koch  <wk@g10code.com>
264
265         * keygen.c (check_rsa_keys): Also create an 1536 bit DSA key.
266
267 2006-08-03  Werner Koch  <wk@g10code.com>
268
269         * t-mpi-bit.c: New.
270
271 2006-07-06  Werner Koch  <wk@g10code.com>
272
273         * benchmark.c (main): New option --use-random-daemon.  New command
274         strongrandom.
275         (random_bench): New arg VERY_STRONG.
276
277 2006-03-14  Werner Koch  <wk@g10code.com>
278
279         * benchmark.c (main): Allow for seed file argument to random bench.
280
281         * basic.c (main): Use progress handler only in verbose mode.
282         (main): Speed up test key generation.
283         * ac-data.c (check_sexp_conversion, check_run): Take care of VERBOSE.
284         * ac.c (main): Ditto.
285         * pubkey.c (main): Ditto.
286         * pkbench.c (main): Ditto.
287         * keygen.c (main): Ditto.
288         (check_rsa_keys): Print key only in verbose mode.
289
290 2006-03-10  Brad Hards  <bradh@frogmouth.net>  (wk, patch 2006-02-18)
291
292         * basic.c (check_one_hmac, check_hmac): New.
293
294 2006-03-07  Werner Koch  <wk@g10code.com>
295
296         * benchmark.c (cipher_bench): Add OFB mode.
297
298 2006-01-18  Brad Hards  <bradh@frogmouth.net> (wk 2006-03-07)
299
300         * basic.c: Added test cases for OFB and CFB modes. Fixed some
301         compiler warnings for signedness. 
302
303 2005-11-12  Moritz Schulte  <moritz@g10code.com>
304
305         * ac-data.c: Added way more test cases.
306
307 2005-09-15  Moritz Schulte  <moritz@g10code.com>
308
309         * Makefile.am (TESTS): Added keygrip.
310         * keygrip.c: New.
311
312 2005-09-19  Werner Koch  <wk@g10code.com>
313
314         * benchmark.c (dsa_bench): New.
315
316 2005-08-19  Werner Koch  <wk@g10code.com>
317
318         * hmac.c (main): Added all FIPS tests.
319
320 2005-08-18  Werner Koch  <wk@g10code.com>
321
322         * hmac.c: New.
323
324 2005-04-22  Moritz Schulte  <moritz@g10code.com>
325
326         * tsexp.c: Include <config.h> in case HAVE_CONFIG_H is defined;
327         thanks to Albert Chin.
328         * testapi.c: Likewise.
329         * register.c: Likewise.
330         * pubkey.c: Likewise.
331         * prime.c: Likewise.
332         * pkbench.c: Likewise.
333         * keygen.c: Likewise.
334         * benchmark.c: Likewise.
335         * basic.c: Likewise.
336         * ac-schemes.c: Likewise.
337         * ac-data.c: Likewise.
338         * ac.c: Likewise.
339
340 2005-04-16  Moritz Schulte  <moritz@g10code.com>
341
342         * ac-data.c (check_run): Include new test.
343
344 2005-04-11  Moritz Schulte  <moritz@g10code.com>
345
346         * basic.c (check_digests): Add tests for Whirlpool.
347
348 2005-03-30  Moritz Schulte  <moritz@g10code.com>
349
350         * ac-schemes.c: New file.
351         * ac-data.c: New file.
352         * Makefile.am (TESTS): Added ac-schemes and ac-data.
353
354 2004-09-15  Moritz Schulte  <moritz@g10code.com>
355
356         * pkbench.c: Include <time.h>.
357
358 2004-08-24  Moritz Schulte  <moritz@g10code.com>
359
360         * pkbench.c (context_init): Improve generation of test data.
361
362 2004-08-23  Moritz Schulte  <moritz@g10code.com>
363
364         * Makefile.am (TESTS): Added: pkbench.
365         * pkbench.c: New file.
366
367 2004-02-25  Werner Koch  <wk@gnupg.org>
368
369         * Makefile.am (TEST): Add benchmark.
370
371         * benchmark.c (md_bench, cipher_bench): Allow NULL arg to to run
372         tests for all algorithms.
373         (main): Run all tests by default.
374
375 2004-02-03  Werner Koch  <wk@gnupg.org>
376
377         * tsexp.c (basic): New pass to check secure memory switching.
378
379 2004-01-12  Moritz Schulte  <mo@g10code.com>
380
381         * ac.c (check_one): Adjust to new ac API.
382
383 2003-11-22  Werner Koch  <wk@gnupg.org>
384
385         * pubkey.c (check_keys_crypt): Fixed my last patch.
386
387 2003-11-11  Werner Koch  <wk@gnupg.org>
388
389         * tsexp.c (basic): Add pass structure and a test for the %b
390         format. 
391
392 2003-11-04  Werner Koch  <wk@gnupg.org>
393
394         * Makefile.am (noinst_PROGRAMS): Use this so that test programs
395         get always build.
396
397         * keygen.c (check_nonce): New.
398         (main): Add a basic check for the nocen function.
399
400 2003-10-31  Werner Koch  <wk@gnupg.org>
401
402         * basic.c (check_aes128_cbc_cts_cipher): Make it a prototype
403
404         * ac.c (check_run): Comment unused variable.
405
406 2003-10-10  Werner Koch  <wk@gnupg.org>
407
408         * prime.c (check_primes): Generate a generator and avoid printing
409         unless in verbose mode.
410
411 2003-10-07  Werner Koch  <wk@gnupg.org>
412
413         * tsexp.c (check_sscan): New.
414
415 2003-09-04  Werner Koch  <wk@gnupg.org>
416
417         * pubkey.c (check_keys_crypt): Fix for compatibility mode.
418
419 2003-09-02  Moritz Schulte  <mo@g10code.com>
420
421         * Makefile.am (TESTS): Added: prime.
422
423         * prime.c: New file.
424
425 2003-08-27  Moritz Schulte  <mo@g10code.com>
426
427         * basic.c (check_ciphers): Added: Serpent.
428         Write braces around flags.
429
430 2003-08-04  Moritz Schulte  <moritz@g10code.com>
431
432         * benchmark.c (do_powm): Adjust for new gcry_mpi_scan interface.
433
434 2003-07-23  Moritz Schulte  <moritz@g10code.com>
435
436         * ac.c (key_copy): New function...
437         (check_one): ... use it.
438
439 2003-07-22  Moritz Schulte  <moritz@g10code.com>
440
441         * basic.c (check_ciphers): Use gcry_cipher_map_name.
442
443 2003-07-18  Moritz Schulte  <moritz@g10code.com>
444
445         * ac.c (check_run): Renamed to ...
446         (check_one): ... this, changed calling interface.
447         (check_run): New function.
448
449         * register.c: Adjust gcry_cipher_spec_t structure.
450
451 2003-07-14  Moritz Schulte  <moritz@g10code.com>
452
453         * register.c: Adjust cipher specification structure.
454
455         * benchmark.c: New file.
456         * testapi.c: New file.
457
458         * Makefile.am (EXTRA_PROGRAMS): Set to: benchmark testapi.
459         (check_PROGRAMS): Set to: $(TESTS).
460
461 2003-07-12  Moritz Schulte  <moritz@g10code.com>
462
463         * ac.c, basic.c, keygen.c, register.c, sexp.c, tsexp.c: Used
464         gcry_err* wrappers for libgpg symbols.
465
466         * basic.c (check_ciphers): Added: GCRY_CIPHER_TWOFISH128.
467
468 2003-07-08  Moritz Schulte  <moritz@g10code.com>
469
470         * Makefile.am (LIBS): Remove: -lpthread.
471
472         * basic.c (check_one_cipher): Fix variable initialization.  Thanks
473         to Simon Joseffson <jas@extundo.com>.
474
475 2003-07-07  Moritz Schulte  <moritz@g10code.com>
476
477         * Makefile.am (TESTS): Added: register.
478
479 2003-07-05  Moritz Schulte  <moritz@g10code.com>
480
481         * register.c (check_run): Adjusted for new gcry_cipher_register API.
482
483 2003-07-02  Moritz Schulte  <moritz@g10code.com>
484
485         * Makefile.am (TESTS): Added: ac.
486         * ac.c: New file.
487
488 2003-06-18  Werner Koch  <wk@gnupg.org>
489
490         * basic.c (check_cbc_mac_cipher): Adjusted for new API of get_blklen
491         and get_keylen.
492         (check_ctr_cipher): Ditto.
493         (check_one_cipher): Ditto.
494         (check_one_md): Adjusted for new API of gcry_md_copy.
495
496 2003-06-18  Moritz Schulte  <moritz@g10code.com>
497
498         * register.c: Replace old type GcryModule with newer one:
499         gcry_module_t.
500         Adjusted for new API.
501
502         * Makefile.am (AM_CFLAGS): Added: @GPG_ERROR_CFLAGS@.
503
504 2003-06-15  Moritz Schulte  <moritz@g10code.com>
505
506         * basic.c (get_keys_new): New function.
507         (do_check_one_pubkey): New function ...
508         (check_one_pubkey): ... use it.
509         (progress_handler): New function.
510         (main): Use gcry_set_progress_handler.
511
512 2003-06-14  Moritz Schulte  <moritz@g10code.com>
513
514         * basic.c: Replaced calls to gcry_strerror with calls to
515         gpg_strerror.
516         (check_one_md): Adjust for new gcry_md_copy API.
517
518         * tsexp.c: Likewise.
519         * keygen.c: Likewise.
520
521 2003-06-12  Moritz Schulte  <moritz@g10code.com>
522
523         * basic.c: Changed here and there, reorganized pubkey checks,
524         added DSA and ELG keys.
525
526 2003-06-09  Moritz Schulte  <moritz@g10code.com>
527
528         * basic.c, keygen.c, pubkey.c, register.c, tsexp.c: Changed to use
529         new API.
530         
531 2003-06-01  Moritz Schulte  <moritz@g10code.com>
532
533         * tsexp.c (canon_len): Adjust for new gcry_sexp_canon_len API.
534
535 2003-05-26  Moritz Schulte  <moritz@g10code.com>
536
537         * basic.c (verify_one_signature): Adjust for libgpg-error.
538         (check_pubkey_sign): Likewise.
539         (check_pubkey): Likewise.
540         * basic.c (check_pubkey_sign): Likewise.
541         * tsexp.c (canon_len): Likewise.
542         (back_and_forth_one): Likewise.
543
544 2003-04-27  Moritz Schulte  <moritz@g10code.com>
545
546         * pubkey.c: Changed the sample private key to contain the
547         identifier `openpgp-rsa' instead of `rsa'.
548
549         * basic.c (check_digests): Enabled/fixed some tests for TIGER.
550
551 2003-04-17  Moritz Schulte  <moritz@g10code.com>
552
553         * Makefile.am (TESTS): Removed `register' for now.
554
555 2003-04-17  Moritz Schulte  <moritz@g10code.com>
556
557         * basic.c (check_digests): Include checks for SHA512 and SHA384.
558
559 2003-04-16  Moritz Schulte  <moritz@g10code.com>
560
561         * basic.c (check_one_md): Also test md_copy.
562
563 2003-04-07  Moritz Schulte  <moritz@g10code.com>
564
565         * Makefile.am (TESTS): Added register.
566
567         * register.c: New file.
568
569 2003-03-30  Simon Josefsson  <jas@extundo.com>
570
571         * basic.c (check_one_cipher): New.  Test CTR.
572         (main): Call it.
573         (check_ciphers): Check CTR mode.
574
575 2003-03-26  Moritz Schulte  <moritz@g10code.com>
576
577         * Makefile.am (TESTS): Added pubkey.
578
579         * pubkey.c: New file.
580
581 2003-03-22  Simon Josefsson  <jas@extundo.com>
582
583         * basic.c (check_cbc_mac_cipher): New.
584         (main): Use it.
585
586 2003-03-19  Werner Koch  <wk@gnupg.org>
587
588         * keygen.c (check_rsa_keys): Don't expect an exponent when asking
589         for e=0.
590         (check_generated_rsa_key): Just print exponent if EXPECTED_E is 0.
591
592 2003-03-02  Moritz Schulte  <moritz@g10code.com>
593
594         * basic.c (check_one_cipher): Use gcry_cipher_reset() instead of
595         gcry_cipher_close(), gcry_cipher_open and gcry_cipher_setkey().
596
597 2003-01-23  Werner Koch  <wk@gnupg.org>
598
599         * keygen.c: New. 
600
601 2003-01-20  Simon Josefsson  <jas@extundo.com>
602
603         * basic.c (check_digests): Add CRC.
604         (check_one_md): Print computed and expected values on error.
605
606 2003-01-20  Werner Koch  <wk@gnupg.org>
607
608         * basic.c (check_one_md): Kludge to check a one million "a".
609         (check_digests): Add checks for SHA-256.
610
611 2003-01-20  Werner Koch  <wk@gnupg.org>
612
613         * basic.c (check_pubkey): Check the keygrip for the sample key.
614
615 2003-01-15  Werner Koch  <wk@gnupg.org>
616
617         * basic.c (verify_one_signature,check_pubkey_sign)
618         (check_pubkey): New.
619         (main): Check public key functions. Add a --debug option.
620
621 2002-11-23  Werner Koch  <wk@gnupg.org>
622
623         * basic.c (check_digests): Add another test for MD4.  By Simon
624         Josefsson.
625
626 2002-11-10  Simon Josefsson  <jas@extundo.com>
627
628         * basic.c (check_aes128_cbc_cts_cipher): New function.
629         (check_one_cipher): Add flags parameter.
630         (check_ciphers): Support flags parameter.
631         (main): Check CTS.
632
633 2002-11-10  Werner Koch  <wk@gnupg.org>
634
635         * basic.c (check_one_md): New.  By Simon Josefsson.
636         (check_digests): New tests for MD4.  By Simon.
637
638 2002-08-26  Werner Koch  <wk@gnupg.org>
639
640         * basic.c (check_ciphers): Check simple DES.
641
642 2002-05-16  Werner Koch  <wk@gnupg.org>
643
644         * tsexp.c (back_and_forth): Very minimal test of the new functions.
645
646 2002-05-14  Werner Koch  <wk@gnupg.org>
647
648         Changed license of all files to the LGPL.
649
650 2002-05-02  Werner Koch  <wk@gnupg.org>
651
652         * basic.c: Add option --verbose.
653
654 2002-01-11  Werner Koch  <wk@gnupg.org>
655
656         * tsexp.c (canon_len): Fixed tests.
657
658 2001-12-18  Werner Koch  <wk@gnupg.org>
659
660         * tsexp.c: New.
661
662         
663  Copyright 2001, 2002, 2003, 2008 Free Software Foundation, Inc.
664
665  This file is free software; as a special exception the author gives
666  unlimited permission to copy and/or distribute it, with or without
667  modifications, as long as this notice is preserved.
668
669  This file is distributed in the hope that it will be useful, but
670  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
671  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.