104#define UDIF_TRANSPORT_PROFILE_QSTP_INNER_HEADER 1U
113#define UDIF_TRANSPORT_HEADER_EXTERNAL_AAD 0U
119#define UDIF_TRANSPORT_RATCHET_DELEGATED_TO_QSTP 1U
127#define UDIF_TUNNEL_RECORD_HEADER_SIZE 26U
133#define UDIF_TUNNEL_TIME_WINDOW_SECONDS 60U
139#define UDIF_TUNNEL_FLAG_DATA 0x01U
145#define UDIF_TUNNEL_FLAG_KEEPALIVE 0x02U
151#define UDIF_TUNNEL_FLAG_CLOSE 0x04U
157#define UDIF_TUNNEL_FLAG_CONTROL 0x08U
178#define UDIF_KEEPALIVE_INTERVAL_A_SECONDS 300U
184#define UDIF_KEEPALIVE_INTERVAL_E_SECONDS 120U
190#define UDIF_KEEPALIVE_INTERVAL_U_SECONDS 120U
196#if !defined(UDIF_KEEPALIVE_INTERVAL_SECONDS)
197# define UDIF_KEEPALIVE_INTERVAL_SECONDS UDIF_KEEPALIVE_INTERVAL_E_SECONDS
204#define UDIF_IDLE_TEARDOWN_MULTIPLIER 2U
210#define UDIF_IDLE_TEARDOWN_SECONDS (UDIF_KEEPALIVE_INTERVAL_SECONDS * UDIF_IDLE_TEARDOWN_MULTIPLIER)
216#define UDIF_RATCHET_INTERVAL_SECONDS 3600U
222#define UDIF_RATCHET_JITTER_SECONDS 300U
UDIF application-layer message framing.
udif_message_type
Canonical UDIF message type codes.
Definition message.h:119
A single UDIF application message.
Definition message.h:160
Per-connection UDIF state layered atop a QSTP channel.
Definition tunnel.h:267
bool closing
Definition tunnel.h:281
udif_tunnel_side side
Definition tunnel.h:280
uint8_t treatyid[UDIF_SERIAL_NUMBER_SIZE]
Definition tunnel.h:269
uint8_t peerserial[UDIF_SERIAL_NUMBER_SIZE]
Definition tunnel.h:268
uint64_t idledeadline
Definition tunnel.h:277
uint64_t epoch
Definition tunnel.h:273
uint64_t txsequence
Definition tunnel.h:271
uint64_t rxsequence
Definition tunnel.h:272
uint64_t keepalivedeadline
Definition tunnel.h:276
uint64_t lastrxsecs
Definition tunnel.h:274
qstp_connection_state * qstpcns
Definition tunnel.h:270
udif_rolepair rolepair
Definition tunnel.h:279
uint64_t lasttxsecs
Definition tunnel.h:275
uint64_t ratchetdeadline
Definition tunnel.h:278
UDIF_EXPORT_API udif_errors udif_tunnel_trigger_ratchet(udif_tunnel *tun, uint64_t nowsecs)
Force an immediate ratchet trigger on a BC<->BC trunk.
Definition tunnel.c:462
udif_rolepair
Identifies the trust-tree relationship a tunnel spans.
Definition tunnel.h:234
@ udif_rolepair_bc_bc
Definition tunnel.h:238
@ udif_rolepair_none
Definition tunnel.h:235
@ udif_rolepair_treaty
Definition tunnel.h:240
@ udif_rolepair_bc_root
Definition tunnel.h:239
@ udif_rolepair_ua_gc
Definition tunnel.h:236
@ udif_rolepair_gc_bc
Definition tunnel.h:237
UDIF_EXPORT_API udif_errors udif_tunnel_send(udif_tunnel *tun, const udif_message *msg, uint64_t nowsecs)
Encode and send a UDIF message over the tunnel.
Definition tunnel.c:234
UDIF_EXPORT_API udif_errors udif_tunnel_record_header_deserialize(udif_tunnel_record_header *header, const uint8_t *input, size_t inlen)
Deserialize a UDIF tunnel record header.
Definition tunnel.c:89
UDIF_EXPORT_API udif_errors udif_tunnel_send_keepalive(udif_tunnel *tun, uint64_t nowsecs)
Force an immediate keepalive send, independent of the timer.
Definition tunnel.c:439
UDIF_EXPORT_API udif_errors udif_tunnel_on_receive(udif_tunnel *tun, const uint8_t *input, size_t inplen, udif_message *outmsg, uint64_t nowsecs)
Process an inbound decrypted payload delivered by QSTP.
Definition tunnel.c:371
UDIF_EXPORT_API uint8_t udif_tunnel_record_flag(udif_message_type msgtype)
Return the UDIF tunnel record flag for a message type.
Definition tunnel.c:40
UDIF_EXPORT_API udif_errors udif_tunnel_init(udif_tunnel *tun, qstp_connection_state *qstpcns, const uint8_t *peerserial, udif_rolepair rolepair, udif_tunnel_side side, const uint8_t *treatyid, uint64_t nowsecs)
Initialize a freshly-opened tunnel record.
Definition tunnel.c:160
UDIF_EXPORT_API udif_errors udif_tunnel_record_header_serialize(uint8_t *output, size_t outlen, const udif_tunnel_record_header *header)
Serialize a UDIF tunnel record header.
Definition tunnel.c:67
UDIF_EXPORT_API bool udif_tunnel_is_open(const udif_tunnel *tun, uint64_t nowsecs)
Check whether the tunnel is open and operational.
Definition tunnel.c:563
UDIF_EXPORT_API void udif_tunnel_close(udif_tunnel *tun, bool notify)
Close the tunnel and clear its state.
Definition tunnel.c:212
udif_tunnel_side
Which end of a tunnel this entity occupies.
Definition tunnel.h:251
@ udif_tunnel_side_client
Definition tunnel.h:252
@ udif_tunnel_side_server
Definition tunnel.h:253
UDIF_EXPORT_API udif_errors udif_tunnel_record_header_validate(const udif_tunnel *tun, const udif_tunnel_record_header *header, uint64_t nowsecs)
Validate a received UDIF tunnel record header against tunnel state.
Definition tunnel.c:111
UDIF_EXPORT_API udif_errors udif_tunnel_tick(udif_tunnel *tun, uint64_t nowsecs)
Drive per-tunnel timers forward.
Definition tunnel.c:501
UDIF Common Definitions and Protocol Configuration.
#define UDIF_SERIAL_NUMBER_SIZE
The certificate serial number field length.
Definition udif.h:546
udif_errors
UDIF error codes.
Definition udif.h:1210
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:101