b1f88a2f5db1f391fe2cebe44b059eaaacd1ed0d
[olsrd.git] / lib / secure / src / secure_messages.h
1
2 /*
3  * Secure OLSR plugin
4  * http://www.olsr.org
5  *
6  * Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or 
10  * without modification, are permitted provided that the following 
11  * conditions are met:
12  *
13  * * Redistributions of source code must retain the above copyright 
14  *   notice, this list of conditions and the following disclaimer.
15  * * Redistributions in binary form must reproduce the above copyright 
16  *   notice, this list of conditions and the following disclaimer in 
17  *   the documentation and/or other materials provided with the 
18  *   distribution.
19  * * Neither the name of olsrd, olsr.org nor the names of its 
20  *   contributors may be used to endorse or promote products derived 
21  *   from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
29  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  */
37
38
39 /*
40  * olsr.org olsr daemon security plugin
41  */
42
43 #ifndef _OLSRD_SECURE_MSG
44 #define _OLSRD_SECURE_MSG
45
46
47 #include <sys/types.h>
48 #include <sys/socket.h>
49 #include <netinet/in.h>
50 #include <arpa/inet.h>
51 #include <sys/time.h>
52 #include <time.h>
53 #include <stdio.h>
54
55 #include "olsr_types.h"
56 #include "interfaces.h"
57
58 /* The type of message you will use */
59 #define MESSAGE_TYPE 10
60
61 /* The type of messages we will receive - can be set to promiscuous */
62 #define PARSER_TYPE MESSAGE_TYPE
63
64 #define TYPE_CHALLENGE 11
65 #define TYPE_CRESPONSE 12
66 #define TYPE_RRESPONSE 13
67
68
69 extern char keyfile[FILENAME_MAX+1];
70
71
72 #ifdef USE_OPENSSL
73 #define SIGSIZE   20
74 #else
75 #define SIGSIZE   16
76 #endif
77
78 /****************************************************************************
79  *                            PACKET SECTION                                *
80  ****************************************************************************/
81
82 struct sig_msg
83 {
84   olsr_u8_t     type;
85   olsr_u8_t     algorithm;
86   olsr_u16_t    reserved;
87
88   time_t        timestamp;
89   olsr_u8_t     signature[SIGSIZE];
90 };
91
92 /*
93  * OLSR message (several can exist in one OLSR packet)
94  */
95
96 struct s_olsrmsg
97 {
98   olsr_u8_t     olsr_msgtype;
99   olsr_u8_t     olsr_vtime;
100   olsr_u16_t    olsr_msgsize;
101   olsr_u32_t    originator;
102   olsr_u8_t     ttl;
103   olsr_u8_t     hopcnt;
104   olsr_u16_t    seqno;
105
106   /* YOUR PACKET GOES HERE */
107   struct sig_msg sig;
108
109 };
110
111
112 /*
113  * Challenge response messages
114  */
115
116 struct challengemsg
117 {
118   olsr_u8_t     olsr_msgtype;
119   olsr_u8_t     olsr_vtime;
120   olsr_u16_t    olsr_msgsize;
121   olsr_u32_t    originator;
122   olsr_u8_t     ttl;
123   olsr_u8_t     hopcnt;
124   olsr_u16_t    seqno;
125
126   olsr_u32_t    destination;
127   olsr_u32_t    challenge;
128
129   olsr_u8_t     signature[SIGSIZE];
130
131 };
132
133
134
135 struct c_respmsg
136 {
137   olsr_u8_t     olsr_msgtype;
138   olsr_u8_t     olsr_vtime;
139   olsr_u16_t    olsr_msgsize;
140   olsr_u32_t    originator;
141   olsr_u8_t     ttl;
142   olsr_u8_t     hopcnt;
143   olsr_u16_t    seqno;
144
145   olsr_u32_t    destination;
146   olsr_u32_t    challenge;
147   time_t        timestamp;
148
149   olsr_u8_t     res_sig[SIGSIZE];
150
151   olsr_u8_t     signature[SIGSIZE];
152 };
153
154
155 struct r_respmsg
156 {
157   olsr_u8_t     olsr_msgtype;
158   olsr_u8_t     olsr_vtime;
159   olsr_u16_t    olsr_msgsize;
160   olsr_u32_t    originator;
161   olsr_u8_t     ttl;
162   olsr_u8_t     hopcnt;
163   olsr_u16_t    seqno;
164
165   olsr_u32_t    destination;
166   time_t        timestamp;
167
168   olsr_u8_t     res_sig[SIGSIZE];
169
170   olsr_u8_t     signature[SIGSIZE];
171 };
172
173
174 /*
175  *IPv6
176  */
177
178 struct s_olsrmsg6
179 {
180   olsr_u8_t        olsr_msgtype;
181   olsr_u8_t        olsr_vtime;
182   olsr_u16_t       olsr_msgsize;
183   struct in6_addr  originator;
184   olsr_u8_t        ttl;
185   olsr_u8_t        hopcnt;
186   olsr_u16_t       seqno;
187
188   /* YOUR PACKET GOES HERE */
189   struct sig_msg   sig;
190 };
191
192 /*
193  * Generic OLSR packet - DO NOT ALTER
194  */
195
196 struct s_olsr 
197 {
198   olsr_u16_t      olsr_packlen;         /* packet length */
199   olsr_u16_t      olsr_seqno;
200   struct s_olsrmsg  olsr_msg[1];          /* variable messages */
201 };
202
203
204 struct s_olsr6
205 {
206   olsr_u16_t        olsr_packlen;        /* packet length */
207   olsr_u16_t        olsr_seqno;
208   struct s_olsrmsg6   olsr_msg[1];         /* variable messages */
209 };
210
211
212 #endif
213
214 /*
215  * Local Variables:
216  * c-basic-offset: 2
217  * indent-tabs-mode: nil
218  * End:
219  */