Bug fix for multi-stanza key use and replay attack detection
[fwknop.git] / lib / fko_context.h
1 /*
2  *****************************************************************************
3  *
4  * File:    fko_context.h
5  *
6  * Author:  Damien S. Stuart
7  *
8  * Purpose: fko context definition.
9  *
10  * Copyright 2009-2010 Damien Stuart (dstuart@dstuart.org)
11  *
12  *  License (GNU Public License):
13  *
14  *  This program is free software; you can redistribute it and/or
15  *  modify it under the terms of the GNU General Public License
16  *  as published by the Free Software Foundation; either version 2
17  *  of the License, or (at your option) any later version.
18  *
19  *  This program is distributed in the hope that it will be useful,
20  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  *  GNU General Public License for more details.
23  *
24  *  You should have received a copy of the GNU General Public License
25  *  along with this program; if not, write to the Free Software
26  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
27  *  USA
28  *
29  *****************************************************************************
30 */
31 #ifndef FKO_CONTEXT_H
32 #define FKO_CONTEXT_H 1
33
34 #include "fko_common.h"
35
36 #if HAVE_LIBGPGME
37 /* Stucture to hold a list of the gpg signature information
38  * we are interested in.
39 */
40 struct fko_gpg_sig {
41     struct fko_gpg_sig *next;
42     gpgme_sigsum_t      summary;
43     gpgme_error_t       status;
44     char               *fpr;
45 };
46
47 typedef struct fko_gpg_sig *fko_gpg_sig_t;
48 #endif /* HAVE_LIBGPGME */
49
50 /* The pieces we need to make an FKO  SPA data packet.
51 */
52 struct fko_context {
53     /* FKO SPA user-definable message data */
54     char           *rand_val;
55     char           *username;
56     time_t          timestamp;
57     short           message_type;
58     char           *message;
59     char           *nat_access;
60     char           *server_auth;
61     unsigned int    client_timeout;
62
63     /* FKO SPA user-settable message encoding types */
64     short  digest_type;
65     short  encryption_type;
66
67     /* Computed or predefined data */
68     char           *version;
69     char           *digest;
70
71     /* Digest of raw encrypted/base64 data - this is used
72      * for replay attack detection
73     */
74     char           *raw_digest;
75     short           raw_digest_type;
76
77     /* Computed processed data (encodings, etc.) */
78     char           *encoded_msg;
79     char           *encrypted_msg;
80
81     /* State info */
82     unsigned short  state;
83     unsigned char   initval;
84
85 #if HAVE_LIBGPGME
86     /* For gpgme support */
87     char           *gpg_exe;
88     char           *gpg_recipient;
89     char           *gpg_signer;
90     char           *gpg_home_dir;
91
92     unsigned char   have_gpgme_context;
93
94     gpgme_ctx_t     gpg_ctx;
95     gpgme_key_t     recipient_key;
96     gpgme_key_t     signer_key;
97
98     unsigned char   verify_gpg_sigs;
99     unsigned char   ignore_gpg_sig_error;
100
101     fko_gpg_sig_t   gpg_sigs;
102
103     gpgme_error_t   gpg_err;
104 #endif /* HAVE_LIBGPGME */
105 };
106
107 #endif /* FKO_CONTEXT_H */
108
109 /***EOF***/