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