core: Set notation flags for verify.
[gpgme.git] / src / gpgme.h.in
1 /* gpgme.h - Public interface to GnuPG Made Easy.                   -*- c -*-
2  * Copyright (C) 2000 Werner Koch (dd9jn)
3  * Copyright (C) 2001-2015 g10 Code GmbH
4  *
5  * This file is part of GPGME.
6  *
7  * GPGME is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU Lesser General Public License as
9  * published by the Free Software Foundation; either version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * GPGME is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
19  *
20  * Generated from gpgme.h.in for @GPGME_CONFIG_HOST@.
21  */
22
23 #ifndef GPGME_H
24 #define GPGME_H
25
26 /* Include stdio.h for the FILE type definition.  */
27 #include <stdio.h>
28 #include <time.h>
29 #include <gpg-error.h>
30
31 #ifdef __cplusplus
32 extern "C" {
33 #if 0 /*(Make Emacsen's auto-indent happy.)*/
34 }
35 #endif
36 #endif /* __cplusplus */
37
38
39 /* The version of this header should match the one of the library.  Do
40    not use this symbol in your application, use gpgme_check_version
41    instead.  The purpose of this macro is to let autoconf (using the
42    AM_PATH_GPGME macro) check that this header matches the installed
43    library.  */
44 #define GPGME_VERSION "@PACKAGE_VERSION@"
45
46 /* The version number of this header.  It may be used to handle minor
47    API incompatibilities.  */
48 #define GPGME_VERSION_NUMBER @VERSION_NUMBER@
49
50
51 /* System specific typedefs.  */
52 @INSERT__TYPEDEFS_FOR_GPGME_H@
53
54
55 \f
56 /*
57  * Check for compiler features.
58  */
59 #ifdef GPGRT_INLINE
60 # define _GPGME_INLINE GPGRT_INLINE
61 #elif defined(__GNUC__)
62 # define _GPGME_INLINE __inline__
63 #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
64 # define _GPGME_INLINE inline
65 #else
66 # define _GPGME_INLINE
67 #endif
68
69
70 #ifdef GPGRT_ATTR_DEPRECATED
71 # define _GPGME_DEPRECATED GPGRT_ATTR_DEPRECATED
72 #elif defined(__GNUC__)
73 # define _GPGME_GCC_VERSION (__GNUC__ * 10000 \
74                              + __GNUC_MINOR__ * 100 \
75                              + __GNUC_PATCHLEVEL__)
76
77 # if _GPGME_GCC_VERSION > 30100
78 #  define _GPGME_DEPRECATED  __attribute__ ((__deprecated__))
79 # else
80 #  define _GPGME_DEPRECATED
81 # endif
82 #else
83 # define _GPGME_DEPRECATED
84 #endif
85
86
87 /* The macro _GPGME_DEPRECATED_OUTSIDE_GPGME suppresses warnings for
88    fields we must access in GPGME for ABI compatibility.  */
89 #ifdef _GPGME_IN_GPGME
90 #define _GPGME_DEPRECATED_OUTSIDE_GPGME
91 #else
92 #define _GPGME_DEPRECATED_OUTSIDE_GPGME _GPGME_DEPRECATED
93 #endif
94
95
96 /* Check for a matching _FILE_OFFSET_BITS definition.  */
97 #if @NEED__FILE_OFFSET_BITS@
98 #ifndef _FILE_OFFSET_BITS
99 #error GPGME was compiled with _FILE_OFFSET_BITS = @NEED__FILE_OFFSET_BITS@, please see the section "Largefile support (LFS)" in the GPGME manual.
100 #else
101 #if (_FILE_OFFSET_BITS) != (@NEED__FILE_OFFSET_BITS@)
102 #error GPGME was compiled with a different value for _FILE_OFFSET_BITS, namely @NEED__FILE_OFFSET_BITS@, please see the section "Largefile support (LFS)" in the GPGME manual.
103 #endif
104 #endif
105 #endif
106
107
108 \f
109 /*
110  * Some opaque data types used by GPGME.
111  */
112
113 /* The context holds some global state and configuration options, as
114    well as the results of a crypto operation.  */
115 struct gpgme_context;
116 typedef struct gpgme_context *gpgme_ctx_t;
117
118 /* The data object is used by GPGME to exchange arbitrary data.  */
119 struct gpgme_data;
120 typedef struct gpgme_data *gpgme_data_t;
121
122
123 \f
124 /*
125  * Wrappers for the libgpg-error library.
126  */
127
128 typedef gpg_error_t gpgme_error_t;
129 typedef gpg_err_code_t gpgme_err_code_t;
130 typedef gpg_err_source_t gpgme_err_source_t;
131
132
133 static _GPGME_INLINE gpgme_error_t
134 gpgme_err_make (gpgme_err_source_t source, gpgme_err_code_t code)
135 {
136   return gpg_err_make (source, code);
137 }
138
139
140 /* The user can define GPGME_ERR_SOURCE_DEFAULT before including this
141    file to specify a default source for gpgme_error.  */
142 #ifndef GPGME_ERR_SOURCE_DEFAULT
143 #define GPGME_ERR_SOURCE_DEFAULT  GPG_ERR_SOURCE_USER_1
144 #endif
145
146 static _GPGME_INLINE gpgme_error_t
147 gpgme_error (gpgme_err_code_t code)
148 {
149   return gpgme_err_make (GPGME_ERR_SOURCE_DEFAULT, code);
150 }
151
152
153 static _GPGME_INLINE gpgme_err_code_t
154 gpgme_err_code (gpgme_error_t err)
155 {
156   return gpg_err_code (err);
157 }
158
159
160 static _GPGME_INLINE gpgme_err_source_t
161 gpgme_err_source (gpgme_error_t err)
162 {
163   return gpg_err_source (err);
164 }
165
166
167 /* Return a pointer to a string containing a description of the error
168    code in the error value ERR.  This function is not thread safe.  */
169 const char *gpgme_strerror (gpgme_error_t err);
170
171 /* Return the error string for ERR in the user-supplied buffer BUF of
172    size BUFLEN.  This function is, in contrast to gpg_strerror,
173    thread-safe if a thread-safe strerror_r() function is provided by
174    the system.  If the function succeeds, 0 is returned and BUF
175    contains the string describing the error.  If the buffer was not
176    large enough, ERANGE is returned and BUF contains as much of the
177    beginning of the error string as fits into the buffer.  */
178 int gpgme_strerror_r (gpg_error_t err, char *buf, size_t buflen);
179
180 /* Return a pointer to a string containing a description of the error
181    source in the error value ERR.  */
182 const char *gpgme_strsource (gpgme_error_t err);
183
184 /* Retrieve the error code for the system error ERR.  This returns
185    GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped (report
186    this).  */
187 gpgme_err_code_t gpgme_err_code_from_errno (int err);
188
189 /* Retrieve the system error for the error code CODE.  This returns 0
190    if CODE is not a system error code.  */
191 int gpgme_err_code_to_errno (gpgme_err_code_t code);
192
193 /* Retrieve the error code directly from the ERRNO variable.  This
194    returns GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped
195    (report this) and GPG_ERR_MISSING_ERRNO if ERRNO has the value 0. */
196 gpgme_err_code_t gpgme_err_code_from_syserror (void);
197
198 /* Set the ERRNO variable.  This function is the preferred way to set
199    ERRNO due to peculiarities on WindowsCE.  */
200 void gpgme_err_set_errno (int err);
201
202 /* Return an error value with the error source SOURCE and the system
203    error ERR.  FIXME: Should be inline.  */
204 gpgme_error_t gpgme_err_make_from_errno (gpgme_err_source_t source, int err);
205
206 /* Return an error value with the system error ERR.  FIXME: Should be inline.  */
207 gpgme_error_t gpgme_error_from_errno (int err);
208
209
210 static _GPGME_INLINE gpgme_error_t
211 gpgme_error_from_syserror (void)
212 {
213   return gpgme_error (gpgme_err_code_from_syserror ());
214 }
215
216
217 \f
218 /*
219  * Various constants and types
220  */
221
222 /* The possible encoding mode of gpgme_data_t objects.  */
223 typedef enum
224   {
225     GPGME_DATA_ENCODING_NONE   = 0,     /* Not specified.  */
226     GPGME_DATA_ENCODING_BINARY = 1,
227     GPGME_DATA_ENCODING_BASE64 = 2,
228     GPGME_DATA_ENCODING_ARMOR  = 3,     /* Either PEM or OpenPGP Armor.  */
229     GPGME_DATA_ENCODING_URL    = 4,     /* LF delimited URL list.        */
230     GPGME_DATA_ENCODING_URLESC = 5,     /* Ditto, but percent escaped.   */
231     GPGME_DATA_ENCODING_URL0   = 6      /* Nul delimited URL list.       */
232   }
233 gpgme_data_encoding_t;
234
235
236 /* Known data types.  */
237 typedef enum
238   {
239     GPGME_DATA_TYPE_INVALID      = 0,   /* Not detected.  */
240     GPGME_DATA_TYPE_UNKNOWN      = 1,
241     GPGME_DATA_TYPE_PGP_SIGNED   = 0x10,
242     GPGME_DATA_TYPE_PGP_OTHER    = 0x12,
243     GPGME_DATA_TYPE_PGP_KEY      = 0x13,
244     GPGME_DATA_TYPE_CMS_SIGNED   = 0x20,
245     GPGME_DATA_TYPE_CMS_ENCRYPTED= 0x21,
246     GPGME_DATA_TYPE_CMS_OTHER    = 0x22,
247     GPGME_DATA_TYPE_X509_CERT    = 0x23,
248     GPGME_DATA_TYPE_PKCS12       = 0x24,
249   }
250 gpgme_data_type_t;
251
252
253 /* Public key algorithms.  */
254 typedef enum
255   {
256     GPGME_PK_RSA   = 1,
257     GPGME_PK_RSA_E = 2,
258     GPGME_PK_RSA_S = 3,
259     GPGME_PK_ELG_E = 16,
260     GPGME_PK_DSA   = 17,
261     GPGME_PK_ECC   = 18,
262     GPGME_PK_ELG   = 20,
263     GPGME_PK_ECDSA = 301,
264     GPGME_PK_ECDH  = 302,
265     GPGME_PK_EDDSA = 303
266   }
267 gpgme_pubkey_algo_t;
268
269
270 /* Hash algorithms (the values match those from libgcrypt).  */
271 typedef enum
272   {
273     GPGME_MD_NONE          = 0,
274     GPGME_MD_MD5           = 1,
275     GPGME_MD_SHA1          = 2,
276     GPGME_MD_RMD160        = 3,
277     GPGME_MD_MD2           = 5,
278     GPGME_MD_TIGER         = 6,   /* TIGER/192. */
279     GPGME_MD_HAVAL         = 7,   /* HAVAL, 5 pass, 160 bit. */
280     GPGME_MD_SHA256        = 8,
281     GPGME_MD_SHA384        = 9,
282     GPGME_MD_SHA512        = 10,
283     GPGME_MD_SHA224        = 11,
284     GPGME_MD_MD4           = 301,
285     GPGME_MD_CRC32         = 302,
286     GPGME_MD_CRC32_RFC1510 = 303,
287     GPGME_MD_CRC24_RFC2440 = 304
288   }
289 gpgme_hash_algo_t;
290
291
292 /* The possible signature stati.  Deprecated, use error value in sig
293    status.  */
294 typedef enum
295   {
296     GPGME_SIG_STAT_NONE  = 0,
297     GPGME_SIG_STAT_GOOD  = 1,
298     GPGME_SIG_STAT_BAD   = 2,
299     GPGME_SIG_STAT_NOKEY = 3,
300     GPGME_SIG_STAT_NOSIG = 4,
301     GPGME_SIG_STAT_ERROR = 5,
302     GPGME_SIG_STAT_DIFF  = 6,
303     GPGME_SIG_STAT_GOOD_EXP = 7,
304     GPGME_SIG_STAT_GOOD_EXPKEY = 8
305   }
306 _gpgme_sig_stat_t;
307 typedef _gpgme_sig_stat_t gpgme_sig_stat_t _GPGME_DEPRECATED;
308
309
310 /* The available signature modes.  */
311 typedef enum
312   {
313     GPGME_SIG_MODE_NORMAL = 0,
314     GPGME_SIG_MODE_DETACH = 1,
315     GPGME_SIG_MODE_CLEAR  = 2
316   }
317 gpgme_sig_mode_t;
318
319
320 /* The available key and signature attributes.  Deprecated, use the
321    individual result structures instead.  */
322 typedef enum
323   {
324     GPGME_ATTR_KEYID        = 1,
325     GPGME_ATTR_FPR          = 2,
326     GPGME_ATTR_ALGO         = 3,
327     GPGME_ATTR_LEN          = 4,
328     GPGME_ATTR_CREATED      = 5,
329     GPGME_ATTR_EXPIRE       = 6,
330     GPGME_ATTR_OTRUST       = 7,
331     GPGME_ATTR_USERID       = 8,
332     GPGME_ATTR_NAME         = 9,
333     GPGME_ATTR_EMAIL        = 10,
334     GPGME_ATTR_COMMENT      = 11,
335     GPGME_ATTR_VALIDITY     = 12,
336     GPGME_ATTR_LEVEL        = 13,
337     GPGME_ATTR_TYPE         = 14,
338     GPGME_ATTR_IS_SECRET    = 15,
339     GPGME_ATTR_KEY_REVOKED  = 16,
340     GPGME_ATTR_KEY_INVALID  = 17,
341     GPGME_ATTR_UID_REVOKED  = 18,
342     GPGME_ATTR_UID_INVALID  = 19,
343     GPGME_ATTR_KEY_CAPS     = 20,
344     GPGME_ATTR_CAN_ENCRYPT  = 21,
345     GPGME_ATTR_CAN_SIGN     = 22,
346     GPGME_ATTR_CAN_CERTIFY  = 23,
347     GPGME_ATTR_KEY_EXPIRED  = 24,
348     GPGME_ATTR_KEY_DISABLED = 25,
349     GPGME_ATTR_SERIAL       = 26,
350     GPGME_ATTR_ISSUER       = 27,
351     GPGME_ATTR_CHAINID      = 28,
352     GPGME_ATTR_SIG_STATUS   = 29,
353     GPGME_ATTR_ERRTOK       = 30,
354     GPGME_ATTR_SIG_SUMMARY  = 31,
355     GPGME_ATTR_SIG_CLASS    = 32
356   }
357 _gpgme_attr_t;
358 typedef _gpgme_attr_t gpgme_attr_t _GPGME_DEPRECATED;
359
360
361 /* The available validities for a trust item or key.  */
362 typedef enum
363   {
364     GPGME_VALIDITY_UNKNOWN   = 0,
365     GPGME_VALIDITY_UNDEFINED = 1,
366     GPGME_VALIDITY_NEVER     = 2,
367     GPGME_VALIDITY_MARGINAL  = 3,
368     GPGME_VALIDITY_FULL      = 4,
369     GPGME_VALIDITY_ULTIMATE  = 5
370   }
371 gpgme_validity_t;
372
373
374 /* The TOFU policies. */
375 typedef enum
376   {
377     GPGME_TOFU_POLICY_NONE    = 0,
378     GPGME_TOFU_POLICY_AUTO    = 1,
379     GPGME_TOFU_POLICY_GOOD    = 2,
380     GPGME_TOFU_POLICY_UNKNOWN = 3,
381     GPGME_TOFU_POLICY_BAD     = 4,
382     GPGME_TOFU_POLICY_ASK     = 5
383   }
384 gpgme_tofu_policy_t;
385
386
387 /* The available protocols.  */
388 typedef enum
389   {
390     GPGME_PROTOCOL_OpenPGP = 0,  /* The default mode.  */
391     GPGME_PROTOCOL_CMS     = 1,
392     GPGME_PROTOCOL_GPGCONF = 2,  /* Special code for gpgconf.  */
393     GPGME_PROTOCOL_ASSUAN  = 3,  /* Low-level access to an Assuan server.  */
394     GPGME_PROTOCOL_G13     = 4,
395     GPGME_PROTOCOL_UISERVER= 5,
396     GPGME_PROTOCOL_SPAWN   = 6,  /* Direct access to any program.  */
397     GPGME_PROTOCOL_DEFAULT = 254,
398     GPGME_PROTOCOL_UNKNOWN = 255
399   }
400 gpgme_protocol_t;
401 /* Convenience macro for the surprisingly mixed spelling.  */
402 #define GPGME_PROTOCOL_OPENPGP GPGME_PROTOCOL_OpenPGP
403
404
405 /* The available keylist mode flags.  */
406 #define GPGME_KEYLIST_MODE_LOCAL                1
407 #define GPGME_KEYLIST_MODE_EXTERN               2
408 #define GPGME_KEYLIST_MODE_SIGS                 4
409 #define GPGME_KEYLIST_MODE_SIG_NOTATIONS        8
410 #define GPGME_KEYLIST_MODE_WITH_SECRET          16
411 #define GPGME_KEYLIST_MODE_EPHEMERAL            128
412 #define GPGME_KEYLIST_MODE_VALIDATE             256
413
414 typedef unsigned int gpgme_keylist_mode_t;
415
416
417 /* The pinentry modes. */
418 typedef enum
419   {
420     GPGME_PINENTRY_MODE_DEFAULT  = 0,
421     GPGME_PINENTRY_MODE_ASK      = 1,
422     GPGME_PINENTRY_MODE_CANCEL   = 2,
423     GPGME_PINENTRY_MODE_ERROR    = 3,
424     GPGME_PINENTRY_MODE_LOOPBACK = 4
425   }
426 gpgme_pinentry_mode_t;
427
428
429 /* The available export mode flags.  */
430 #define GPGME_EXPORT_MODE_EXTERN                2
431 #define GPGME_EXPORT_MODE_MINIMAL               4
432 #define GPGME_EXPORT_MODE_SECRET               16
433 #define GPGME_EXPORT_MODE_RAW                  32
434 #define GPGME_EXPORT_MODE_PKCS12               64
435
436 typedef unsigned int gpgme_export_mode_t;
437
438
439 /* Flags for the audit log functions.  */
440 #define GPGME_AUDITLOG_HTML      1
441 #define GPGME_AUDITLOG_WITH_HELP 128
442
443 /* The possible stati for the edit operation.  */
444 typedef enum
445   {
446     GPGME_STATUS_EOF = 0,
447     /* mkstatus processing starts here */
448     GPGME_STATUS_ENTER = 1,
449     GPGME_STATUS_LEAVE = 2,
450     GPGME_STATUS_ABORT = 3,
451
452     GPGME_STATUS_GOODSIG = 4,
453     GPGME_STATUS_BADSIG = 5,
454     GPGME_STATUS_ERRSIG = 6,
455
456     GPGME_STATUS_BADARMOR = 7,
457
458     GPGME_STATUS_RSA_OR_IDEA = 8,      /* (legacy) */
459     GPGME_STATUS_KEYEXPIRED = 9,
460     GPGME_STATUS_KEYREVOKED = 10,
461
462     GPGME_STATUS_TRUST_UNDEFINED = 11,
463     GPGME_STATUS_TRUST_NEVER = 12,
464     GPGME_STATUS_TRUST_MARGINAL = 13,
465     GPGME_STATUS_TRUST_FULLY = 14,
466     GPGME_STATUS_TRUST_ULTIMATE = 15,
467
468     GPGME_STATUS_SHM_INFO = 16,        /* (legacy) */
469     GPGME_STATUS_SHM_GET = 17,         /* (legacy) */
470     GPGME_STATUS_SHM_GET_BOOL = 18,    /* (legacy) */
471     GPGME_STATUS_SHM_GET_HIDDEN = 19,  /* (legacy) */
472
473     GPGME_STATUS_NEED_PASSPHRASE = 20,
474     GPGME_STATUS_VALIDSIG = 21,
475     GPGME_STATUS_SIG_ID = 22,
476     GPGME_STATUS_ENC_TO = 23,
477     GPGME_STATUS_NODATA = 24,
478     GPGME_STATUS_BAD_PASSPHRASE = 25,
479     GPGME_STATUS_NO_PUBKEY = 26,
480     GPGME_STATUS_NO_SECKEY = 27,
481     GPGME_STATUS_NEED_PASSPHRASE_SYM = 28,
482     GPGME_STATUS_DECRYPTION_FAILED = 29,
483     GPGME_STATUS_DECRYPTION_OKAY = 30,
484     GPGME_STATUS_MISSING_PASSPHRASE = 31,
485     GPGME_STATUS_GOOD_PASSPHRASE = 32,
486     GPGME_STATUS_GOODMDC = 33,
487     GPGME_STATUS_BADMDC = 34,
488     GPGME_STATUS_ERRMDC = 35,
489     GPGME_STATUS_IMPORTED = 36,
490     GPGME_STATUS_IMPORT_OK = 37,
491     GPGME_STATUS_IMPORT_PROBLEM = 38,
492     GPGME_STATUS_IMPORT_RES = 39,
493     GPGME_STATUS_FILE_START = 40,
494     GPGME_STATUS_FILE_DONE = 41,
495     GPGME_STATUS_FILE_ERROR = 42,
496
497     GPGME_STATUS_BEGIN_DECRYPTION = 43,
498     GPGME_STATUS_END_DECRYPTION = 44,
499     GPGME_STATUS_BEGIN_ENCRYPTION = 45,
500     GPGME_STATUS_END_ENCRYPTION = 46,
501
502     GPGME_STATUS_DELETE_PROBLEM = 47,
503     GPGME_STATUS_GET_BOOL = 48,
504     GPGME_STATUS_GET_LINE = 49,
505     GPGME_STATUS_GET_HIDDEN = 50,
506     GPGME_STATUS_GOT_IT = 51,
507     GPGME_STATUS_PROGRESS = 52,
508     GPGME_STATUS_SIG_CREATED = 53,
509     GPGME_STATUS_SESSION_KEY = 54,
510     GPGME_STATUS_NOTATION_NAME = 55,
511     GPGME_STATUS_NOTATION_DATA = 56,
512     GPGME_STATUS_POLICY_URL = 57,
513     GPGME_STATUS_BEGIN_STREAM = 58,    /* (legacy) */
514     GPGME_STATUS_END_STREAM = 59,      /* (legacy) */
515     GPGME_STATUS_KEY_CREATED = 60,
516     GPGME_STATUS_USERID_HINT = 61,
517     GPGME_STATUS_UNEXPECTED = 62,
518     GPGME_STATUS_INV_RECP = 63,
519     GPGME_STATUS_NO_RECP = 64,
520     GPGME_STATUS_ALREADY_SIGNED = 65,
521     GPGME_STATUS_SIGEXPIRED = 66,      /* (legacy) */
522     GPGME_STATUS_EXPSIG = 67,
523     GPGME_STATUS_EXPKEYSIG = 68,
524     GPGME_STATUS_TRUNCATED = 69,
525     GPGME_STATUS_ERROR = 70,
526     GPGME_STATUS_NEWSIG = 71,
527     GPGME_STATUS_REVKEYSIG = 72,
528     GPGME_STATUS_SIG_SUBPACKET = 73,
529     GPGME_STATUS_NEED_PASSPHRASE_PIN = 74,
530     GPGME_STATUS_SC_OP_FAILURE = 75,
531     GPGME_STATUS_SC_OP_SUCCESS = 76,
532     GPGME_STATUS_CARDCTRL = 77,
533     GPGME_STATUS_BACKUP_KEY_CREATED = 78,
534     GPGME_STATUS_PKA_TRUST_BAD = 79,
535     GPGME_STATUS_PKA_TRUST_GOOD = 80,
536     GPGME_STATUS_PLAINTEXT = 81,
537     GPGME_STATUS_INV_SGNR = 82,
538     GPGME_STATUS_NO_SGNR = 83,
539     GPGME_STATUS_SUCCESS = 84,
540     GPGME_STATUS_DECRYPTION_INFO = 85,
541     GPGME_STATUS_PLAINTEXT_LENGTH = 86,
542     GPGME_STATUS_MOUNTPOINT = 87,
543     GPGME_STATUS_PINENTRY_LAUNCHED = 88,
544     GPGME_STATUS_ATTRIBUTE = 89,
545     GPGME_STATUS_BEGIN_SIGNING = 90,
546     GPGME_STATUS_KEY_NOT_CREATED = 91,
547     GPGME_STATUS_INQUIRE_MAXLEN = 92,
548     GPGME_STATUS_FAILURE = 93,
549     GPGME_STATUS_KEY_CONSIDERED = 94,
550     GPGME_STATUS_TOFU_USER = 95,
551     GPGME_STATUS_TOFU_STATS = 96,
552     GPGME_STATUS_TOFU_STATS_LONG = 97,
553     GPGME_STATUS_NOTATION_FLAGS = 98
554   }
555 gpgme_status_code_t;
556
557
558 /* The available signature notation flags.  */
559 #define GPGME_SIG_NOTATION_HUMAN_READABLE       1
560 #define GPGME_SIG_NOTATION_CRITICAL             2
561
562 typedef unsigned int gpgme_sig_notation_flags_t;
563
564 struct _gpgme_sig_notation
565 {
566   struct _gpgme_sig_notation *next;
567
568   /* If NAME is a null pointer, then VALUE contains a policy URL
569      rather than a notation.  */
570   char *name;
571
572   /* The value of the notation data.  */
573   char *value;
574
575   /* The length of the name of the notation data.  */
576   int name_len;
577
578   /* The length of the value of the notation data.  */
579   int value_len;
580
581   /* The accumulated flags.  */
582   gpgme_sig_notation_flags_t flags;
583
584   /* Notation data is human-readable.  */
585   unsigned int human_readable : 1;
586
587   /* Notation data is critical.  */
588   unsigned int critical : 1;
589
590   /* Internal to GPGME, do not use.  */
591   int _unused : 30;
592 };
593 typedef struct _gpgme_sig_notation *gpgme_sig_notation_t;
594
595
596 \f
597 /*
598  * Public structures.
599  */
600
601 /* The engine information structure.  */
602 struct _gpgme_engine_info
603 {
604   struct _gpgme_engine_info *next;
605
606   /* The protocol ID.  */
607   gpgme_protocol_t protocol;
608
609   /* The file name of the engine binary.  */
610   char *file_name;
611
612   /* The version string of the installed engine.  */
613   char *version;
614
615   /* The minimum version required for GPGME.  */
616   const char *req_version;
617
618   /* The home directory used, or NULL if default.  */
619   char *home_dir;
620 };
621 typedef struct _gpgme_engine_info *gpgme_engine_info_t;
622
623
624 /* A subkey from a key.  */
625 struct _gpgme_subkey
626 {
627   struct _gpgme_subkey *next;
628
629   /* True if subkey is revoked.  */
630   unsigned int revoked : 1;
631
632   /* True if subkey is expired.  */
633   unsigned int expired : 1;
634
635   /* True if subkey is disabled.  */
636   unsigned int disabled : 1;
637
638   /* True if subkey is invalid.  */
639   unsigned int invalid : 1;
640
641   /* True if subkey can be used for encryption.  */
642   unsigned int can_encrypt : 1;
643
644   /* True if subkey can be used for signing.  */
645   unsigned int can_sign : 1;
646
647   /* True if subkey can be used for certification.  */
648   unsigned int can_certify : 1;
649
650   /* True if subkey is secret.  */
651   unsigned int secret : 1;
652
653   /* True if subkey can be used for authentication.  */
654   unsigned int can_authenticate : 1;
655
656   /* True if subkey is qualified for signatures according to German law.  */
657   unsigned int is_qualified : 1;
658
659   /* True if the secret key is stored on a smart card.  */
660   unsigned int is_cardkey : 1;
661
662   /* Internal to GPGME, do not use.  */
663   unsigned int _unused : 21;
664
665   /* Public key algorithm supported by this subkey.  */
666   gpgme_pubkey_algo_t pubkey_algo;
667
668   /* Length of the subkey.  */
669   unsigned int length;
670
671   /* The key ID of the subkey.  */
672   char *keyid;
673
674   /* Internal to GPGME, do not use.  */
675   char _keyid[16 + 1];
676
677   /* The fingerprint of the subkey in hex digit form.  */
678   char *fpr;
679
680   /* The creation timestamp, -1 if invalid, 0 if not available.  */
681   long int timestamp;
682
683   /* The expiration timestamp, 0 if the subkey does not expire.  */
684   long int expires;
685
686   /* The serial number of a smart card holding this key or NULL.  */
687   char *card_number;
688
689   /* The name of the curve for ECC algorithms or NULL.  */
690   char *curve;
691 };
692 typedef struct _gpgme_subkey *gpgme_subkey_t;
693
694
695 /* A signature on a user ID.  */
696 struct _gpgme_key_sig
697 {
698   struct _gpgme_key_sig *next;
699
700   /* True if the signature is a revocation signature.  */
701   unsigned int revoked : 1;
702
703   /* True if the signature is expired.  */
704   unsigned int expired : 1;
705
706   /* True if the signature is invalid.  */
707   unsigned int invalid : 1;
708
709   /* True if the signature should be exported.  */
710   unsigned int exportable : 1;
711
712   /* Internal to GPGME, do not use.  */
713   unsigned int _unused : 28;
714
715   /* The public key algorithm used to create the signature.  */
716   gpgme_pubkey_algo_t pubkey_algo;
717
718   /* The key ID of key used to create the signature.  */
719   char *keyid;
720
721   /* Internal to GPGME, do not use.  */
722   char _keyid[16 + 1];
723
724   /* The creation timestamp, -1 if invalid, 0 if not available.  */
725   long int timestamp;
726
727   /* The expiration timestamp, 0 if the subkey does not expire.  */
728   long int expires;
729
730   /* Same as in gpgme_signature_t.  */
731   gpgme_error_t status;
732
733 #ifdef __cplusplus
734   unsigned int _obsolete_class _GPGME_DEPRECATED;
735 #else
736   /* Must be set to SIG_CLASS below.  */
737   unsigned int class _GPGME_DEPRECATED_OUTSIDE_GPGME;
738 #endif
739
740   /* The user ID string.  */
741   char *uid;
742
743   /* The name part of the user ID.  */
744   char *name;
745
746   /* The email part of the user ID.  */
747   char *email;
748
749   /* The comment part of the user ID.  */
750   char *comment;
751
752   /* Crypto backend specific signature class.  */
753   unsigned int sig_class;
754
755   /* Notation data and policy URLs.  */
756   gpgme_sig_notation_t notations;
757
758   /* Internal to GPGME, do not use.  */
759   gpgme_sig_notation_t _last_notation;
760 };
761 typedef struct _gpgme_key_sig *gpgme_key_sig_t;
762
763
764 /* An user ID from a key.  */
765 struct _gpgme_user_id
766 {
767   struct _gpgme_user_id *next;
768
769   /* True if the user ID is revoked.  */
770   unsigned int revoked : 1;
771
772   /* True if the user ID is invalid.  */
773   unsigned int invalid : 1;
774
775   /* Internal to GPGME, do not use.  */
776   unsigned int _unused : 30;
777
778   /* The validity of the user ID.  */
779   gpgme_validity_t validity;
780
781   /* The user ID string.  */
782   char *uid;
783
784   /* The name part of the user ID.  */
785   char *name;
786
787   /* The email part of the user ID.  */
788   char *email;
789
790   /* The comment part of the user ID.  */
791   char *comment;
792
793   /* The signatures of the user ID.  */
794   gpgme_key_sig_t signatures;
795
796   /* Internal to GPGME, do not use.  */
797   gpgme_key_sig_t _last_keysig;
798 };
799 typedef struct _gpgme_user_id *gpgme_user_id_t;
800
801
802 /* A key from the keyring.  */
803 struct _gpgme_key
804 {
805   /* Internal to GPGME, do not use.  */
806   unsigned int _refs;
807
808   /* True if key is revoked.  */
809   unsigned int revoked : 1;
810
811   /* True if key is expired.  */
812   unsigned int expired : 1;
813
814   /* True if key is disabled.  */
815   unsigned int disabled : 1;
816
817   /* True if key is invalid.  */
818   unsigned int invalid : 1;
819
820   /* True if key can be used for encryption.  */
821   unsigned int can_encrypt : 1;
822
823   /* True if key can be used for signing.  */
824   unsigned int can_sign : 1;
825
826   /* True if key can be used for certification.  */
827   unsigned int can_certify : 1;
828
829   /* True if key is secret.  */
830   unsigned int secret : 1;
831
832   /* True if key can be used for authentication.  */
833   unsigned int can_authenticate : 1;
834
835   /* True if subkey is qualified for signatures according to German law.  */
836   unsigned int is_qualified : 1;
837
838   /* Internal to GPGME, do not use.  */
839   unsigned int _unused : 22;
840
841   /* This is the protocol supported by this key.  */
842   gpgme_protocol_t protocol;
843
844   /* If protocol is GPGME_PROTOCOL_CMS, this string contains the
845      issuer serial.  */
846   char *issuer_serial;
847
848   /* If protocol is GPGME_PROTOCOL_CMS, this string contains the
849      issuer name.  */
850   char *issuer_name;
851
852   /* If protocol is GPGME_PROTOCOL_CMS, this string contains the chain
853      ID.  */
854   char *chain_id;
855
856   /* If protocol is GPGME_PROTOCOL_OpenPGP, this field contains the
857      owner trust.  */
858   gpgme_validity_t owner_trust;
859
860   /* The subkeys of the key.  */
861   gpgme_subkey_t subkeys;
862
863   /* The user IDs of the key.  */
864   gpgme_user_id_t uids;
865
866   /* Internal to GPGME, do not use.  */
867   gpgme_subkey_t _last_subkey;
868
869   /* Internal to GPGME, do not use.  */
870   gpgme_user_id_t _last_uid;
871
872   /* The keylist mode that was active when listing the key.  */
873   gpgme_keylist_mode_t keylist_mode;
874 };
875 typedef struct _gpgme_key *gpgme_key_t;
876
877
878 /* An invalid key object.  */
879 struct _gpgme_invalid_key
880 {
881   struct _gpgme_invalid_key *next;
882
883   /* The string used to request the key.  Despite the name this may
884    * not be a fingerprint.  */
885   char *fpr;
886
887   /* The error code.  */
888   gpgme_error_t reason;
889 };
890 typedef struct _gpgme_invalid_key *gpgme_invalid_key_t;
891
892
893 \f
894 /*
895  * Types for callback functions.
896  */
897
898 /* Request a passphrase from the user.  */
899 typedef gpgme_error_t (*gpgme_passphrase_cb_t) (void *hook,
900                                                 const char *uid_hint,
901                                                 const char *passphrase_info,
902                                                 int prev_was_bad, int fd);
903
904 /* Inform the user about progress made.  */
905 typedef void (*gpgme_progress_cb_t) (void *opaque, const char *what,
906                                      int type, int current, int total);
907
908 /* Status messages from gpg. */
909 typedef gpgme_error_t (*gpgme_status_cb_t) (void *opaque, const char *keyword,
910                                             const char *args);
911
912
913 /* Interact with the user about an edit operation.  */
914 typedef gpgme_error_t (*gpgme_edit_cb_t) (void *opaque,
915                                           gpgme_status_code_t status,
916                                           const char *args, int fd);
917
918
919
920 \f
921 /*
922  * Context management functions.
923  */
924
925 /* Create a new context and return it in CTX.  */
926 gpgme_error_t gpgme_new (gpgme_ctx_t *ctx);
927
928 /* Release the context CTX.  */
929 void gpgme_release (gpgme_ctx_t ctx);
930
931 /* Set the flag NAME for CTX to VALUE.  */
932 gpgme_error_t gpgme_set_ctx_flag (gpgme_ctx_t ctx,
933                                   const char *name, const char *value);
934
935 /* Set the protocol to be used by CTX to PROTO.  */
936 gpgme_error_t gpgme_set_protocol (gpgme_ctx_t ctx, gpgme_protocol_t proto);
937
938 /* Get the protocol used with CTX */
939 gpgme_protocol_t gpgme_get_protocol (gpgme_ctx_t ctx);
940
941 /* Set the crypto protocol to be used by CTX to PROTO.
942    gpgme_set_protocol actually sets the backend engine.  This sets the
943    crypto protocol used in engines that support more than one crypto
944    prococol (for example, an UISERVER can support OpenPGP and CMS).
945    This is reset to the default with gpgme_set_protocol.  */
946 gpgme_error_t gpgme_set_sub_protocol (gpgme_ctx_t ctx,
947                                       gpgme_protocol_t proto);
948
949 /* Get the sub protocol.  */
950 gpgme_protocol_t gpgme_get_sub_protocol (gpgme_ctx_t ctx);
951
952 /* Get the string describing protocol PROTO, or NULL if invalid.  */
953 const char *gpgme_get_protocol_name (gpgme_protocol_t proto);
954
955 /* If YES is non-zero, enable armor mode in CTX, disable it otherwise.  */
956 void gpgme_set_armor (gpgme_ctx_t ctx, int yes);
957
958 /* Return non-zero if armor mode is set in CTX.  */
959 int gpgme_get_armor (gpgme_ctx_t ctx);
960
961 /* If YES is non-zero, enable text mode in CTX, disable it otherwise.  */
962 void gpgme_set_textmode (gpgme_ctx_t ctx, int yes);
963
964 /* Return non-zero if text mode is set in CTX.  */
965 int gpgme_get_textmode (gpgme_ctx_t ctx);
966
967 /* If YES is non-zero, enable offline mode in CTX, disable it otherwise.  */
968 void gpgme_set_offline (gpgme_ctx_t ctx, int yes);
969
970 /* Return non-zero if offline mode is set in CTX.  */
971 int gpgme_get_offline (gpgme_ctx_t ctx);
972
973 /* Use whatever the default of the backend crypto engine is.  */
974 #define GPGME_INCLUDE_CERTS_DEFAULT     -256
975
976 /* Include up to NR_OF_CERTS certificates in an S/MIME message.  */
977 void gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs);
978
979 /* Return the number of certs to include in an S/MIME message.  */
980 int gpgme_get_include_certs (gpgme_ctx_t ctx);
981
982 /* Set keylist mode in CTX to MODE.  */
983 gpgme_error_t gpgme_set_keylist_mode (gpgme_ctx_t ctx,
984                                       gpgme_keylist_mode_t mode);
985
986 /* Get keylist mode in CTX.  */
987 gpgme_keylist_mode_t gpgme_get_keylist_mode (gpgme_ctx_t ctx);
988
989 /* Set the pinentry mode for CTX to MODE. */
990 gpgme_error_t gpgme_set_pinentry_mode (gpgme_ctx_t ctx,
991                                        gpgme_pinentry_mode_t mode);
992
993 /* Get the pinentry mode of CTX.  */
994 gpgme_pinentry_mode_t gpgme_get_pinentry_mode (gpgme_ctx_t ctx);
995
996 /* Set the passphrase callback function in CTX to CB.  HOOK_VALUE is
997    passed as first argument to the passphrase callback function.  */
998 void gpgme_set_passphrase_cb (gpgme_ctx_t ctx,
999                               gpgme_passphrase_cb_t cb, void *hook_value);
1000
1001 /* Get the current passphrase callback function in *CB and the current
1002    hook value in *HOOK_VALUE.  */
1003 void gpgme_get_passphrase_cb (gpgme_ctx_t ctx, gpgme_passphrase_cb_t *cb,
1004                               void **hook_value);
1005
1006 /* Set the progress callback function in CTX to CB.  HOOK_VALUE is
1007    passed as first argument to the progress callback function.  */
1008 void gpgme_set_progress_cb (gpgme_ctx_t c, gpgme_progress_cb_t cb,
1009                             void *hook_value);
1010
1011 /* Get the current progress callback function in *CB and the current
1012    hook value in *HOOK_VALUE.  */
1013 void gpgme_get_progress_cb (gpgme_ctx_t ctx, gpgme_progress_cb_t *cb,
1014                             void **hook_value);
1015
1016 /* Set the status callback function in CTX to CB.  HOOK_VALUE is
1017    passed as first argument to the status callback function.  */
1018 void gpgme_set_status_cb (gpgme_ctx_t c, gpgme_status_cb_t cb,
1019                           void *hook_value);
1020
1021 /* Get the current status callback function in *CB and the current
1022    hook value in *HOOK_VALUE.  */
1023 void gpgme_get_status_cb (gpgme_ctx_t ctx, gpgme_status_cb_t *cb,
1024                           void **hook_value);
1025
1026 /* This function sets the locale for the context CTX, or the default
1027    locale if CTX is a null pointer.  */
1028 gpgme_error_t gpgme_set_locale (gpgme_ctx_t ctx, int category,
1029                                 const char *value);
1030
1031 /* Get the information about the configured engines.  A pointer to the
1032    first engine in the statically allocated linked list is returned.
1033    The returned data is valid until the next gpgme_ctx_set_engine_info.  */
1034 gpgme_engine_info_t gpgme_ctx_get_engine_info (gpgme_ctx_t ctx);
1035
1036 /* Set the engine info for the context CTX, protocol PROTO, to the
1037    file name FILE_NAME and the home directory HOME_DIR.  */
1038 gpgme_error_t gpgme_ctx_set_engine_info (gpgme_ctx_t ctx,
1039                                          gpgme_protocol_t proto,
1040                                          const char *file_name,
1041                                          const char *home_dir);
1042
1043 /* Delete all signers from CTX.  */
1044 void gpgme_signers_clear (gpgme_ctx_t ctx);
1045
1046 /* Add KEY to list of signers in CTX.  */
1047 gpgme_error_t gpgme_signers_add (gpgme_ctx_t ctx, const gpgme_key_t key);
1048
1049 /* Return the number of signers in CTX.  */
1050 unsigned int gpgme_signers_count (const gpgme_ctx_t ctx);
1051
1052 /* Return the SEQth signer's key in CTX.  */
1053 gpgme_key_t gpgme_signers_enum (const gpgme_ctx_t ctx, int seq);
1054
1055 /* Retrieve the signature status of signature IDX in CTX after a
1056    successful verify operation in R_STAT (if non-null).  The creation
1057    time stamp of the signature is returned in R_CREATED (if non-null).
1058    The function returns a string containing the fingerprint.
1059    Deprecated, use verify result directly.  */
1060 const char *gpgme_get_sig_status (gpgme_ctx_t ctx, int idx,
1061                                   _gpgme_sig_stat_t *r_stat,
1062                                   time_t *r_created) _GPGME_DEPRECATED;
1063
1064 /* Retrieve certain attributes of a signature.  IDX is the index
1065    number of the signature after a successful verify operation.  WHAT
1066    is an attribute where GPGME_ATTR_EXPIRE is probably the most useful
1067    one.  WHATIDX is to be passed as 0 for most attributes . */
1068 unsigned long gpgme_get_sig_ulong_attr (gpgme_ctx_t c, int idx,
1069                                         _gpgme_attr_t what, int whatidx)
1070      _GPGME_DEPRECATED;
1071 const char *gpgme_get_sig_string_attr (gpgme_ctx_t c, int idx,
1072                                        _gpgme_attr_t what, int whatidx)
1073      _GPGME_DEPRECATED;
1074
1075
1076 /* Get the key used to create signature IDX in CTX and return it in
1077    R_KEY.  */
1078 gpgme_error_t gpgme_get_sig_key (gpgme_ctx_t ctx, int idx, gpgme_key_t *r_key)
1079      _GPGME_DEPRECATED;
1080
1081
1082 /* Clear all notation data from the context.  */
1083 void gpgme_sig_notation_clear (gpgme_ctx_t ctx);
1084
1085 /* Add the human-readable notation data with name NAME and value VALUE
1086    to the context CTX, using the flags FLAGS.  If NAME is NULL, then
1087    VALUE should be a policy URL.  The flag
1088    GPGME_SIG_NOTATION_HUMAN_READABLE is forced to be true for notation
1089    data, and false for policy URLs.  */
1090 gpgme_error_t gpgme_sig_notation_add (gpgme_ctx_t ctx, const char *name,
1091                                       const char *value,
1092                                       gpgme_sig_notation_flags_t flags);
1093
1094 /* Get the sig notations for this context.  */
1095 gpgme_sig_notation_t gpgme_sig_notation_get (gpgme_ctx_t ctx);
1096
1097
1098 \f
1099 /*
1100  * Run control.
1101  */
1102
1103 /* The type of an I/O callback function.  */
1104 typedef gpgme_error_t (*gpgme_io_cb_t) (void *data, int fd);
1105
1106 /* The type of a function that can register FNC as the I/O callback
1107    function for the file descriptor FD with direction dir (0: for writing,
1108    1: for reading).  FNC_DATA should be passed as DATA to FNC.  The
1109    function should return a TAG suitable for the corresponding
1110    gpgme_remove_io_cb_t, and an error value.  */
1111 typedef gpgme_error_t (*gpgme_register_io_cb_t) (void *data, int fd, int dir,
1112                                                  gpgme_io_cb_t fnc,
1113                                                  void *fnc_data, void **tag);
1114
1115 /* The type of a function that can remove a previously registered I/O
1116    callback function given TAG as returned by the register
1117    function.  */
1118 typedef void (*gpgme_remove_io_cb_t) (void *tag);
1119
1120 typedef enum
1121   {
1122     GPGME_EVENT_START,
1123     GPGME_EVENT_DONE,
1124     GPGME_EVENT_NEXT_KEY,
1125     GPGME_EVENT_NEXT_TRUSTITEM
1126   }
1127 gpgme_event_io_t;
1128
1129 struct gpgme_io_event_done_data
1130 {
1131   /* A fatal IPC error or an operational error in state-less
1132      protocols.  */
1133   gpgme_error_t err;
1134
1135   /* An operational errors in session-based protocols.  */
1136   gpgme_error_t op_err;
1137 };
1138 typedef struct gpgme_io_event_done_data *gpgme_io_event_done_data_t;
1139
1140 /* The type of a function that is called when a context finished an
1141    operation.  */
1142 typedef void (*gpgme_event_io_cb_t) (void *data, gpgme_event_io_t type,
1143                                      void *type_data);
1144
1145 struct gpgme_io_cbs
1146 {
1147   gpgme_register_io_cb_t add;
1148   void *add_priv;
1149   gpgme_remove_io_cb_t remove;
1150   gpgme_event_io_cb_t event;
1151   void *event_priv;
1152 };
1153 typedef struct gpgme_io_cbs *gpgme_io_cbs_t;
1154
1155 /* Set the I/O callback functions in CTX to IO_CBS.  */
1156 void gpgme_set_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs);
1157
1158 /* Get the current I/O callback functions.  */
1159 void gpgme_get_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs);
1160
1161 /* Wrappers around the internal I/O functions for use with
1162    gpgme_passphrase_cb_t and gpgme_edit_cb_t.  */
1163 @API__SSIZE_T@ gpgme_io_read (int fd, void *buffer, size_t count);
1164 @API__SSIZE_T@ gpgme_io_write (int fd, const void *buffer, size_t count);
1165 int     gpgme_io_writen (int fd, const void *buffer, size_t count);
1166
1167 /* Process the pending operation and, if HANG is non-zero, wait for
1168    the pending operation to finish.  */
1169 gpgme_ctx_t gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang);
1170
1171 gpgme_ctx_t gpgme_wait_ext (gpgme_ctx_t ctx, gpgme_error_t *status,
1172                             gpgme_error_t *op_err, int hang);
1173
1174 /* Cancel a pending asynchronous operation.  */
1175 gpgme_error_t gpgme_cancel (gpgme_ctx_t ctx);
1176
1177 /* Cancel a pending operation asynchronously.  */
1178 gpgme_error_t gpgme_cancel_async (gpgme_ctx_t ctx);
1179
1180
1181 \f
1182 /*
1183  * Functions to handle data objects.
1184  */
1185
1186 /* Read up to SIZE bytes into buffer BUFFER from the data object with
1187    the handle HANDLE.  Return the number of characters read, 0 on EOF
1188    and -1 on error.  If an error occurs, errno is set.  */
1189 typedef @API__SSIZE_T@ (*gpgme_data_read_cb_t) (void *handle, void *buffer,
1190                                          size_t size);
1191
1192 /* Write up to SIZE bytes from buffer BUFFER to the data object with
1193    the handle HANDLE.  Return the number of characters written, or -1
1194    on error.  If an error occurs, errno is set.  */
1195 typedef @API__SSIZE_T@ (*gpgme_data_write_cb_t) (void *handle, const void *buffer,
1196                                           size_t size);
1197
1198 /* Set the current position from where the next read or write starts
1199    in the data object with the handle HANDLE to OFFSET, relativ to
1200    WHENCE.  Returns the new offset in bytes from the beginning of the
1201    data object.  */
1202 typedef @API__OFF_T@ (*gpgme_data_seek_cb_t) (void *handle,
1203                                        @API__OFF_T@ offset, int whence);
1204
1205 /* Close the data object with the handle HANDLE.  */
1206 typedef void (*gpgme_data_release_cb_t) (void *handle);
1207
1208 struct gpgme_data_cbs
1209 {
1210   gpgme_data_read_cb_t read;
1211   gpgme_data_write_cb_t write;
1212   gpgme_data_seek_cb_t seek;
1213   gpgme_data_release_cb_t release;
1214 };
1215 typedef struct gpgme_data_cbs *gpgme_data_cbs_t;
1216
1217 /* Read up to SIZE bytes into buffer BUFFER from the data object with
1218    the handle DH.  Return the number of characters read, 0 on EOF and
1219    -1 on error.  If an error occurs, errno is set.  */
1220 @API__SSIZE_T@ gpgme_data_read (gpgme_data_t dh, void *buffer, size_t size);
1221
1222 /* Write up to SIZE bytes from buffer BUFFER to the data object with
1223    the handle DH.  Return the number of characters written, or -1 on
1224    error.  If an error occurs, errno is set.  */
1225 @API__SSIZE_T@ gpgme_data_write (gpgme_data_t dh, const void *buffer, size_t size);
1226
1227 /* Set the current position from where the next read or write starts
1228    in the data object with the handle DH to OFFSET, relativ to WHENCE.
1229    Returns the new offset in bytes from the beginning of the data
1230    object.  */
1231 @API__OFF_T@ gpgme_data_seek (gpgme_data_t dh, @API__OFF_T@ offset, int whence);
1232
1233 /* Create a new data buffer and return it in R_DH.  */
1234 gpgme_error_t gpgme_data_new (gpgme_data_t *r_dh);
1235
1236 /* Destroy the data buffer DH.  */
1237 void gpgme_data_release (gpgme_data_t dh);
1238
1239 /* Create a new data buffer filled with SIZE bytes starting from
1240    BUFFER.  If COPY is zero, copying is delayed until necessary, and
1241    the data is taken from the original location when needed.  */
1242 gpgme_error_t gpgme_data_new_from_mem (gpgme_data_t *r_dh,
1243                                        const char *buffer, size_t size,
1244                                        int copy);
1245
1246 /* Destroy the data buffer DH and return a pointer to its content.
1247    The memory has be to released with gpgme_free() by the user.  It's
1248    size is returned in R_LEN.  */
1249 char *gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len);
1250
1251 /* Release the memory returned by gpgme_data_release_and_get_mem() and
1252    some other functions.  */
1253 void gpgme_free (void *buffer);
1254
1255 gpgme_error_t gpgme_data_new_from_cbs (gpgme_data_t *dh,
1256                                        gpgme_data_cbs_t cbs,
1257                                        void *handle);
1258
1259 gpgme_error_t gpgme_data_new_from_fd (gpgme_data_t *dh, int fd);
1260
1261 gpgme_error_t gpgme_data_new_from_stream (gpgme_data_t *dh, FILE *stream);
1262
1263 /* Return the encoding attribute of the data buffer DH */
1264 gpgme_data_encoding_t gpgme_data_get_encoding (gpgme_data_t dh);
1265
1266 /* Set the encoding attribute of data buffer DH to ENC */
1267 gpgme_error_t gpgme_data_set_encoding (gpgme_data_t dh,
1268                                        gpgme_data_encoding_t enc);
1269
1270 /* Get the file name associated with the data object with handle DH, or
1271    NULL if there is none.  */
1272 char *gpgme_data_get_file_name (gpgme_data_t dh);
1273
1274 /* Set the file name associated with the data object with handle DH to
1275    FILE_NAME.  */
1276 gpgme_error_t gpgme_data_set_file_name (gpgme_data_t dh,
1277                                         const char *file_name);
1278
1279 /* Try to identify the type of the data in DH.  */
1280 gpgme_data_type_t gpgme_data_identify (gpgme_data_t dh, int reserved);
1281
1282
1283 /* Create a new data buffer which retrieves the data from the callback
1284    function READ_CB.  Deprecated, please use gpgme_data_new_from_cbs
1285    instead.  */
1286 gpgme_error_t gpgme_data_new_with_read_cb (gpgme_data_t *r_dh,
1287                                            int (*read_cb) (void*,char *,
1288                                                            size_t,size_t*),
1289                                            void *read_cb_value)
1290      _GPGME_DEPRECATED;
1291
1292 /* Create a new data buffer filled with the content of file FNAME.
1293    COPY must be non-zero.  For delayed read, please use
1294    gpgme_data_new_from_fd or gpgme_data_new_from_stream instead.  */
1295 gpgme_error_t gpgme_data_new_from_file (gpgme_data_t *r_dh,
1296                                         const char *fname,
1297                                         int copy);
1298
1299 /* Create a new data buffer filled with LENGTH bytes starting from
1300    OFFSET within the file FNAME or stream FP (exactly one must be
1301    non-zero).  */
1302 gpgme_error_t gpgme_data_new_from_filepart (gpgme_data_t *r_dh,
1303                                             const char *fname, FILE *fp,
1304                                             @API__OFF_T@ offset, size_t length);
1305
1306 /* Reset the read pointer in DH.  Deprecated, please use
1307    gpgme_data_seek instead.  */
1308 gpgme_error_t gpgme_data_rewind (gpgme_data_t dh) _GPGME_DEPRECATED;
1309
1310
1311 \f
1312 /*
1313  * Key and trust functions.
1314  */
1315
1316 /* Get the key with the fingerprint FPR from the crypto backend.  If
1317    SECRET is true, get the secret key.  */
1318 gpgme_error_t gpgme_get_key (gpgme_ctx_t ctx, const char *fpr,
1319                              gpgme_key_t *r_key, int secret);
1320
1321 /* Create a dummy key to specify an email address.  */
1322 gpgme_error_t gpgme_key_from_uid (gpgme_key_t *key, const char *name);
1323
1324 /* Acquire a reference to KEY.  */
1325 void gpgme_key_ref (gpgme_key_t key);
1326
1327 /* Release a reference to KEY.  If this was the last one the key is
1328    destroyed.  */
1329 void gpgme_key_unref (gpgme_key_t key);
1330 void gpgme_key_release (gpgme_key_t key);
1331
1332 /* Return the value of the attribute WHAT of KEY, which has to be
1333    representable by a string.  IDX specifies the sub key or user ID
1334    for attributes related to sub keys or user IDs.  Deprecated, use
1335    key structure directly instead. */
1336 const char *gpgme_key_get_string_attr (gpgme_key_t key, _gpgme_attr_t what,
1337                                        const void *reserved, int idx)
1338      _GPGME_DEPRECATED;
1339
1340 /* Return the value of the attribute WHAT of KEY, which has to be
1341    representable by an unsigned integer.  IDX specifies the sub key or
1342    user ID for attributes related to sub keys or user IDs.
1343    Deprecated, use key structure directly instead.  */
1344 unsigned long gpgme_key_get_ulong_attr (gpgme_key_t key, _gpgme_attr_t what,
1345                                         const void *reserved, int idx)
1346      _GPGME_DEPRECATED;
1347
1348 /* Return the value of the attribute WHAT of a signature on user ID
1349    UID_IDX in KEY, which has to be representable by a string.  IDX
1350    specifies the signature.  Deprecated, use key structure directly
1351    instead.  */
1352 const char *gpgme_key_sig_get_string_attr (gpgme_key_t key, int uid_idx,
1353                                            _gpgme_attr_t what,
1354                                            const void *reserved, int idx)
1355      _GPGME_DEPRECATED;
1356
1357 /* Return the value of the attribute WHAT of a signature on user ID
1358    UID_IDX in KEY, which has to be representable by an unsigned
1359    integer string.  IDX specifies the signature.  Deprecated, use key
1360    structure directly instead.  */
1361 unsigned long gpgme_key_sig_get_ulong_attr (gpgme_key_t key, int uid_idx,
1362                                             _gpgme_attr_t what,
1363                                             const void *reserved, int idx)
1364      _GPGME_DEPRECATED;
1365
1366
1367 \f
1368 /*
1369  * Encryption.
1370  */
1371
1372 struct _gpgme_op_encrypt_result
1373 {
1374   /* The list of invalid recipients.  */
1375   gpgme_invalid_key_t invalid_recipients;
1376 };
1377 typedef struct _gpgme_op_encrypt_result *gpgme_encrypt_result_t;
1378
1379 /* Retrieve a pointer to the result of the encrypt operation.  */
1380 gpgme_encrypt_result_t gpgme_op_encrypt_result (gpgme_ctx_t ctx);
1381
1382 /* The valid encryption flags.  */
1383 typedef enum
1384   {
1385     GPGME_ENCRYPT_ALWAYS_TRUST = 1,
1386     GPGME_ENCRYPT_NO_ENCRYPT_TO = 2,
1387     GPGME_ENCRYPT_PREPARE = 4,
1388     GPGME_ENCRYPT_EXPECT_SIGN = 8,
1389     GPGME_ENCRYPT_NO_COMPRESS = 16
1390   }
1391 gpgme_encrypt_flags_t;
1392
1393 /* Encrypt plaintext PLAIN within CTX for the recipients RECP and
1394    store the resulting ciphertext in CIPHER.  */
1395 gpgme_error_t gpgme_op_encrypt_start (gpgme_ctx_t ctx, gpgme_key_t recp[],
1396                                       gpgme_encrypt_flags_t flags,
1397                                       gpgme_data_t plain, gpgme_data_t cipher);
1398 gpgme_error_t gpgme_op_encrypt (gpgme_ctx_t ctx, gpgme_key_t recp[],
1399                                 gpgme_encrypt_flags_t flags,
1400                                 gpgme_data_t plain, gpgme_data_t cipher);
1401
1402 /* Encrypt plaintext PLAIN within CTX for the recipients RECP and
1403    store the resulting ciphertext in CIPHER.  Also sign the ciphertext
1404    with the signers in CTX.  */
1405 gpgme_error_t gpgme_op_encrypt_sign_start (gpgme_ctx_t ctx,
1406                                            gpgme_key_t recp[],
1407                                            gpgme_encrypt_flags_t flags,
1408                                            gpgme_data_t plain,
1409                                            gpgme_data_t cipher);
1410 gpgme_error_t gpgme_op_encrypt_sign (gpgme_ctx_t ctx, gpgme_key_t recp[],
1411                                      gpgme_encrypt_flags_t flags,
1412                                      gpgme_data_t plain, gpgme_data_t cipher);
1413
1414 \f
1415 /*
1416  * Decryption.
1417  */
1418
1419 struct _gpgme_recipient
1420 {
1421   struct _gpgme_recipient *next;
1422
1423   /* The key ID of key for which the text was encrypted.  */
1424   char *keyid;
1425
1426   /* Internal to GPGME, do not use.  */
1427   char _keyid[16 + 1];
1428
1429   /* The public key algorithm of the recipient key.  */
1430   gpgme_pubkey_algo_t pubkey_algo;
1431
1432   /* The status of the recipient.  */
1433   gpgme_error_t status;
1434 };
1435 typedef struct _gpgme_recipient *gpgme_recipient_t;
1436
1437 struct _gpgme_op_decrypt_result
1438 {
1439   char *unsupported_algorithm;
1440
1441   /* Key should not have been used for encryption.  */
1442   unsigned int wrong_key_usage : 1;
1443
1444   /* Internal to GPGME, do not use.  */
1445   int _unused : 31;
1446
1447   gpgme_recipient_t recipients;
1448
1449   /* The original file name of the plaintext message, if
1450      available.  */
1451   char *file_name;
1452 };
1453 typedef struct _gpgme_op_decrypt_result *gpgme_decrypt_result_t;
1454
1455 /* Retrieve a pointer to the result of the decrypt operation.  */
1456 gpgme_decrypt_result_t gpgme_op_decrypt_result (gpgme_ctx_t ctx);
1457
1458 /* Decrypt ciphertext CIPHER within CTX and store the resulting
1459    plaintext in PLAIN.  */
1460 gpgme_error_t gpgme_op_decrypt_start (gpgme_ctx_t ctx, gpgme_data_t cipher,
1461                                       gpgme_data_t plain);
1462 gpgme_error_t gpgme_op_decrypt (gpgme_ctx_t ctx,
1463                                 gpgme_data_t cipher, gpgme_data_t plain);
1464
1465 /* Decrypt ciphertext CIPHER and make a signature verification within
1466    CTX and store the resulting plaintext in PLAIN.  */
1467 gpgme_error_t gpgme_op_decrypt_verify_start (gpgme_ctx_t ctx,
1468                                              gpgme_data_t cipher,
1469                                              gpgme_data_t plain);
1470 gpgme_error_t gpgme_op_decrypt_verify (gpgme_ctx_t ctx, gpgme_data_t cipher,
1471                                        gpgme_data_t plain);
1472
1473 \f
1474 /*
1475  * Signing.
1476  */
1477
1478 struct _gpgme_new_signature
1479 {
1480   struct _gpgme_new_signature *next;
1481
1482   /* The type of the signature.  */
1483   gpgme_sig_mode_t type;
1484
1485   /* The public key algorithm used to create the signature.  */
1486   gpgme_pubkey_algo_t pubkey_algo;
1487
1488   /* The hash algorithm used to create the signature.  */
1489   gpgme_hash_algo_t hash_algo;
1490
1491   /* Internal to GPGME, do not use.  Must be set to the same value as
1492      CLASS below.  */
1493   unsigned long _obsolete_class;
1494
1495   /* Signature creation time.  */
1496   long int timestamp;
1497
1498   /* The fingerprint of the signature.  */
1499   char *fpr;
1500
1501 #ifdef __cplusplus
1502   unsigned int _obsolete_class_2;
1503 #else
1504   /* Must be set to SIG_CLASS below.  */
1505   unsigned int class _GPGME_DEPRECATED_OUTSIDE_GPGME;
1506 #endif
1507
1508   /* Crypto backend specific signature class.  */
1509   unsigned int sig_class;
1510 };
1511 typedef struct _gpgme_new_signature *gpgme_new_signature_t;
1512
1513 struct _gpgme_op_sign_result
1514 {
1515   /* The list of invalid signers.  */
1516   gpgme_invalid_key_t invalid_signers;
1517   gpgme_new_signature_t signatures;
1518 };
1519 typedef struct _gpgme_op_sign_result *gpgme_sign_result_t;
1520
1521 /* Retrieve a pointer to the result of the signing operation.  */
1522 gpgme_sign_result_t gpgme_op_sign_result (gpgme_ctx_t ctx);
1523
1524 /* Sign the plaintext PLAIN and store the signature in SIG.  */
1525 gpgme_error_t gpgme_op_sign_start (gpgme_ctx_t ctx,
1526                                    gpgme_data_t plain, gpgme_data_t sig,
1527                                    gpgme_sig_mode_t mode);
1528 gpgme_error_t gpgme_op_sign (gpgme_ctx_t ctx,
1529                              gpgme_data_t plain, gpgme_data_t sig,
1530                              gpgme_sig_mode_t mode);
1531
1532 \f
1533 /*
1534  * Verify.
1535  */
1536
1537 /* Flags used for the SUMMARY field in a gpgme_signature_t.  */
1538 typedef enum
1539   {
1540     GPGME_SIGSUM_VALID       = 0x0001,  /* The signature is fully valid.  */
1541     GPGME_SIGSUM_GREEN       = 0x0002,  /* The signature is good.  */
1542     GPGME_SIGSUM_RED         = 0x0004,  /* The signature is bad.  */
1543     GPGME_SIGSUM_KEY_REVOKED = 0x0010,  /* One key has been revoked.  */
1544     GPGME_SIGSUM_KEY_EXPIRED = 0x0020,  /* One key has expired.  */
1545     GPGME_SIGSUM_SIG_EXPIRED = 0x0040,  /* The signature has expired.  */
1546     GPGME_SIGSUM_KEY_MISSING = 0x0080,  /* Can't verify: key missing.  */
1547     GPGME_SIGSUM_CRL_MISSING = 0x0100,  /* CRL not available.  */
1548     GPGME_SIGSUM_CRL_TOO_OLD = 0x0200,  /* Available CRL is too old.  */
1549     GPGME_SIGSUM_BAD_POLICY  = 0x0400,  /* A policy was not met.  */
1550     GPGME_SIGSUM_SYS_ERROR   = 0x0800,  /* A system error occurred.  */
1551     GPGME_SIGSUM_TOFU_CONFLICT=0x1000   /* Tofu conflict detected.  */
1552   }
1553 gpgme_sigsum_t;
1554
1555
1556 struct _gpgme_tofu_info
1557 {
1558   struct _gpgme_tofu_info *next;
1559
1560   /* The mail address (addr-spec from RFC5322) of the tofu binding.  */
1561   char *address;
1562
1563   /* The fingerprint of the primary key.  */
1564   char *fpr;
1565
1566   /* The TOFU validity:
1567    *  0 := conflict
1568    *  1 := key without history
1569    *  2 := key with too little history
1570    *  3 := key with enough history for basic trust
1571    *  4 := key with a lot of history
1572    */
1573   unsigned int validity : 3;
1574
1575   /* The TOFU policy (gpgme_tofu_policy_t).  */
1576   unsigned int policy : 4;
1577
1578   unsigned int _rfu : 25;
1579
1580   /* Number of signatures seen for this binding.  Capped at USHRT_MAX.  */
1581   unsigned short signcount;
1582   unsigned short reserved;
1583
1584   /* Number of seconds since the first and the most recently seen
1585    * message was verified.  */
1586   unsigned int firstseen;
1587   unsigned int lastseen;
1588
1589   /* If non-NULL a human readable string summarizing the TOFU data. */
1590   char *description;
1591 };
1592 typedef struct _gpgme_tofu_info *gpgme_tofu_info_t;
1593
1594
1595 struct _gpgme_signature
1596 {
1597   struct _gpgme_signature *next;
1598
1599   /* A summary of the signature status.  */
1600   gpgme_sigsum_t summary;
1601
1602   /* The fingerprint or key ID of the signature.  */
1603   char *fpr;
1604
1605   /* The status of the signature.  */
1606   gpgme_error_t status;
1607
1608   /* Notation data and policy URLs.  */
1609   gpgme_sig_notation_t notations;
1610
1611   /* Signature creation time.  */
1612   unsigned long timestamp;
1613
1614   /* Signature expiration time or 0.  */
1615   unsigned long exp_timestamp;
1616
1617   /* Key should not have been used for signing.  */
1618   unsigned int wrong_key_usage : 1;
1619
1620   /* PKA status: 0 = not available, 1 = bad, 2 = okay, 3 = RFU. */
1621   unsigned int pka_trust : 2;
1622
1623   /* Validity has been verified using the chain model. */
1624   unsigned int chain_model : 1;
1625
1626   /* Internal to GPGME, do not use.  */
1627   int _unused : 28;
1628
1629   gpgme_validity_t validity;
1630   gpgme_error_t validity_reason;
1631
1632   /* The public key algorithm used to create the signature.  */
1633   gpgme_pubkey_algo_t pubkey_algo;
1634
1635   /* The hash algorithm used to create the signature.  */
1636   gpgme_hash_algo_t hash_algo;
1637
1638   /* The mailbox from the PKA information or NULL. */
1639   char *pka_address;
1640
1641   /* If non-NULL, TOFU info for this signature are available.  */
1642   gpgme_tofu_info_t tofu;
1643 };
1644 typedef struct _gpgme_signature *gpgme_signature_t;
1645
1646 struct _gpgme_op_verify_result
1647 {
1648   gpgme_signature_t signatures;
1649
1650   /* The original file name of the plaintext message, if
1651      available.  */
1652   char *file_name;
1653 };
1654 typedef struct _gpgme_op_verify_result *gpgme_verify_result_t;
1655
1656 /* Retrieve a pointer to the result of the verify operation.  */
1657 gpgme_verify_result_t gpgme_op_verify_result (gpgme_ctx_t ctx);
1658
1659 /* Verify within CTX that SIG is a valid signature for TEXT.  */
1660 gpgme_error_t gpgme_op_verify_start (gpgme_ctx_t ctx, gpgme_data_t sig,
1661                                      gpgme_data_t signed_text,
1662                                      gpgme_data_t plaintext);
1663 gpgme_error_t gpgme_op_verify (gpgme_ctx_t ctx, gpgme_data_t sig,
1664                                gpgme_data_t signed_text,
1665                                gpgme_data_t plaintext);
1666
1667 \f
1668 /*
1669  * Import/Export
1670  */
1671
1672 #define GPGME_IMPORT_NEW        1  /* The key was new.  */
1673 #define GPGME_IMPORT_UID        2  /* The key contained new user IDs.  */
1674 #define GPGME_IMPORT_SIG        4  /* The key contained new signatures.  */
1675 #define GPGME_IMPORT_SUBKEY     8  /* The key contained new sub keys.  */
1676 #define GPGME_IMPORT_SECRET    16  /* The key contained a secret key.  */
1677
1678
1679 struct _gpgme_import_status
1680 {
1681   struct _gpgme_import_status *next;
1682
1683   /* Fingerprint.  */
1684   char *fpr;
1685
1686   /* If a problem occurred, the reason why the key could not be
1687      imported.  Otherwise GPGME_No_Error.  */
1688   gpgme_error_t result;
1689
1690   /* The result of the import, the GPGME_IMPORT_* values bit-wise
1691      ORed.  0 means the key was already known and no new components
1692      have been added.  */
1693   unsigned int status;
1694 };
1695 typedef struct _gpgme_import_status *gpgme_import_status_t;
1696
1697 /* Import result object.  */
1698 struct _gpgme_op_import_result
1699 {
1700   /* Number of considered keys.  */
1701   int considered;
1702
1703   /* Keys without user ID.  */
1704   int no_user_id;
1705
1706   /* Imported keys.  */
1707   int imported;
1708
1709   /* Imported RSA keys.  */
1710   int imported_rsa;
1711
1712   /* Unchanged keys.  */
1713   int unchanged;
1714
1715   /* Number of new user ids.  */
1716   int new_user_ids;
1717
1718   /* Number of new sub keys.  */
1719   int new_sub_keys;
1720
1721   /* Number of new signatures.  */
1722   int new_signatures;
1723
1724   /* Number of new revocations.  */
1725   int new_revocations;
1726
1727   /* Number of secret keys read.  */
1728   int secret_read;
1729
1730   /* Number of secret keys imported.  */
1731   int secret_imported;
1732
1733   /* Number of secret keys unchanged.  */
1734   int secret_unchanged;
1735
1736   /* Number of new keys skipped.  */
1737   int skipped_new_keys;
1738
1739   /* Number of keys not imported.  */
1740   int not_imported;
1741
1742   /* List of keys for which an import was attempted.  */
1743   gpgme_import_status_t imports;
1744 };
1745 typedef struct _gpgme_op_import_result *gpgme_import_result_t;
1746
1747 /* Retrieve a pointer to the result of the import operation.  */
1748 gpgme_import_result_t gpgme_op_import_result (gpgme_ctx_t ctx);
1749
1750 /* Import the key in KEYDATA into the keyring.  */
1751 gpgme_error_t gpgme_op_import_start (gpgme_ctx_t ctx, gpgme_data_t keydata);
1752 gpgme_error_t gpgme_op_import (gpgme_ctx_t ctx, gpgme_data_t keydata);
1753 gpgme_error_t gpgme_op_import_ext (gpgme_ctx_t ctx, gpgme_data_t keydata,
1754                                    int *nr) _GPGME_DEPRECATED;
1755
1756 /* Import the keys from the array KEYS into the keyring.  */
1757 gpgme_error_t gpgme_op_import_keys_start (gpgme_ctx_t ctx, gpgme_key_t keys[]);
1758 gpgme_error_t gpgme_op_import_keys (gpgme_ctx_t ctx, gpgme_key_t keys[]);
1759
1760
1761 /* Export the keys found by PATTERN into KEYDATA.  */
1762 gpgme_error_t gpgme_op_export_start (gpgme_ctx_t ctx, const char *pattern,
1763                                      gpgme_export_mode_t mode,
1764                                      gpgme_data_t keydata);
1765 gpgme_error_t gpgme_op_export (gpgme_ctx_t ctx, const char *pattern,
1766                                gpgme_export_mode_t mode,
1767                                gpgme_data_t keydata);
1768
1769 gpgme_error_t gpgme_op_export_ext_start (gpgme_ctx_t ctx,
1770                                          const char *pattern[],
1771                                          gpgme_export_mode_t mode,
1772                                          gpgme_data_t keydata);
1773 gpgme_error_t gpgme_op_export_ext (gpgme_ctx_t ctx, const char *pattern[],
1774                                    gpgme_export_mode_t mode,
1775                                    gpgme_data_t keydata);
1776
1777 /* Export the keys from the array KEYS into KEYDATA.  */
1778 gpgme_error_t gpgme_op_export_keys_start (gpgme_ctx_t ctx,
1779                                           gpgme_key_t keys[],
1780                                           gpgme_export_mode_t mode,
1781                                           gpgme_data_t keydata);
1782 gpgme_error_t gpgme_op_export_keys (gpgme_ctx_t ctx,
1783                                     gpgme_key_t keys[],
1784                                     gpgme_export_mode_t mode,
1785                                     gpgme_data_t keydata);
1786
1787
1788 \f
1789 /*
1790  * Key generation.
1791  */
1792
1793 struct _gpgme_op_genkey_result
1794 {
1795   /* A primary key was generated.  */
1796   unsigned int primary : 1;
1797
1798   /* A sub key was generated.  */
1799   unsigned int sub : 1;
1800
1801   /* Internal to GPGME, do not use.  */
1802   unsigned int _unused : 30;
1803
1804   /* The fingerprint of the generated key.  */
1805   char *fpr;
1806 };
1807 typedef struct _gpgme_op_genkey_result *gpgme_genkey_result_t;
1808
1809 /* Generate a new keypair and add it to the keyring.  PUBKEY and
1810    SECKEY should be null for now.  PARMS specifies what keys should be
1811    generated.  */
1812 gpgme_error_t gpgme_op_genkey_start (gpgme_ctx_t ctx, const char *parms,
1813                                      gpgme_data_t pubkey, gpgme_data_t seckey);
1814 gpgme_error_t gpgme_op_genkey (gpgme_ctx_t ctx, const char *parms,
1815                                gpgme_data_t pubkey, gpgme_data_t seckey);
1816
1817 /* Retrieve a pointer to the result of the genkey operation.  */
1818 gpgme_genkey_result_t gpgme_op_genkey_result (gpgme_ctx_t ctx);
1819
1820
1821 /* Delete KEY from the keyring.  If ALLOW_SECRET is non-zero, secret
1822    keys are also deleted.  */
1823 gpgme_error_t gpgme_op_delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,
1824                                      int allow_secret);
1825 gpgme_error_t gpgme_op_delete (gpgme_ctx_t ctx, const gpgme_key_t key,
1826                                int allow_secret);
1827
1828
1829 \f
1830 /*
1831  * Key Edit interface
1832  */
1833
1834 /* Edit the key KEY.  Send status and command requests to FNC and
1835    output of edit commands to OUT.  */
1836 gpgme_error_t gpgme_op_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
1837                                    gpgme_edit_cb_t fnc, void *fnc_value,
1838                                    gpgme_data_t out);
1839 gpgme_error_t gpgme_op_edit (gpgme_ctx_t ctx, gpgme_key_t key,
1840                              gpgme_edit_cb_t fnc, void *fnc_value,
1841                              gpgme_data_t out);
1842
1843 /* Edit the card for the key KEY.  Send status and command requests to
1844    FNC and output of edit commands to OUT.  */
1845 gpgme_error_t gpgme_op_card_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
1846                                         gpgme_edit_cb_t fnc, void *fnc_value,
1847                                         gpgme_data_t out);
1848 gpgme_error_t gpgme_op_card_edit (gpgme_ctx_t ctx, gpgme_key_t key,
1849                                   gpgme_edit_cb_t fnc, void *fnc_value,
1850                                   gpgme_data_t out);
1851
1852
1853 \f
1854 /*
1855  * Key listing
1856  */
1857
1858 struct _gpgme_op_keylist_result
1859 {
1860   unsigned int truncated : 1;
1861
1862   /* Internal to GPGME, do not use.  */
1863   unsigned int _unused : 31;
1864 };
1865 typedef struct _gpgme_op_keylist_result *gpgme_keylist_result_t;
1866
1867 /* Retrieve a pointer to the result of the key listing operation.  */
1868 gpgme_keylist_result_t gpgme_op_keylist_result (gpgme_ctx_t ctx);
1869
1870 /* Start a keylist operation within CTX, searching for keys which
1871    match PATTERN.  If SECRET_ONLY is true, only secret keys are
1872    returned.  */
1873 gpgme_error_t gpgme_op_keylist_start (gpgme_ctx_t ctx, const char *pattern,
1874                                       int secret_only);
1875 gpgme_error_t gpgme_op_keylist_ext_start (gpgme_ctx_t ctx,
1876                                           const char *pattern[],
1877                                           int secret_only, int reserved);
1878
1879 /* Return the next key from the keylist in R_KEY.  */
1880 gpgme_error_t gpgme_op_keylist_next (gpgme_ctx_t ctx, gpgme_key_t *r_key);
1881
1882 /* Terminate a pending keylist operation within CTX.  */
1883 gpgme_error_t gpgme_op_keylist_end (gpgme_ctx_t ctx);
1884
1885 /* Change the passphrase for KEY.  FLAGS is reserved for future use
1886    and must be passed as 0.  */
1887 gpgme_error_t gpgme_op_passwd_start (gpgme_ctx_t ctx, gpgme_key_t key,
1888                                      unsigned int flags);
1889 gpgme_error_t gpgme_op_passwd (gpgme_ctx_t ctx, gpgme_key_t key,
1890                                unsigned int flags);
1891
1892
1893 \f
1894 /*
1895  * Trust items and operations.
1896  */
1897
1898 struct _gpgme_trust_item
1899 {
1900   /* Internal to GPGME, do not use.  */
1901   unsigned int _refs;
1902
1903   /* The key ID to which the trust item belongs.  */
1904   char *keyid;
1905
1906   /* Internal to GPGME, do not use.  */
1907   char _keyid[16 + 1];
1908
1909   /* The type of the trust item, 1 refers to a key, 2 to a user ID.  */
1910   int type;
1911
1912   /* The trust level.  */
1913   int level;
1914
1915   /* The owner trust if TYPE is 1.  */
1916   char *owner_trust;
1917
1918   /* Internal to GPGME, do not use.  */
1919   char _owner_trust[2];
1920
1921   /* The calculated validity.  */
1922   char *validity;
1923
1924   /* Internal to GPGME, do not use.  */
1925   char _validity[2];
1926
1927   /* The user name if TYPE is 2.  */
1928   char *name;
1929 };
1930 typedef struct _gpgme_trust_item *gpgme_trust_item_t;
1931
1932 /* Start a trustlist operation within CTX, searching for trust items
1933    which match PATTERN.  */
1934 gpgme_error_t gpgme_op_trustlist_start (gpgme_ctx_t ctx,
1935                                         const char *pattern, int max_level);
1936
1937 /* Return the next trust item from the trustlist in R_ITEM.  */
1938 gpgme_error_t gpgme_op_trustlist_next (gpgme_ctx_t ctx,
1939                                        gpgme_trust_item_t *r_item);
1940
1941 /* Terminate a pending trustlist operation within CTX.  */
1942 gpgme_error_t gpgme_op_trustlist_end (gpgme_ctx_t ctx);
1943
1944 /* Acquire a reference to ITEM.  */
1945 void gpgme_trust_item_ref (gpgme_trust_item_t item);
1946
1947 /* Release a reference to ITEM.  If this was the last one the trust
1948    item is destroyed.  */
1949 void gpgme_trust_item_unref (gpgme_trust_item_t item);
1950
1951 /* Release the trust item ITEM.  Deprecated, use
1952    gpgme_trust_item_unref.  */
1953 void gpgme_trust_item_release (gpgme_trust_item_t item) _GPGME_DEPRECATED;
1954
1955 /* Return the value of the attribute WHAT of ITEM, which has to be
1956    representable by a string.  Deprecated, use trust item structure
1957    directly.  */
1958 const char *gpgme_trust_item_get_string_attr (gpgme_trust_item_t item,
1959                                               _gpgme_attr_t what,
1960                                               const void *reserved, int idx)
1961      _GPGME_DEPRECATED;
1962
1963 /* Return the value of the attribute WHAT of KEY, which has to be
1964    representable by an integer.  IDX specifies a running index if the
1965    attribute appears more than once in the key.  Deprecated, use trust
1966    item structure directly.  */
1967 int gpgme_trust_item_get_int_attr (gpgme_trust_item_t item, _gpgme_attr_t what,
1968                                    const void *reserved, int idx)
1969      _GPGME_DEPRECATED;
1970
1971
1972 \f
1973 /*
1974  * Audit log
1975  */
1976
1977 /* Return the auditlog for the current session.  This may be called
1978    after a successful or failed operation.  If no audit log is
1979    available GPG_ERR_NO_DATA is returned.  */
1980 gpgme_error_t gpgme_op_getauditlog_start (gpgme_ctx_t ctx, gpgme_data_t output,
1981                                           unsigned int flags);
1982 gpgme_error_t gpgme_op_getauditlog (gpgme_ctx_t ctx, gpgme_data_t output,
1983                                     unsigned int flags);
1984
1985
1986 \f
1987 /*
1988  * Spawn interface
1989  */
1990
1991 /* Flags for the spawn operations.  */
1992 #define GPGME_SPAWN_DETACHED      1
1993 #define GPGME_SPAWN_ALLOW_SET_FG  2
1994
1995
1996 /* Run the command FILE with the arguments in ARGV.  Connect stdin to
1997    DATAIN, stdout to DATAOUT, and STDERR to DATAERR.  If one the data
1998    streams is NULL, connect to /dev/null instead.  */
1999 gpgme_error_t gpgme_op_spawn_start (gpgme_ctx_t ctx,
2000                                     const char *file, const char *argv[],
2001                                     gpgme_data_t datain,
2002                                     gpgme_data_t dataout, gpgme_data_t dataerr,
2003                                     unsigned int flags);
2004 gpgme_error_t gpgme_op_spawn (gpgme_ctx_t ctx,
2005                               const char *file, const char *argv[],
2006                               gpgme_data_t datain,
2007                               gpgme_data_t dataout, gpgme_data_t dataerr,
2008                               unsigned int flags);
2009
2010 \f
2011 /*
2012  * Low-level Assuan protocol access.
2013  */
2014 typedef gpgme_error_t (*gpgme_assuan_data_cb_t)
2015      (void *opaque, const void *data, size_t datalen);
2016
2017 typedef gpgme_error_t (*gpgme_assuan_inquire_cb_t)
2018      (void *opaque, const char *name, const char *args,
2019       gpgme_data_t *r_data);
2020
2021 typedef gpgme_error_t (*gpgme_assuan_status_cb_t)
2022      (void *opaque, const char *status, const char *args);
2023
2024 /* Send the Assuan COMMAND and return results via the callbacks.
2025    Asynchronous variant. */
2026 gpgme_error_t gpgme_op_assuan_transact_start (gpgme_ctx_t ctx,
2027                                               const char *command,
2028                                               gpgme_assuan_data_cb_t data_cb,
2029                                               void *data_cb_value,
2030                                               gpgme_assuan_inquire_cb_t inq_cb,
2031                                               void *inq_cb_value,
2032                                               gpgme_assuan_status_cb_t stat_cb,
2033                                               void *stat_cb_value);
2034
2035 /* Send the Assuan COMMAND and return results via the callbacks.
2036    Synchronous variant. */
2037 gpgme_error_t gpgme_op_assuan_transact_ext (gpgme_ctx_t ctx,
2038                                             const char *command,
2039                                             gpgme_assuan_data_cb_t data_cb,
2040                                             void *data_cb_value,
2041                                             gpgme_assuan_inquire_cb_t inq_cb,
2042                                             void *inq_cb_value,
2043                                             gpgme_assuan_status_cb_t stat_cb,
2044                                             void *stat_cb_value,
2045                                             gpgme_error_t *op_err);
2046
2047 /* Compat.  */
2048 struct _gpgme_op_assuan_result
2049 {
2050   /* Deprecated.  Use the second value in a DONE event or the
2051      synchronous variant gpgme_op_assuan_transact_ext.  */
2052   gpgme_error_t err _GPGME_DEPRECATED_OUTSIDE_GPGME;
2053 };
2054 typedef struct _gpgme_op_assuan_result *gpgme_assuan_result_t;
2055
2056
2057 /* Return the result of the last Assuan command. */
2058 gpgme_assuan_result_t gpgme_op_assuan_result (gpgme_ctx_t ctx)
2059   _GPGME_DEPRECATED;
2060
2061 gpgme_error_t
2062 gpgme_op_assuan_transact (gpgme_ctx_t ctx,
2063                               const char *command,
2064                               gpgme_assuan_data_cb_t data_cb,
2065                               void *data_cb_value,
2066                               gpgme_assuan_inquire_cb_t inq_cb,
2067                               void *inq_cb_value,
2068                               gpgme_assuan_status_cb_t status_cb,
2069                               void *status_cb_value) _GPGME_DEPRECATED;
2070
2071 \f
2072 /*
2073  * Crypto container support.
2074  */
2075
2076 struct _gpgme_op_vfs_mount_result
2077 {
2078   char *mount_dir;
2079 };
2080 typedef struct _gpgme_op_vfs_mount_result *gpgme_vfs_mount_result_t;
2081
2082 gpgme_vfs_mount_result_t gpgme_op_vfs_mount_result (gpgme_ctx_t ctx);
2083
2084 /* The container is automatically unmounted when the context is reset
2085    or destroyed.  Transmission errors are returned directly,
2086    operational errors are returned in OP_ERR.  */
2087 gpgme_error_t gpgme_op_vfs_mount (gpgme_ctx_t ctx, const char *container_file,
2088                                   const char *mount_dir, unsigned int flags,
2089                                   gpgme_error_t *op_err);
2090
2091 gpgme_error_t gpgme_op_vfs_create (gpgme_ctx_t ctx, gpgme_key_t recp[],
2092                                    const char *container_file,
2093                                    unsigned int flags, gpgme_error_t *op_err);
2094
2095 \f
2096 /*
2097  * Interface to gpgconf(1).
2098  */
2099
2100 /* The expert level at which a configuration option or group of
2101    options should be displayed.  See the gpgconf(1) documentation for
2102    more details.  */
2103 typedef enum
2104   {
2105     GPGME_CONF_BASIC = 0,
2106     GPGME_CONF_ADVANCED = 1,
2107     GPGME_CONF_EXPERT = 2,
2108     GPGME_CONF_INVISIBLE = 3,
2109     GPGME_CONF_INTERNAL = 4
2110   }
2111 gpgme_conf_level_t;
2112
2113
2114 /* The data type of a configuration option argument.  See the gpgconf(1)
2115    documentation for more details.  */
2116 typedef enum
2117   {
2118     /* Basic types.  */
2119     GPGME_CONF_NONE = 0,
2120     GPGME_CONF_STRING = 1,
2121     GPGME_CONF_INT32 = 2,
2122     GPGME_CONF_UINT32 = 3,
2123
2124     /* Complex types.  */
2125     GPGME_CONF_FILENAME = 32,
2126     GPGME_CONF_LDAP_SERVER = 33,
2127     GPGME_CONF_KEY_FPR = 34,
2128     GPGME_CONF_PUB_KEY = 35,
2129     GPGME_CONF_SEC_KEY = 36,
2130     GPGME_CONF_ALIAS_LIST = 37
2131   }
2132 gpgme_conf_type_t;
2133
2134 /* For now, compatibility.  */
2135 #define GPGME_CONF_PATHNAME GPGME_CONF_FILENAME
2136
2137
2138 /* This represents a single argument for a configuration option.
2139    Which of the members of value is used depends on the ALT_TYPE.  */
2140 typedef struct gpgme_conf_arg
2141 {
2142   struct gpgme_conf_arg *next;
2143   /* True if the option appears without an (optional) argument.  */
2144   unsigned int no_arg;
2145   union
2146   {
2147     unsigned int count;
2148     unsigned int uint32;
2149     int int32;
2150     char *string;
2151   } value;
2152 } *gpgme_conf_arg_t;
2153
2154
2155 /* The flags of a configuration option.  See the gpg-conf
2156    documentation for details.  */
2157 #define GPGME_CONF_GROUP        (1 << 0)
2158 #define GPGME_CONF_OPTIONAL     (1 << 1)
2159 #define GPGME_CONF_LIST         (1 << 2)
2160 #define GPGME_CONF_RUNTIME      (1 << 3)
2161 #define GPGME_CONF_DEFAULT      (1 << 4)
2162 #define GPGME_CONF_DEFAULT_DESC (1 << 5)
2163 #define GPGME_CONF_NO_ARG_DESC  (1 << 6)
2164 #define GPGME_CONF_NO_CHANGE    (1 << 7)
2165
2166
2167 /* The representation of a single configuration option.  See the
2168    gpg-conf documentation for details.  */
2169 typedef struct gpgme_conf_opt
2170 {
2171   struct gpgme_conf_opt *next;
2172
2173   /* The option name.  */
2174   char *name;
2175
2176   /* The flags for this option.  */
2177   unsigned int flags;
2178
2179   /* The level of this option.  */
2180   gpgme_conf_level_t level;
2181
2182   /* The localized description of this option.  */
2183   char *description;
2184
2185   /* The type and alternate type of this option.  */
2186   gpgme_conf_type_t type;
2187   gpgme_conf_type_t alt_type;
2188
2189   /* The localized (short) name of the argument, if any.  */
2190   char *argname;
2191
2192   /* The default value.  */
2193   gpgme_conf_arg_t default_value;
2194   char *default_description;
2195
2196   /* The default value if the option is not set.  */
2197   gpgme_conf_arg_t no_arg_value;
2198   char *no_arg_description;
2199
2200   /* The current value if the option is set.  */
2201   gpgme_conf_arg_t value;
2202
2203   /* The new value, if any.  NULL means reset to default.  */
2204   int change_value;
2205   gpgme_conf_arg_t new_value;
2206
2207   /* Free for application use.  */
2208   void *user_data;
2209 } *gpgme_conf_opt_t;
2210
2211
2212 /* The representation of a component that can be configured.  See the
2213    gpg-conf documentation for details.  */
2214 typedef struct gpgme_conf_comp
2215 {
2216   struct gpgme_conf_comp *next;
2217
2218   /* Internal to GPGME, do not use!  */
2219   gpgme_conf_opt_t *_last_opt_p;
2220
2221   /* The component name.  */
2222   char *name;
2223
2224   /* A human-readable description for the component.  */
2225   char *description;
2226
2227   /* The program name (an absolute path to the program).  */
2228   char *program_name;
2229
2230   /* A linked list of options for this component.  */
2231   struct gpgme_conf_opt *options;
2232 } *gpgme_conf_comp_t;
2233
2234
2235 /* Allocate a new gpgme_conf_arg_t.  If VALUE is NULL, a "no arg
2236    default" is prepared.  If type is a string type, VALUE should point
2237    to the string.  Else, it should point to an unsigned or signed
2238    integer respectively.  */
2239 gpgme_error_t gpgme_conf_arg_new (gpgme_conf_arg_t *arg_p,
2240                                   gpgme_conf_type_t type, const void *value);
2241
2242 /* This also releases all chained argument structures!  */
2243 void gpgme_conf_arg_release (gpgme_conf_arg_t arg, gpgme_conf_type_t type);
2244
2245 /* Register a change for the value of OPT to ARG.  If RESET is 1 (do
2246    not use any values but 0 or 1), ARG is ignored and the option is
2247    not changed (reverting a previous change).  Otherwise, if ARG is
2248    NULL, the option is cleared or reset to its default.  */
2249 gpgme_error_t gpgme_conf_opt_change (gpgme_conf_opt_t opt, int reset,
2250                                      gpgme_conf_arg_t arg);
2251
2252 /* Release a set of configurations.  */
2253 void gpgme_conf_release (gpgme_conf_comp_t conf);
2254
2255 /* Retrieve the current configurations.  */
2256 gpgme_error_t gpgme_op_conf_load (gpgme_ctx_t ctx, gpgme_conf_comp_t *conf_p);
2257
2258 /* Save the configuration of component comp.  This function does not
2259    follow chained components!  */
2260 gpgme_error_t gpgme_op_conf_save (gpgme_ctx_t ctx, gpgme_conf_comp_t comp);
2261
2262
2263 \f
2264 /*
2265  * Various functions.
2266  */
2267
2268 /* Set special global flags; consult the manual before use.  */
2269 int gpgme_set_global_flag (const char *name, const char *value);
2270
2271 /* Check that the library fulfills the version requirement.  Note:
2272    This is here only for the case where a user takes a pointer from
2273    the old version of this function.  The new version and macro for
2274    run-time checks are below.  */
2275 const char *gpgme_check_version (const char *req_version);
2276
2277 /* Check that the library fulfills the version requirement and check
2278    for struct layout mismatch involving bitfields.  */
2279 const char *gpgme_check_version_internal (const char *req_version,
2280                                           size_t offset_sig_validity);
2281
2282 #define gpgme_check_version(req_version)                                \
2283   gpgme_check_version_internal (req_version,                            \
2284                                 offsetof (struct _gpgme_signature, validity))
2285
2286 /* Return the default values for various directories.  */
2287 const char *gpgme_get_dirinfo (const char *what);
2288
2289 /* Get the information about the configured and installed engines.  A
2290    pointer to the first engine in the statically allocated linked list
2291    is returned in *INFO.  If an error occurs, it is returned.  The
2292    returned data is valid until the next gpgme_set_engine_info.  */
2293 gpgme_error_t gpgme_get_engine_info (gpgme_engine_info_t *engine_info);
2294
2295 /* Set the default engine info for the protocol PROTO to the file name
2296    FILE_NAME and the home directory HOME_DIR.  */
2297 gpgme_error_t gpgme_set_engine_info (gpgme_protocol_t proto,
2298                                      const char *file_name,
2299                                      const char *home_dir);
2300
2301 /* Verify that the engine implementing PROTO is installed and
2302    available.  */
2303 gpgme_error_t gpgme_engine_check_version (gpgme_protocol_t proto);
2304
2305
2306 /* Reference counting for result objects.  */
2307 void gpgme_result_ref (void *result);
2308 void gpgme_result_unref (void *result);
2309
2310 /* Return a public key algorithm string (e.g. "rsa2048").  Caller must
2311    free using gpgme_free.  */
2312 char *gpgme_pubkey_algo_string (gpgme_subkey_t subkey);
2313
2314 /* Return a statically allocated string with the name of the public
2315    key algorithm ALGO, or NULL if that name is not known.  */
2316 const char *gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo);
2317
2318 /* Return a statically allocated string with the name of the hash
2319    algorithm ALGO, or NULL if that name is not known.  */
2320 const char *gpgme_hash_algo_name (gpgme_hash_algo_t algo);
2321
2322
2323 \f
2324 /*
2325  * Deprecated types.
2326  */
2327 typedef gpgme_ctx_t GpgmeCtx _GPGME_DEPRECATED;
2328 typedef gpgme_data_t GpgmeData _GPGME_DEPRECATED;
2329 typedef gpgme_error_t GpgmeError _GPGME_DEPRECATED;
2330 typedef gpgme_data_encoding_t GpgmeDataEncoding _GPGME_DEPRECATED;
2331 typedef gpgme_pubkey_algo_t GpgmePubKeyAlgo _GPGME_DEPRECATED;
2332 typedef gpgme_hash_algo_t GpgmeHashAlgo _GPGME_DEPRECATED;
2333 typedef gpgme_sig_stat_t GpgmeSigStat _GPGME_DEPRECATED;
2334 typedef gpgme_sig_mode_t GpgmeSigMode _GPGME_DEPRECATED;
2335 typedef gpgme_attr_t GpgmeAttr _GPGME_DEPRECATED;
2336 typedef gpgme_validity_t GpgmeValidity _GPGME_DEPRECATED;
2337 typedef gpgme_protocol_t GpgmeProtocol _GPGME_DEPRECATED;
2338 typedef gpgme_engine_info_t GpgmeEngineInfo _GPGME_DEPRECATED;
2339 typedef gpgme_subkey_t GpgmeSubkey _GPGME_DEPRECATED;
2340 typedef gpgme_key_sig_t GpgmeKeySig _GPGME_DEPRECATED;
2341 typedef gpgme_user_id_t GpgmeUserID _GPGME_DEPRECATED;
2342 typedef gpgme_key_t GpgmeKey _GPGME_DEPRECATED;
2343 typedef gpgme_passphrase_cb_t GpgmePassphraseCb _GPGME_DEPRECATED;
2344 typedef gpgme_progress_cb_t GpgmeProgressCb _GPGME_DEPRECATED;
2345 typedef gpgme_io_cb_t GpgmeIOCb _GPGME_DEPRECATED;
2346 typedef gpgme_register_io_cb_t GpgmeRegisterIOCb _GPGME_DEPRECATED;
2347 typedef gpgme_remove_io_cb_t GpgmeRemoveIOCb _GPGME_DEPRECATED;
2348 typedef gpgme_event_io_t GpgmeEventIO _GPGME_DEPRECATED;
2349 typedef gpgme_event_io_cb_t GpgmeEventIOCb _GPGME_DEPRECATED;
2350 #define GpgmeIOCbs gpgme_io_cbs
2351 typedef gpgme_data_read_cb_t GpgmeDataReadCb _GPGME_DEPRECATED;
2352 typedef gpgme_data_write_cb_t GpgmeDataWriteCb _GPGME_DEPRECATED;
2353 typedef gpgme_data_seek_cb_t GpgmeDataSeekCb _GPGME_DEPRECATED;
2354 typedef gpgme_data_release_cb_t GpgmeDataReleaseCb _GPGME_DEPRECATED;
2355 #define GpgmeDataCbs gpgme_data_cbs
2356 typedef gpgme_encrypt_result_t GpgmeEncryptResult _GPGME_DEPRECATED;
2357 typedef gpgme_sig_notation_t GpgmeSigNotation _GPGME_DEPRECATED;
2358 typedef gpgme_signature_t GpgmeSignature _GPGME_DEPRECATED;
2359 typedef gpgme_verify_result_t GpgmeVerifyResult _GPGME_DEPRECATED;
2360 typedef gpgme_import_status_t GpgmeImportStatus _GPGME_DEPRECATED;
2361 typedef gpgme_import_result_t GpgmeImportResult _GPGME_DEPRECATED;
2362 typedef gpgme_genkey_result_t GpgmeGenKeyResult _GPGME_DEPRECATED;
2363 typedef gpgme_trust_item_t GpgmeTrustItem _GPGME_DEPRECATED;
2364 typedef gpgme_status_code_t GpgmeStatusCode _GPGME_DEPRECATED;
2365
2366 #ifdef __cplusplus
2367 }
2368 #endif
2369 #endif /* GPGME_H */
2370 /*
2371 @emacs_local_vars_begin@
2372 @emacs_local_vars_read_only@
2373 @emacs_local_vars_end@
2374 */