Skip to content

Commit cf52788

Browse files
glazychev-artNeale Ranns
authored andcommitted
wireguard: fix handshake procedure
Type: fix Change-Id: I96e8c5c9c792b1d9aefd39ce3e240d220827b7d1 Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
1 parent a3960a8 commit cf52788

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

src/plugins/wireguard/wireguard_noise.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -547,29 +547,34 @@ chacha20poly1305_calc (vlib_main_t * vm,
547547
vnet_crypto_op_id_t op_id,
548548
vnet_crypto_key_index_t key_index)
549549
{
550+
vnet_crypto_op_t _op, *op = &_op;
550551
u8 iv[12];
552+
u8 tag_[NOISE_AUTHTAG_LEN] = { };
553+
u8 src_[] = { };
554+
551555
clib_memset (iv, 0, 12);
552556
clib_memcpy (iv + 4, &nonce, sizeof (nonce));
553557

554-
vnet_crypto_op_t _op, *op = &_op;
558+
vnet_crypto_op_init (op, op_id);
555559

556-
u8 _tag[16] = { };
560+
op->tag_len = NOISE_AUTHTAG_LEN;
557561
if (op_id == VNET_CRYPTO_OP_CHACHA20_POLY1305_DEC)
558562
{
559-
clib_memcpy (_tag, src + src_len - NOISE_AUTHTAG_LEN,
560-
NOISE_AUTHTAG_LEN);
563+
op->tag = src + src_len - NOISE_AUTHTAG_LEN;
561564
src_len -= NOISE_AUTHTAG_LEN;
562565
}
563-
vnet_crypto_op_init (op, op_id);
564-
op->key_index = key_index;
565-
op->src = src;
566-
op->dst = dst;
566+
else
567+
op->tag = tag_;
568+
569+
op->src = !src ? src_ : src;
567570
op->len = src_len;
571+
572+
op->dst = dst;
573+
op->key_index = key_index;
568574
op->aad = aad;
569575
op->aad_len = aad_len;
570576
op->iv = iv;
571-
op->tag_len = NOISE_AUTHTAG_LEN;
572-
op->tag = _tag;
577+
573578
vnet_crypto_process_ops (vm, op, 1);
574579
if (op_id == VNET_CRYPTO_OP_CHACHA20_POLY1305_ENC)
575580
{

src/plugins/wireguard/wireguard_send.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ always_inline void
2626
ip4_header_set_len_w_chksum (ip4_header_t * ip4, u16 len)
2727
{
2828
ip_csum_t sum = ip4->checksum;
29-
u8 old = ip4->length;
30-
u8 new = len;
29+
u16 old = ip4->length;
30+
u16 new = len;
3131

3232
sum = ip_csum_update (sum, old, new, ip4_header_t, length);
3333
ip4->checksum = ip_csum_fold (sum);

0 commit comments

Comments
 (0)