Add option --data to GETAUDITLOG command.
[gnupg.git] / common / audit.h
1 /* audit.h - Definitions for the audit subsystem
2  *      Copyright (C) 2007 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef GNUPG_COMMON_AUDIT_H
21 #define GNUPG_COMMON_AUDIT_H
22
23 #include <ksba.h>
24
25 #include "estream.h"
26
27 struct audit_ctx_s;
28 typedef struct audit_ctx_s *audit_ctx_t;
29
30 /* Constants for the audit type.  */
31 typedef enum
32   {
33     AUDIT_TYPE_NONE  = 0,  /* No type set.  */
34     AUDIT_TYPE_VERIFY      /* Signature verification.  */
35   }
36 audit_type_t;
37
38 /* The events we support.  */
39 typedef enum
40   {
41     AUDIT_NULL_EVENT = 0,
42     /* No such event.  Its value shall be 0 and no other values shall
43        be assigned to the other enum symbols.  This is required so
44        that the exaudit.awk script comes up with correct values
45        without running cc.  */
46
47     AUDIT_SETUP_READY,
48     /* All preparations done so that the actual processing can start
49        now.  This indicates that all parameters are okay and we can
50        start to process the actual data.  */
51
52     AUDIT_DETACHED_SIGNATURE,
53     /* The signature is a detached one. */
54
55     AUDIT_CERT_ONLY_SIG,
56     /* A certifciate only signature has been detected.  */
57
58     AUDIT_DATA_HASH_ALGO,  /* int */
59     /* The hash algo given as argument is used for this signature.
60        This event will be repeated for all hash algorithms used with
61        the data.  */
62
63     AUDIT_BAD_DATA_HASH_ALGO,  /* string */
64     /* The hash algo as specified by the signature can't be used.
65        STRING is the description of this algorithm which usually is an
66        OID string.  STRING may be NULL. */
67
68     AUDIT_DATA_HASHING,    /* ok_err */
69     /* Logs the result of the data hashing. */
70
71     AUDIT_READ_ERROR,     /* ok_err */
72     /* A generic read error occurred.  */
73
74     AUDIT_WRITE_ERROR,     /* ok_err */
75     /* A generic write error occurred.  */
76
77     AUDIT_USAGE_ERROR,
78     /* The program was used in an inappropriate way; For example by
79        passing a data object while the signature does not expect one
80        or vice versa.  */
81     
82     AUDIT_SAVE_CERT,       /* cert, ok_err */
83     /* Save the certificate received in a message. */
84
85     AUDIT_NEW_SIG,         /* int */
86     /* Start the verification of a new signature for the last data
87        object.  The argument is the signature number as used
88        internally by the program.  */
89     
90     AUDIT_SIG_NAME,        /* string */
91     /* The name of a signer.  This is the name or other identification
92        data as known from the signature and not the name from the
93        certificate used for verification.  An example for STRING when
94        using CMS is:b "#1234/CN=Prostetnic Vogon Jeltz".  */
95
96     AUDIT_SIG_STATUS,     /* string */
97     /* The signature status of the current signer.  This is the last
98        audit information for one signature.  STRING gives the status:
99
100          "error"       - there was a problem checking this or any signature.
101          "unsupported" - the signature type is not supported. 
102          "no-cert"     - The certificate of the signer was not found (the
103                          S/N+issuer of the signer is already in the log).
104          "bad"         - bad signature
105          "good"        - good signature
106     */
107
108     AUDIT_VALIDATE_CHAIN,
109     /* Start the validation of a certificate chain. */
110
111     AUDIT_CHAIN_BEGIN,
112     AUDIT_CHAIN_CERT,    /* cert */
113     AUDIT_CHAIN_ROOTCERT,/* cert */
114     AUDIT_CHAIN_END,
115     /* These 4 events are used to log the certificates making up a
116        certificate chain.  ROOTCERT is used for the trustanchor and
117        CERT for all other certificates.  */ 
118
119
120
121     AUDIT_LAST_EVENT  /* Marker for parsing this list.  */
122   }
123 audit_event_t;
124
125
126 audit_ctx_t audit_new (void);
127 void audit_release (audit_ctx_t ctx);
128 void audit_set_type (audit_ctx_t ctx, audit_type_t type);
129 void audit_log (audit_ctx_t ctx, audit_event_t event);
130 void audit_log_ok (audit_ctx_t ctx, audit_event_t event, gpg_error_t err);
131 void audit_log_i (audit_ctx_t ctx, audit_event_t event, int value);
132 void audit_log_s (audit_ctx_t ctx, audit_event_t event, const char *value);
133 void audit_log_cert (audit_ctx_t ctx, audit_event_t event, 
134                      ksba_cert_t cert, gpg_error_t err);
135
136 void audit_print_result (audit_ctx_t ctx, estream_t stream);
137
138
139
140 #endif /*GNUPG_COMMON_AUDIT_H*/