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