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 
92 
98 
104 
109 
114  /* struct GNUNET_PeerIdentity peers[path_length]; */
115 };
116 
117 
122 {
127 
132 
137 };
138 
139 
144 {
149 
154 
159 
163  struct GNUNET_PeerIdentity peer1;
164 
168  struct GNUNET_PeerIdentity peer2;
169 };
170 
171 
176 {
181 
186 
191 };
192 
193 
194 /******************************************************************************/
195 /******************************* TUNNEL ***********************************/
196 /******************************************************************************/
197 
206 {
211  uint32_t pid GNUNET_PACKED;
212 };
213 
214 
219 {
224 
229 };
230 
231 
236 {
243 
248  uint32_t flags GNUNET_PACKED;
249 
254 
260  struct GNUNET_CRYPTO_EcdhePublicKey ephemeral_key;
261 
262 #if DEBUG_KX
263 
268  struct GNUNET_CRYPTO_EcdhePrivateKey ephemeral_key_XXX; // for debugging KX-crypto!
269 
275  struct GNUNET_CRYPTO_EddsaPrivateKey private_key_XXX; // for debugging KX-crypto!
276 #endif
277 
283  struct GNUNET_CRYPTO_EcdhePublicKey ratchet_key;
284 };
285 
286 
292 {
297 
298 #if DEBUG_KX
299 
304  struct GNUNET_CRYPTO_EcdhePublicKey r_ephemeral_key_XXX; // for debugging KX-crypto!
305 #endif
306 
311  struct GNUNET_HashCode auth;
312 };
313 
314 
320 {
324  uint32_t Ns GNUNET_PACKED;
325 
329  uint32_t PNs GNUNET_PACKED;
330 
335 };
336 
337 
342 {
347 
352 
357 
363  struct GNUNET_ShortHashCode hmac;
364 
369  struct GNUNET_CADET_AxHeader ax_header;
370 
374 };
375 
376 
377 /******************************************************************************/
378 /******************************* CHANNEL ***********************************/
379 /******************************************************************************/
380 
381 
386 {
391 
395  uint32_t opt GNUNET_PACKED;
396 
400  struct GNUNET_HashCode h_port;
401 
406 };
407 
408 
414 {
419 
424 
429 
435 };
436 
437 
443 {
448 
453 
458 };
459 
460 
465 {
469  uint32_t mid GNUNET_PACKED;
470 };
471 
472 
477 {
482 
487 
492 
496 };
497 
498 
503 {
508 
513 
521  uint64_t futures GNUNET_PACKED;
522 
527 };
528 
529 
531 
532 #if 0 /* keep Emacsens' auto-indent happy */
533 {
534 #endif
535 #ifdef __cplusplus
536 }
537 #endif
538 
539 /* ifndef CADET_PROTOCOL_H */
540 #endif
541 /* end of cadet_protocol.h */
Axolotl-encrypted tunnel message with application payload.
struct GNUNET_TIME_AbsoluteNBO monotime
This monotonic time is set, if a peer likes to trigger a KX, but is not the peer that should start th...
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...
Time for absolute time used by GNUnet, in microseconds and in network byte order. ...
#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.
int has_monotime
This flag indicates the peer sending the connection create meassage likes to trigger a KX handshake...
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.
an ECC signature using EdDSA.
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:82
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?
struct GNUNET_CRYPTO_EddsaSignature monotime_sig
We sign the monotime.
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.