52#ifndef UDIF_TRANSPORT_H
53#define UDIF_TRANSPORT_H
56#include "certificate.h"
67static const char UDIF_TRANSPORT_CUSTOM[] =
"UDIF:HS-MAC:V1";
95 uint8_t
kem_ss[UDIF_KEM_SECRET_SIZE];
122 const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE],
const uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE],
bool (*rng_generate)(uint8_t*,
size_t));
137 const udif_child_certificate* local_cert,
const uint8_t local_privkey[
UDIF_ASYMMETRIC_SIGNING_KEY_SIZE],
const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE],
138 const udif_child_certificate* remote_cert,
bool (*rng_generate)(uint8_t*,
size_t));
149 const udif_network_packet* resp_packet,
const udif_child_certificate* remote_cert);
Secure session state.
Definition transport.h:79
uint64_t txseq
Definition transport.h:82
uint8_t session_id[UDIF_CRYPTO_HASH_SIZE]
Definition transport.h:88
bool established
Definition transport.h:90
uint8_t nonce_remote[32U]
Definition transport.h:97
uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE]
Definition transport.h:87
uint8_t local_kem_sk[UDIF_KEM_PRIVATEKEY_SIZE]
Definition transport.h:94
uint8_t nonce_local[32U]
Definition transport.h:96
uint8_t ratchet_state[UDIF_CRYPTO_HASH_SIZE]
Definition transport.h:89
uint64_t epoch
Definition transport.h:84
qsc_rcs_state txcpr
Definition transport.h:80
size_t transcript_len
Definition transport.h:99
uint64_t rxseq
Definition transport.h:83
uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE]
Definition transport.h:86
uint64_t last_ratchet
Definition transport.h:85
bool initiator
Definition transport.h:91
uint8_t transcript[4096U]
Definition transport.h:98
uint8_t kem_ss[UDIF_KEM_SECRET_SIZE]
Definition transport.h:95
qsc_rcs_state rxcpr
Definition transport.h:81
bool in_progress
Definition transport.h:100
UDIF_EXPORT_API bool udif_packet_is_fresh(const udif_network_packet *packet, uint64_t currtime)
Check if packet is fresh.
Definition transport.c:1009
UDIF_EXPORT_API udif_errors udif_session_handshake_confirm(udif_session_state *session, udif_network_packet *packet, const udif_network_packet *resp_packet, const udif_child_certificate *remote_cert)
Initiator confirms handshake.
Definition transport.c:280
UDIF_EXPORT_API udif_errors udif_packet_validate(const udif_session_state *session, const udif_network_packet *packet, uint8_t expected_flag)
Validate packet.
Definition transport.c:970
UDIF_EXPORT_API void udif_session_clear(udif_session_state *session)
Clear session state.
Definition transport.c:870
UDIF_EXPORT_API udif_errors udif_packet_deserialize(udif_network_packet *packet, const uint8_t *stream, size_t streamlen)
Deserialize packet from byte stream.
Definition transport.c:919
UDIF_EXPORT_API void udif_session_dispose(udif_session_state *session)
Dispose session resources.
Definition transport.c:856
UDIF_EXPORT_API bool udif_session_is_established(const udif_session_state *session)
Check if session is established.
Definition transport.c:1047
UDIF_EXPORT_API udif_errors udif_packet_serialize(uint8_t *stream, size_t *streamlen, const udif_network_packet *packet)
Serialize packet to byte stream.
Definition transport.c:878
UDIF_EXPORT_API void udif_packet_clear(udif_network_packet *packet)
Clear packet state.
Definition transport.c:1032
UDIF_EXPORT_API udif_errors udif_session_encrypt(udif_session_state *session, udif_network_packet *packet, const uint8_t *plaintext, size_t plntextlen)
Encrypt a data packet.
Definition transport.c:543
UDIF_EXPORT_API bool udif_session_needs_ratchet(const udif_session_state *session, uint64_t currtime)
Check if ratchet is needed.
Definition transport.c:835
UDIF_EXPORT_API void udif_packet_set_time(udif_network_packet *packet, uint64_t currtime)
Set packet timestamp.
Definition transport.c:1001
UDIF_EXPORT_API void udif_session_initialize(udif_session_state *session)
Initialize a session state.
Definition transport.c:22
UDIF_EXPORT_API udif_errors udif_session_handshake_resp(udif_session_state *session, udif_network_packet *packet, const udif_network_packet *init_packet, const udif_child_certificate *local_cert, const uint8_t local_privkey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE], const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE], const udif_child_certificate *remote_cert, bool(*rng_generate)(uint8_t *, size_t))
Responder handles handshake init.
Definition transport.c:126
UDIF_EXPORT_API udif_errors udif_session_handshake_init(udif_session_state *session, udif_network_packet *packet, const udif_child_certificate *local_cert, const uint8_t local_privkey[UDIF_ASYMMETRIC_SIGNING_KEY_SIZE], const uint8_t local_serial[UDIF_CERTIFICATE_SERIAL_SIZE], const uint8_t remote_serial[UDIF_CERTIFICATE_SERIAL_SIZE], bool(*rng_generate)(uint8_t *, size_t))
Initiator starts handshake.
Definition transport.c:39
UDIF_EXPORT_API udif_errors udif_session_ratchet(udif_session_state *session, udif_network_packet *packetout, const udif_network_packet *packetin, bool(*rng_generate)(uint8_t *, size_t))
Perform asymmetric ratchet.
Definition transport.c:665
UDIF_EXPORT_API udif_errors udif_session_get_statistics(const udif_session_state *session, uint64_t *txseq, uint64_t *rxseq, uint64_t *epoch)
Get session statistics.
Definition transport.c:1063
UDIF_EXPORT_API udif_errors udif_session_handshake_finish(udif_session_state *session, udif_network_packet *packet, const udif_network_packet *confirm_packet)
Responder finishes handshake.
Definition transport.c:434
UDIF_EXPORT_API udif_errors udif_session_decrypt(udif_session_state *session, uint8_t *plaintext, size_t *plntextlen, const udif_network_packet *packet)
Decrypt a data packet.
Definition transport.c:589
UDIF Common Definitions and Protocol Configuration.
#define UDIF_ASYMMETRIC_SIGNING_KEY_SIZE
The byte size of the asymmetric signature signing-key array.
Definition udif.h:258
#define UDIF_CRYPTO_HASH_SIZE
The size of the certificate hash in bytes.
Definition udif.h:439
udif_errors
UDIF error codes.
Definition udif.h:628
#define UDIF_EXPORT_API
The api export prefix.
Definition udifcommon.h:103