GNUnet  0.11.x
cadet_protocol.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2007 - 2017 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero General Public License as published
7  by the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Affero General Public License for more details.
14 
15  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
28 #ifndef CADET_PROTOCOL_H_
29 #define CADET_PROTOCOL_H_
30 
34 #define DEBUG_KX 0
35 #if DEBUG_KX
36 #warning NEVER run this in production! KX debugging is on!
37 #endif
38 
39 #include "platform.h"
40 #include "gnunet_util_lib.h"
41 #include "cadet.h"
42 
43 #ifdef __cplusplus
44 
45 struct GNUNET_CADET_TunnelMessage;
46 extern "C"
47 {
48 #if 0
49 /* keep Emacsens' auto-indent happy */
50 }
51 #endif
52 #endif
53 
54 /******************************************************************************/
55 /******************** CADET NETWORK MESSAGES **************************/
56 /******************************************************************************/
57 
59 
60 
61 /******************************************************************************/
62 /***************************** CONNECTION **********************************/
63 /******************************************************************************/
64 
65 
70 {
78 
86 
91 
96  /* struct GNUNET_PeerIdentity peers[path_length]; */
97 };
98 
99 
104 {
109 
114 
119 };
120 
121 
126 {
131 
136 
141 
145  struct GNUNET_PeerIdentity peer1;
146 
150  struct GNUNET_PeerIdentity peer2;
151 };
152 
153 
158 {
163 
168 
173 };
174 
175 
176 /******************************************************************************/
177 /******************************* TUNNEL ***********************************/
178 /******************************************************************************/
179 
188 {
193  uint32_t pid GNUNET_PACKED;
194 };
195 
196 
201 {
206 
211 };
212 
213 
218 {
225 
230  uint32_t flags GNUNET_PACKED;
231 
236 
242  struct GNUNET_CRYPTO_EcdhePublicKey ephemeral_key;
243 
244 #if DEBUG_KX
245 
250  struct GNUNET_CRYPTO_EcdhePrivateKey ephemeral_key_XXX; // for debugging KX-crypto!
251 
257  struct GNUNET_CRYPTO_EddsaPrivateKey private_key_XXX; // for debugging KX-crypto!
258 #endif
259 
265  struct GNUNET_CRYPTO_EcdhePublicKey ratchet_key;
266 };
267 
268 
274 {
279 
280 #if DEBUG_KX
281 
286  struct GNUNET_CRYPTO_EcdhePublicKey r_ephemeral_key_XXX; // for debugging KX-crypto!
287 #endif
288 
293  struct GNUNET_HashCode auth;
294 };
295 
296 
302 {
306  uint32_t Ns GNUNET_PACKED;
307 
311  uint32_t PNs GNUNET_PACKED;
312 
317 };
318 
319 
324 {
329 
334 
339 
345  struct GNUNET_ShortHashCode hmac;
346 
351  struct GNUNET_CADET_AxHeader ax_header;
352 
356 };
357 
358 
359 /******************************************************************************/
360 /******************************* CHANNEL ***********************************/
361 /******************************************************************************/
362 
363 
368 {
373 
377  uint32_t opt GNUNET_PACKED;
378 
382  struct GNUNET_HashCode h_port;
383 
388 };
389 
390 
396 {
401 
406 
411 
417 };
418 
419 
425 {
430 
435 
440 };
441 
442 
447 {
451  uint32_t mid GNUNET_PACKED;
452 };
453 
454 
459 {
464 
469 
474 
478 };
479 
480 
485 {
490 
495 
503  uint64_t futures GNUNET_PACKED;
504 
509 };
510 
511 
513 
514 #if 0 /* keep Emacsens' auto-indent happy */
515 {
516 #endif
517 #ifdef __cplusplus
518 }
519 #endif
520 
521 /* ifndef CADET_PROTOCOL_H */
522 #endif
523 /* end of cadet_protocol.h */
Axolotl-encrypted tunnel message with application payload.
Message to destroy a connection.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_CADET_CONNECTION_CREATE.
Message for ack&#39;ing a connection.
uint32_t mid
Unique ID of the message, cycles around, in NBO.
Should the peer reply with its KX details?
Encrypted axolotl header with numbers that identify which keys in which ratchet are to be used to dec...
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32.
A 256-bit hashcode.
GNUNET_CADET_KX_Flags
Flags to be used in GNUNET_CADET_KX.
Message for a Key eXchange for a tunnel, with authentication.
Message for cadet data traffic.
Message for notifying a disconnection in a path.
A 512-bit hashcode.
Unique identifier (counter) for an encrypted message in a channel.
Private ECC key encoded for transmission.
Message to acknowledge end-to-end data.
Message to acknowledge opening a channel of type GNUNET_MESSAGE_TYPE_CADET_CHANNEL_OPEN_ACK.
Message to create a Channel.
Message to destroy a channel of type GNUNET_MESSAGE_TYPE_CADET_CHANNEL_DESTROY.
Number used to uniquely identify messages in a CADET Channel.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32;.
Private ECC key encoded for transmission.
The identity of the host (wraps the signing key of the peer).
The peer should reply with its KX details?
#define GNUNET_PACKED
gcc-ism to get packed structs.
static uint16_t port
Port number.
Definition: gnunet-bcd.c:81
Hash uniquely identifying a connection below a tunnel.
Message for a Key eXchange for a tunnel.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and encr...
Number identifying a CADET channel within a tunnel.
Header for all communications.
uint32_t options
Connection options in network byte order.
static unsigned long long reserved
How much space have we currently reserved?
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
struct GNUNET_CADET_ConnectionTunnelIdentifier cid
ID of the connection.
Message for cadet connection creation.