This switches WireGuard to use lib/crypto libraries instead of the
Zinc ones.

This patch is intended to be squashed at merge time, or it will break
bisection.
---
 drivers/net/Kconfig              |  6 +++---
 drivers/net/wireguard/cookie.c   |  4 ++--
 drivers/net/wireguard/messages.h |  6 +++---
 drivers/net/wireguard/receive.c  | 17 ++++-------------
 drivers/net/wireguard/send.c     | 19 ++++++-------------
 5 files changed, 18 insertions(+), 34 deletions(-)

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index c26aef673538..3bd4dc662392 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -77,9 +77,9 @@ config WIREGUARD
        depends on IPV6 || !IPV6
        select NET_UDP_TUNNEL
        select DST_CACHE
-       select ZINC_CHACHA20POLY1305
-       select ZINC_BLAKE2S
-       select ZINC_CURVE25519
+       select CRYPTO_LIB_CHACHA20POLY1305
+       select CRYPTO_LIB_BLAKE2S
+       select CRYPTO_LIB_CURVE25519
        help
          WireGuard is a secure, fast, and easy to use replacement for IPSec
          that uses modern cryptography and clever networking tricks. It's
diff --git a/drivers/net/wireguard/cookie.c b/drivers/net/wireguard/cookie.c
index bd23a14ff87f..104b739c327f 100644
--- a/drivers/net/wireguard/cookie.c
+++ b/drivers/net/wireguard/cookie.c
@@ -10,8 +10,8 @@
 #include "ratelimiter.h"
 #include "timers.h"
 
-#include <zinc/blake2s.h>
-#include <zinc/chacha20poly1305.h>
+#include <crypto/blake2s.h>
+#include <crypto/chacha20poly1305.h>
 
 #include <net/ipv6.h>
 #include <crypto/algapi.h>
diff --git a/drivers/net/wireguard/messages.h b/drivers/net/wireguard/messages.h
index 3cfd1c5e9b02..4bbb1f97af04 100644
--- a/drivers/net/wireguard/messages.h
+++ b/drivers/net/wireguard/messages.h
@@ -6,9 +6,9 @@
 #ifndef _WG_MESSAGES_H
 #define _WG_MESSAGES_H
 
-#include <zinc/curve25519.h>
-#include <zinc/chacha20poly1305.h>
-#include <zinc/blake2s.h>
+#include <crypto/blake2s.h>
+#include <crypto/chacha20poly1305.h>
+#include <crypto/curve25519.h>
 
 #include <linux/kernel.h>
 #include <linux/param.h>
diff --git a/drivers/net/wireguard/receive.c b/drivers/net/wireguard/receive.c
index 900c76edb9d6..ae7ffba5fc48 100644
--- a/drivers/net/wireguard/receive.c
+++ b/drivers/net/wireguard/receive.c
@@ -11,7 +11,6 @@
 #include "cookie.h"
 #include "socket.h"
 
-#include <linux/simd.h>
 #include <linux/ip.h>
 #include <linux/ipv6.h>
 #include <linux/udp.h>
@@ -244,8 +243,7 @@ static void keep_key_fresh(struct wg_peer *peer)
        }
 }
 
