Insert platform dependent typedefs into gpgme.h
[gpgme.git] / src / gpgme.h.in
index d7d1efd1bc686d7934cf9162eecd62e5fe989963..e75de194870af8da3076aabb9a13883cee825310 100644 (file)
@@ -1,22 +1,23 @@
 /* gpgme.h - Public interface to GnuPG Made Easy.                   -*- c -*-
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2009 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2009
+                 2010 g10 Code GmbH
 
    This file is part of GPGME.
+
    GPGME is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as
    published by the Free Software Foundation; either version 2.1 of
    the License, or (at your option) any later version.
-   
+
    GPGME is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
-   
+
    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
    File: @configure_input@  */
 
 #ifndef GPGME_H
 /* Include stdio.h for the FILE type definition.  */
 #include <stdio.h>
 
-#ifdef _MSC_VER
-  typedef long off_t;
-  typedef long ssize_t;
-#else
-# include <sys/types.h>
-#endif
+@INSERT__TYPEDEFS_FOR_GPGME_H@
+
+#include <time.h>
 
 #include <gpg-error.h>
 
@@ -66,6 +64,14 @@ extern "C" {
 #define _GPGME_DEPRECATED
 #endif
 
+/* The macro _GPGME_DEPRECATED_OUTSIDE_GPGME suppresses warnings for
+   fields we must access in GPGME for ABI compatibility.  */
+#ifdef _GPGME_IN_GPGME
+#define _GPGME_DEPRECATED_OUTSIDE_GPGME
+#else
+#define _GPGME_DEPRECATED_OUTSIDE_GPGME _GPGME_DEPRECATED
+#endif
+
 \f
 /* The version of this header should match the one of the library.  Do
    not use this symbol in your application, use gpgme_check_version
@@ -153,30 +159,41 @@ const char *gpgme_strerror (gpgme_error_t err);
    beginning of the error string as fits into the buffer.  */
 int gpgme_strerror_r (gpg_error_t err, char *buf, size_t buflen);
 
-
 /* Return a pointer to a string containing a description of the error
    source in the error value ERR.  */
 const char *gpgme_strsource (gpgme_error_t err);
 
-
 /* Retrieve the error code for the system error ERR.  This returns
    GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped (report
    this).  */
 gpgme_err_code_t gpgme_err_code_from_errno (int err);
 
-
 /* Retrieve the system error for the error code CODE.  This returns 0
    if CODE is not a system error code.  */
 int gpgme_err_code_to_errno (gpgme_err_code_t code);
 
-  
+/* Retrieve the error code directly from the ERRNO variable.  This
+   returns GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped
+   (report this) and GPG_ERR_MISSING_ERRNO if ERRNO has the value 0. */
+gpgme_err_code_t gpgme_err_code_from_syserror (void);
+
+/* Set the ERRNO variable.  This function is the preferred way to set
+   ERRNO due to peculiarities on WindowsCE.  */
+void gpgme_err_set_errno (int err);
+
 /* Return an error value with the error source SOURCE and the system
-   error ERR.  */
+   error ERR.  FIXME: Should be inline.  */
 gpgme_error_t gpgme_err_make_from_errno (gpgme_err_source_t source, int err);
 
+/* Return an error value with the system error ERR.  FIXME: Should be inline.  */
+gpgme_error_t gpgme_error_from_errno (int err);
 
-/* Return an error value with the system error ERR.  */
-gpgme_err_code_t gpgme_error_from_errno (int err);
+
+static _GPGME_INLINE gpgme_error_t
+gpgme_error_from_syserror (void)
+{
+  return gpgme_error (gpgme_err_code_from_syserror ());
+}
 
 \f
 /* The possible encoding mode of gpgme_data_t objects.  */
@@ -201,7 +218,9 @@ typedef enum
     GPGME_PK_RSA_S = 3,
     GPGME_PK_ELG_E = 16,
     GPGME_PK_DSA   = 17,
-    GPGME_PK_ELG   = 20
+    GPGME_PK_ELG   = 20,
+    GPGME_PK_ECDSA = 301,
+    GPGME_PK_ECDH  = 302
   }
 gpgme_pubkey_algo_t;
 
