cad88cb809f0a2be359f690c6f9f7a09f6d569ef
[libgcrypt.git] / src / ChangeLog
1 2003-10-21  Werner Koch  <wk@gnupg.org>
2
3         * secmem.c (_gcry_secmem_dump_stats): Fixed format sepcifier for a
4         size_t.  Reported by Stephane Corthesy.
5
6 2003-10-10  Werner Koch  <wk@gnupg.org>
7
8         * global.c (_gcry_malloc): Handle the no_secure_memory option.
9
10         * gcrypt.h (gcry_prime_group_generator): New.
11         (gcry_prime_release_factors): New.
12
13 2003-10-07  Werner Koch  <wk@gnupg.org>
14
15         * sexp.c (sexp_sscan): Check that parenthesis are matching.
16
17 2003-09-28  Moritz Schulte  <mo@g10code.com>
18
19         * ath.c: Change License to LGPL.
20         * ath-pthread-compat.c: Likewise.
21         * ath-pthread.c: Likewise.
22         * ath-pth-compat.c: Likewise.
23         * ath-pth.c: Likewise.
24         * ath.h: Likewise.
25         * ath-compat.c: Likewise.
26
27         * secmem.c (_gcry_secmem_realloc): Do not forget to release secmem
28         lock.  Thanks to low halo for triggering this bug.
29
30 2003-09-04  Werner Koch  <wk@gnupg.org>
31
32         * gcrypt.h (_GCRY_ERR_SOURCE_DEFAULT): Removed cruft.
33         (gcry_prime_check_func_t): Renamed arg for clarity.
34
35 2003-09-02  Moritz Schulte  <mo@g10code.com>
36
37         * gcrypt.h (GCRY_PRIME_FLAG_SPECIAL_FACTOR): New symbol.
38
39 2003-09-01  Moritz Schulte  <mo@g10code.com>
40
41         * gcrypt.h (gcry_random_level_t): New type.
42         (gcry_prime_check_func_t): Likewise.
43         (GCRY_PRIME_FLAG_SECRET): New symbol.
44         (gcry_prime_generate, gcry_prime_check): Declare functions.
45
46 2003-08-28  Werner Koch  <wk@gnupg.org>
47
48         * Makefile.am (libgcrypt_pth_la_LDFLAGS): Removed PTH_CFLAGS cruft.
49
50 2003-08-27  Moritz Schulte  <mo@g10code.com>
51
52         * global.c (gcry_control): Remove call to ath_deinit.
53
54         * Makefile.am (libgcrypt_real_la_DEPENDENCIES): Fixed.
55         (libgcrypt_real_la_LIBADD): Fixed.
56         Removed unecessary variables.
57
58         * libgcrypt-config.in: Adjusted script for new thread handling.
59
60         * Makefile.am: New version, based on GPGMEs Makefile.am.
61
62         * ath.c, ath-compat.c, ath.h, ath-pth.c, ath-pth-compat.c,
63         ath-pthread.c, ath-pthread-compat.c: New files, merged from GPGME.
64         * ath.c, ath.h, ath-pthread.c, ath-pth.c: Removed files.
65
66 2003-08-08  Moritz Schulte  <moritz@g10code.com>
67
68         * global.c (gcry_realloc): Remove FIXME about `clearing out
69         realloced memory', since _gcry_secmem_realloc takes care of
70         overwriting old memory.
71
72 2003-08-07  Werner Koch  <wk@gnupg.org>
73
74         * module.c (_gcry_module_release): Don't act if module is NULL.
75
76 2003-07-30  Moritz Schulte  <moritz@g10code.com>
77
78         * gcrypt.h (enum gcry_ac_id): Added: GCRY_AC_ELG_E.
79         Reverted change: use gcry_md_flags enumeration list instead of
80         defines.
81
82 2003-07-29  Werner Koch  <wk@gnupg.org>
83
84         * global.c (gcry_control): Add GCRYCTL_SET_RANDOM_SEED_FILE and
85         GCRYCTL_UPDATE_RANDOM_SEED_FILE.
86         * gcrypt.h: Ditto.  Renamed index to idx, so avoid warning
87         related to the old index function.
88
89 2003-07-28  Moritz Schulte  <moritz@g10code.com>
90
91         * global.c (gcry_err_code_from_errno, gcry_err_code_to_errno)
92         (gcry_err_make_from_errno, gcry_error_from_errno): New functions.
93
94         * gcrypt.h: Declared: gcry_err_code_from_errno,
95         gcry_err_code_to_errno, gcry_err_make_from_errno,
96         gcry_error_from_errno.
97
98         * Makefile.am (include_HEADERS): Added: gcrypt-module.h.
99
100         * gcrypt.h: Include <gcrypt-module.h>.
101
102         * gcrypt-module.h: New file.
103
104 2003-07-27  Werner Koch  <wk@gnupg.org>
105
106         * gcrypt.h (gcry_mpi_scan, gcry_mpi_print): API change.
107         (gcry_mpi_dump): New.
108
109 2003-07-21  Moritz Schulte  <moritz@g10code.com>
110
111         * gcrypt.h: Declared: gcry_ac_key_data_get.
112         (gcry_pk_spec): Renamed member `sexp_names' into `aliases'.
113
114 2003-07-20  Moritz Schulte  <moritz@g10code.com>
115
116         * gcrypt.h (gcry_md_oid_spec_t): New type.
117         (gcry_md_spec): New member: oids.
118
119 2003-07-19  Moritz Schulte  <moritz@g10code.com>
120
121         * gcrypt.h (gcry_cipher_oid_spec_t): New type.
122         (gcry_cipher_spec): New member: oids;
123
124 2003-07-18  Werner Koch  <wk@gnupg.org>
125
126         * gcrypt.h (gcry_mpi_set_opaque): Add a warning comment.
127
128 2003-07-15  Moritz Schulte  <moritz@g10code.com>
129
130         * secmem.c (compress_pool): Remove function, since unused blocks
131         are automatically concatenad.
132
133         * gcrypt.h: Bumped version number up to 1.1.42-cvs.
134
135 2003-07-14  Moritz Schulte  <moritz@g10code.com>
136
137         * gcrypt.h (gcry_cipher_spec): New member: aliases.
138
139         * Makefile.am (noinst_PROGRAMS, testapi_SOURCES, testapai_LDADD,
140         benchmark_SOURCES, benchmark_LDADD): Removed.
141
142         * benchmark.c, testapi.c: Removed files.
143
144         * mpi.h: Removed disabled typedef.
145         * g10lib.h: Likewise.
146
147         * benchmark.c, g10lib.h, gcrypt.h, global.c, module.c, sexp.c:
148         Used gcry_err* wrappers for libgpg-error symbols.
149
150 2003-07-12  Moritz Schulte  <moritz@g10code.com>
151
152         * global.c: Likewise.
153
154         * gcrypt.h: New type: gcry_error_t, gcry_err_code_t and
155         gcry_err_source_t.
156         (gcry_err_make, gcry_error, gcry_err_code, gcry_err_source): New
157         functions.
158
159         * global.c (gcry_strerror): New function.
160         (gcry_strsource): New function.
161
162         * gcrypt.h: New symbol: GCRY_CIPHER_TWOFISH128.
163
164 2003-07-09  Moritz Schulte  <moritz@g10code.com>
165
166         * gcrypt.h (enum gcry_md_flags): Removed, used define instead,
167         since that is more common than an enumeration list when it comes
168         to flags that can be bitwise ORed.
169         
170 2003-07-08  Moritz Schulte  <moritz@g10code.com>
171
172         * global.c: Use new types for handlers.
173
174         * gcrypt.h: Declare: gcry_ac_data_copy.
175
176 2003-07-07  Moritz Schulte  <moritz@g10code.com>
177
178         * sexp.c (gcry_sexp_build_array): Use dummy argument pointer.
179         Thanks to Simon Josefsson <jas@extunde.com>.
180
181         * gcrypt.h: Declare: gcry_cipher_list, gcry_pk_list, gcry_md_list.
182         
183 2003-07-05  Moritz Schulte  <moritz@g10code.com>
184
185         * gcrypt.h: Declare: gcry_cipher_register, gcry_cipher_unregister,
186         gcry_md_register, gcry_md_unregister, gcry_pk_register,
187         gcry_pk_unregister.
188         (gcry_cipher_spec): Removed member: algorithm.
189         (gcry_pk_spec): Likewise.
190         (gcry_md_spec): Likewise.
191         Adjusted declarations: gcry_cipher_register, gcry_pk_register,
192         gcry_md_register.
193
194         * module.c: Replaced all occurences of `id' with `mod_id', since
195         `id' is a keyword in obj-c.
196
197         * gcrypt.h (gcry_cipher_spec): Renamed member `id' to `algorithm'.
198         (gcry_pk_spec): Likewise.
199         (gcry_md_spec): Likewise.
200
201         * cipher.h: Removed types: gcry_pubkey_generate_t,
202         gcry_pubkey_check_secret_key_t, gcry_pubkey_encrypt_t,
203         gcry_pubkey_decrypt_t, gcry_pubkey_sign_t, gcry_pubkey_verify_t,
204         gcry_pubkey_get_nbits_t, gcry_pk_spec_t, gcry_digest_init_t,
205         gcry_digest_write_t, gcry_digest_final_t, gcry_digest_read_t,
206         gcry_digest_spec_t, gcry_cipher_setkey_t, gcry_cipher_encrypt_t,
207         gcry_cipher_decrypt_t, gcry_cipher_stencrypt_t,
208         gcry_cipher_stdecrypt_t, gcry_cipher_spec_t.
209
210         * gcrypt.h: New types: gcry_pk_generate_t,
211         gcry_pk_check_secret_key_t, gcry_pk_encrypt_t, gcry_pk_decrypt_t,
212         gcry_pk_sign_t, gcry_pk_verify_t, gcry_pk_get_nbits_t,
213         gcry_pk_spec_t, gcry_md_init_t, gcry_md_write_t, gcry_md_final_t,
214         gcry_md_read_t, gcry_md_spec_t, gcry_cipher_setkey_t,
215         gcry_cipher_encrypt_t, gcry_cipher_decrypt_t,
216         gcry_cipher_stencrypt_t, gcry_cipher_stdecrypt_t,
217         gcry_cipher_spec_t, gcry_module_t.
218
219 2003-07-04  Moritz Schulte  <moritz@g10code.com>
220
221         * module.c (_gcry_module_list): New function.
222
223 2003-07-02  Moritz Schulte  <moritz@g10code.com>
224
225         * module.c (_gcry_module_lookup): Fixed typo.
226
227         * gcrypt.h: Added all definitions and declarations necessary for
228         the new ac interface.
229
230 2003-06-30  Moritz Schulte  <moritz@g10code.com>
231
232         * g10lib.h: Added declarations: _gcry_pk_module_lookup,
233         _gcry_pk_module_release.
234
235 2003-06-18  Werner Koch  <wk@gnupg.org>
236
237         * benchmark.c (cipher_bench): Adjusted for new API of get_blklen
238         and get_keylen.
239
240         * gcrypt.h (gcry_cipher_get_algo_blklen)
241         (gcry_cipher_get_algo_keylen): Replaced macro by funcion.
242
243 2003-06-18  Moritz Schulte  <moritz@g10code.com>
244
245         * cipher.h: Renamed types GcryDigestSpec, GcryCipherSpec and
246         GcryPubkeySpec into: gcry_digest_spec_t, gcry_cipher_spec_t and
247         gcry_pubkey_spec_t.
248         (gcry_pubkey_spec): Defined member `id' as unsigned.
249         (gcry_digest_spec): Likewise.
250         (gcry_cipher_spec): Likewise.
251
252         * module.c (_gcry_module_id_new): New function.
253         (_gcry_module_add): Generate a new ID via _gcry_module_id_new in
254         case `id' is zero.
255
256         * g10lib.h, module.c: Replace old type GcryModule with newer one:
257         gcry_module_t.
258
259         * module.c (_gcry_module_add): Added argument `id', use it.
260
261         * g10lib.h: Added declaration: _gcry_module_lookup_id.
262         (_gcry_module_add): Added argument `id'.
263
264         * module.c (_gcry_module_lookup_id): New function.
265
266         * g10lib.h (struct gcry_module): New member: id.
267
268         * gcrypt.h: New type: gcry_handler_progress_t,
269         gcry_handler_alloc_t, gcry_haandler_secure_check_t,
270         gcry_handler_realloc_t, gcry_handler_free_t,
271         gcry_handler_no_mem_t, gcry_handler_error_t, gcry_handler_log_t.
272         Use new types.
273
274         * cipher.h: Include <gcrypt.h>.
275         New types: gcry_pk_generate_t, gcry_pk_check_secret_key_t,
276         gcry_pk_encrypt_t, gcry_pk_decrypt_t, gcry_pk_sign_t,
277         gcry_pk_verify_t, gcry_pk_get_nbits_t, gcry_md_init_t,
278         gcry_md_write_t, gcry_md_final_t, gcry_md_read_t,
279         gcry_cipher_setkey_t, gcry_cipher_encrypt_t,
280         gcry_cipher_decrypt_t, gcry_cipher_stencrypt_t,
281         gcry_cipher_stdecrypt_t.
282         Use new types.
283
284 2003-06-17  Moritz Schulte  <moritz@g10code.com>
285
286         * Makefile.am (AM_CFLAGS): Added: @GPG_ERROR_CFLAGS@.
287
288 2003-06-16  Moritz Schulte  <moritz@g10code.com>
289
290         * g10lib.h: Replace last occurences of old type names with newer
291         names (i.e. replace MPI with gcry_mpi_t).
292         * mpi.h: Likewise.
293         * sexp.c: Likewise.
294
295 2003-06-15  Moritz Schulte  <moritz@g10code.com>
296
297         * testapi.c (test_genkey): Use gpg_strerror instead of
298         gcry_strerror.
299
300         * global.c (gcry_control): Fixed typo.
301
302         * misc.c (_gcry_fatal_error): Use gpg_strerror instead of
303         gcry_strerror.
304
305         * types.h (STRLIST): Removed type since it is not used.
306
307 2003-06-11  Moritz Schulte  <moritz@g10code.com>
308
309         * global.c (global_init): Call: _gcry_cipher_init, _gcry_md_init,
310         _gcry_pk_init.
311
312         * g10lib.h: Declare: _gcry_cipher_init, _gcry_md_init,
313         _gcry_pk_init.
314         
315         * global.c (gcry_strerror): Remove compatibility code.
316
317         * Makefile.am: Remove support libgpg-error special handling.
318         (AM_CPPFLAGS): Add @GPG_ERROR_CFLAGS@
319
320         * gcrypt.h: Likewise.
321
322 2003-06-13  Werner Koch  <wk@gnupg.org>
323
324         * gcrypt.h (gcry_md_get_algo): Reverted to old API.  This is a
325         convenience function anyway and error checking is not approriate.
326         (gcry_md_is_enabled): New.
327         (gcry_md_is_secure): Replaced macro by function and reverted to old
328         API.
329
330 2003-06-11  Werner Koch  <wk@gnupg.org>
331
332         * gcrypt.h (GCRYERR): Define _GCRY_ERR_SOURCE_DEFAULT instead of
333         GPG_ERR_SOURCE_DEFAULT, so that libgpg-error still works despite
334         the use of the old gcrypt error codes.
335         (gcry_md_copy): Swapped arguments.
336         
337 2003-06-09  Moritz Schulte  <moritz@g10code.com>
338
339         * Makefile.am: Support for libgpg-error.
340
341 2003-06-08  Moritz Schulte  <moritz@g10code.com>
342
343         * sexp.c (gcry_sexp_create): Expect sane error values from
344         gcry_sexp_canon_len instead of the `historical' values.
345
346 2003-06-07  Moritz Schulte  <moritz@g10code.com>
347
348         * ath.c, ath.c, ath-pth.c, ath-pthread.c, benchmark.c, cipher.h,
349         g10lib.h, gcrypt.h, global.c, misc.c, missing-string.c, module.c,
350         mpi.h, secmem.c, secmem.h, sexp.c, stdmem.c, stdmem.h, testapi.c,
351         types.h: Edited all preprocessor instructions to remove whitespace
352         before the '#'.  This is not required by C89, but there are some
353         compilers out there that don't like it.  Replaced any occurence of
354         the now deprecated type names with the new ones.
355         
356         * gcrypt.h: Re-organized checking for gcc features; New macro:
357         _GCRY_GCC_ATTR_DEPRECATED.
358         Include copy of libgpg-error's gpg-error.h in order to make it
359         easy to build libgcrypt without needing libgpg-error.h.
360
361         (GCRY_MPI, GcryMPI, GCRY_SEXP, GcrySexp, GCRY_CIPHER_HD,
362         GcryCipherHd, GCRY_MD_HD, GcryMDHd): Declared deprecated.
363         (gcry_mpi_t, gcry_sexp_t, gcry_cipher_hd_t, gcry_md_hd_t): New
364         types.
365
366 2003-06-04  Moritz Schulte  <moritz@g10code.com>
367
368         * sexp.c (sexp_sscan): New argument: arg_list, adjusted all
369         callers.
370         (ARG_NEXT): New macro.
371         (sexp_sscan): Use ARG_NEXT for receiving format string arguments.
372         (gcry_sexp_build_array): New function.
373
374 2003-06-02  Moritz Schulte  <moritz@g10code.com>
375
376         * gcrypt.h: Added some comments describing the gcry_sexp_*
377         functions.
378         Include <gpg-error.h> instead of <gpg/error.h>.
379
380 2003-06-01  Moritz Schulte  <moritz@g10code.com>
381
382         * sexp.c (OLDPARSECODE): Removed macro...
383         (gcry_sexp_canon_len): ... and do not use it.
384
385         * gcrypt.h (gcry_errno): Removed declaration.
386
387         * g10lib.h (string_to_pubkey_algo, pubkey_algo_to_string,
388         pubkey_nbits): Removed declarations for non-existing functions.
389
390 2003-05-31  Moritz Schulte  <moritz@g10code.com>
391
392         * cipher.h (is_RSA, is_ELGAMAL): Removed macros.
393
394         * g10lib.h (set_lasterr): Removed macro.
395         (_gcry_set_lasterr): Removed declaration.
396
397         * gcrypt.h: Changed declarations for: gcry_pk_algo_info,
398         gcry_md_open, gcry_md_copy, gcry_md_algo_info, gcry_md_info,
399         gcry_md_get_algo, gcry_random_add_bytes.
400         
401         (gcry_md_is_secure): Adjust macro for new API.
402
403 2003-05-29  Moritz Schulte  <moritz@g10code.com>
404
405         * gcrypt.h: Changed declarations for: gcry_cipher_open,
406         gcry_cipher_info, gcry_cipher_algo_info.
407         (gcry_cipher_get_algo_keylen): Adjuster for new
408         gcry_cipher_algo_info interface.
409         (gcry_cipher_get_algo_blklen): Likewise.
410
411         * global.c (gcry_errno): Removed function.
412         (gcry_strerror): Do not use gcry_errno.
413         (_gcry_set_lasterr): Removed function.
414         (last_ec): Removed variable.
415
416 2003-05-27  Moritz Schulte  <moritz@g10code.com>
417
418         * gcrypt.h (enum gcry_cipher_algos): Make Serpent IDs do not
419         conflict with OpenPGP.  Reported by Timo Schulz.
420
421         * global.c (gcry_control): Fixed name of enum list.
422
423 2003-05-25  Moritz Schulte  <moritz@g10code.com>
424
425         * cipher.h (gcry_cipher_spec): Adjust return type of `setkey' for
426         libgpg-error.
427         (gcry_pubkey_spec): Adjust return type of `generate',
428         `check_secret_key', `encrypt', `decrypt', `sign' and `verify' for
429         libgpg-error.
430
431         * sexp.c (gcry_sexp_canon_len): Adjusted for libgpg-error.
432         (gcry_sexp_create): Likewise.
433         (gcry_sexp_new): Likewise.
434         (sexp_sscan): Likewise.
435         (gcry_sexp_build): Likewise.
436         (gcry_sexp_sscan): Likewise.
437
438         * module.c (_gcry_module_add): Likewise.
439
440         * global.c (last_ec): Change type to gpg_error_t.
441         (gcry_control): Adjust for libgpg-error.
442         (gcry_errno): Likewise.
443         (gcry_strerror): Likewise.
444         (_gcry_set_lasterr): Likewise.
445         (gcry_xmalloc): Likewise.
446         (gcry_xrealloc): Likewise.
447
448 2003-05-22  Moritz Schulte  <moritz@g10code.com>
449
450         * types.h: Merged code from GnuPG regarding U64_C.
451
452         * missing-string.c (strsep): Removed function.
453
454         * g10lib.h: Removed declarations: strsep, strlwr.
455
456         * secmem.c (secmem_lock): New variable.
457         (SECMEM_LOCK, SECMEM_UNLOCK): New macros.
458         (_gcry_secmem_set_flags): Use SECMEM_LOCK and SECMEM_UNLOCK.
459         (_gcry_secmem_get_flags): Likewise.
460         (_gcry_secmem_init): Likewie.
461         (_gcry_secmem_malloc): Likewise.
462         (_gcry_secmem_free): Likewise.
463         (_gcry_secmem_malloc): Renamed to ...
464         (_gcry_secmem_malloc_internal): ... this.
465         (_gcry_secmem_malloc): New function, use SECMEM_LOCK,
466         SECMEM_UNLOCK, call _gcry_secmem_malloc_internal.
467         (_gcry_secmem_free): Renamed to ...
468         (_gcry_secmem_free_internal): ... this.
469         (_gcry_secmem_free): New function, use SECMEM_LOCK, SECMEM_UNLOCK,
470         call _gcry_secmem_free_internal.
471         (_gcry_secmem_realloc): Use SECMEM_LOCK, SECMEM_UNLOCK, call
472         _gcry_secmem_malloc_internal and _gcry_secmem_free_internal.
473         (_gcry_private_is_secure): Use SECMEM_LOCK, SECMEM_UNLOCK.
474         (_gcry_secmem_dump_stats): Likewise.
475         (_gcry_secmem_malloc_internal): Removed unused variable:
476         compressed.
477         Include "ath.h".
478
479 2003-05-21  Moritz Schulte  <moritz@g10code.com>
480
481         * gcrypt.h (GCRY_CIPHER_SERPENT128, GCRY_CIPHER_SERPENT192,
482         GCRY_CIPHER_SERPENT256): New symbols.
483
484 2003-05-19  Moritz Schulte  <moritz@g10code.com>
485
486         * gcrypt.h: Reversed changes from 2003-03-03 since they would have
487         been an unnecessary ABI break.
488
489 2003-05-13  Moritz Schulte  <moritz@g10code.com>
490
491         * secmem.c (stats_update): New function.
492         (BLOCK_HEAD_SIZE): New symbol.
493         (MB_FLAG_ACTIVE): New symbol.
494         (ADDR_TO_BLOCK, BLOCK_VALID): New macros.
495         (mb_get_next): New function.
496         (mb_get_prev): New function.
497         (mb_merge): New function.
498         (mb_get_new): New function.
499         (unused_blocks): Removed variable.
500         (init_pool): Initialize new memory pool.
501         (_gcry_secmem_malloc): Use new heap management code.
502         (_gcry_secmem_free): Likewise.
503         (_gcry_secmem_realloc): Likewise.
504         Renamed type MEMBLOCK to memblock_t.
505
506 2003-04-27  Moritz Schulte  <moritz@g10code.com>
507
508         * cipher.h (gcry_pubkey_spec): New member: sexp_names.
509
510 2003-04-23  Moritz Schulte  <moritz@g10code.com>
511
512         * cipher.h (gcry_pubkey_spec): Removed members: npkey, nskey,
513         nenc, nsig.
514         (gcry_pubkey_spec): Added members: elements_pkey, elements_skey,
515         elements_enc, elements_sig, elements_grip.
516
517 2003-04-17  Moritz Schulte  <moritz@g10code.com>
518
519         * g10lib.h (GcryModule): New typedef.
520
521         * gcrypt.h (gcry_cipher_register, gcry_cipher_unregister,
522         gcry_digest_register, gcry_digest_unregister,
523         gcry_pubkey_register, gcry_pubkey_unregister): Function
524         declarations removed - for now.
525         
526         * gcrypt.h (GcryModule): Declaration removed.
527         * gcrypt.h (GcryPubkeySpec, GcryDigestSpec, GcryCipherSpec):
528         Types Moved... 
529         * cipher.h: ... here.
530
531 2003-04-17  Moritz Schulte  <moritz@g10code.com>
532
533         * cipher.h: Declare digest_spec_sha512 and digest_spec_384.
534
535 2003-04-16  Moritz Schulte  <moritz@g10code.com>
536
537         * module.c (_gcry_module_use): New function.
538         * g10lib.h (_gcry_module_use): Declare function.
539
540         * libgcrypt-config.in: Support for --algorithms switch, which
541         prints the algorithms included in the built libgcrypt.
542
543         * global.c (gcry_set_progress_handler): Register progress
544         functions depending on the enabled algorithms.
545
546 2003-04-07  Moritz Schulte  <moritz@g10code.com>
547
548         * Makefile.am (libgcrypt_la_SOURCES): Added module.c
549
550         * module.c: New file.
551         (_gcry_module_add): New function.
552         (_gcry_module_drop): New function.
553         (_gcry_module_lookup): New function.
554         (_gcry_module_release): New function.
555
556         * g10lib.h (GcryModule): New types.
557         (FLAG_MODULE_DISABLED): New symbol.
558         Added declarations for _gcry_module_add, _gcry_module_release and
559         _gcry_module_lookup.
560
561         * gcrypt.h: New types: GcryPubkeySpec, GcryDigestSpec,
562         GcryCipherSpec.
563         Added declarations for: gcry_cipher_register,
564         gcry_cipher_unregister, gcry_digest_register,
565         gcry_digest_unregister, gcry_pubkey_register and
566         gcry_pubkey_unregister.
567
568         * cipher.h: Removed symbols: CIPHER_ALGO_NONE, CIPHER_ALGO_IDEA,
569         CIPHER_ALGO_3DES, CIPHER_ALGO_CAST5, CIPHER_ALGO_BLOWFISH,
570         CIPHER_ALGO_SAFER_SK128, CIPHER_ALGO_DES_SK, CIPHER_ALGO_TWOFISH,
571         CIPHER_ALGO_TWOFISH_OLD, CIPHER_ALGO_DUMMY, PUBKEY_USAGE_SIG,
572         PUBKEY_USAGE_ENC, DIGEST_ALGO_MD5, DIGEST_ALGO_SHA1,
573         DIGEST_ALGO_RMD160, DIGEST_ALGO_TIGER, PUBKEY_ALGO_RSA,
574         PUBKEY_ALGO_RSA_E, PUBKEY_ALGO_RSA_S, PUBKEY_ALGO_DSA,
575         PUBKEY_ALGO_ELGAMAL, PUBKEY_ALGO_ELGAMAL_E.
576
577 2003-04-02  Moritz Schulte  <moritz@g10code.com>
578
579         * benchmark.c (md_bench): Fix error message.
580
581 2003-03-31  Moritz Schulte  <moritz@g10code.com>
582
583         * benchmark.c (cipher_bench): Added CTR mode.
584
585 2003-03-30  Simon Josefsson  <jas@extundo.com>
586
587         * gcrypt.h (enum gcry_control_cmds): Add GCRY_SET_CTR.
588         (enum gcry_cipher_modes): Add GCRY_CIPHER_MODE_CTR.
589         (gcry_cipher_setctr): New macro to set counter.
590
591 2003-03-19  Moritz Schulte  <moritz@g10code.com>
592
593         * cipher.h (PUBKEY_FLAG_NO_BLINDING): New symbol.
594
595 2003-03-22  Simon Josefsson  <jas@extundo.com>
596
597         * gcrypt.h: Add GCRYCTL_SET_CBC_MAC and GCRY_CIPHER_CBC_MAC.
598
599 2003-03-19  Werner Koch  <wk@gnupg.org>
600
601         * g10lib.h: Adjusted primegen.c prototypes.
602
603 2003-03-12  Werner Koch  <wk@gnupg.org>
604
605         * sexp.c (sexp_sscan): Initialize NM.  Thanks to Ian Peters for
606         valgrinding this.
607
608 2003-03-06  Moritz Schulte  <mo@g10code.com>
609
610         * secmem.h (GCRY_SECMEM_FLAG_NO_WARNING,
611         GCRY_SECMEM_FLAG_SUSPEND_WARNING): New symbols.
612
613         * global.c (gcry_control): Use
614         GCRY_SECMEM_FLAG_{NO,SUSPEND}_WARNING, instead of hard-coded
615         values.
616         * secmem.c (_gcry_secmem_set_flags): Likewise.
617         * secmem.c (_gcry_secmem_get_flags): Likewise.
618         
619 2003-03-03  Moritz Schulte  <moritz@g10code.com>
620
621         * misc.c: Removed old FIXME, since there is already a function to
622         set the value of `verbosity_level'.
623
624         * gcrypt.h: Removed enumeration list: gcry_ctl_cmds.
625         New enumeration lists: gcry_global_control_cmds,
626         gcry_control_cmds, gcry_info_cmds, gcry_algo_info_cmds.
627
628 2003-03-02  Moritz Schulte  <moritz@g10code.com>
629
630         * gcrypt.h (gcry_cipher_reset): New macro for resetting a handle.
631
632 2003-02-28  Moritz Schulte  <moritz@g10code.com>
633
634         * secmem.c (DEFAULT_PAGESIZE): New symbol.
635         (init_pool): Use DEFAULT_PAGESIZE.
636
637 2003-02-23  Moritz Schulte  <moritz@g10code.com>
638
639         * secmem.h: Fix typo in declaration of _gcry_secmem_term.
640
641         * sexp.c: Move macro definitions of `digitp', `octdigit', `alphap'
642         and `hexdigit' ...
643         * g10lib.h: ... here.
644
645         * misc.c (_gcry_burn_stack): New function (former name:
646         burn_stack).
647
648         * g10lib.h (burn_stack): Declare _gcry_burn_stack().
649
650 2003-01-24  Werner Koch  <wk@gnupg.org>
651
652         * global.c (gcry_set_progress_handler): Register a random progress
653         handler.
654
655 2003-01-23  Werner Koch  <wk@gnupg.org>
656
657         * gcrypt.h (GCRY_ENABLE_QUICK_RANDOM): New. 
658         * global.c (gcry_control): Make use of it.
659
660 2003-01-21  Werner Koch  <wk@gnupg.org>
661
662         * gcrypt.h (gcry_random_add_bytes): Add QUALITY argument.
663
664 2003-01-21  Timo Schulz  <twoaday@freakmail.de>
665
666         * gcrypt.h (gcry_random_add_bytes): New.
667         
668 2003-01-20  Simon Josefsson  <jas@extundo.com>
669
670         * gcrypt.h (gcry_md_algos): Add GCRY_MD_CRC32,
671         GCRY_MD_CRC32_RFC1510, GCRY_MD_CRC24_RFC2440.
672
673 2003-01-16  Werner Koch  <wk@gnupg.org>
674
675         * gcrypt.h (gcry_md_write): Changed type of 2nd argument to void*.
676         (gcry_md_hash_buffer): Changed type of both buffers to void*.
677         (gcry_md_setkey): Changed type of 2nd argument to void*.
678         (gcry_md_get_asnoid): New.
679
680 2003-01-15  Werner Koch  <wk@gnupg.org>
681
682         * sexp.c (gcry_sexp_length): Fixed.  This was seriously broken.
683
684 2003-01-14  Werner Koch  <wk@gnupg.org>
685
686         * gcrypt.h (GCRYERR_INV_FLAG), global.c (gcry_strerror): New.
687
688 2003-01-02  Werner Koch  <wk@gnupg.org>
689
690         * libgcrypt.vers: Temporary export _gcry_generate_elg_prime for
691         use by GNUTLS. 
692
693 2002-12-21  Werner Koch  <wk@gnupg.org>
694
695         * gcrypt.h: Make use of gcc's pure and malloc attributes 
696         (gcry_md_putc): Use a helper variable to avoid multiple
697         evaluation of H. 
698         * g10lib.h, stdmem.h, secmem.h: Use gcc attributes pure and malloc.
699
700         * stdmem.c (use_m_guard): Don't default to yes.
701
702 2002-12-19  Werner Koch  <wk@gnupg.org>
703
704         * global.c (global_init): The meat was never run due to a faulty
705         check. Thanks to Nikos for pointing this out.
706         
707         * global.c (gcry_control): Return 1 and not -1 for the
708         initialization tests.
709
710         * libgcrypt.vers: New.
711         * Makefile.am: Use this instead of the build symbol file.
712
713         * global.c (gcry_control) <initialization>: Call the random module
714         initializer to make sure that the pool lock flag has been
715         initialized.
716
717 2002-12-09  Werner Koch  <wk@gnupg.org>
718
719         * global.c (gcry_calloc,gcry_calloc_secure): Check for overflow.
720         Noted by Florian Weimer. 
721
722 2002-11-10  Simon Josefsson  <jas@extundo.com>
723
724         * gcrypt.h (gcry_ctl_cmds): New GCRYCTL_SET_CBC_CTS control flag.
725         (gcry_cipher_flags): New GCRY_CIPHER_CBC_CTS gcry_cipher_open() flag.
726         (gcry_cipher_cts): New macro for toggling CTS.
727
728 2002-11-10  Werner Koch  <wk@gnupg.org>
729
730         * gcrypt.h (GCRY_MD_MD4): New.  We use a non OpenPGP value here. 
731
732 2002-09-20  Werner Koch  <wk@gnupg.org>
733
734         * ath.c: Include sys.time.h if sys/select.h does not exist.
735         (ath_select, ath_waitpid): Shortcut for Windows.
736         * ath.h: Include some Windows headers.  By Timo.
737
738 2002-09-18  Werner Koch  <wk@gnupg.org>
739
740         * ath.h: Prefix ath_deinit.
741
742 2002-09-17  Werner Koch  <wk@gnupg.org>
743
744         * benchmark.c: New.
745         (mpi_bench, do_powm): Add a a simple test for RSA.
746
747         * global.c (global_init): New.  Use it instead of the setting
748         any_init_done.  Initialize the ATH system.
749         (gcry_check_version): Hook global_init in.  This is the suggested
750         way to initialize the library.
751         (_gcry_no_internal_locking): Removed.  We simply call a ath_deinit
752         and leave it to ATH to disbale the locking.
753
754         * ath.c, ath.h, ath-pth.c, ath-pthread.c: New. Taken from GPGME.
755         * mutex.h: Removed.
756         * Makefile.am (ath_components): New.
757
758 2002-09-16  Werner Koch  <wk@gnupg.org>
759
760         * secmem.c (_gcry_secmem_dump_stats): Replaced fprintf by log_*.
761
762 2002-08-23  Werner Koch  <wk@gnupg.org>
763
764         * missing-string.c: Removed unneeded strlwr.
765
766         * libgcrypt.m4: Made much more simple.
767         * libgcrypt-config.in: Made --prefix work for --libs.
768
769 2002-08-14  Werner Koch  <wk@gnupg.org>
770
771         * gcrypt.h: Add GCRY_CIPGER_DES.  Included string.h for size_t.
772         Suggested by Simon Josefsson.
773
774 2002-07-25  Werner Koch  <wk@gnupg.org>
775
776         * cipher.h: Added prototypes for progress functions.
777         * global.c: Include cipher.h for those prototypes.
778
779         * stdmem.c (_gcry_private_realloc): Replaced void* by char * for
780         pointer arithmetic reasons.  Noted by Stephan Austermuehle.
781
782 2002-06-24  Werner Koch  <wk@gnupg.org>
783
784         * missing-string.c: Include ctype.h.
785
786         * gcrypt.h (gcry_mpi_invm, gcry_mpi_div, gcry_mpi_mod)
787         (gcry_mpi_swap): New.
788
789 2002-06-18  Werner Koch  <wk@gnupg.org>
790
791         * gcrypt.h: Added a bunch of brief function descriptions.
792
793 2002-05-21  Werner Koch  <wk@gnupg.org>
794
795         * misc.c (_gcry_log_printf): Don't initialize a va_list.  Noted by
796         Jeff Johnson.
797
798         * global.c (gcry_set_progress_handler): New.
799
800         * gcrypt.h: Replaced the typedef for byte.
801
802 2002-05-16  Werner Koch  <wk@gnupg.org>
803
804         * missing-string.c: New.
805
806         * gcrypt.h: Add new error codes GCRYERR_SEXP_ and typedefs
807         GcryMPI, GcrySexp, GcryCipherHd, GcryMDHd as aliases for the old
808         ones using an underscore.
809
810         * global.c (gcry_strerror): Add strings fro the new error codes.
811         * sexp.c (gcry_sexp_canon_len): Use a macro to convert from new to
812         old error codes.
813         (gcry_sexp_create,gcry_sexp_new): New.
814
815 2002-05-15  Werner Koch  <wk@gnupg.org>
816
817         * mutex.h (DEFINE_LOCAL_MUTEX): Macro to define a mutex and
818         initialize it so that we can detect an unitialized mutex and don't
819         read from stdin.
820
821 2002-05-14  Werner Koch  <wk@gnupg.org>
822
823         Changed license of all files to the LGPL.
824
825 2002-05-07  Werner Koch  <wk@gnupg.org>
826
827         * global.c (gcry_control): Add commands
828         GCRYCTL_ANY_INITIALIZATION_P and GCRYCTL_INITIALIZATION_FINISHED_P
829         so that other libraries are able to check for required
830         initializations.
831
832 2002-05-02  Werner Koch  <wk@gnupg.org>
833
834         * gcrypt.h (GCRYCTL_DISABLE_INTERNAL_LOCKING): New.
835         * global.c (gcry_control): Implement it.
836         (_gcry_no_internal_locking): New.
837         * mutex.h: Prefixed all fucntions with _gcry_.  Bypass all
838         functions when desired.
839
840         * gcrypt.h (GCRYCTL_DISABLE_SECMEM): New.
841         * global.c (gcry_control,gcry_malloc_secure,gcry_is_secure):
842         Implement it here.
843         * secmem.c (_gcry_private_is_secure): Return false if the pool is
844         not initialized.
845
846         * gcrypt.h (GCRYCTL_INITIALIZATION_FINISHED): New.
847
848         * gcrypt.h (gcry_cipher_algos): Replaced RINDAEL by AES and change
849         the macros to expand from rijdael to aes.
850
851         * stdmem.c (_gcry_private_malloc): Return NULL for 0 byte allocation.
852         (_gcry_private_malloc_secure): Ditto.
853
854         * g10lib.h:  Copied the JNLIB_GCC macros from ../jnlib/mischelp.h
855         and removed the inclusion of that file.
856
857 2002-04-15  Werner Koch  <wk@gnupg.org>
858
859         * global.c (gcry_strdup): New.
860
861 2002-03-18  Werner Koch  <wk@gnupg.org>
862
863         * mutex.h: New file with a portable thread mutex implementation
864         written by Marcus Brinkmann.  Taken from GPGME.
865
866 2002-02-18  Werner Koch  <wk@gnupg.org>
867
868         * sexp.c (gcry_sexp_sscan): Don't initialize the dummy
869         variable.  Suggested by Jordi Mallach.
870
871 2002-01-31  Werner Koch  <wk@gnupg.org>
872
873         * sexp.c (suitable_encoding,convert_to_hex,convert_to_string)
874         (convert_to_token): New.
875         (gcry_sexp_sprint): Better formatting of advanced encoding, does
876         now insert LFs and escapes all unprintable characters.
877         (unquote_string): New.
878         (sexp_sscan): Implemented the missing conversion of quoted strings.
879
880 2002-01-26  Werner Koch  <wk@gnupg.org>
881
882         * libgcrypt-config.in: Add copyright notice.
883
884 2002-01-11  Werner Koch  <wk@gnupg.org>
885
886         * sexp.c (gcry_sexp_canon_len): Fixed last change.
887
888 2002-01-01  Timo Schulz <ts@winpt.org>
889
890         * stdmem.c (_gcry_private_realloc): If pointer is NULL now realloc
891         behaves like malloc.
892
893 2001-12-20  Werner Koch  <wk@gnupg.org>
894
895         * sexp.c (gcry_sexp_canon_len): Describe the error codes and
896         return an error if this is not a S-Exp; i.e. it does not start
897         with an open parenthesis.
898
899 2001-12-18  Werner Koch  <wk@gnupg.org>
900
901         * sexp.c (gcry_sexp_canon_len): Fixed the test on NULL buffer.
902
903         * Makefile.am (DISTCLEANFILES): Include libgcrypt.sym
904
905         * sexp.c: Removed the commented test code because we now have a
906         test in ../tests/
907
908 2001-12-17  Werner Koch  <wk@gnupg.org>
909
910         * sexp.c (gcry_sexp_canon_len): New.
911
912 2001-12-11  Werner Koch  <wk@gnupg.org>
913
914         * gcrypt.h: Fixed AES128 macro, add enum for OFB mode.
915
916 2001-12-05  Werner Koch  <wk@gnupg.org>
917
918         * misc.c (_gcry_log_printf): New.
919         * sexp.c (dump_string,gcry_sexp_dump): Use logging functions
920         instead of stderr.
921
922 2001-11-16  Werner Koch  <wk@gnupg.org>
923
924         * gcrypt.h: New constant GCRYCTL_IS_ALGO_ENABLED.
925
926 2001-10-02  Werner Koch  <wk@gnupg.org>
927
928         * gcrypt.h: Removed a couple of trailing commas.
929
930 2001-08-28  Werner Koch  <wk@gnupg.org>
931
932         * sexp.c (sexp_sscan): Add an argument to enable the
933         arg_ptr. Changed all callers.  Suggested by Tom Holroyd.
934
935 2001-08-03  Werner Koch  <wk@gnupg.org>
936
937         * global.c (gcry_strerror): Updated list of error codes.
938
939 2001-07-23  Werner Koch  <wk@gnupg.org>
940
941         * gcrypt.h: Replaced the last ulong.  Noted by Rami Lehti.
942
943 2001-05-31  Werner Koch  <wk@gnupg.org>
944
945         * gcrypt.h, mpi.h: Made some mpi functions public.
946
947         * wrapper.c: Removed.
948         * global.c: Renamed all g10_ prefixed functions which had wrappers 
949         to gcry_xxx. So we now use the exported memory functions inernally.
950
951         Renamed all g10_ prefixed functions to _gcry_ prefixed ones.
952         
953         * g10lib.h (_GCRYPT_IN_LIBGCRYPT): Replace defintion by a test on it.
954
955 2001-05-28  Werner Koch  <wk@gnupg.org>
956
957         * libgcrypt.m4: Check GCRYPT_VERSION macro and not LIBGCRYPT_VERSION.
958
959         * mpi.h: Removed mpi_fromstr prototype.
960
961 2001-01-11  Werner Koch  <wk@gnupg.org>
962
963         * Makefile.am (libgcrypt_la_SOURCES): Add mpi.h
964
965 2000-12-19  Werner Koch  <wk@gnupg.org>
966
967         * types.h: Moved from ../include to here.
968
969         Major change:
970         Removed all GnuPG stuff and renamed this piece of software
971         to gcrypt. 
972
973 2000-11-14  Werner Koch  <wk@gnupg.org>
974
975         * mpi.h: Moved to ../mpi.
976
977         * Makefile.am (OMIT_DEPENDENCIES): Hack to work around dependency
978         problems.
979
980 2000-10-11  Werner Koch  <wk@gnupg.org>
981
982         * mpi.h: Changed the way mpi_limb_t is defined.
983
984 2000-10-10  Werner Koch  <wk@gnupg.org>
985
986         * Makefile.am: Take version-info from configure.
987
988 2000-10-09  Werner Koch  <wk@gnupg.org>
989
990         * gcrypt.h: New cipher mode, new algo Arcfour and new error code
991         GCRYERR_INV_CIPHER_MODE.
992         * global.c (gcry_strerror): New errorcode.
993
994 Wed Oct  4 13:16:18 CEST 2000  Werner Koch  <wk@openit.de>
995
996         * gcrypt.h (gcry_md_setkey): Replaced macro by function prototype.
997
998 Mon Sep 18 16:35:45 CEST 2000  Werner Koch  <wk@openit.de>
999
1000         * gcrypt.h (GCRYCTL_GET_ALGO_USAGE): New.
1001
1002         * secmem.c (secmem_realloc): check for failed secmem_malloc.  By
1003         Matt Kraai.
1004
1005 Mon Jul 31 10:04:47 CEST 2000  Werner Koch  <wk@openit.de>
1006
1007   * sexp.c: Removed the datalen fields from list tags.
1008   (gcry_sexp_car_data,gcry_sexp_cdr_data,gcry_sexp_car_mpi,
1009    gcry_sexp_cdr_mpi): Removed.
1010   (gcry_sexp_nth,gcry_sexp_nth_data,gcry_sexp_nth_mpi): New.
1011
1012 Fri Jul 28 18:19:11 CEST 2000  Werner Koch  <wk@openit.de>
1013
1014   * sexp.c (sexp_sscan): Fixed reallocation to secure memory.
1015   (new_empty_list): Removed
1016   (gcry_sexp_length): New.
1017   (gcry_sexp_enum): Removed.
1018   (normalize): New. Reworked the whole thing to use NULL for an empty list.
1019   (make_space): New instead of the macro.
1020
1021 Tue Jul 25 17:44:15 CEST 2000  Werner Koch  <wk@openit.de>
1022
1023   * sexp.c: Major rewrite.
1024   (gcry_sexp_sscan): Reordered arguments.  Moved functionality to ..
1025   (sexp_sscan): .. this.
1026   (gcry_sexp_build): New.
1027   (gcry_sexp_new_name_mpi, gcry_sexp_new_name_data, gcry_sexp_new_data,
1028    gcry_sexp_new_mpi): Removed.
1029
1030 Fri Jul 14 19:38:23 CEST 2000  Werner Koch  <wk@>
1031
1032   * gcrypt.h (gcry_md_start_debug, gcry_md_stop_debug): New.
1033   (gcry_ctl_cmds): New control values
1034
1035   * sexp.c (gcry_sexp_sscan): Add hex format parsing.
1036
1037   * secmem.c (lock_pool): Check for ENOSYS return my mlock() on old SCOs.
1038   (pool_is_mmapped): Made volatile.
1039   (lock_pool): No more warning for QNX. By Sam Roberts.
1040   (lock_pool,secmem_init): Additional check for dropped privs.
1041
1042 2000-03-21 09:18:48  Werner Koch  (wk@habibti.gnupg.de)
1043
1044         * gcrypt.h (gcry_md_setkey): New.
1045         (GCRY_MD_FLAG_HMAC): New.
1046
1047 Mon Jan 31 16:37:34 CET 2000  Werner Koch  <wk@gnupg.de>
1048
1049         * Makefile.am: Add g10lib.h
1050
1051 Thu Jan 27 18:00:44 CET 2000  Werner Koch  <wk@gnupg.de>
1052
1053         * sexp.c (gcry_sexp_sscan): Allow NULL for erroff.
1054
1055 Mon Jan 24 22:24:38 CET 2000  Werner Koch  <wk@gnupg.de>
1056
1057         * sexp.c (gcry_sexp_alist): New.
1058
1059 Mon Jan 24 13:04:28 CET 2000  Werner Koch  <wk@gnupg.de>
1060
1061         * secmem.c: Moved from ../util to here.
1062         * secmem.h: New.
1063         * stdmem.c: New. Based on the old ../util/memory.c.
1064         * stdmem.h: New.
1065
1066 Wed Dec  8 21:58:32 CET 1999  Werner Koch  <wk@gnupg.de>
1067
1068         * gcrypt.m4: New.
1069         * gcrypt-config: New.
1070
1071         * mpi.h (mpi_get_nbit_info): Removed
1072         (mpi_set_nbit_info): Removed.
1073         (struct gcry_mpi): Removed the nbits field.
1074
1075         * misc.c (g10_log_verbosity): New.
1076
1077         * global.c (g10_xstrdup): New.
1078
1079         * mpiapi.c: Removed.
1080
1081         * mpi.h: Moved from ../include to here.  Removed some obsolete
1082         prototypes and the iobuf.h header.
1083         * cipher.h: Moved from ../include to here. Removed the mpi.h header.
1084         * g10lib.h: Moved from ../include to here.
1085
1086 Fri Nov 19 17:15:20 CET 1999  Werner Koch  <wk@gnupg.de>
1087
1088         * sexp.c (dump_string): New.  Taken from gnupg/util/miscutil.c.
1089         (do_dump_list): s/print_string/dump_string/.
1090
1091         * testapi.c: New.
1092
1093         * mpiapi.c (gcry_mpi_randomize): Use new random API.
1094
1095 Sat Nov 13 17:44:23 CET 1999  Werner Koch  <wk@gnupg.de>
1096
1097         * gloabl.c (gcry_control): Add cases for dumping random
1098         and secmem stats.
1099
1100 Tue Oct 26 14:10:21 CEST 1999  Werner Koch  <wk@gnupg.de>
1101
1102         * pkapi.c: Removed.
1103
1104         * symapi.c: Removed.
1105
1106         * g10lib.h:  Moved to ../include.
1107
1108         * mdapi.c: Removed.
1109
1110 Wed Jul  7 13:08:40 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
1111
1112         * sexp.c: New.
1113
1114 Tue Dec  8 13:15:16 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
1115
1116         * gcrypt.h: New
1117         * mpiapi.c: New
1118
1119         
1120  Copyright 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
1121
1122  This file is free software; as a special exception the author gives
1123  unlimited permission to copy and/or distribute it, with or without
1124  modifications, as long as this notice is preserved.
1125
1126  This file is distributed in the hope that it will be useful, but
1127  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1128  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.