-static bool decrypt_packet(struct sk_buff *skb, struct noise_symmetric_key 
*key,
-                          simd_context_t *simd_context)
+static bool decrypt_packet(struct sk_buff *skb, struct noise_symmetric_key 
*key)
 {
        struct scatterlist sg[MAX_SKB_FRAGS + 8];
        struct sk_buff *trailer;
@@ -281,9 +279,8 @@ static bool decrypt_packet(struct sk_buff *skb, struct 
noise_symmetric_key *key,
        if (skb_to_sgvec(skb, sg, 0, skb->len) <= 0)
                return false;
 
-       if (!chacha20poly1305_decrypt_sg(sg, sg, skb->len, NULL, 0,
-                                        PACKET_CB(skb)->nonce, key->key,
-                                        simd_context))
+       if (!chacha20poly1305_decrypt_sg_inplace(sg, skb->len, NULL, 0,
+                                        PACKET_CB(skb)->nonce, key->key))
                return false;
 
        /* Another ugly situation of pushing and pulling the header so as to
@@ -510,21 +507,15 @@ void wg_packet_decrypt_worker(struct work_struct *work)
 {
        struct crypt_queue *queue = container_of(work, struct multicore_worker,
                                                 work)->ptr;
-       simd_context_t simd_context;
        struct sk_buff *skb;
 
-       simd_get(&simd_context);
        while ((skb = ptr_ring_consume_bh(&queue->ring)) != NULL) {
                enum packet_state state = likely(decrypt_packet(skb,
-                                          &PACKET_CB(skb)->keypair->receiving,
-                                          &simd_context)) ?
+                                          
&PACKET_CB(skb)->keypair->receiving)) ?
                                PACKET_STATE_CRYPTED : PACKET_STATE_DEAD;
                wg_queue_enqueue_per_peer_napi(&PACKET_PEER(skb)->rx_queue, skb,
                                               state);
-               simd_relax(&simd_context);
        }
-
-       simd_put(&simd_context);
 }
 
 static void wg_packet_consume_data(struct wg_device *wg, struct sk_buff *skb)
diff --git a/drivers/net/wireguard/send.c b/drivers/net/wireguard/send.c
index b0df5c717502..37bd2599ae44 100644
--- a/drivers/net/wireguard/send.c
+++ b/drivers/net/wireguard/send.c
@@ -11,7 +11,6 @@
 #include "messages.h"
 #include "cookie.h"
 
-#include <linux/simd.h>
 #include <linux/uio.h>
 #include <linux/inetdevice.h>
 #include <linux/socket.h>
@@ -157,8 +156,7 @@ static unsigned int calculate_skb_padding(struct sk_buff 
*skb)
        return padded_size - last_unit;
 }
 
-static bool encrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair,
-                          simd_context_t *simd_context)
+static bool encrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
 {
        unsigned int padding_len, plaintext_len, trailer_len;
        struct scatterlist sg[MAX_SKB_FRAGS + 8];
@@ -207,9 +205,10 @@ static bool encrypt_packet(struct sk_buff *skb, struct 
noise_keypair *keypair,
        if (skb_to_sgvec(skb, sg, sizeof(struct message_data),
                         noise_encrypted_len(plaintext_len)) <= 0)
                return false;
-       return chacha20poly1305_encrypt_sg(sg, sg, plaintext_len, NULL, 0,
-                                          PACKET_CB(skb)->nonce,
-                                          keypair->sending.key, simd_context);
+       chacha20poly1305_encrypt_sg_inplace(sg, plaintext_len, NULL, 0,
+                                           PACKET_CB(skb)->nonce,
+                                           keypair->sending.key);
+       return true;
 }
 
 void wg_packet_send_keepalive(struct wg_peer *peer)
@@ -296,16 +295,13 @@ void wg_packet_encrypt_worker(struct work_struct *work)
        struct crypt_queue *queue = container_of(work, struct multicore_worker,
                                                 work)->ptr;
        struct sk_buff *first, *skb, *next;
-       simd_context_t simd_context;
 
-       simd_get(&simd_context);
        while ((first = ptr_ring_consume_bh(&queue->ring)) != NULL) {
                enum packet_state state = PACKET_STATE_CRYPTED;
 
                skb_walk_null_queue_safe(first, skb, next) {
                        if (likely(encrypt_packet(skb,
-                                                 PACKET_CB(first)->keypair,
-                                                 &simd_context))) {
+                                                 PACKET_CB(first)->keypair))) {
                                wg_reset_packet(skb);
                        } else {
                                state = PACKET_STATE_DEAD;
@@ -314,10 +310,7 @@ void wg_packet_encrypt_worker(struct work_struct *work)
                }
                wg_queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first,
                                          state);
-
-               simd_relax(&simd_context);
        }
-       simd_put(&simd_context);
 }
 
 static void wg_packet_create_data(struct sk_buff *first)
-- 
2.17.1

Reply via email to