@@ -209,7 +228,7 @@ gpgme_pubkey_algo_t;
 /* Hash algorithms from libgcrypt.  */
 typedef enum
   {
-    GPGME_MD_NONE          = 0,  
+    GPGME_MD_NONE          = 0,
     GPGME_MD_MD5           = 1,
     GPGME_MD_SHA1          = 2,
     GPGME_MD_RMD160        = 3,
@@ -316,6 +335,9 @@ typedef enum
     GPGME_PROTOCOL_CMS     = 1,
     GPGME_PROTOCOL_GPGCONF = 2,  /* Special code for gpgconf.  */
     GPGME_PROTOCOL_ASSUAN  = 3,  /* Low-level access to an Assuan server.  */
+    GPGME_PROTOCOL_G13     = 4,
+    GPGME_PROTOCOL_UISERVER= 5,
+    GPGME_PROTOCOL_DEFAULT = 254,
     GPGME_PROTOCOL_UNKNOWN = 255
   }
 gpgme_protocol_t;
@@ -334,12 +356,13 @@ typedef unsigned int gpgme_keylist_mode_t;
 \f
 /* The available export mode flags.  */
 #define GPGME_EXPORT_MODE_EXTERN                2
+#define GPGME_EXPORT_MODE_MINIMAL               4
 
 typedef unsigned int gpgme_export_mode_t;
 
 \f
 /* Flags for the audit log functions.  */
-#define GPGME_AUDITLOG_HTML      1 
+#define GPGME_AUDITLOG_HTML      1
 #define GPGME_AUDITLOG_WITH_HELP 128
 
 \f
@@ -477,7 +500,10 @@ typedef enum
     GPGME_STATUS_PKA_TRUST_BAD = 79,
     GPGME_STATUS_PKA_TRUST_GOOD = 80,
 
-    GPGME_STATUS_PLAINTEXT = 81
+    GPGME_STATUS_PLAINTEXT = 81,
+    GPGME_STATUS_INV_SGNR = 82,
+    GPGME_STATUS_NO_SGNR = 83,
+    GPGME_STATUS_SUCCESS = 84
   }
 gpgme_status_code_t;
 
@@ -492,7 +518,7 @@ struct _gpgme_engine_info
 
   /* The file name of the engine binary.  */
   char *file_name;
-  
+
   /* The version string of the installed engine.  */
   char *version;
 
@@ -545,7 +571,7 @@ struct _gpgme_subkey
 
   /* Internal to GPGME, do not use.  */
   unsigned int _unused : 21;
-  
+
   /* Public key algorithm supported by this subkey.  */
   gpgme_pubkey_algo_t pubkey_algo;
 
@@ -615,7 +641,7 @@ struct _gpgme_key_sig
   unsigned int _obsolete_class _GPGME_DEPRECATED;
 #else
   /* Must be set to SIG_CLASS below.  */
-  unsigned int class _GPGME_DEPRECATED;
+  unsigned int class _GPGME_DEPRECATED_OUTSIDE_GPGME;
 #endif
 
   /* The user ID string.  */
@@ -657,7 +683,7 @@ struct _gpgme_user_id
   unsigned int _unused : 30;
 
   /* The validity of the user ID.  */
-  gpgme_validity_t validity; 
+  gpgme_validity_t validity;
 
   /* The user ID string.  */
   char *uid;
@@ -791,6 +817,17 @@ gpgme_error_t gpgme_set_protocol (gpgme_ctx_t ctx, gpgme_protocol_t proto);
 /* Get the protocol used with CTX */
 gpgme_protocol_t gpgme_get_protocol (gpgme_ctx_t ctx);
 
