summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/handshake.c17
-rw-r--r--src/handshake.h6
-rw-r--r--src/packet.h48
-rw-r--r--src/protocol_ec25519_fhmqvc.c8
-rw-r--r--src/receive.c1
-rw-r--r--src/send.c1
-rw-r--r--src/types.h9
7 files changed, 27 insertions, 63 deletions
diff --git a/src/handshake.c b/src/handshake.c
index 8447b3f..47da0e4 100644
--- a/src/handshake.c
+++ b/src/handshake.c
@@ -25,7 +25,6 @@
#include "handshake.h"
-#include "packet.h"
#include "peer.h"
@@ -90,7 +89,7 @@ fastd_buffer_t fastd_handshake_new_init(fastd_context_t *ctx, size_t tail_space)
size_t method_list_len;
uint8_t *method_list = create_method_list(ctx, &method_list_len);
- fastd_buffer_t buffer = fastd_buffer_alloc(ctx, sizeof(fastd_packet_t), 0,
+ fastd_buffer_t buffer = fastd_buffer_alloc(ctx, sizeof(fastd_handshake_packet_t), 0,
2*5 + /* handshake type, mode */
6 + /* MTU */
4+version_len + /* version name */
@@ -99,7 +98,7 @@ fastd_buffer_t fastd_handshake_new_init(fastd_context_t *ctx, size_t tail_space)
4+method_list_len + /* supported method name list */
tail_space
);
- fastd_packet_t *request = buffer.data;
+ fastd_handshake_packet_t *request = buffer.data;
request->rsv1 = 0;
request->rsv2 = 0;
@@ -141,13 +140,13 @@ fastd_buffer_t fastd_handshake_new_reply(fastd_context_t *ctx, const fastd_hands
extra_size = 6 + /* MTU */
4+version_len; /* version name */
- fastd_buffer_t buffer = fastd_buffer_alloc(ctx, sizeof(fastd_packet_t), 1,
+ fastd_buffer_t buffer = fastd_buffer_alloc(ctx, sizeof(fastd_handshake_packet_t), 1,
2*5 + /* handshake type, reply code */
4+method_len + /* method name */
extra_size +
tail_space
);
- fastd_packet_t *request = buffer.data;
+ fastd_handshake_packet_t *request = buffer.data;
request->rsv1 = 0;
request->rsv2 = 0;
@@ -179,13 +178,13 @@ static fastd_string_stack_t* parse_string_list(const uint8_t *data, size_t len)
}
void fastd_handshake_handle(fastd_context_t *ctx, fastd_socket_t *sock, const fastd_peer_address_t *local_addr, const fastd_peer_address_t *remote_addr, fastd_peer_t *peer, fastd_buffer_t buffer) {
- if (buffer.len < sizeof(fastd_packet_t)) {
+ if (buffer.len < sizeof(fastd_handshake_packet_t)) {
pr_warn(ctx, "received a short handshake from %I", remote_addr);
goto end_free;
}
fastd_handshake_t handshake = { .buffer = buffer };
- fastd_packet_t *packet = buffer.data;
+ fastd_handshake_packet_t *packet = buffer.data;
uint8_t *ptr = packet->tlv_data;
while (true) {
@@ -290,8 +289,8 @@ void fastd_handshake_handle(fastd_context_t *ctx, fastd_socket_t *sock, const fa
send_reply:
if (reply_code) {
- fastd_buffer_t reply_buffer = fastd_buffer_alloc(ctx, sizeof(fastd_packet_t), 0, 3*5 /* enough space for handshake type, reply code and error detail */);
- fastd_packet_t *reply = reply_buffer.data;
+ fastd_buffer_t reply_buffer = fastd_buffer_alloc(ctx, sizeof(fastd_handshake_packet_t), 0, 3*5 /* enough space for handshake type, reply code and error detail */);
+ fastd_handshake_packet_t *reply = reply_buffer.data;
reply->rsv1 = 0;
reply->rsv2 = 0;
diff --git a/src/handshake.h b/src/handshake.h
index 6415d5e..2fae1ad 100644
--- a/src/handshake.h
+++ b/src/handshake.h
@@ -58,6 +58,12 @@ typedef enum fastd_reply_code {
} fastd_reply_code_t;
+typedef struct __attribute__((__packed__)) fastd_handshake_packet {
+ uint8_t rsv1;
+ uint16_t rsv2;
+ uint8_t tlv_data[];
+} fastd_handshake_packet_t;
+
typedef struct fastd_handshake_record {
size_t length;
uint8_t *data;
diff --git a/src/packet.h b/src/packet.h
deleted file mode 100644
index 01f77fb..0000000
--- a/src/packet.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- Copyright (c) 2012-2013, Matthias Schiffer <mschiffer@universe-factory.net>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-#ifndef _FASTD_PACKET_H_
-#define _FASTD_PACKET_H_
-
-#include <stdint.h>
-
-
-#define PACKET_TYPE_LEN 1
-
-
-typedef enum fastd_packet_type {
- PACKET_UNKNOWN = 0,
- PACKET_HANDSHAKE,
- PACKET_DATA,
-} fastd_packet_type_t;
-
-typedef struct __attribute__((__packed__)) fastd_packet {
- uint8_t rsv1;
- uint16_t rsv2;
- uint8_t tlv_data[];
-} fastd_packet_t;
-
-#endif /* _FASTD_PACKET_H_ */
diff --git a/src/protocol_ec25519_fhmqvc.c b/src/protocol_ec25519_fhmqvc.c
index 622f633..c3419d5 100644
--- a/src/protocol_ec25519_fhmqvc.c
+++ b/src/protocol_ec25519_fhmqvc.c
@@ -386,7 +386,7 @@ static void respond_handshake(fastd_context_t *ctx, const fastd_socket_t *sock,
memset(&hmacbuf, 0, sizeof(hmacbuf));
fastd_handshake_add(ctx, &buffer, RECORD_HANDSHAKE_MAC, HASHBYTES, hmacbuf.b);
- fastd_hmacsha256(&hmacbuf, peer->protocol_state->shared_handshake_key.w, buffer.data+3, buffer.len-3);
+ fastd_hmacsha256(&hmacbuf, peer->protocol_state->shared_handshake_key.w, buffer.data+sizeof(fastd_handshake_packet_t), buffer.len-sizeof(fastd_handshake_packet_t));
memcpy(buffer.data+buffer.len-HASHBYTES, hmacbuf.b, HASHBYTES);
fastd_send_handshake(ctx, sock, local_addr, remote_addr, peer, buffer);
@@ -517,7 +517,7 @@ static void finish_handshake(fastd_context_t *ctx, fastd_socket_t *sock, const f
memcpy(mac, handshake->records[RECORD_HANDSHAKE_MAC].data, HASHBYTES);
memset(handshake->records[RECORD_HANDSHAKE_MAC].data, 0, HASHBYTES);
- valid = fastd_hmacsha256_verify(mac, shared_handshake_key.w, handshake->buffer.data+3, handshake->buffer.len-3);
+ valid = fastd_hmacsha256_verify(mac, shared_handshake_key.w, handshake->buffer.data+sizeof(fastd_handshake_packet_t), handshake->buffer.len-sizeof(fastd_handshake_packet_t));
}
else {
valid = fastd_hmacsha256_blocks_verify(handshake->records[RECORD_T].data, shared_handshake_key.w, peer->protocol_config->public_key.p, peer_handshake_key->p, NULL);
@@ -548,7 +548,7 @@ static void finish_handshake(fastd_context_t *ctx, fastd_socket_t *sock, const f
memset(&hmacbuf, 0, sizeof(hmacbuf));
fastd_handshake_add(ctx, &buffer, RECORD_HANDSHAKE_MAC, HASHBYTES, hmacbuf.b);
- fastd_hmacsha256(&hmacbuf, shared_handshake_key.w, buffer.data+3, buffer.len-3);
+ fastd_hmacsha256(&hmacbuf, shared_handshake_key.w, buffer.data+sizeof(fastd_handshake_packet_t), buffer.len-sizeof(fastd_handshake_packet_t));
memcpy(buffer.data+buffer.len-HASHBYTES, hmacbuf.b, HASHBYTES);
fastd_send_handshake(ctx, sock, local_addr, remote_addr, peer, buffer);
@@ -568,7 +568,7 @@ static void handle_finish_handshake(fastd_context_t *ctx, fastd_socket_t *sock,
memcpy(mac, handshake->records[RECORD_HANDSHAKE_MAC].data, HASHBYTES);
memset(handshake->records[RECORD_HANDSHAKE_MAC].data, 0, HASHBYTES);
- valid = fastd_hmacsha256_verify(mac, peer->protocol_state->shared_handshake_key.w, handshake->buffer.data+3, handshake->buffer.len-3);
+ valid = fastd_hmacsha256_verify(mac, peer->protocol_state->shared_handshake_key.w, handshake->buffer.data+sizeof(fastd_handshake_packet_t), handshake->buffer.len-sizeof(fastd_handshake_packet_t));
}
else {
valid = fastd_hmacsha256_blocks_verify(handshake->records[RECORD_T].data, peer->protocol_state->shared_handshake_key.w, peer->protocol_config->public_key.p, peer_handshake_key->p, NULL);
diff --git a/src/receive.c b/src/receive.c
index d91a5cd..9bf127d 100644
--- a/src/receive.c
+++ b/src/receive.c
@@ -26,7 +26,6 @@
#include "fastd.h"
#include "handshake.h"
-#include "packet.h"
#include "peer.h"
diff --git a/src/send.c b/src/send.c
index e429a08..caaa9f6 100644
--- a/src/send.c
+++ b/src/send.c
@@ -25,7 +25,6 @@
#include "fastd.h"
-#include "packet.h"
#include "peer.h"
diff --git a/src/types.h b/src/types.h
index e817f2e..16b1a5a 100644
--- a/src/types.h
+++ b/src/types.h
@@ -52,6 +52,15 @@ static const fastd_tristate_t fastd_tristate_false = {true, false};
static const fastd_tristate_t fastd_tristate_undef = {false, false};
+#define PACKET_TYPE_LEN 1
+
+
+typedef enum fastd_packet_type {
+ PACKET_UNKNOWN = 0,
+ PACKET_HANDSHAKE,
+ PACKET_DATA,
+} fastd_packet_type_t;
+
typedef enum fastd_mode {
MODE_TAP,
MODE_TUN,