2007-09-27 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / gpgme.h
index 0893096..c0bc8e3 100644 (file)
@@ -1,6 +1,6 @@
 /* gpgme.h - Public interface to GnuPG Made Easy.
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007 g10 Code GmbH
 
    This file is part of GPGME.
  
@@ -16,8 +16,8 @@
    
    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+   MA 02110-1301, USA.  */
 
 #ifndef GPGME_H
 #define GPGME_H
@@ -40,6 +40,8 @@
 # include <sys/types.h>
 #endif
 
+#include <gpg-error.h>
+
 #ifdef __cplusplus
 extern "C" {
 #if 0 /* just to make Emacs auto-indent happy */
@@ -47,7 +49,6 @@ extern "C" {
 #endif
 #endif /* __cplusplus */
 
-#include <gpg-error.h>
 
 \f
 /* Check for compiler features.  */
@@ -72,7 +73,7 @@ extern "C" {
    AM_PATH_GPGME macro) check that this header matches the installed
    library.  Warning: Do not edit the next line.  configure will do
    that for you!  */
-#define GPGME_VERSION "1.1.0-cvs"
+#define GPGME_VERSION "1.1.6-svn1264"
 
 
 \f
@@ -299,20 +300,62 @@ gpgme_validity_t;
 typedef enum
   {
     GPGME_PROTOCOL_OpenPGP = 0,  /* The default mode.  */
-    GPGME_PROTOCOL_CMS     = 1
+    GPGME_PROTOCOL_CMS     = 1,
+    GPGME_PROTOCOL_UNKNOWN = 255
   }
 gpgme_protocol_t;
 
 \f
 /* The available keylist mode flags.  */
-#define GPGME_KEYLIST_MODE_LOCAL       1
-#define GPGME_KEYLIST_MODE_EXTERN      2
-#define GPGME_KEYLIST_MODE_SIGS                4
-#define GPGME_KEYLIST_MODE_VALIDATE    256
+#define GPGME_KEYLIST_MODE_LOCAL               1
+#define GPGME_KEYLIST_MODE_EXTERN              2
+#define GPGME_KEYLIST_MODE_SIGS                        4
+#define GPGME_KEYLIST_MODE_SIG_NOTATIONS       8
+#define GPGME_KEYLIST_MODE_VALIDATE            256
 
 typedef unsigned int gpgme_keylist_mode_t;
 
 \f
+/* Signature notations.  */
+
+/* The available signature notation flags.  */
+#define GPGME_SIG_NOTATION_HUMAN_READABLE      1
+#define GPGME_SIG_NOTATION_CRITICAL            2
+
+typedef unsigned int gpgme_sig_notation_flags_t;
+
+struct _gpgme_sig_notation
+{
+  struct _gpgme_sig_notation *next;
+
+  /* If NAME is a null pointer, then VALUE contains a policy URL
+     rather than a notation.  */
+  char *name;
+
+  /* The value of the notation data.  */
+  char *value;
+
+  /* The length of the name of the notation data.  */
+  int name_len;
+
+  /* The length of the value of the notation data.  */
+  int value_len;
+
+  /* The accumulated flags.  */
+  gpgme_sig_notation_flags_t flags;
+
+  /* Notation data is human-readable.  */
+  unsigned int human_readable : 1;
+
+  /* Notation data is critical.  */
+  unsigned int critical : 1;
+
+  /* Internal to GPGME, do not use.  */
+  int _unused : 30;
+};
+typedef struct _gpgme_sig_notation *gpgme_sig_notation_t;
+
+\f
 /* The possible stati for the edit operation.  */
 typedef enum
   {
@@ -404,6 +447,8 @@ typedef enum
     GPGME_STATUS_SC_OP_SUCCESS,
     GPGME_STATUS_CARDCTRL,
     GPGME_STATUS_BACKUP_KEY_CREATED,
+    GPGME_STATUS_PKA_TRUST_BAD,
+    GPGME_STATUS_PKA_TRUST_GOOD,
 
     GPGME_STATUS_PLAINTEXT
   }
@@ -465,8 +510,11 @@ struct _gpgme_subkey
   /* True if subkey can be used for authentication.  */
   unsigned int can_authenticate : 1;
 
+  /* True if subkey is qualified for signatures according to German law.  */
+  unsigned int is_qualified : 1;
+
   /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 23;
+  unsigned int _unused : 22;
   
   /* Public key algorithm supported by this subkey.  */
   gpgme_pubkey_algo_t pubkey_algo;
@@ -551,6 +599,12 @@ struct _gpgme_key_sig
 
   /* Crypto backend specific signature class.  */
   unsigned int sig_class;
+
+  /* Notation data and policy URLs.  */
+  gpgme_sig_notation_t notations;
+
+  /* Internal to GPGME, do not use.  */
+  gpgme_sig_notation_t _last_notation;
 };
 typedef struct _gpgme_key_sig *gpgme_key_sig_t;
 
@@ -626,8 +680,11 @@ struct _gpgme_key
   /* True if key can be used for authentication.  */
   unsigned int can_authenticate : 1;
 
+  /* True if subkey is qualified for signatures according to German law.  */
+  unsigned int is_qualified : 1;
+
   /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 23;
+  unsigned int _unused : 22;
 
   /* This is the protocol supported by this key.  */
   gpgme_protocol_t protocol;
@@ -813,6 +870,22 @@ gpgme_error_t gpgme_get_sig_key (gpgme_ctx_t ctx, int idx, gpgme_key_t *r_key)
      _GPGME_DEPRECATED;
 
 \f
+/* Clear all notation data from the context.  */
+void gpgme_sig_notation_clear (gpgme_ctx_t ctx);
+
+/* Add the human-readable notation data with name NAME and value VALUE
+   to the context CTX, using the flags FLAGS.  If NAME is NULL, then
+   VALUE should be a policy URL.  The flag
+   GPGME_SIG_NOTATION_HUMAN_READABLE is forced to be true for notation
+   data, and false for policy URLs.  */
+gpgme_error_t gpgme_sig_notation_add (gpgme_ctx_t ctx, const char *name,
+                                     const char *value,
+                                     gpgme_sig_notation_flags_t flags);
+
+/* Get the sig notations for this context.  */
+gpgme_sig_notation_t gpgme_sig_notation_get (gpgme_ctx_t ctx);
+
+\f
 /* Run control.  */
 
 /* The type of an I/O callback function.  */
@@ -927,10 +1000,13 @@ gpgme_error_t gpgme_data_new_from_mem (gpgme_data_t *r_dh,
                                       int copy);
 
 /* Destroy the data buffer DH and return a pointer to its content.
-   The memory has be to released with free by the user.  It's size is
-   returned in R_LEN.  */
+   The memory has be to released with gpgme_free() by the user.  It's
+   size is returned in R_LEN.  */
 char *gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len);
 