+/* Set the crypto protocol to be used by CTX to PROTO.
+   gpgme_set_protocol actually sets the backend engine.  This sets the
+   crypto protocol used in engines that support more than one crypto
+   prococol (for example, an UISERVER can support OpenPGP and CMS).
+   This is reset to the default with gpgme_set_protocol.  */
+gpgme_error_t gpgme_set_sub_protocol (gpgme_ctx_t ctx,
+                                     gpgme_protocol_t proto);
+
+/* Get the sub protocol.  */
+gpgme_protocol_t gpgme_get_sub_protocol (gpgme_ctx_t ctx);
+
 /* Get the string describing protocol PROTO, or NULL if invalid.  */
 const char *gpgme_get_protocol_name (gpgme_protocol_t proto);
 
@@ -949,6 +986,17 @@ typedef enum
   }
 gpgme_event_io_t;
 
+struct gpgme_io_event_done_data
+{
+  /* A fatal IPC error or an operational error in state-less
+     protocols.  */
+  gpgme_error_t err;
+
+  /* An operational errors in session-based protocols.  */
+  gpgme_error_t op_err;
+};
+typedef struct gpgme_io_event_done_data *gpgme_io_event_done_data_t;
+
 /* The type of a function that is called when a context finished an
    operation.  */
 typedef void (*gpgme_event_io_cb_t) (void *data, gpgme_event_io_t type,
@@ -979,6 +1027,9 @@ ssize_t gpgme_io_write (int fd, const void *buffer, size_t count);
    the pending operation to finish.  */
 gpgme_ctx_t gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang);
 
+gpgme_ctx_t gpgme_wait_ext (gpgme_ctx_t ctx, gpgme_error_t *status,
+                           gpgme_error_t *op_err, int hang);
+
 \f
 /* Functions to handle data objects.  */
 
@@ -1183,7 +1234,9 @@ gpgme_encrypt_result_t gpgme_op_encrypt_result (gpgme_ctx_t ctx);
 typedef enum
   {
     GPGME_ENCRYPT_ALWAYS_TRUST = 1,
-    GPGME_ENCRYPT_NO_ENCRYPT_TO = 2
+    GPGME_ENCRYPT_NO_ENCRYPT_TO = 2,
+    GPGME_ENCRYPT_PREPARE = 4,
+    GPGME_ENCRYPT_EXPECT_SIGN = 8
   }
 gpgme_encrypt_flags_t;
 
@@ -1294,7 +1347,7 @@ struct _gpgme_new_signature
   unsigned int _obsolete_class_2;
 #else
   /* Must be set to SIG_CLASS below.  */
-  unsigned int class _GPGME_DEPRECATED;
+  unsigned int class _GPGME_DEPRECATED_OUTSIDE_GPGME;
 #endif
 
   /* Crypto backend specific signature class.  */
@@ -1624,6 +1677,14 @@ gpgme_error_t gpgme_op_keylist_next (gpgme_ctx_t ctx, gpgme_key_t *r_key);
 /* Terminate a pending keylist operation within CTX.  */
 gpgme_error_t gpgme_op_keylist_end (gpgme_ctx_t ctx);
 
+/* Change the passphrase for KEY.  FLAGS is reserved for future use
+   and must be passed as 0.  */
+gpgme_error_t gpgme_op_passwd_start (gpgme_ctx_t ctx, gpgme_key_t key,
+                                     unsigned int flags);
+gpgme_error_t gpgme_op_passwd (gpgme_ctx_t ctx, gpgme_key_t key,
+                               unsigned int flags);
+
+
 \f
 /* Trust items and operations.  */
 
@@ -1652,7 +1713,7 @@ struct _gpgme_trust_item
 
   /* The calculated validity.  */
   char *validity;
+
   /* Internal to GPGME, do not use.  */
   char _validity[2];
 
