The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/wg/wg_noise.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: ISC
    2  *
    3  * Copyright (C) 2015-2021 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
    4  * Copyright (C) 2019-2021 Matt Dunwoodie <ncon@noconroy.net>
    5  */
    6 
    7 #ifndef __NOISE_H__
    8 #define __NOISE_H__
    9 
   10 #include "crypto.h"
   11 
   12 #define NOISE_PUBLIC_KEY_LEN    CURVE25519_KEY_SIZE
   13 #define NOISE_SYMMETRIC_KEY_LEN CHACHA20POLY1305_KEY_SIZE
   14 #define NOISE_TIMESTAMP_LEN     (sizeof(uint64_t) + sizeof(uint32_t))
   15 #define NOISE_AUTHTAG_LEN       CHACHA20POLY1305_AUTHTAG_SIZE
   16 #define NOISE_HASH_LEN          BLAKE2S_HASH_SIZE
   17 
   18 #define REJECT_AFTER_TIME       180
   19 #define REKEY_TIMEOUT           5
   20 #define KEEPALIVE_TIMEOUT       10
   21 
   22 struct noise_local;
   23 struct noise_remote;
   24 struct noise_keypair;
   25 
   26 /* Local configuration */
   27 struct noise_local *
   28         noise_local_alloc(void *);
   29 struct noise_local *
   30         noise_local_ref(struct noise_local *);
   31 void    noise_local_put(struct noise_local *);
   32 void    noise_local_free(struct noise_local *, void (*)(struct noise_local *));
   33 void *  noise_local_arg(struct noise_local *);
   34 
   35 void    noise_local_private(struct noise_local *,
   36             const uint8_t[NOISE_PUBLIC_KEY_LEN]);
   37 int     noise_local_keys(struct noise_local *,
   38             uint8_t[NOISE_PUBLIC_KEY_LEN],
   39             uint8_t[NOISE_PUBLIC_KEY_LEN]);
   40 
   41 /* Remote configuration */
   42 struct noise_remote *
   43         noise_remote_alloc(struct noise_local *, void *,
   44             const uint8_t[NOISE_PUBLIC_KEY_LEN]);
   45 int     noise_remote_enable(struct noise_remote *);
   46 void    noise_remote_disable(struct noise_remote *);
   47 struct noise_remote *
   48         noise_remote_lookup(struct noise_local *, const uint8_t[NOISE_PUBLIC_KEY_LEN]);
   49 struct noise_remote *
   50         noise_remote_index(struct noise_local *, uint32_t);
   51 struct noise_remote *
   52         noise_remote_ref(struct noise_remote *);
   53 void    noise_remote_put(struct noise_remote *);
   54 void    noise_remote_free(struct noise_remote *, void (*)(struct noise_remote *));
   55 struct noise_local *
   56         noise_remote_local(struct noise_remote *);
   57 void *  noise_remote_arg(struct noise_remote *);
   58 
   59 void    noise_remote_set_psk(struct noise_remote *,
   60             const uint8_t[NOISE_SYMMETRIC_KEY_LEN]);
   61 int     noise_remote_keys(struct noise_remote *,
   62             uint8_t[NOISE_PUBLIC_KEY_LEN],
   63             uint8_t[NOISE_SYMMETRIC_KEY_LEN]);
   64 int     noise_remote_initiation_expired(struct noise_remote *);
   65 void    noise_remote_handshake_clear(struct noise_remote *);
   66 void    noise_remote_keypairs_clear(struct noise_remote *);
   67 
   68 /* Keypair functions */
   69 struct noise_keypair *
   70         noise_keypair_lookup(struct noise_local *, uint32_t);
   71 struct noise_keypair *
   72         noise_keypair_current(struct noise_remote *);
   73 struct noise_keypair *
   74         noise_keypair_ref(struct noise_keypair *);
   75 int     noise_keypair_received_with(struct noise_keypair *);
   76 void    noise_keypair_put(struct noise_keypair *);
   77 
   78 struct noise_remote *
   79         noise_keypair_remote(struct noise_keypair *);
   80 
   81 int     noise_keypair_nonce_next(struct noise_keypair *, uint64_t *);
   82 int     noise_keypair_nonce_check(struct noise_keypair *, uint64_t);
   83 
   84 int     noise_keep_key_fresh_send(struct noise_remote *);
   85 int     noise_keep_key_fresh_recv(struct noise_remote *);
   86 int     noise_keypair_encrypt(
   87             struct noise_keypair *,
   88             uint32_t *r_idx,
   89             uint64_t nonce,
   90             struct mbuf *);
   91 int     noise_keypair_decrypt(
   92             struct noise_keypair *,
   93             uint64_t nonce,
   94             struct mbuf *);
   95 
   96 /* Handshake functions */
   97 int     noise_create_initiation(
   98             struct noise_remote *,
   99             uint32_t *s_idx,
  100             uint8_t ue[NOISE_PUBLIC_KEY_LEN],
  101             uint8_t es[NOISE_PUBLIC_KEY_LEN + NOISE_AUTHTAG_LEN],
  102             uint8_t ets[NOISE_TIMESTAMP_LEN + NOISE_AUTHTAG_LEN]);
  103 
  104 int     noise_consume_initiation(
  105             struct noise_local *,
  106             struct noise_remote **,
  107             uint32_t s_idx,
  108             uint8_t ue[NOISE_PUBLIC_KEY_LEN],
  109             uint8_t es[NOISE_PUBLIC_KEY_LEN + NOISE_AUTHTAG_LEN],
  110             uint8_t ets[NOISE_TIMESTAMP_LEN + NOISE_AUTHTAG_LEN]);
  111 
  112 int     noise_create_response(
  113             struct noise_remote *,
  114             uint32_t *s_idx,
  115             uint32_t *r_idx,
  116             uint8_t ue[NOISE_PUBLIC_KEY_LEN],
  117             uint8_t en[0 + NOISE_AUTHTAG_LEN]);
  118 
  119 int     noise_consume_response(
  120             struct noise_local *,
  121             struct noise_remote **,
  122             uint32_t s_idx,
  123             uint32_t r_idx,
  124             uint8_t ue[NOISE_PUBLIC_KEY_LEN],
  125             uint8_t en[0 + NOISE_AUTHTAG_LEN]);
  126 
  127 #ifdef SELFTESTS
  128 bool    noise_counter_selftest(void);
  129 #endif /* SELFTESTS */
  130 
  131 #endif /* __NOISE_H__ */

Cache object: b3cc162539e093e7e25dafdb57562e69


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.