2010-09-01 Marcus Brinkmann <marcus@g10code.de>
[gnupg.git] / common / audit.h
index ca7b704..8f413aa 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <ksba.h>
 
 
 #include <ksba.h>
 
+#include "../common/estream.h"
 
 struct audit_ctx_s;
 typedef struct audit_ctx_s *audit_ctx_t;
 
 struct audit_ctx_s;
 typedef struct audit_ctx_s *audit_ctx_t;
@@ -30,6 +31,9 @@ typedef struct audit_ctx_s *audit_ctx_t;
 typedef enum
   {
     AUDIT_TYPE_NONE  = 0,  /* No type set.  */
 typedef enum
   {
     AUDIT_TYPE_NONE  = 0,  /* No type set.  */
+    AUDIT_TYPE_ENCRYPT,    /* Data encryption.  */
+    AUDIT_TYPE_SIGN,       /* Signature creation.  */
+    AUDIT_TYPE_DECRYPT,    /* Data decryption.  */
     AUDIT_TYPE_VERIFY      /* Signature verification.  */
   }
 audit_type_t;
     AUDIT_TYPE_VERIFY      /* Signature verification.  */
   }
 audit_type_t;
@@ -48,6 +52,28 @@ typedef enum
        now.  This indicates that all parameters are okay and we can
        start to process the actual data.  */
 
        now.  This indicates that all parameters are okay and we can
        start to process the actual data.  */
 
+    AUDIT_AGENT_READY,   /* err */
+    /* Indicates whether the gpg-agent is available.  For some
+       operations the agent is not required and thus no such event
+       will be logged.  */
+    
+    AUDIT_DIRMNGR_READY,   /* err */
+    /* Indicates whether the Dirmngr is available.  For some
+       operations the Dirmngr is not required and thus no such event
+       will be logged.  */
+
+    AUDIT_GPG_READY,   /* err */
+    /* Indicates whether the Gpg engine is available. */
+
+    AUDIT_GPGSM_READY, /* err */
+    /* Indicates whether the Gpgsm engine is available. */
+
+    AUDIT_G13_READY, /* err */
+    /* Indicates whether the G13 engine is available. */
+
+    AUDIT_GOT_DATA,
+    /* Data to be processed has been seen.  */
+
     AUDIT_DETACHED_SIGNATURE,
     /* The signature is a detached one. */
 
     AUDIT_DETACHED_SIGNATURE,
     /* The signature is a detached one. */
 
@@ -55,15 +81,27 @@ typedef enum
     /* A certifciate only signature has been detected.  */
 
     AUDIT_DATA_HASH_ALGO,  /* int */
     /* A certifciate only signature has been detected.  */
 
     AUDIT_DATA_HASH_ALGO,  /* int */
-    /* The hash algo given as argument is used for this signature.
-       This event will be repeated for all hash algorithms used with
-       the data.  */
+    /* The hash algo given as argument is used for the data.  This
+       event will be repeated for all hash algorithms used with the
+       data.  */
+
+    AUDIT_ATTR_HASH_ALGO,  /* int */
+    /* The hash algo given as argument is used to hash the message
+       digest and other signed attributes of this signature. */
+
+    AUDIT_DATA_CIPHER_ALGO,  /* int */
+    /* The cipher algo given as argument is used for this data.  */
 
     AUDIT_BAD_DATA_HASH_ALGO,  /* string */
     /* The hash algo as specified by the signature can't be used.
        STRING is the description of this algorithm which usually is an
        OID string.  STRING may be NULL. */
 
 
     AUDIT_BAD_DATA_HASH_ALGO,  /* string */
     /* The hash algo as specified by the signature can't be used.
        STRING is the description of this algorithm which usually is an
        OID string.  STRING may be NULL. */
 
+    AUDIT_BAD_DATA_CIPHER_ALGO,  /* string */
+    /* The symmetric cipher algorithm is not supported.  STRING is the
+       description of this algorithm which usually is an OID string.
+       STRING may be NULL. */
+
     AUDIT_DATA_HASHING,    /* ok_err */
     /* Logs the result of the data hashing. */
 
     AUDIT_DATA_HASHING,    /* ok_err */
     /* Logs the result of the data hashing. */
 
