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