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