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