all repos — circe-vpn @ f8438a3f9db13c62e62593c72e846eb3911062af

Circe VPN

core/peer_table.h (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
#ifndef CIRCE_CORE_PEER_TABLE_H
#define CIRCE_CORE_PEER_TABLE_H

#include <stdbool.h>
#include <stdint.h>

struct circe_location
{
  enum
  {
    CIRCE_ADDRESS_IPV4,
    CIRCE_ADDRESS_IPV6,
  } ip_type;
  uint16_t port;
  union
  {
    uint8_t ipv4[4];
    uint8_t ipv6[16];
  } ip_addr;
};

#define CIRCE_PEER_TABLE_LEN 64
#define CIRCE_IDENTITY_LEN 64 // SHA-512 hash of hostname || island name

struct circe_peer
{
  bool double_lan; // lan1 is not valid if false
  struct circe_location lan0_loc;
  struct circe_location lan1_loc;
  struct circe_location wan_loc;
  uint8_t relay_server_identity[CIRCE_IDENTITY_LEN]; // SERVERS DON'T USE THIS,
                                                     // ONLY CLIENTS DO
  uint8_t lan0_hash[32];                             // SHA-256
  uint8_t lan1_hash[32];
  enum
  {
    CIRCE_ROUTE_LAN0,
    CIRCE_ROUTE_LAN1,
    CIRCE_ROUTE_WAN,
    CIRCE_ROUTE_RELAY,
  } current_route;

  uint8_t identity[CIRCE_IDENTITY_LEN];
  uint8_t mldsa_pubkey[1312]; // ML-DSA-44

  uint8_t rx_key[32];
  uint8_t tx_key[32];
};

#endif