b45ef3c521f45f6854b2eed4a096db43d6d1088e
[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 T√łnnesen(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  * $Id: secure_messages.h,v 1.1 2005/05/29 12:47:44 br1 Exp $
37  */
38
39
40 /*
41  * olsr.org olsr daemon security plugin
42  */
43
44 #ifndef _OLSRD_SECURE_MSG
45 #define _OLSRD_SECURE_MSG
46
47
48 #include <sys/types.h>
49 #include <sys/socket.h>
50 #include <netinet/in.h>
51 #include <arpa/inet.h>
52 #include <sys/time.h>
53 #include <time.h>
54 #include <math.h>
55 #include <stdio.h>
56
57 #include "olsr_types.h"
58 #include "interfaces.h"
59
60 /* The type of message you will use */
61 #define MESSAGE_TYPE 10
62
63 /* The type of messages we will receive - can be set to promiscuous */
64 #define PARSER_TYPE MESSAGE_TYPE
65
66 #define TYPE_CHALLENGE 11
67 #define TYPE_CRESPONSE 12
68 #define TYPE_RRESPONSE 13
69
70
71 char keyfile[FILENAME_MAX];
72
73
74 #ifdef USE_OPENSSL
75 #define SIGSIZE   20
76 #else
77 #define SIGSIZE   16
78 #endif
79
80 /****************************************************************************
81  *                            PACKET SECTION                                *
82  ****************************************************************************/
83
84 struct sig_msg
85 {
86   olsr_u8_t     type;
87   olsr_u8_t     algorithm;
88   olsr_u16_t    reserved;
89
90   time_t        timestamp;
91   char          signature[SIGSIZE];
92 };
93
94 /*
95  * OLSR message (several can exist in one OLSR packet)
96  */
97
98 struct s_olsrmsg
99 {
100   olsr_u8_t     olsr_msgtype;
101   olsr_u8_t     olsr_vtime;
102   olsr_u16_t    olsr_msgsize;
103   olsr_u32_t    originator;
104   olsr_u8_t     ttl;
105   olsr_u8_t     hopcnt;
106   olsr_u16_t    seqno;
107
108   /* YOUR PACKET GOES HERE */
109   struct sig_msg sig;
110
111 };
112
113
114 /*
115  * Challenge response messages
116  */
117
118 struct challengemsg
119 {
120   olsr_u8_t     olsr_msgtype;
121   olsr_u8_t     olsr_vtime;
122   olsr_u16_t    olsr_msgsize;
123   olsr_u32_t    originator;
124   olsr_u8_t     ttl;
125   olsr_u8_t     hopcnt;
126   olsr_u16_t    seqno;
127
128   olsr_u32_t    destination;
129   olsr_u32_t    challenge;
130
131   char          signature[SIGSIZE];
132
133 };
134
135
136
137 struct c_respmsg
138 {
139   olsr_u8_t     olsr_msgtype;
140   olsr_u8_t     olsr_vtime;
141   olsr_u16_t    olsr_msgsize;
142   olsr_u32_t    originator;
143   olsr_u8_t     ttl;
144   olsr_u8_t     hopcnt;
145   olsr_u16_t    seqno;
146
147   olsr_u32_t    destination;
148   olsr_u32_t    challenge;
149   time_t        timestamp;
150
151   char          res_sig[SIGSIZE];
152
153   char          signature[SIGSIZE];
154
155 };
156
157
158 struct r_respmsg
159 {
160   olsr_u8_t     olsr_msgtype;
161   olsr_u8_t     olsr_vtime;
162   olsr_u16_t    olsr_msgsize;
163   olsr_u32_t    originator;
164   olsr_u8_t     ttl;
165   olsr_u8_t     hopcnt;
166   olsr_u16_t    seqno;
167
168   olsr_u32_t    destination;
169   time_t        timestamp;
170
171   char          res_sig[SIGSIZE];
172
173   char          signature[SIGSIZE];
174 };
175
176
177 /*
178  *IPv6
179  */
180
181 struct s_olsrmsg6
182 {
183   olsr_u8_t        olsr_msgtype;
184   olsr_u8_t        olsr_vtime;
185   olsr_u16_t       olsr_msgsize;
186   struct in6_addr  originator;
187   olsr_u8_t        ttl;
188   olsr_u8_t        hopcnt;
189   olsr_u16_t       seqno;
190
191   /* YOUR PACKET GOES HERE */
192   struct sig_msg   sig;
193 };
194
195 /*
196  * Generic OLSR packet - DO NOT ALTER
197  */
198
199 struct s_olsr 
200 {
201   olsr_u16_t      olsr_packlen;         /* packet length */
202   olsr_u16_t      olsr_seqno;
203   struct s_olsrmsg  olsr_msg[1];          /* variable messages */
204 };
205
206
207 struct s_olsr6
208 {
209   olsr_u16_t        olsr_packlen;        /* packet length */
210   olsr_u16_t        olsr_seqno;
211   struct s_olsrmsg6   olsr_msg[1];         /* variable messages */
212 };
213
214
215 #endif