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