@@ -90,9 +128,9 @@ typedef enum
     /* The name of a signer.  This is the name or other identification
        data as known from the signature and not the name from the
        certificate used for verification.  An example for STRING when
     /* The name of a signer.  This is the name or other identification
        data as known from the signature and not the name from the
        certificate used for verification.  An example for STRING when
-       using CMS is:b "#1234/CN=Prostetnic Vogon Jeltz".  */
+       using CMS is: "#1234/CN=Prostetnic Vogon Jeltz".  */
 
 
-    AUDIT_SIG_STATUS,     /* string */
+    AUDIT_SIG_STATUS,      /* string */
     /* The signature status of the current signer.  This is the last
        audit information for one signature.  STRING gives the status:
 
     /* The signature status of the current signer.  This is the last
        audit information for one signature.  STRING gives the status:
 
@@ -104,6 +142,24 @@ typedef enum
          "good"        - good signature
     */
 
          "good"        - good signature
     */
 
+    AUDIT_NEW_RECP,        /* int */
+    /* A new recipient has been seen during decryption.  The argument
+       is the recipient number as used internally by the program.  */
+    
+    AUDIT_RECP_NAME,       /* string */
+    /* The name of a recipient.  This is the name or other identification
+       data as known from the decryption and not the name from the
+       certificate used for decryption.  An example for STRING when
+       using CMS is: "#1234/CN=Prostetnic Vogon Jeltz".  */
+
+    AUDIT_RECP_RESULT,    /* ok_err */
+    /* The status of the session key decryption.  This is only written
+       for recipients tried. */
+
+    AUDIT_DECRYPTION_RESULT,    /* ok_err */
+    /* The status of the entire decryption.  The decryption was
+       successful if the error code is 0. */
+
     AUDIT_VALIDATE_CHAIN,
     /* Start the validation of a certificate chain. */
 
     AUDIT_VALIDATE_CHAIN,
     /* Start the validation of a certificate chain. */
 
@@ -115,6 +171,38 @@ typedef enum
        certificate chain.  ROOTCERT is used for the trustanchor and
        CERT for all other certificates.  */ 
 
        certificate chain.  ROOTCERT is used for the trustanchor and
        CERT for all other certificates.  */ 
 
+    AUDIT_CHAIN_STATUS,  /* err */
+    /* Tells the final status of the chain validation.  */
+
+    AUDIT_ROOT_TRUSTED,  /* cert, err */
+    /* Tells whether the root certificate is trusted.  This event is
+       emmited durcing chain validation.  */
+
+    AUDIT_CRL_CHECK, /* err */
+    /* Tells the status of a CRL or OCSP check.  */
+
+    AUDIT_GOT_RECIPIENTS,  /* int */
+    /* Records the number of recipients to be used for encryption.
+       This includes the recipients set by --encrypt-to but records 0
+       if no real recipient has been given.  */
+
+    AUDIT_SESSION_KEY,     /* string */
+    /* Mark the creation or availibility of the session key.  The
+       parameter is the algorithm ID.  */
+
+    AUDIT_ENCRYPTED_TO,   /* cert, err */
+    /* Records the certificate used for encryption and whether the
+       session key could be encrypted to it (err==0).  */
+
+    AUDIT_ENCRYPTION_DONE,
+    /* Encryption succeeded.  */
+
+    AUDIT_SIGNED_BY,   /* cert, err */
+    /* Records the certificate used for signed and whether the signure
+       could be created (if err==0).  */
+
+    AUDIT_SIGNING_DONE,
+    /* Signing succeeded.  */
 
 
     AUDIT_LAST_EVENT  /* Marker for parsing this list.  */
 
 
     AUDIT_LAST_EVENT  /* Marker for parsing this list.  */
@@ -132,7 +220,7 @@ void audit_log_s (audit_ctx_t ctx, audit_event_t event, const char *value);
 void audit_log_cert (audit_ctx_t ctx, audit_event_t event, 
                      ksba_cert_t cert, gpg_error_t err);
 
 void audit_log_cert (audit_ctx_t ctx, audit_event_t event, 
                      ksba_cert_t cert, gpg_error_t err);
 
-void audit_print_result (audit_ctx_t ctx, FILE *fp);
+void audit_print_result (audit_ctx_t ctx, estream_t stream, int use_html);