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