40#ifndef GNUNET_COMMON_H
41#define GNUNET_COMMON_H
43#include "gnunet_config.h"
48#include <sys/socket.h>
50#include <netinet/in.h>
56#if defined(__FreeBSD__)
58#include <sys/endian.h>
59#define bswap_16(x) bswap16 (x)
60#define bswap_32(x) bswap32 (x)
61#define bswap_64(x) bswap64 (x)
63#elif defined(__OpenBSD__)
65#define bswap_16(x) swap16 (x)
66#define bswap_32(x) swap32 (x)
67#define bswap_64(x) swap64 (x)
69#elif defined(__NetBSD__)
71#include <machine/bswap.h>
72#if defined(__BSWAP_RENAME) && ! defined(__bswap_32)
73#define bswap_16(x) bswap16 (x)
74#define bswap_32(x) bswap32 (x)
75#define bswap_64(x) bswap64 (x)
78#elif defined(__linux__) || defined(GNU)
102#define GNUNET_UTIL_VERSION 0x000A0104
121#define GNUNET_MIN(a, b) (((a) < (b)) ? (a) : (b))
123#define GNUNET_MAX(a, b) (((a) > (b)) ? (a) : (b))
128#define __BYTE_ORDER _BYTE_ORDER
131#define __BYTE_ORDER BYTE_ORDER
137#define __BIG_ENDIAN _BIG_ENDIAN
140#define __BIG_ENDIAN BIG_ENDIAN
144#ifndef __LITTLE_ENDIAN
146#define __LITTLE_ENDIAN _LITTLE_ENDIAN
149#define __LITTLE_ENDIAN LITTLE_ENDIAN
159#ifndef GNUNET_EXTRA_LOGGING
160#define GNUNET_EXTRA_LOGGING 1
167#if defined(bswap_16) || defined(bswap_32) || defined(bswap_64)
168#define BYTE_SWAP_16(x) bswap_16 (x)
169#define BYTE_SWAP_32(x) bswap_32 (x)
170#define BYTE_SWAP_64(x) bswap_64 (x)
172#define BYTE_SWAP_16(x) ((((x) & 0x00ff) << 8) | (((x) & 0xff00) >> 8))
174#define BYTE_SWAP_32(x) \
175 ((((x) & 0x000000ffU) << 24) | (((x) & 0x0000ff00U) << 8) \
176 | (((x) & 0x00ff0000U) >> 8) | (((x) & 0xff000000U) >> 24))
178#define BYTE_SWAP_64(x) \
179 ((((x) & 0x00000000000000ffUL) << 56) | (((x) & 0x000000000000ff00UL) << \
181 | (((x) & 0x0000000000ff0000UL) << 24) | (((x) & 0x00000000ff000000UL) \
183 | (((x) & 0x000000ff00000000UL) >> 8) | (((x) & 0x0000ff0000000000UL) \
185 | (((x) & 0x00ff000000000000UL) >> 40) | (((x) & 0xff00000000000000UL) \
190#if __BYTE_ORDER == __LITTLE_ENDIAN
191#define GNUNET_htobe16(x) BYTE_SWAP_16 (x)
192#define GNUNET_htole16(x) (x)
193#define GNUNET_be16toh(x) BYTE_SWAP_16 (x)
194#define GNUNET_le16toh(x) (x)
196#define GNUNET_htobe32(x) BYTE_SWAP_32 (x)
197#define GNUNET_htole32(x) (x)
198#define GNUNET_be32toh(x) BYTE_SWAP_32 (x)
199#define GNUNET_le32toh(x) (x)
201#define GNUNET_htobe64(x) BYTE_SWAP_64 (x)
202#define GNUNET_htole64(x) (x)
203#define GNUNET_be64toh(x) BYTE_SWAP_64 (x)
204#define GNUNET_le64toh(x) (x)
206#if __BYTE_ORDER == __BIG_ENDIAN
207#define GNUNET_htobe16(x) (x)
208#define GNUNET_htole16(x) BYTE_SWAP_16 (x)
209#define GNUNET_be16toh(x) (x)
210#define GNUNET_le16toh(x) BYTE_SWAP_16 (x)
212#define GNUNET_htobe32(x) (x)
213#define GNUNET_htole32(x) BYTE_SWAP_32 (x)
214#define GNUNET_be32toh(x) (x)
215#define GNUNET_le32toh(x) BYTE_SWAP_32 (x)
217#define GNUNET_htobe64(x) (x)
218#define GNUNET_htole64(x) BYTE_SWAP_64 (x)
219#define GNUNET_be64toh(x) (x)
220#define GNUNET_le64toh(x) BYTE_SWAP_64 (x)
236#define GNUNET_NZL(l) GNUNET_MAX (1, l)
242#define GNUNET_PACKED __attribute__ ((packed))
247#define GNUNET_GCC_STRUCT_LAYOUT
254#ifdef __BIGGEST_ALIGNMENT__
255#define GNUNET_ALIGN __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)))
257#define GNUNET_ALIGN __attribute__ ((aligned (8)))
263#define GNUNET_UNUSED __attribute__ ((unused))
268#define GNUNET_NORETURN __attribute__ ((noreturn))
273#define GNUNET_NETWORK_STRUCT_BEGIN
278#define GNUNET_NETWORK_STRUCT_END
289 uint32_t
bits[512 / 8 /
sizeof(uint32_t)];
299 uint32_t
bits[256 / 8 /
sizeof(uint32_t)];
343 uint32_t
bits[16 /
sizeof(uint32_t)];
446 const char *message);
459#if ! defined(GNUNET_CULL_LOGGING)
464 const char *function,
485#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
486#define _GNUNET_BOOLEAN_EXPR(expr) \
488 int _gnunet_boolean_var_; \
490 _gnunet_boolean_var_ = 1; \
492 _gnunet_boolean_var_ = 0; \
493 _gnunet_boolean_var_; \
495#define GN_LIKELY(expr) (__builtin_expect (_GNUNET_BOOLEAN_EXPR (expr), 1))
496#define GN_UNLIKELY(expr) (__builtin_expect (_GNUNET_BOOLEAN_EXPR (expr), 0))
498#define GN_LIKELY(expr) (expr)
499#define GN_UNLIKELY(expr) (expr)
502#if ! defined(GNUNET_LOG_CALL_STATUS)
503#define GNUNET_LOG_CALL_STATUS -1
525#if ! defined(GNUNET_CULL_LOGGING)
526#define GNUNET_log_from(kind, comp, ...) \
529 static int log_call_enabled = GNUNET_LOG_CALL_STATUS; \
530 if ((GNUNET_EXTRA_LOGGING > 0) || \
531 ((GNUNET_ERROR_TYPE_DEBUG & (kind)) == 0)) \
533 if (GN_UNLIKELY (log_call_enabled == -1)) \
535 GNUNET_get_log_call_status ((kind) & (~GNUNET_ERROR_TYPE_BULK), \
540 if (GN_UNLIKELY (GNUNET_get_log_skip () > 0)) \
542 GNUNET_log_skip (-1, GNUNET_NO); \
546 if (GN_UNLIKELY (log_call_enabled)) \
547 GNUNET_log_from_nocheck ((kind), comp, __VA_ARGS__); \
552#define GNUNET_log(kind, ...) \
555 static int log_call_enabled = GNUNET_LOG_CALL_STATUS; \
556 if ((GNUNET_EXTRA_LOGGING > 0) || \
557 ((GNUNET_ERROR_TYPE_DEBUG & (kind)) == 0)) \
559 if (GN_UNLIKELY (log_call_enabled == -1)) \
561 GNUNET_get_log_call_status ((kind) & (~GNUNET_ERROR_TYPE_BULK), \
566 if (GN_UNLIKELY (GNUNET_get_log_skip () > 0)) \
568 GNUNET_log_skip (-1, GNUNET_NO); \
572 if (GN_UNLIKELY (log_call_enabled)) \
573 GNUNET_log_nocheck ((kind), __VA_ARGS__); \
578#define GNUNET_log(...)
579#define GNUNET_log_from(...)
610 const char *required);
645#define GNUNET_B2S(obj) GNUNET_b2s ((obj), sizeof (*(obj)))
670 const char *loglevel,
671 const char *logfile);
895GNUNET_a2s (
const struct sockaddr *addr, socklen_t addrlen);
910GNUNET_hex2b (
const char *src,
void *dst,
size_t dstlen,
int invert);
943#if __GNUC__ >= 6 || __clang_major__ >= 6
944#define GNUNET_assert(cond) \
947 _Pragma("GCC diagnostic push") \
948 _Pragma("GCC diagnostic ignored \"-Wtautological-compare\"") \
951 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
952 dgettext ("gnunet", "Assertion failed at %s:%d. Aborting.\n"), \
957 _Pragma("GCC diagnostic pop") \
961#define GNUNET_assert(cond) \
966 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
967 dgettext ("gnunet", \
968 "Assertion failed at %s:%d. Aborting.\n"), \
980#define GNUNET_assert_at(cond, f, l) \
985 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
986 dgettext ("gnunet", \
987 "Assertion failed at %s:%d. Aborting.\n"), \
1002#define GNUNET_assert_from(cond, comp) \
1007 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, \
1009 dgettext ("gnunet", \
1010 "Assertion failed at %s:%d. Aborting.\n") \
1025#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) \
1026 || defined(__GNUC__) || defined(__clang__)
1033#define GNUNET_static_assert(cond) _Static_assert (cond, #cond)
1043#define GNUNET_STATIC_ASSERT_CAT2_(a, b) a ## b
1044#define GNUNET_STATIC_ASSERT_CAT_(a, b) GNUNET_STATIC_ASSERT_CAT2_ (a, b)
1045#define GNUNET_static_assert(cond) \
1046 typedef char GNUNET_STATIC_ASSERT_CAT_ (gnunet_static_assert_, \
1047 __LINE__)[(cond) ? 1 : -1]
1056#define GNUNET_break(cond) \
1061 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
1062 dgettext ("gnunet", "Assertion failed at %s:%d.\n"), \
1078#define GNUNET_break_op(cond) \
1083 GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, \
1084 dgettext ("gnunet", \
1085 "External protocol violation detected at %s:%d.\n"), \
1098#define GNUNET_log_strerror(level, cmd) \
1101 GNUNET_log (level, \
1102 dgettext ("gnunet", \
1103 "`%s' failed at %s:%d with error: %s\n"), \
1107 strerror (errno)); \
1117#define GNUNET_log_from_strerror(level, component, cmd) \
1120 GNUNET_log_from (level, \
1122 dgettext ("gnunet", \
1123 "`%s' failed at %s:%d with error: %s\n"), \
1127 strerror (errno)); \
1137#define GNUNET_log_strerror_file(level, cmd, filename) \
1140 GNUNET_log (level, \
1141 dgettext ("gnunet", \
1142 "`%s' failed on file `%s' at %s:%d with error: %s\n"), \
1147 strerror (errno)); \
1157#define GNUNET_log_from_strerror_file(level, component, cmd, filename) \
1160 GNUNET_log_from (level, \
1162 dgettext ("gnunet", \
1163 "`%s' failed on file `%s' at %s:%d with error: %s\n"), \
1168 strerror (errno)); \
1175#define GNUNET_htonll(n) htobe64 (n)
1194#define GNUNET_ntohll(n) be64toh (n)
1241#define GNUNET_MAX_MALLOC_CHECKED (1024 * 1024 * 40)
1251#define GNUNET_new(type) (type *) GNUNET_malloc (sizeof(type))
1261#define GNUNET_memcmp(a, b) \
1263 const typeof (*b) * _a = (a); \
1264 const typeof (*a) * _b = (b); \
1265 memcmp (_a, _b, sizeof(*a)); \
1290#define GNUNET_memcmp_priv(a, b) \
1292 const typeof (*b) * _a = (a); \
1293 const typeof (*a) * _b = (b); \
1294 GNUNET_memcmp_ct_ (_a, _b, sizeof(*a)); \
1318#define GNUNET_is_zero(a) \
1319 GNUNET_is_zero_ ((a), sizeof (*(a)))
1331#define GNUNET_memcpy(dst, src, n) \
1336 (void) memcpy (dst, src, n); \
1351#define GNUNET_new_array(n, type) ({ \
1352 GNUNET_assert (SIZE_MAX / sizeof (type) >= n); \
1353 (type *) GNUNET_malloc ((n) * sizeof(type)); \
1366#define GNUNET_malloc(size) GNUNET_xmalloc_ (size, __FILE__, __LINE__)
1376#define GNUNET_memdup(buf, size) GNUNET_xmemdup_ (buf, size, __FILE__, __LINE__)
1386#define GNUNET_malloc_large(size) \
1387 GNUNET_xmalloc_unchecked_ (size, __FILE__, __LINE__)
1399#define GNUNET_realloc(ptr, size) \
1400 GNUNET_xrealloc_ (ptr, size, __FILE__, __LINE__)
1412#define GNUNET_free_nz(ptr) GNUNET_xfree_ (ptr, __FILE__, __LINE__)
1426#define GNUNET_free(ptr) do { \
1427 GNUNET_xfree_ (ptr, __FILE__, __LINE__); \
1440#define GNUNET_strdup(a) GNUNET_xstrdup_ (a, __FILE__, __LINE__)
1452#define GNUNET_strndup(a, length) \
1453 GNUNET_xstrndup_ (a, length, __FILE__, __LINE__)
1490#define GNUNET_array_grow(arr, size, tsize) \
1491 GNUNET_xgrow_ ((void **) &(arr), \
1511#define GNUNET_array_append(arr, len, element) \
1514 GNUNET_assert ((len) + 1 > (len)); \
1515 GNUNET_array_grow (arr, len, len + 1); \
1516 (arr) [len - 1] = element; \
1543#define GNUNET_array_concatenate(arr1, len1, arr2, len2) \
1546 const typeof (*arr2) * _a1 = (arr1); \
1547 const typeof (*arr1) * _a2 = (arr2); \
1548 GNUNET_assert ((len1) + (len2) >= (len1)); \
1549 GNUNET_assert (SIZE_MAX / sizeof (*_a1) >= ((len1) + (len2))); \
1550 GNUNET_array_grow (arr1, len1, (len1) + (len2)); \
1551 memcpy (&(arr1) [(len1) - (len2)], _a2, (len2) * sizeof (*arr1)); \
1715 unsigned int *oldCount,
1716 unsigned int newCount,
1770#if __STDC_VERSION__ < 199901L
1772#define __func__ __FUNCTION__
1774#define __func__ "<unknown>"
struct GNUNET_MessageHeader * msg
static char * component
Running component.
static mp_limb_t d[(((256)+GMP_NUMB_BITS - 1)/GMP_NUMB_BITS)]
static char * line
Desired phone line (string to be converted to a hash).
static char * data
The data to insert into the dht.
static struct GNUNET_PEERSTORE_StoreHelloContext * shc
HELLO store context handle.
static size_t data_size
Number of bytes in data.
static struct GNUNET_Process * p
Helper process we started.
struct GNUNET_PQ_ResultSpec __attribute__
int GNUNET_memcmp_ct_(const void *b1, const void *b2, size_t len)
Compare memory in b1 and b2 in constant time, suitable for private data.
void(* GNUNET_ResultCallback)(void *cls, int64_t result_code, const void *data, uint16_t data_size)
Function called with the result of an asynchronous operation.
uint32_t bits[256/8/sizeof(uint32_t)]
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32.
double GNUNET_ntoh_double(double d)
Convert double to host byte order.
uint16_t type
The type of the message (GNUNET_MESSAGE_TYPE_XXXX), in big-endian format.
enum GNUNET_GenericReturnValue(* GNUNET_FileNameCallback)(void *cls, const char *filename)
Function called with a filename.
char * GNUNET_xstrndup_(const char *str, size_t len, const char *filename, int linenumber)
Dup partially a string.
const char * GNUNET_b2s(const void *buf, size_t buf_size)
Convert a buffer to an 8-character string representative of the contents.
#define GNUNET_NORETURN
gcc-ism to document functions that don't return
void GNUNET_xgrow_(void **old, size_t elementSize, unsigned int *oldCount, unsigned int newCount, const char *filename, int linenumber)
Grow an array, the new elements are zeroed out.
char * GNUNET_xstrdup_(const char *str, const char *filename, int linenumber)
Dup a string.
void(* GNUNET_ContinuationCallback)(void *cls)
Generic continuation callback.
uint32_t bits[16/sizeof(uint32_t)]
uint64_t GNUNET_ntohll(uint64_t n)
Convert unsigned 64-bit integer to host byte order.
int GNUNET_get_log_call_status(int caller_level, const char *comp, const char *file, const char *function, int line)
Decides whether a particular logging call should or should not be allowed to be made.
void * GNUNET_xmalloc_unchecked_(size_t size, const char *filename, int linenumber)
Allocate memory.
void GNUNET_xfree_(void *ptr, const char *filename, int linenumber)
Free memory.
void * GNUNET_xrealloc_(void *ptr, size_t n, const char *filename, int linenumber)
Reallocate memory.
GNUNET_SCHEDULER_Priority
Valid task priorities.
void GNUNET_async_scope_enter(const struct GNUNET_AsyncScopeId *aid, struct GNUNET_AsyncScopeSave *old_scope)
Set the async scope for the current thread.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32;.
int int void * GNUNET_xmalloc_(size_t size, const char *filename, int linenumber)
Allocate memory.
int have_scope
GNUNET_YES unless this saved scope is the unnamed root scope.
double GNUNET_hton_double(double d)
Convert double to network byte order.
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
void GNUNET_async_scope_get(struct GNUNET_AsyncScopeSave *scope_ret)
Get the current async scope.
bool GNUNET_is_zero_(const void *a, size_t n)
Check that memory in a is all zeros.
void GNUNET_async_scope_fresh(struct GNUNET_AsyncScopeId *aid_ret)
Generate a fresh async scope identifier.
void * GNUNET_xmemdup_(const void *buf, size_t size, const char *filename, int linenumber)
Allocate and initialize memory.
void GNUNET_async_scope_restore(struct GNUNET_AsyncScopeSave *old_scope)
Clear the current thread's async scope.
GNUNET_GenericReturnValue
Named constants for return values.
struct GNUNET_AsyncScopeId scope_id
Saved scope.
uint32_t value[4]
128 random bits.
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format.
#define GNUNET_PACKED
gcc-ism to get packed structs.
uint32_t bits[512/8/sizeof(uint32_t)]
@ GNUNET_SCHEDULER_PRIORITY_UI
Run with priority for interactive tasks.
@ GNUNET_SCHEDULER_PRIORITY_IDLE
Run when otherwise idle.
@ GNUNET_SCHEDULER_PRIORITY_HIGH
Run with high priority (important requests).
@ GNUNET_SCHEDULER_PRIORITY_URGENT
Run with priority for urgent tasks.
@ GNUNET_SCHEDULER_PRIORITY_BACKGROUND
Run as background job (higher than idle, lower than default).
@ GNUNET_SCHEDULER_PRIORITY_COUNT
Number of priorities (must be the last priority).
@ GNUNET_SCHEDULER_PRIORITY_KEEP
Run with the same priority as the current job.
@ GNUNET_SCHEDULER_PRIORITY_DEFAULT
Run with the default priority (normal P2P operations).
@ GNUNET_SCHEDULER_PRIORITY_SHUTDOWN
This is an internal priority level that is only used for tasks that are being triggered due to shutdo...
GNUNET_ErrorType
Types of errors.
const char * GNUNET_e2s2(const struct GNUNET_CRYPTO_EcdhePublicKey *p)
Convert a public key value to a string (for printing debug messages).
const char * GNUNET_p2s2(const struct GNUNET_CRYPTO_EddsaPublicKey *p)
Convert a public key value to a string (for printing debug messages).
const char * GNUNET_uuid2s(const struct GNUNET_Uuid *uuid)
Convert a UUID to a string (for printing debug messages).
void GNUNET_print_bytes(const void *buf, size_t buf_len, int fold, int in_be)
Print a byte string in hexadecimal ascii notation.
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
const char * GNUNET_h2s_full(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
void GNUNET_log_nocheck(enum GNUNET_ErrorType kind, const char *message,...) __attribute__((format(printf
Main log function.
const char * GNUNET_error_type_to_string(enum GNUNET_ErrorType kind)
Convert error type to string.
int GNUNET_get_log_skip(void)
Get the number of log calls that are going to be skipped.
const char * GNUNET_e2s(const struct GNUNET_CRYPTO_EcdhePublicKey *p)
Convert a public key value to a string (for printing debug messages).
size_t GNUNET_hex2b(const char *src, void *dst, size_t dstlen, int invert)
Parse an ascii-encoded hexadecimal string into the buffer.
const char * GNUNET_sh2s(const struct GNUNET_ShortHashCode *shc)
Convert a short hash value to a string (for printing debug messages).
const char * GNUNET_i2s_full(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
enum GNUNET_GenericReturnValue GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
const char * GNUNET_a2s(const struct sockaddr *addr, socklen_t addrlen)
Convert a "struct sockaddr*" (IPv4 or IPv6 address) to a string (for printing debug messages).
void GNUNET_log_skip(int n, int check_reset)
Ignore the next n calls to the log function.
void GNUNET_log_config_invalid(enum GNUNET_ErrorType kind, const char *section, const char *option, const char *required)
Log error message about invalid configuration option value.
void GNUNET_log_config_missing(enum GNUNET_ErrorType kind, const char *section, const char *option)
Log error message about missing configuration option.
const char * GNUNET_h2s2(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
void GNUNET_log_from_nocheck(enum GNUNET_ErrorType kind, const char *comp, const char *message,...) __attribute__((format(printf
Log function that specifies an alternative component.
void GNUNET_abort_(void) __attribute__((noreturn))
Abort the process, generate a core dump if possible.
void GNUNET_logger_add(GNUNET_Logger logger, void *logger_cls)
Add a custom logger.
void(* GNUNET_Logger)(void *cls, enum GNUNET_ErrorType kind, const char *component, const char *date, const char *message)
User-defined handler for log messages.
const char * GNUNET_i2s2(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
const char * GNUNET_p2s(const struct GNUNET_CRYPTO_EddsaPublicKey *p)
Convert a public key value to a string (for printing debug messages).
void GNUNET_logger_remove(GNUNET_Logger logger, void *logger_cls)
Remove a custom logger.
@ GNUNET_ERROR_TYPE_UNSPECIFIED
@ GNUNET_ERROR_TYPE_WARNING
@ GNUNET_ERROR_TYPE_ERROR
@ GNUNET_ERROR_TYPE_INVALID
@ GNUNET_ERROR_TYPE_MESSAGE
@ GNUNET_ERROR_TYPE_DEBUG
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
struct GNUNET_MessageHeader * GNUNET_copy_message(const struct GNUNET_MessageHeader *msg)
Create a copy of the given message.
int GNUNET_snprintf(char *buf, size_t size, const char *format,...) __attribute__((format(printf
Like snprintf, just aborts if the buffer is of insufficient size.
static unsigned int size
Size of the "table".
Identifier for an asynchronous execution context.
Saved async scope identifier or root scope.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and encr...
Public ECC key (always for curve Ed25519) encoded in a format suitable for network transmission and E...
The identity of the host (wraps the signing key of the peer).
A UUID, a 128 bit "random" value.