From edca1325cf296bd0f5ff422fc12de2ce7a7bad88 Mon Sep 17 00:00:00 2001 From: Artem Glazychev Date: Mon, 31 Aug 2020 17:12:30 +0700 Subject: wireguard: initial implementation of wireguard protocol Type: feature The main information about plugin you can see in README.md vpp# wireguard ? wireguard create wireguard create listen-port private-key src [generate-key] wireguard delete wireguard delete wireguard peer add wireguard peer add public-key endpoint allowed-ip dst-port [port_dst] persistent-keepalive [keepalive_interval] wireguard peer remove wireguard peer remove Change-Id: I85eb0bfc033ccfb2045696398d8a108b1c64b8d9 Signed-off-by: Artem Glazychev Signed-off-by: Damjan Marion Signed-off-by: Jim Thompson Signed-off-by: Neale Ranns Signed-off-by: Damjan Marion --- src/plugins/wireguard/blake/blake2s.h | 90 +++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 src/plugins/wireguard/blake/blake2s.h (limited to 'src/plugins/wireguard/blake/blake2s.h') diff --git a/src/plugins/wireguard/blake/blake2s.h b/src/plugins/wireguard/blake/blake2s.h new file mode 100755 index 00000000000..37da0acf28a --- /dev/null +++ b/src/plugins/wireguard/blake/blake2s.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2020 Doc.ai and/or its affiliates. + * Copyright (c) 2012 Samuel Neves . + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#ifndef __included_crypto_blake2s_h__ +#define __included_crypto_blake2s_h__ + +#include + +#if defined(_MSC_VER) +#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop)) +#else +#define BLAKE2_PACKED(x) x __attribute__((packed)) +#endif + +enum blake2s_constant +{ + BLAKE2S_BLOCK_BYTES = 64, + BLAKE2S_OUT_BYTES = 32, + BLAKE2S_KEY_BYTES = 32, + BLAKE2S_HASH_SIZE = BLAKE2S_OUT_BYTES, + BLAKE2S_SALT_BYTES = 8, + BLAKE2S_PERSONAL_BYTES = 8 +}; + +typedef struct blake2s_state +{ + uint32_t h[8]; + uint32_t t[2]; + uint32_t f[2]; + uint8_t buf[BLAKE2S_BLOCK_BYTES]; + size_t buflen; + size_t outlen; + uint8_t last_node; +} blake2s_state_t; + +BLAKE2_PACKED (struct blake2s_param + { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint32_t node_offset; /* 12 */ + uint16_t xof_length; /* 14 */ + uint8_t node_depth; /* 15 */ + uint8_t inner_length; /* 16 */ + /* uint8_t reserved[0]; */ + uint8_t salt[BLAKE2S_SALT_BYTES]; /* 24 */ + uint8_t personal[BLAKE2S_PERSONAL_BYTES]; /* 32 */ + }); + +typedef struct blake2s_param blake2s_param_t; + +/* Streaming API */ +int blake2s_init (blake2s_state_t * S, size_t outlen); +int blake2s_init_key (blake2s_state_t * S, size_t outlen, const void *key, + size_t keylen); +int blake2s_init_param (blake2s_state_t * S, const blake2s_param_t * P); +int blake2s_update (blake2s_state_t * S, const void *in, size_t inlen); +int blake2s_final (blake2s_state_t * S, void *out, size_t outlen); + +int blake2s (void *out, size_t outlen, const void *in, size_t inlen, + const void *key, size_t keylen); + +#endif /* __included_crypto_blake2s_h__ */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ -- cgit 1.2.3-korg