Changes to allow building a W32 DLL
[gpgme.git] / NEWS
1 Noteworthy changes in version 1.1.0 (unreleased)
2 ------------------------------------------------
3
4  * "./autogen.sh --build-w32" does now build gpgme.dll.
5
6  * You can now configure the backend engine file name and home
7    directory to be used, as default and per context.
8
9  * Previousy, GPGME would use a default "include certs" of 1.  This
10    has been changed.  Now GPGME will use the crypto backend engines
11    default unless you set the value with gpgme_set_include_certs()
12    explicitely.  A new macro GPGME_INCLUDE_CERTS_DEFAULT can be used
13    as a value to explicitely request the new default behaviour.
14
15    Because the default changes, this is a slight change of the API
16    semantics.  We consider it to be a bug fix.
17
18  * Information about the recipients of an encrypted text is now
19    available at decryption time.
20
21  * New status GPGME_STATUS_PLAINTEXT.  This is analyzed by the decrypt
22    and verify handlers, the information about the plaintext filename,
23    if available is made available in the new field plaintext_filename
24    of the respective result structure.
25
26 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 gpgme_set_engine_info           NEW
28 gpgme_ctx_get_engine_info       NEW
29 gpgme_ctx_set_engine_info       NEW
30 gpgme_set_include_certs         CHANGED DEFAULT
31 GPGME_INCLUDE_CERTS_DEFAULT     NEW
32 gpgme_recipient_t               NEW
33 gpgme_decrypt_result_t          EXTENDED: New field recipients.
34 gpgme_verify_result_t           EXTENDED: New fields pubkey_algo, hash_algo.
35 GPGME_STATUS_SIG_SUBPACKET      NEW
36 GPGME_STATUS_NEED_PASSPHRASE_PIN NEW
37 GPGME_STATUS_SC_OP_FAILURE      NEW
38 GPGME_STATUS_SC_OP_SUCCESS      NEW
39 GPGME_STATUS_CARDCTRL           NEW
40 GPGME_STATUS_BACKUP_KEY_CREATED NEW
41 gpgme_decrypt_result_t          EXTENDED: New field plaintext_filename.
42 gpgme_verify_result_t           EXTENDED: New field plaintext_filename.
43 GPGME_STATUS_PLAINTEXT          NEW
44 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45
46
47 Noteworthy changes in version 1.0.2 (2004-12-28)
48 ------------------------------------------------
49
50  * Changed the license of the library to the GNU Lesser General Public
51    License (LGPL), version 2.1 or later.
52
53
54 Noteworthy changes in version 1.0.1 (2004-10-22)
55 ------------------------------------------------
56
57  * Only bug fixes.
58
59
60 Noteworthy changes in version 1.0.0 (2004-09-30)
61 ------------------------------------------------
62
63  * Version 1.0.0!  We are proud to present you with a thoroughly
64    tested and stable version of the GPGME library.  A big Thank You!
65    to all the people who made this possible.
66
67    The development will be branched into a stable 1.x.y series and the
68    head.
69
70  * The gpgme.m4 macro supports checking the API version.  Just prepend
71    it to the required version string, separated by a colon.  For
72    example, this release has the version "1:1.0.0".  The last release
73    to which this version is (mostly) ABI compatible is "1:0.4.2",
74    which is the default required version.
75
76
77 Noteworthy changes in version 0.9.0 (2004-06-08)
78 ------------------------------------------------
79
80  * The type gpgme_key_t has now a new field keylist_mode that contains
81    the keylist mode that was active at the time the key was retrieved.
82
83  * The type gpgme_decrypt_result_t has a new field "wrong_key_usage"
84    that contains a flag indicating that the key should not have been
85    used for encryption.
86
87  * Verifying a signature of a revoked key gives the correct result now
88    (GPG_ERR_CERT_REVOKED error code).
89
90  * Clarified that the error code GPG_ERR_NO_DATA from the decrypt &
91    verify operations still allows you to look at the signature
92    verification result.
93
94  * Clarified that patterns in keylisting operations have an upper
95    limit, and thus are not suited to list many keys at once by their
96    fingerprint.  Also improve the error message if the pattern is too
97    long for the CMS protocol to handle.
98
99 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100 gpgme_key_t                     EXTENDED: New field keylist_mode.
101 gpgme_decrypt_result_t          EXTENDED: New field wrong_key_usage.
102 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
103
104
105 Noteworthy changes in version 0.4.7 (2004-04-29)
106 ------------------------------------------------
107
108  * Correctly initialize the fields expired, revoked, invalid, and
109    disabled in the gpgme_key_t structures.
110
111  * A bug fix: The flag wrong_key_usage of gpgme_signature_t was
112    accidently of type int instead unsigned int.
113
114  * Interface changes relative to the 0.4.5 release:
115 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116 gpgme_signature_t               CHANGED: wrong_key_usage is unsigned int now.
117 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118
119 Noteworthy changes in version 0.4.6 (2004-04-06)
120 ------------------------------------------------
121
122  * Bug fixes
123
124
125 Noteworthy changes in version 0.4.5 (2004-03-07)
126 ------------------------------------------------
127
128  * GPGME is now compiled with LFS (large file support) by default.
129    This means that _all_ programs using GPGME must be compiled with
130    LFS support enabled by default.  You can do this easily with
131    autoconf, by using the AC_SYS_LARGEFILE macro.  Or you can do this
132    without autoconf by defining the preprocessor symbol
133    _FILE_OFFSET_BITS to 64 (by passing the -D_FILE_OFFSET_BITS=64 to
134    the C compiler command line, or by defining this preprocessor
135    symbol before including any system header files).  For more
136    details, read the section on LFS in the manual.
137
138    Up to now, it was undocumented that GPGME was not using LFS.
139    But the public interfaces use off_t, and file descriptors are
140    exchanged between the application and GPGME.  This was an oversight,
141    and bound to cause troubles in the future.
142
143    Writing GPGME as a dual mode library that seamlessly supports LFS
144    while keeping backwards compatibility is possible, but does not
145    solve the problem: Many applications already expect GPGME to have
146    LFS (they are compiled with off_t being a 64bit value).  This is true
147    in particular for the popular Gtk+ and Qt programs.
148
149    So, although this is an ABI (but not an API) break, we will not
150    change the library version to reflect that.  Because the interfaces
151    affected are probably not used yet in any GPGME 0.4 based
152    application, we don't expect any real failures from this change.
153    In fact, applications already using LFS will have some subtle bugs
154    fixed.
155
156    However, if you encounter an application using GPGME 0.4.x that
157    does _not_ use LFS by default (off_t is a 32bit value), _and_
158    uses at least one of the functions gpgme_data_seek,
159    gpgme_data_new_from_filepart, or a gpgme_data_seek_cb_t with
160    gpgme_data_new_from_cbs, then indeed this library will be ABI
161    incompatible with the program.  As said above, we don't believe
162    such a program exists.  If we are in error, then you have two
163    options: As a quick hack, you can configure GPGME with the
164    --disable-largefile option.  This will revert the change, and GPGME
165    will not use LFS.  However, GPGME will be incompatible with
166    programs that expect GPGME to use LFS.  All applications are
167    required to use LFS when using GPGME, so this is only good as a
168    temporary local work-around.
169
170    The other option is to change the versioning of the library and
171    recompile all applications.  We have reserved a special version of
172    the library for that, so you can do that without expecting a
173    version clash in the future.  Furthermore, everyone who does this
174    will agree on the version to use (this is important for
175    distribution makers).  Read the comment in configure.ac (before
176    LIBGPGME_LT_AGE) if you want to do this.  Please don't do this
177    blindly: As stated above, we think it is unlikely this measure is
178    needed.  Still, it is there if necessary.  If in doubt, contact us
179    and we will give our advise for your specific situation.
180
181  * New key listing mode GPGME_KEYLIST_MODE_VALIDATE for validation of
182    the listed keys.
183
184  * New interface gpgme_cancel() that can be used to cancel
185    asynchronous operations.
186
187  * Interface changes relative to the 0.4.4 release:
188 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189 gpgme_data_seek_cb_t            CHANGED: off_t is now a largefile type.
190 gpgme_data_seek                 CHANGED: off_t is now a largefile type.
191 gpgme_data_new_from_filepart    CHANGED: off_t is now a largefile type.
192 GPGME_KEYLIST_MODE_VALIDATE     NEW
193 gpgme_cancel                    NEW
194 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
195
196 Noteworthy changes in version 0.4.4 (2004-01-12)
197 ------------------------------------------------
198
199  * The member "class" in gpgme_key_sig_t and gpgme_new_signature_t has
200    been renamed to "sig_class", to avoid clash with C++ compilers.  In
201    the C API, the old name "class" has been preserved for backwards
202    compatibility, but is deprecated.
203
204  * Interface changes relative to the 0.4.3 release:
205 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
206 gpgme_key_sig_t                 CHANGED: class deprecated, use new sig_class.
207 gpgme_new_signature_t           CHANGED: class deprecated, use new sig_class.
208 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
209
210 Noteworthy changes in version 0.4.3 (2003-10-06)
211 ------------------------------------------------
212
213  * libgpgme should not be used for threaded programs anymore.  This
214    never worked reliably in all cases, because you had to
215    be careful about the linking order and libtool wouldn't do that for
216    you automatically.  Instead, now you have to link against
217    libgpgme-pthread for applications using pthread and libgpgme-pth for
218    applications using GNU Pth.
219
220    The old code for automagically detecting the thread library is
221    still part of libgpgme, but it is DEPRECATED.
222
223  * There are new automake macros AM_PATH_GPGME_PTH and
224    AM_PATH_GPGME_PTHREAD, which support checking for thread-enabled
225    versions of GPGME.  They define GPGME_PTH_CFLAGS, GPGME_PTH_LIBS,
226    GPGME_PTHREAD_CFLAGS and GPGME_PTHREAD_LIBS respectively.  These
227    variables of course also include the configuration for the thread
228    package itself.  Alternatively, use libtool.
229
230  * gpgme_strerror_r as a thread safe variant of gpgme_strerror was
231    added.
232
233  * gpgme-config doesn't support setting the prefix or exec prefix
234    anymore.  I don't think it ever worked correctly, and it seems to
235    be pointless.
236
237  * gpgme_get_key fails with GPG_ERR_AMBIGUOUS_NAME if the key ID
238    provided was not unique, instead returning the first matching key.
239
240  * gpgme_key_t and gpgme_subkey_t have a new field, can_authenticate,
241    that indicates if the key can be used for authentication.
242
243  * gpgme_signature_t's status field is now correctly set to an error
244    with error code GPG_ERR_NO_PUBKEY if public key is not found.
245
246  * gpgme_new_signature_t's class field is now an unsigned int, rather
247    than an unsigned long (the old class field is preserved for
248    backwards compatibility).
249
250  * A new function gpgme_set_locale() is provided to allow configuring
251    the locale for the crypto backend.  This is necessary for text
252    terminals so that programs like the pinentry can be started with
253    the right locale settings for the terminal the application is running
254    on, in case the terminal has different settings than the system
255    default (for example, if it is a remote terminal).  You are highly
256    recommended to call the following functions directly after
257    gpgme_check_version:
258
259    #include <locale.h>
260
261    setlocale (LC_ALL, "");
262    gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
263    gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
264
265    GPGME can not do this for you, as setlocale is not thread safe, and
266    there is no alternative.
267
268  * The signal action for SIGPIPE is now set to SIG_IGN by
269    gpgme_check_version, instead the first time a crypto engine is
270    started (which is not well defined).
271
272  * In the output of gpgme_hash_algo_name, change RMD160 to RIPEMD160,
273    TIGER to TIGER192, CRC32-RFC1510 to CRC32RFC1510, and CRC24-RFC2440
274    to CRC24RFC2440.  For now, these strings can be used as the MIC
275    parameter for PGP/MIME (if appropriately modified).
276
277  * Interface changes relative to the 0.4.2 release:
278 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
279 gpgme_strerror_t                NEW
280 gpgme_get_key                   CHANGED: Fails correctly if key ID not unique.
281 gpgme_key_t                     EXTENDED: New field can_authenticate.
282 gpgme_subkey_t                  EXTENDED: New field can_authenticate.
283 gpgme_new_signature_t           CHANGED: New type for class field.
284 gpgme_set_locale                NEW
285 gpgme_hash_algo_name            CHANGED: Slight adjustment of algo names.
286 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
287
288 Noteworthy changes in version 0.4.2 (2003-07-30)
289 ------------------------------------------------
290
291  * Allow gpg-error to be in non-standard place when linking the test suite.
292
293  * Configure will fail now if gpg-error can not be found.
294
295  * Fixed initialized memory backed data objects for writing, which
296    caused the test program to crash (but only on Mac OS, surprisingly).
297
298  * Eliminate use of C99 constructs.
299
300  * Small improvements to the manual.
301
302
303 Noteworthy changes in version 0.4.1 (2003-06-06)
304 ------------------------------------------------
305
306  This is the release that 0.4.0 should have been.  There are many
307  interface changes, please see below for the details.  The changes are
308  sometimes the result of new functionality, but more often express a
309  paradigm shift.  Others are an overdue cleanup to get GPGME in line
310  with the GNU coding standards and to make the interface more
311  self-consistent.  Here is an overview on the changes:
312
313  All types have been renamed to conform to the GNU coding standards,
314  most of the time by keeping the whole name in lowercase and inserting
315  underscores between words.
316
317  All operations consistently only accept input parameters in their
318  invocation function, and return only an error code directly.  Further
319  information about the result of the operation has to be retrieved
320  afterwards by calling one of the result functions.  This unifies the
321  synchronous and the asynchronous interface.
322
323  The error values have been completely replaced by a more
324  sophisticated model that allows GPGME to transparently and accurately
325  report all errors from the other GnuPG components, irregardless of
326  process boundaries.  This is achieved by using the library
327  libgpg-errors, which is shared by all GnuPG components.  This library
328  is now required for GPGME.
329
330  The results of all operations are now provided by pointers to C
331  structs rather than by XML structs or in other ways.
332
333  Objects which used to be opaque (for example a key) are now pointers
334  to accessible structs, so no accessor functions are necessary.
335
336  Backward compatibility is provided where it was possible without too
337  much effort and did not collide with the overall sanitization effort.
338  However, this is only for ease of transition.  NO DEPRECATED FUNCTION
339  OR DATA TYPE IS CONSIDERED A PART OF THE API OR ABI AND WILL BE
340  DROPPED IN THE FUTURE WITHOUT CHANGING THE SONAME OF THE LIBRARY.
341  Recommendations how to replace deprecated or removed functionality
342  can be found within the description of each change.
343
344  What follows are all changes to the interface and behaviour of GPGME
345  in detail.
346
347  * If gpgme.h is included in sources compiled by GCC 3.1 or later,
348    deprecated attributes will warn about use of obsolete functions and
349    type definitions.  You can suppress these warnings by passing
350    -Wno-deprecated-declarations to the gcc command.
351
352  * The following types have been renamed.  The old types are still
353    available as aliases, but they are deprecated now:
354    Old name:            New name:
355    GpgmeCtx             gpgme_ctx_t
356    GpgmeData            gpgme_data_t
357    GpgmeError           gpgme_error_t
358    GpgmeDataEncoding    gpgme_data_encoding_t
359    GpgmeSigStat         gpgme_sig_stat_t
360    GpgmeSigMode         gpgme_sig_mode_t
361    GpgmeAttr            gpgme_attr_t
362    GpgmeValidity        gpgme_validity_t
363    GpgmeProtocol        gpgme_protocol_t
364    GpgmeKey             gpgme_key_t
365    GpgmePassphraseCb    gpgme_passphrase_cb_t
366    GpgmeProgressCb      gpgme_progress_cb_t
367    GpgmeIOCb            gpgme_io_cb_t
368    GpgmeRegisterIOCb    gpgme_register_io_cb_t
369    GpgmeRemoveIOCb      gpgme_remove_io_cb_t
370    GpgmeEventIO         gpgme_event_io_t
371    GpgmeEventIOCb       gpgme_event_io_cb_t
372    GpgmeIOCbs           gpgme_io_cbs
373    GpgmeDataReadCb      gpgme_data_read_cb_t
374    GpgmeDataWriteCb     gpgme_data_write_cb_t
375    GpgmeDataSeekCb      gpgme_data_seek_cb_t
376    GpgmeDataReleaseCb   gpgme_data_release_cb_t
377    GpgmeDataCbs         gpgme_data_cbs_t
378    GpgmeTrustItem       gpgme_trust_item_t
379    GpgmeStatusCode      gpgme_status_code_t
380
381  * gpgme_error_t is now identical to gpg_error_t, the error type
382    provided by libgpg-error.  More about using libgpg-error with GPGME
383    can be found in the manual.  All error symbols have been removed!
384
385  * All functions and types in libgpg-error have been wrapped in GPGME.
386    The new types are gpgme_err_code_t and gpgme_err_source_t.  The new
387    functions are gpgme_err_code, gpgme_err_source, gpgme_error,
388    gpgme_err_make, gpgme_error_from_errno, gpgme_err_make_from_errno,
389    gpgme_err_code_from_errno, gpgme_err_code_to_errno,
390    gpgme_strsource.
391
392  * GPGME_ATTR_IS_SECRET is not anymore representable as a string.
393
394  * GnuPG 1.2.2 is required.  The progress callback is now also invoked
395    for encrypt, sign, encrypt-sign, decrypt, verify, and
396    decrypt-verify operations.  For verify operations on detached
397    signatures, the progress callback is invoked for both the detached
398    signature and the plaintext message, though.
399
400  * gpgme_passphrase_cb_t has been changed to not provide a complete
401    description, but the UID hint, passphrase info and a flag
402    indicating if this is a repeated attempt individually, so the user
403    can compose his own description from this information.
404
405    The passphrase is not returned as a C string, but must be written
406    to a file descriptor directly.  This allows for secure passphrase
407    entries.
408
409    The return type has been changed to gpgme_error_t value.  This
410    allowed to remove the gpgme_cancel function; just return
411    the error code GPG_ERR_CANCELED in the passphrase callback directly.
412
413  * gpgme_edit_cb_t has been changed to take a file descriptor argument.
414    The user is expected to write the response to the file descriptor,
415    followed by a newline.
416
417  * The recipients interface has been removed.  Instead, you use
418    NULL-terminated lists of keys for specifying the recipients of an
419    encryption operation.  Use the new encryption flag
420    GPGME_ENCRYPT_ALWAYS_TRUST if you want to override the validity of
421    the keys (but note that in general this is not a good idea).
422
423    This change has been made to the prototypes of gpgme_op_encrypt,
424    gpgme_op_encrypt_start, gpgme_op_encrypt_sign and
425    gpgme_op_encrypt_sign_start.
426
427    The export interface has been changed to use pattern strings like
428    the keylist interface.  Thus, new functions gpgme_op_export_ext and
429    gpgme_op_export_ext_start have been added as well.  Now the
430    prototypes of gpgme_op_export_start and gpgme_op_export finally
431    make sense.
432
433  * gpgme_op_verify and gpgme_op_decrypt_verify don't return a status
434    summary anymore.  Use gpgme_get_sig_status to retrieve the individual
435    stati.
436
437  * gpgme_io_cb_t changed from a void function to a function returning
438    a gpgme_error_t value.  However, it will always return 0, so you
439    can safely ignore the return value.
440
441  * A new I/O callback event GPGME_EVENT_START has been added.  The new
442    requirement is that you must wait until this event until you are
443    allowed to call the I/O callback handlers previously registered for
444    this context operation.  Calling I/O callback functions for this
445    context operation before the start event happened is unsafe because
446    it can lead to race conditions in a multi-threaded environment.
447
448  * The idle function feature has been removed.  It was not precisely
449    defined in a multi-threaded environment and is obsoleted by the
450    user I/O callback functions.  If you still need a simple way to
451    call something while waiting on one or multiple asynchronous
452    operations to complete, don't set the HANG flag in gpgme_wait (note
453    that this will return to your program more often than the idle
454    function did).
455
456  * gpgme_wait can return NULL even if hang is true, if an error
457    occurs.  In that case *status contains the error code.
458
459  * gpgme_get_engine_info was radically changed.  Instead an XML
460    string, an info structure of the new type gpgme_engine_info_t is
461    returned.  This makes it easier and more robust to evaluate the
462    information in an application.
463
464  * The new function gpgme_get_protocol_name can be used to convert a
465    gpgme_protocol_t value into a string.
466
467  * The status of a context operation is not checked anymore.  Starting
468    a new operation will silently cancel the previous one.  Calling a
469    function that requires you to have started an operation before without
470    doing so is undefined.
471
472  * The FPR argument to gpgme_op_genkey was removed.  Instead, use the
473    gpgme_op_genkey_result function to retrieve a gpgme_genkey_result_t
474    pointer to a structure which contains the fingerprint.  This also
475    works with gpgme_op_genkey_start.  The structure also provides
476    other information about the generated keys.
477
478    So, instead:
479
480    char *fpr;
481    err = gpgme_op_genkey (ctx, NULL, NULL, &fpr); 
482    if (!err && fpr)
483      printf ("%s\n", fpr);
484
485    you should now do:
486
487    gpgme_genkey_result_t result;
488    err = gpgme_op_genkey (ctx, NULL, NULL);
489    if (!err)
490      {
491        result = gpgme_op_genkey_result (ctx);
492        if (result->fpr)
493          printf ("%s\n", result->fpr);
494      }
495
496  * The new gpgme_op_import_result function provides detailed
497    information about the result of an import operation in
498    gpgme_import_result_t and gpgme_import_status_t objects.
499    Thus, the gpgme_op_import_ext variant is deprecated.
500
501  * The new gpgme_op_sign_result function provides detailed information
502    about the result of a signing operation in gpgme_sign_result_t,
503    gpgme_invalid_key_t and gpgme_new_signature_t objects.
504
505  * The new gpgme_op_encrypt_result function provides detailed
506    information about the result of an encryption operation in
507    a GpgmeEncryptResult object.
508
509  * The new gpgme_op_decrypt_result function provides detailed
510    information about the result of a decryption operation in
511    a GpgmeDecryptResult object.
512
513  * The new gpgme_op_verify_result function provides detailed
514    information about the result of an verify operation in
515    a GpgmeVerifyResult object.  Because of this, the GPGME_SIG_STAT_*
516    values, gpgme_get_sig_status, gpgme_get_sig_ulong_attr,
517    gpgme_get_sig_string_attr and gpgme_get_sig_key are now deprecated,
518    and gpgme_get_notation is removed.
519
520  * GpgmeTrustItem objects have now directly accessible data, so the
521    gpgme_trust_item_get_string_attr and gpgme_trust_item_get_ulong_attr
522    accessor functions are deprecated.  Also, reference counting is
523    available through gpgme_trust_item_ref and gpgme_trust_item_unref
524    (the gpgme_trust_item_release alias for the latter is deprecated).
525
526  * Keys are not cached internally anymore, so the force_update argument
527    to gpgme_get_key has been removed.
528
529  * GpgmeKey objects have now directly accessible data so the
530    gpgme_key_get_string_attr, gpgme_key_get_ulong_attr,
531    gpgme_key_sig_get_string_attr and gpgme_key_sig_get_ulong_attr
532    functions are deprecated.  Also, gpgme_key_release is now
533    deprecated.  The gpgme_key_get_as_xml function has been dropped.
534
535  * Because all interfaces using attributes are deprecated, the
536    GpgmeAttr data type is also deprecated.
537
538  * The new gpgme_op_keylist_result function provides detailed
539    information about the result of a key listing operation in
540    a GpgmeKeyListResult object.
541
542  * Now that each function comes with its own result retrieval
543    interface, the generic gpgme_get_op_info interface is not useful
544    anymore and dropped.
545
546  * The type and mode of data objects is not available anymore.
547
548  * Interface changes relative to the 0.4.0 release:
549 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
550 GpgmeCtx                        DEPRECATED: Use gpgme_ctx_t.
551 GpgmeData                       DEPRECATED: Use gpgme_data_t.
552 GpgmeError                      DEPRECATED: Use gpgme_error_t.
553 GpgmeDataEncoding               DEPRECATED: Use gpgme_data_encoding_t.
554 GpgmeSigStat                    DEPRECATED: Use gpgme_sig_stat_t.
555 GpgmeSigMode                    DEPRECATED: Use gpgme_sig_mode_t.
556 GpgmeAttr                       DEPRECATED: Use gpgme_attr_t.
557 GpgmeValidity                   DEPRECATED: Use gpgme_validity_t.
558 GpgmeProtocol                   DEPRECATED: Use gpgme_protocol_t.
559 GpgmeKey                        DEPRECATED: Use gpgme_key_t.
560 GpgmePassphraseCb               DEPRECATED: Use gpgme_passphrase_cb_t.
561 GpgmeProgressCb                 DEPRECATED: Use gpgme_progress_cb_t.
562 GpgmeIOCb                       DEPRECATED: Use gpgme_io_cb_t.
563 GpgmeRegisterIOCb               DEPRECATED: Use gpgme_register_io_cb_t.
564 GpgmeRemoveIOCb                 DEPRECATED: Use gpgme_remove_io_cb_t.
565 GpgmeEventIO                    DEPRECATED: Use gpgme_event_io_t.
566 GpgmeEventIOCb                  DEPRECATED: Use gpgme_event_io_cb_t.
567 GpgmeIOCbs                      DEPRECATED: Use gpgme_io_cbs.
568 GpgmeDataReadCb                 DEPRECATED: Use gpgme_data_read_cb_t.
569 GpgmeDataWriteCb                DEPRECATED: Use gpgme_data_write_cb_t.
570 GpgmeDataSeekCb                 DEPRECATED: Use gpgme_data_seek_cb_t.
571 GpgmeDataReleaseCb              DEPRECATED: Use gpgme_data_release_cb_t.
572 GpgmeDataCbs                    DEPRECATED: Use gpgme_data_cbs_t.
573 GpgmeTrustItem                  DEPRECATED: Use gpgme_trust_item_t.
574 GpgmeStatusCode                 DEPRECATED: Use gpgme_status_code_t.
575 gpgme_ctx_t                     NEW
576 gpgme_data_t                    NEW
577 gpgme_recipients_t              NEW
578 gpgme_error_t                   NEW
579 gpgme_data_encoding_t           NEW
580 gpgme_sig_stat_t                NEW
581 gpgme_sig_mode_t                NEW
582 gpgme_attr_t                    NEW
583 gpgme_validity_t                NEW
584 gpgme_protocol_t                NEW
585 gpgme_key_t                     NEW
586 gpgme_passphrase_cb_t           NEW
587 gpgme_progress_cb_t             NEW
588 gpgme_io_cb_t                   NEW
589 gpgme_register_io_cb_t          NEW
590 gpgme_remove_io_cb_t            NEW
591 gpgme_event_io_t                NEW
592 gpgme_event_io_cb_t             NEW
593 gpgme_io_cbs                    NEW
594 gpgme_data_read_cb_t            NEW
595 gpgme_data_write_cb_t           NEW
596 gpgme_data_seek_cb_t            NEW
597 gpgme_data_release_cb_t         NEW
598 gpgme_data_cbs_t                NEW
599 gpgme_trust_item_t              NEW
600 gpgme_status_code_t             NEW
601 GPGME_{some error code}         REMOVED! Use GPG_ERR_* from libgpg-error.
602 gpgme_err_code_t                NEW
603 gpgme_err_source_t              NEW
604 gpgme_err_code                  NEW
605 gpgme_err_source                NEW
606 gpgme_error                     NEW
607 gpgme_err_make                  NEW
608 gpgme_error_from_errno          NEW
609 gpgme_err_make_from_errno       NEW
610 gpgme_err_code_from_errno       NEW
611 gpgme_err_code_to_errno         NEW
612 gpgme_strsource                 NEW
613 gpgme_io_cb_t                   CHANGED: Return type from void to GpgmeError.
614 gpgme_event_io_t                CHANGED: New event type (all numbers changed).
615 gpgme_passphrase_cb_t           CHANGED: Desc decomposed, write directly to FD.
616 gpgme_edit_cb_t                 CHANGED: Write directly to FD.
617 gpgme_key_get_string_attr       CHANGED: Don't handle GPGME_ATTR_IS_SECRET.
618 gpgme_op_verify                 CHANGED: Drop R_STAT argument.
619 gpgme_op_decrypt_verify         CHANGED: Drop R_STAT argument.
620 gpgme_wait                      CHANGED: Can return NULL even if hang is true.
621 GpgmeIdleFunc                   REMOVED
622 gpgme_register_idle             REMOVED
623 GpgmeRecipients                 REMOVED
624 gpgme_recipients_new            REMOVED
625 gpgme_recipients_release        REMOVED
626 gpgme_recipients_add_name       REMOVED
627 gpgme_recipients_add_name_with_validity REMOVED
628 gpgme_recipients_count          REMOVED
629 gpgme_recipients_enum_open      REMOVED
630 gpgme_recipients_enum_read      REMOVED
631 gpgme_recipients_enum_close     REMOVED
632 gpgme_encrypt_flags_t           NEW
633 GPGME_ENCRYPT_ALWAYS_TRUST      NEW
634 gpgme_op_encrypt                CHANGED: Recipients passed as gpgme_key_t[].
635 gpgme_op_encrypt_start          CHANGED: Recipients passed as gpgme_key_t[].
636 gpgme_op_encrypt_sign           CHANGED: Recipients passed as gpgme_key_t[].
637 gpgme_op_encrypt_sign_start     CHANGED: Recipients passed as gpgme_key_t[].
638 gpgme_op_export_start           CHANGED: User IDs passed as patterns.
639 gpgme_op_export                 CHANGED: User IDs passed as patterns.
640 gpgme_op_export_ext_start       NEW
641 gpgme_op_export_ext             NEW
642 gpgme_keylist_mode_t            NEW
643 gpgme_sigsum_t                  NEW
644 gpgme_engine_info_t             NEW
645 gpgme_get_engine_info           CHANGED: Return info structure instead XML.
646 gpgme_get_protocol_name         NEW
647 gpgme_cancel                    REMOVED: Return error in callback directly.
648 gpgme_op_genkey                 CHANGED: FPR argument dropped.
649 gpgme_op_genkey_result          NEW
650 gpgme_genkey_result_t           NEW
651 gpgme_op_import_ext             DEPRECATED: Use gpgme_op_import_result.
652 gpgme_op_import_result          NEW
653 gpgme_import_status_t           NEW
654 gpgme_import_result_t           NEW
655 gpgme_pubkey_algo_t             NEW
656 gpgme_hash_algo_t               NEW
657 gpgme_invalid_key_t             NEW
658 gpgme_new_signature_t           NEW
659 gpgme_sign_result_t             NEW
660 gpgme_op_sign_result            NEW
661 gpgme_pubkey_algo_name          NEW
662 gpgme_hash_algo_name            NEW
663 gpgme_encrypt_result_t          NEW
664 gpgme_op_encrypt_result         NEW
665 gpgme_decrypt_result_t          NEW
666 gpgme_op_decrypt_result         NEW
667 gpgme_verify_result_t           NEW
668 gpgme_op_verify_result          NEW
669 gpgme_get_notation              REMOVED: Access verify result directly instead.
670 gpgme_get_sig_key               DEPRECATED: Use gpgme_get_key with fingerprint.
671 gpgme_get_sig_ulong_attr        DEPRECATED: Use verify result directly.
672 gpgme_get_sig_string_attr       DEPRECATED: Use verify result directly.
673 GPGME_SIG_STAT_*                DEPRECATED: Use error value in sig status.
674 gpgme_get_sig_status            DEPRECATED: Use verify result directly.
675 gpgme_trust_item_t              CHANGED: Now has user accessible data members.
676 gpgme_trust_item_ref            NEW
677 gpgme_trust_item_unref          NEW
678 gpgme_trust_item_release        DEPRECATED: Use gpgme_trust_item_unref.
679 gpgme_trust_item_get_string_attr DEPRECATED
680 gpgme_trust_item_get_ulong_attr DEPRECATED
681 gpgme_get_key                   CHANGED: Removed force_update argument.
682 gpgme_sub_key_t                 NEW
683 gpgme_key_sig_t                 NEW
684 gpgme_user_id_t                 NEW
685 gpgme_key_t                     CHANGED: Now has user accessible data members.
686 gpgme_key_get_string_attr       DEPRECATED
687 gpgme_key_get_ulong_attr        DEPRECATED
688 gpgme_key_sig_get_string_attr   DEPRECATED
689 gpgme_key_sig_get_ulong_attr    DEPRECATED
690 gpgme_key_get_as_xml            REMOVED
691 gpgme_key_list_result_t         NEW
692 gpgme_op_keylist_result         NEW
693 gpgme_get_op_info               REMOVED
694 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
695
696 Noteworthy changes in version 0.4.0 (2002-12-23)
697 ------------------------------------------------
698
699  * Key generation returns the fingerprint of the generated key.
700
701  * New convenience function gpgme_get_key.
702
703  * Supports signatures of user IDs in keys via the new
704    GPGME_KEYLIST_MODE_SIGS keylist mode and the
705    gpgme_key_sig_get_string_attr and gpgme_key_sig_get_ulong_attr
706    interfaces.  The XML info about a key also includes the signatures
707    if available.
708
709  * New data object interface, which is more flexible and transparent.
710
711  * Interface changes relative to the 0.3.9 release:
712 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
713 GpgmeDataReadCb                 NEW
714 GpgmeDataWriteCb                NEW
715 GpgmeDataSeekCb                 NEW
716 GpgmeDataReleaseCb              NEW
717 GpgmeDataCbs                    NEW
718 gpgme_data_read                 CHANGED: Match read() closely.
719 gpgme_data_write                CHANGED: Match write() closely.
720 gpgme_data_seek                 NEW
721 gpgme_data_new_from_fd          NEW
722 gpgme_data_new_from_stream      NEW
723 gpgme_data_new_from_cbs         NEW
724 gpgme_data_rewind               DEPRECATED: Replaced by gpgme_data_seek().
725 gpgme_data_new_from_read_cb     DEPRECATED: Replaced by gpgme_data_from_cbs().
726 gpgme_data_get_type             REMOVED: No replacement.
727 gpgme_op_verify                 CHANGED: Take different data objects for
728                                 signed text and plain text.
729 gpgme_op_verify_start           CHANGED: See gpgme_op_verify.
730 gpgme_check_engine              REMOVED: Deprecated since 0.3.0.
731 gpgme_op_genkey                 CHANGED: New parameter FPR.
732 GPGME_KEYLIST_MODE_SIGS         NEW
733 gpgme_key_sig_get_string_attr   NEW
734 gpgme_key_sig_get_ulong_attr    NEW
735 gpgme_get_key                   NEW
736 GPGME_ATTR_SIG_CLASS            NEW
737 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
738
739 Noteworthy changes in version 0.3.16 (2003-11-19)
740 -------------------------------------------------
741
742  * Compatibility fixes for GnuPG 1.9.x
743
744 Noteworthy changes in version 0.3.15 (2003-02-18)
745 -------------------------------------------------
746
747  * The progress status is sent via the progress callbacks in
748    gpgme_op_edit.
749
750  * Bug fix for signing operations with explicit signer settings for
751    the CMS protocol.
752
753 Noteworthy changes in version 0.3.14 (2002-12-04)
754 -------------------------------------------------
755
756  * GPGME-Plug is now in its own package "cryptplug".
757
758  * Workaround for a setlocale problem.  Fixed a segv related to not
759    correctly as closed marked file descriptors.
760
761 Noteworthy changes in version 0.3.13 (2002-11-20)
762 -------------------------------------------------
763
764  * Release due to changes in gpgmeplug.
765
766 Noteworthy changes in version 0.3.12 (2002-10-15)
767 -------------------------------------------------
768
769  * Fixed some bux with key listings.  
770
771  * The development has been branched to clean up some API issues.
772    This 0.3 series will be kept for compatibility reasons; so do don't
773    expect new features.
774
775 Noteworthy changes in version 0.3.11 (2002-09-20)
776 -------------------------------------------------
777         
778  * Bug fixes.
779
780 Noteworthy changes in version 0.3.10 (2002-09-02)
781 -------------------------------------------------
782
783  * Setting the signing keys for the CMS protocol does now work.
784
785  * The signers setting is honoured by gpgme_op_edit.
786
787 Noteworthy changes in version 0.3.9 (2002-08-21)
788 ------------------------------------------------
789
790  * A spec file for creating RPMs has been added.
791
792  * An experimental interface to GnuPG's --edit-key functionality is
793    introduced, see gpgme_op_edit.
794
795  * The new gpgme_import_ext function provides a convenient access to
796    the number of processed keys.
797
798  * Interface changes relative to the 0.3.8 release:
799 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
800 GpgmeStatusCode                 NEW
801 GpgmeEditCb                     NEW
802 gpgme_op_edit_start             NEW
803 gpgme_op_edit                   NEW
804 gpgme_op_import_ext             NEW
805 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
806
807 Noteworthy changes in version 0.3.8 (2002-06-25)
808 ------------------------------------------------
809
810  * It is possible to use an outside event loop for the I/O to the
811    crypto engine by setting the I/O callbacks with gpgme_set_io_cbs.
812
813  * Interface changes relative to the 0.3.6 release:
814 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
815 GpgmeIOCb                       NEW
816 GpgmeRegisterIOCb               NEW
817 GpgmeRemoveIOCb                 NEW
818 GpgmeEventIO                    NEW
819 GpgmeEventIOCb                  NEW
820 struct GpgmeIOCbs               NEW
821 gpgme_set_io_cbs                NEW
822 gpgme_get_io_cbs                NEW
823 GPGME_ATTR_ERRTOK               NEW
824 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
825
826 Noteworthy changes in version 0.3.7 (2002-06-04)
827 ------------------------------------------------
828
829  * GPGME_ATTR_OTRUST is implemented now.
830
831  * A first step toward thread safeness has been achieved, see the
832    documentation for details.  Supported thread libraries are pthread
833    and Pth.
834
835 Noteworthy changes in version 0.3.6 (2002-05-03)
836 ------------------------------------------------
837
838  * All error output of the gpgsm backend is send to the bit bucket.
839
840  * The signature verification functions are extended.  Instead of
841    always returning GPGME_SIG_STATUS_GOOD, the functions new codes for
842    expired signatures.  2 new functions may be used to retrieve more
843    detailed information like the signature expiration time and a
844    validity information of the key without an extra key looking.
845
846  * The current passphrase callback and progress meter callback can be
847    retrieved with the new functions gpgme_get_passphrase_cb and
848    gpgme_get_progress_cb respectively.
849
850  * Interface changes relative to the 0.3.5 release:
851 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
852 gpgme_get_passphrase_cb         NEW
853 gpgme_get_progress_cb           NEW
854 GpgmeDataEncoding               NEW
855 gpgme_data_set_encoding         NEW
856 gpgme_data_get_encoding         NEW
857 GPGME_SIG_STAT_GOOD_EXP         NEW
858 GPGME_SIG_STAT_GOOD_EXPKEY      NEW
859 gpgme_op_verify                 CHANGED: Returns more status codes.
860 GPGME_ATTR_SIG_STATUS           NEW
861 gpgme_get_sig_string_attr       NEW
862 gpgme_get_sig_ulong_attr        NEW
863 gpgme_get_protocol              NEW
864 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
865
866 Noteworthy changes in version 0.3.5 (2002-04-01)
867 ------------------------------------------------
868
869  * gpgme_op_encrypt can be called with RECIPIENTS being 0.  In this
870    case, symmetric encryption is performed.  Note that this requires a
871    passphrase from the user.
872
873  * More information is returned for X.509 certificates.
874
875  * Interface changes relative to the 0.3.4 release:
876 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
877 gpgme_op_encrypt                EXTENDED: Symmetric encryption possible
878 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
879
880 Noteworthy changes in version 0.3.4 (2002-03-04)
881 ------------------------------------------------
882
883  * gpgme_op_encrypt does now fail with GPGME_Invalid_Recipients if
884    some recipients have been invalid, whereas earlier versions
885    succeeded in this case.  The plaintext is still encrypted for all valid
886    recipients, so the application might take this error as a hint that
887    the ciphertext is not usable for all requested recipients.
888    Information about invalid recipients is available with gpgme_get_op_info.
889
890  * gpgme_op_verify now allows to pass an uninitialized data object as
891    its plaintext argument to check for normal and cleartext
892    signatures.  The plaintext is then returned in the data object.
893
894  * New interfaces gpgme_set_include_certs and gpgme_get_include_certs
895    to set and get the number of certifications to include in S/MIME
896    signed messages.
897
898  * New interfaces gpgme_op_encrypt_sign and gpgme_op_encrypt_sign_start
899    to encrypt and sign a message in a combined operation.
900
901  * New interface gpgme_op_keylist_ext_start to search for multiple patterns.
902
903  * gpgme_key_get_ulong_attr supports the GPGME_ATTR_EXPIRE attribute.
904
905  * Interface changes relative to the 0.3.3 release:
906 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
907 gpgme_op_encrypt                CHANGED: Can fail with GPGME_Invalid_Recipients
908 gpgme_op_verify                 EXTENDED: Accepts uninitialized text argument
909 gpgme_key_get_ulong_attr        EXTENDED: Supports GPGME_ATTR_EXPIRE
910 gpgme_set_include_certs         NEW
911 gpgme_get_include_certs         NEW
912 gpgme_op_encrypt_sign           NEW
913 gpgme_op_encrypt_sign_start     NEW
914 gpgme_op_keylist_ext_start      NEW
915 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
916
917 Noteworthy changes in version 0.3.3 (2002-02-12)
918 ------------------------------------------------
919
920  * Fix the Makefile in jnlib.
921
922  * Fix the test suite (hopefully).  It should clean up all its state
923    with `make check' now.
924
925
926 Noteworthy changes in version 0.3.2 (2002-02-10)
927 ------------------------------------------------
928
929  * Remove erroneous dependency on libgcrypt in jnlib.
930
931
932 Noteworthy changes in version 0.3.1 (2002-02-09)
933 ------------------------------------------------
934
935  * There is a Texinfo manual documenting the API.
936
937  * The gpgme_set_keylist_mode function returns an error, and changed
938    its meaning.  It is no longer usable to select between normal and
939    fast mode (newer versions of GnuPG will always be fast), but
940    selects between local keyring, remote keyserver, or both.
941    For this, two new macros are defined, GPGME_KEYLIST_MODE_LOCAL
942    and GPGME_KEYLIST_MODE_EXTERN.  To make it possible to modify the
943    current setting, a fucntion gpgme_get_keylist_mode was added to
944    retrieve the current mode.
945
946  * gpgme_wait accepts a new argument STATUS to return the error status
947    of the operation on the context.  Its definition is closer to
948    waitpid() now than before.
949
950  * The LENGTH argument to gpgme_data_new_from_filepart changed its
951    type from off_t to the unsigned size_t.
952
953  * The R_HD argument to the GpgmePassphraseCb type changed its type
954    from void* to void**.
955
956  * New interface gpgme_op_trustlist_end() to match
957    gpgme_op_keylist_end().
958
959  * The CryptPlug modules have been renamed to gpgme-openpgp and
960    gpgme-smime, and they are installed in pkglibdir by `make install'.
961
962  * An idle function can be registered with gpgme_register_idle().
963
964  * The GpgSM backend supports key generation with gpgme_op_genkey().
965
966  * Interface changes relative to the 0.3.0 release:
967 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
968 gpgme_data_new_from_filepart    CHANGED: Type of LENGTH is size_t.
969 GpgmePassphraseCb               CHANGED: Type of R_HD is void **.
970 gpgme_wait                      CHANGED: New argument STATUS.
971 gpgme_set_keylist_mode          CHANGED: Type of return value is GpgmeError.
972                                 The function has a new meaning!
973 gpgme_get_keylist_mode          NEW
974 GPGME_KEYLIST_MODE_LOCAL        NEW
975 GPGME_KEYLIST_MODE_EXTERN       NEW
976 gpgme_op_trustlist_next         NEW
977 GpgmeIdleFunc                   NEW
978 gpgme_register_idle             NEW
979 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
980
981 Noteworthy changes in version 0.3.0 (2001-12-19)
982 ------------------------------------------------
983  
984  * New interface gpgme_set_protocol() to set the protocol and thus the
985    crypto engine to be used by the context.  Currently, the OpenPGP
986    and the CMS protocols are supported.  They are specified by the new
987    preprocessor symbols GPGME_PROTOCOL_OpenPGP and GPGME_PROTOCOL_CMS.
988    A new context uses the OpenPGP engine by default.
989
990  * gpgme_get_engine_info() returns information for all crypto engines
991    compiled into the library.  The XML format has changed.  To
992    reliably get the version of a crypto engine, the <version> tag
993    after the appropriate <protocol> tag has to be looked for.
994
995  * New interface gpgme_engine_check_version(), obsoleting
996    gpgme_check_engine().  Check the version of all engines you are
997    supporting in your software.
998
999  * GpgmeKey lists the user ids in the order as they are returned by
1000    GnuPG, first the primary key with index 0, then the sub-user ids.
1001
1002  * New operation gpgme_op_decrypt_verify() to decrypt and verify
1003    signatures simultaneously.
1004
1005  * The new interface gpgme_op_keylist_end() terminates a pending
1006    keylist operation.  A keylist operation is also terminated when
1007    gpgme_op_keylist_next() returns GPGME_EOF.
1008
1009  * GPGME can be compiled without GnuPG being installed (`--with-gpg=PATH'),
1010    cross-compiled, or even compiled without support for GnuPG
1011    (`--without-gpg').
1012
1013  * GPGME can be compiled with support for GpgSM (GnuPG for S/MIME,
1014    `--with-gpgsm=PATH').  It is enabled by default if the `gpgsm' is found
1015    in the path, but it can also be compiled without support for GpgSM
1016    (`--without-gpgsm').
1017
1018  * CryptPlug modules for GPGME are included and can be enabled at
1019    configure time (`--enable-gpgmeplug').  There is one module which
1020    uses the GnuPG engine (`gpgmeplug') and one module which uses the
1021    GpgSM engine (`gpgsmplug').
1022
1023  * Interface changes relative to the latest 0.2.x release:
1024 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1025 gpgme_key_get_as_xml            CHANGED: Sub-user ids reversed in order.
1026 gpgme_key_get_string_attr       CHANGED: User ids reversed in order.
1027 gpgme_key_get_ulong_attr        CHANGED: User ids reversed in order.
1028 gpgme_get_engine_info           CHANGED: New format, extended content.
1029 gpgme_engine_check_version      NEW
1030 gpgme_decrypt_verify_start      NEW
1031 gpgme_decrypt_verify            NEW
1032 gpgme_op_keylist_next           NEW
1033 gpgme_set_protocol              NEW
1034 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1035
1036
1037 Noteworthy changes in version 0.2.3 (2001-09-17)
1038 ------------------------------------------------
1039
1040  * New function gpgme_get_op_info which can be used to get the micalg
1041    parameter needed for MOSS.
1042
1043  * New functions gpgme_get_armor and gpgme_get_textmode.
1044
1045  * The usual bug fixes and some minor functionality improvements.
1046
1047  * Added a simple encryption component for MS-Windows; however the
1048    build procedure might have some problems.
1049
1050
1051 Noteworthy changes in version 0.2.2 (2001-06-12)
1052 ------------------------------------------------
1053  
1054  * Implemented a key cache.
1055
1056  * Fixed a race condition under W32 and some other bug fixes.
1057
1058
1059 Noteworthy changes in version 0.2.1 (2001-04-02)
1060 ------------------------------------------------
1061
1062  * Changed debug output and GPGME_DEBUG variable (gpgme/debug.c)
1063
1064  * Handle GnuPG's new key capabilities output and support revocation
1065    et al. attributes
1066
1067  * Made the W32 support more robust.
1068
1069
1070  Copyright 2001, 2002, 2003, 2004 g10 Code GmbH
1071
1072  This file is free software; as a special exception the author gives
1073  unlimited permission to copy and/or distribute it, with or without
1074  modifications, as long as this notice is preserved.
1075
1076  This file is distributed in the hope that it will be useful, but
1077  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1078  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.