@@ -1706,13 +1767,13 @@ int gpgme_trust_item_get_int_attr (gpgme_trust_item_t item, _gpgme_attr_t what,
    available GPG_ERR_NO_DATA is returned.  */
 gpgme_error_t gpgme_op_getauditlog_start (gpgme_ctx_t ctx, gpgme_data_t output,
                                           unsigned int flags);
-gpgme_error_t gpgme_op_getauditlog (gpgme_ctx_t ctx, gpgme_data_t output, 
+gpgme_error_t gpgme_op_getauditlog (gpgme_ctx_t ctx, gpgme_data_t output,
                                     unsigned int flags);
 
 
 \f
 /* Low-level Assuan protocol access.  */
-typedef gpgme_error_t (*gpgme_assuan_data_cb_t) 
+typedef gpgme_error_t (*gpgme_assuan_data_cb_t)
      (void *opaque, const void *data, size_t datalen);
 
 typedef gpgme_error_t (*gpgme_assuan_inquire_cb_t)
@@ -1722,21 +1783,9 @@ typedef gpgme_error_t (*gpgme_assuan_inquire_cb_t)
 typedef gpgme_error_t (*gpgme_assuan_status_cb_t)
      (void *opaque, const char *status, const char *args);
 
-struct _gpgme_op_assuan_result
-{
-  /* The result of the actual assuan command.  An OK is indicated by a
-     value of 0 and an ERR by the respective error error value.  */
-  gpgme_error_t err;
-};
-typedef struct _gpgme_op_assuan_result *gpgme_assuan_result_t;
-
-
-/* Return the result of the last Assuan command. */
-gpgme_assuan_result_t gpgme_op_assuan_result (gpgme_ctx_t ctx);
-
 /* Send the Assuan COMMAND and return results via the callbacks.
    Asynchronous variant. */
-gpgme_error_t gpgme_op_assuan_transact_start (gpgme_ctx_t ctx, 
+gpgme_error_t gpgme_op_assuan_transact_start (gpgme_ctx_t ctx,
                                               const char *command,
                                               gpgme_assuan_data_cb_t data_cb,
                                               void *data_cb_value,
@@ -1747,16 +1796,61 @@ gpgme_error_t gpgme_op_assuan_transact_start (gpgme_ctx_t ctx,
 
 /* Send the Assuan COMMAND and return results via the callbacks.
    Synchronous variant. */
-gpgme_error_t gpgme_op_assuan_transact (gpgme_ctx_t ctx, 
-                                        const char *command,
-                                        gpgme_assuan_data_cb_t data_cb,
-                                        void *data_cb_value,
-                                        gpgme_assuan_inquire_cb_t inq_cb,
-                                        void *inq_cb_value,
-                                        gpgme_assuan_status_cb_t stat_cb,
-                                        void *stat_cb_value);
+gpgme_error_t gpgme_op_assuan_transact_ext (gpgme_ctx_t ctx,
+                                           const char *command,
+                                           gpgme_assuan_data_cb_t data_cb,
+                                           void *data_cb_value,
+                                           gpgme_assuan_inquire_cb_t inq_cb,
+                                           void *inq_cb_value,
+                                           gpgme_assuan_status_cb_t stat_cb,
+                                           void *stat_cb_value,
+                                           gpgme_error_t *op_err);
+
+/* Compat.  */
+struct _gpgme_op_assuan_result
+{
+  /* Deprecated.  Use the second value in a DONE event or the
+     synchronous variant gpgme_op_assuan_transact_ext.  */
+  gpgme_error_t err _GPGME_DEPRECATED_OUTSIDE_GPGME;
+};
+typedef struct _gpgme_op_assuan_result *gpgme_assuan_result_t;
 
 
+/* Return the result of the last Assuan command. */
+gpgme_assuan_result_t gpgme_op_assuan_result (gpgme_ctx_t ctx)
+  _GPGME_DEPRECATED;
+
+gpgme_error_t
+gpgme_op_assuan_transact (gpgme_ctx_t ctx,
+                             const char *command,
+                             gpgme_assuan_data_cb_t data_cb,
+                             void *data_cb_value,
+                             gpgme_assuan_inquire_cb_t inq_cb,
+                             void *inq_cb_value,
+                             gpgme_assuan_status_cb_t status_cb,
+                             void *status_cb_value) _GPGME_DEPRECATED;
+
+\f
+/* Crypto container support.  */
+struct _gpgme_op_vfs_mount_result
+{
+  char *mount_dir;
+};
+typedef struct _gpgme_op_vfs_mount_result *gpgme_vfs_mount_result_t;
+
+gpgme_vfs_mount_result_t gpgme_op_vfs_mount_result (gpgme_ctx_t ctx);
+
+/* The container is automatically unmounted when the context is reset
+   or destroyed.  Transmission errors are returned directly,
+   operational errors are returned in OP_ERR.  */
+gpgme_error_t gpgme_op_vfs_mount (gpgme_ctx_t ctx, const char *container_file,
+                                 const char *mount_dir, unsigned int flags,
+                                 gpgme_error_t *op_err);
+
+gpgme_error_t gpgme_op_vfs_create (gpgme_ctx_t ctx, gpgme_key_t recp[],
+                                  const char *container_file,
+                                  unsigned int flags, gpgme_error_t *op_err);
+
 \f
 /* Interface to gpgconf(1).  */
 
@@ -1832,7 +1926,7 @@ typedef struct gpgme_conf_arg
 typedef struct gpgme_conf_opt
 {
   struct gpgme_conf_opt *next;
-  
+
   /* The option name.  */
   char *name;
 
@@ -1855,7 +1949,7 @@ typedef struct gpgme_conf_opt
   /* The default value.  */
   gpgme_conf_arg_t default_value;
   char *default_description;
-  
+
   /* The default value if the option is not set.  */
   gpgme_conf_arg_t no_arg_value;
   char *no_arg_description;
@@ -1888,7 +1982,7 @@ typedef struct gpgme_conf_comp
   char *description;
 
   /* The program name (an absolute path to the program).  */
-  char *program_name;  
+  char *program_name;
 
   /* A linked list of options for this component.  */
   struct gpgme_conf_opt *options;
@@ -1900,7 +1994,7 @@ typedef struct gpgme_conf_comp
    to the string.  Else, it should point to an unsigned or signed
    integer respectively.  */
 gpgme_error_t gpgme_conf_arg_new (gpgme_conf_arg_t *arg_p,
-                                 gpgme_conf_type_t type, void *value);
+                                 gpgme_conf_type_t type, const void *value);
 
 /* This also releases all chained argument structures!  */
 void gpgme_conf_arg_release (gpgme_conf_arg_t arg, gpgme_conf_type_t type);
@@ -1914,7 +2008,7 @@ gpgme_error_t gpgme_conf_opt_change (gpgme_conf_opt_t opt, int reset,
 
 /* Release a set of configurations.  */
 void gpgme_conf_release (gpgme_conf_comp_t conf);
+
 /* Retrieve the current configurations.  */
 gpgme_error_t gpgme_op_conf_load (gpgme_ctx_t ctx, gpgme_conf_comp_t *conf_p);
 
@@ -1922,6 +2016,13 @@ gpgme_error_t gpgme_op_conf_load (gpgme_ctx_t ctx, gpgme_conf_comp_t *conf_p);
    follow chained components!  */
 gpgme_error_t gpgme_op_conf_save (gpgme_ctx_t ctx, gpgme_conf_comp_t comp);
 
+\f
+/* UIServer support.  */
+
+/* Create a dummy key to specify an email address.  */
+gpgme_error_t gpgme_key_from_uid (gpgme_key_t *key, const char *name);
+
+
 \f
 /* Various functions.  */
 
@@ -2008,3 +2109,8 @@ typedef gpgme_status_code_t GpgmeStatusCode _GPGME_DEPRECATED;
 }
 #endif
 #endif /* GPGME_H */
+/*
+@emacs_local_vars_begin@
+@emacs_local_vars_read_only@
+@emacs_local_vars_end@
+*/