+/* Release the memory returned by gpgme_data_release_and_get_mem().  */
+void gpgme_free (void *buffer);
+
 gpgme_error_t gpgme_data_new_from_cbs (gpgme_data_t *dh,
                                       gpgme_data_cbs_t cbs,
                                       void *handle);
@@ -946,6 +1022,14 @@ gpgme_data_encoding_t gpgme_data_get_encoding (gpgme_data_t dh);
 gpgme_error_t gpgme_data_set_encoding (gpgme_data_t dh,
                                       gpgme_data_encoding_t enc);
 
+/* Get the file name associated with the data object with handle DH, or
+   NULL if there is none.  */
+char *gpgme_data_get_file_name (gpgme_data_t dh);
+
+/* Set the file name associated with the data object with handle DH to
+   FILE_NAME.  */
+gpgme_error_t gpgme_data_set_file_name (gpgme_data_t dh,
+                                       const char *file_name);
 
 
 /* Create a new data buffer which retrieves the data from the callback
@@ -1113,8 +1197,9 @@ struct _gpgme_op_decrypt_result
 
   gpgme_recipient_t recipients;
 
-  /* The original filename of the plaintext message, if available.  */
-  char *plaintext_filename;
+  /* The original file name of the plaintext message, if
+     available.  */
+  char *file_name;
 };
 typedef struct _gpgme_op_decrypt_result *gpgme_decrypt_result_t;
 
@@ -1194,16 +1279,6 @@ gpgme_error_t gpgme_op_sign (gpgme_ctx_t ctx,
 
 \f
 /* Verify.  */
-struct _gpgme_sig_notation
-{
-  struct _gpgme_sig_notation *next;
-
-  /* If NAME is a null pointer, then VALUE contains a policy URL
-     rather than a notation.  */
-  char *name;
-  char *value;
-};
-typedef struct _gpgme_sig_notation *gpgme_sig_notation_t;
 
 /* Flags used for the SUMMARY field in a gpgme_signature_t.  */
 typedef enum
@@ -1247,8 +1322,14 @@ struct _gpgme_signature
   /* Key should not have been used for signing.  */
   unsigned int wrong_key_usage : 1;
 
+  /* PKA status: 0 = not available, 1 = bad, 2 = okay, 3 = RFU. */
+  unsigned int pka_trust : 2;
+
+  /* Validity has been verified using the chain model. */
+  unsigned int chain_model : 1;
+
   /* Internal to GPGME, do not use.  */
-  int _unused : 31;
+  int _unused : 28;
 
   gpgme_validity_t validity;
   gpgme_error_t validity_reason;
@@ -1258,6 +1339,9 @@ struct _gpgme_signature
 
   /* The hash algorithm used to create the signature.  */
   gpgme_hash_algo_t hash_algo;
+
+  /* The mailbox from the PKA information or NULL. */
+  char *pka_address;
 };
 typedef struct _gpgme_signature *gpgme_signature_t;
 
@@ -1265,8 +1349,9 @@ struct _gpgme_op_verify_result
 {
   gpgme_signature_t signatures;
 
-  /* The original filename of the plaintext message, if available.  */
-  char *plaintext_filename;
+  /* The original file name of the plaintext message, if
+     available.  */
+  char *file_name;
 };
 typedef struct _gpgme_op_verify_result *gpgme_verify_result_t;