gpg: Unfinished support for v5 signatures.
[gnupg.git] / tools / gpg-wks.h
1 /* gpg-wks.h - Common definitions for wks server and client.
2  * Copyright (C) 2016 g10 Code GmbH
3  * Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
4  *
5  * This file is part of GnuPG.
6  *
7  * This file is free software; you can redistribute it and/or modify
8  * it 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  * This file is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program; if not, see <https://www.gnu.org/licenses/>.
19  */
20
21 #ifndef GNUPG_GPG_WKS_H
22 #define GNUPG_GPG_WKS_H
23
24 #include "../common/util.h"
25 #include "../common/strlist.h"
26 #include "mime-maker.h"
27
28 /* The draft version we implement.  */
29 #define WKS_DRAFT_VERSION 3
30
31
32 /* We keep all global options in the structure OPT.  */
33 struct
34 {
35   int verbose;
36   unsigned int debug;
37   int quiet;
38   int use_sendmail;
39   const char *output;
40   const char *gpg_program;
41   const char *directory;
42   const char *default_from;
43   strlist_t extra_headers;
44 } opt;
45
46 /* Debug values and macros.  */
47 #define DBG_MIME_VALUE        1 /* Debug the MIME structure.  */
48 #define DBG_PARSER_VALUE      2 /* Debug the Mail parser.  */
49 #define DBG_CRYPTO_VALUE      4 /* Debug low level crypto.  */
50 #define DBG_MEMORY_VALUE     32 /* Debug memory allocation stuff.  */
51 #define DBG_MEMSTAT_VALUE   128 /* Show memory statistics.  */
52 #define DBG_IPC_VALUE      1024 /* Debug assuan communication.  */
53 #define DBG_EXTPROG_VALUE 16384 /* debug external program calls */
54
55 #define DBG_MIME     (opt.debug & DBG_MIME_VALUE)
56 #define DBG_PARSER   (opt.debug & DBG_PARSER_VALUE)
57 #define DBG_CRYPTO   (opt.debug & DBG_CRYPTO_VALUE)
58
59
60 /* The parsed policy flags. */
61 struct policy_flags_s
62 {
63   char *submission_address;
64   unsigned int mailbox_only : 1;
65   unsigned int dane_only : 1;
66   unsigned int auth_submit : 1;
67   unsigned int protocol_version; /* The supported WKS_DRAFT_VERION or 0  */
68   unsigned int max_pending;      /* Seconds to wait for a confirmation.  */
69 };
70 typedef struct policy_flags_s *policy_flags_t;
71
72
73 /* An object to convey user ids of a key.  */
74 struct uidinfo_list_s
75 {
76   struct uidinfo_list_s *next;
77   time_t created; /* Time the userid was created.  */
78   char *mbox;  /* NULL or the malloced mailbox from UID.  */
79   char uid[1];
80 };
81 typedef struct uidinfo_list_s *uidinfo_list_t;
82
83
84
85 /*-- wks-util.c --*/
86 void wks_set_status_fd (int fd);
87 void wks_write_status (int no, const char *format, ...) GPGRT_ATTR_PRINTF(2,3);
88 void free_uidinfo_list (uidinfo_list_t list);
89 gpg_error_t wks_get_key (estream_t *r_key, const char *fingerprint,
90                          const char *addrspec, int exact);
91 gpg_error_t wks_list_key (estream_t key, char **r_fpr,
92                           uidinfo_list_t *r_mboxes);
93 gpg_error_t wks_filter_uid (estream_t *r_newkey, estream_t key,
94                             const char *uid, int binary);
95 gpg_error_t wks_send_mime (mime_maker_t mime);
96 gpg_error_t wks_parse_policy (policy_flags_t flags, estream_t stream,
97                               int ignore_unknown);
98 void wks_free_policy (policy_flags_t policy);
99
100 /*-- wks-receive.c --*/
101
102 /* Flag values for the receive callback.  */
103 #define WKS_RECEIVE_DRAFT2 1
104
105 gpg_error_t wks_receive (estream_t fp,
106                          gpg_error_t (*result_cb)(void *opaque,
107                                                   const char *mediatype,
108                                                   estream_t data,
109                                                   unsigned int flags),
110                          void *cb_data);
111
112
113
114 #endif /*GNUPG_GPG_WKS_H*/