17#ifndef PROTOCORE_TLS_H
18#define PROTOCORE_TLS_H
21#if PROTOCORE_ENABLE_TLS
40 TLS_CONN_WAIT_FINISHED,
63 const uint8_t *ed25519_seed;
64 const uint8_t *ed25519_pub;
65 const uint8_t *peer_pub;
66 const uint8_t *ephemeral_priv;
67 const uint8_t *random;
73 const uint8_t *ca_der;
78 const uint8_t *cert_der;
82 const char *
const *alpn;
100 const TlsConnConfig *cfg;
122 Tls13ClientHello *hello;
134 const TlsConnConfig *cfg;
186 TlsInitArgs init_args;
196extern TlsConnectionVars TlsConnectionV;
201 void (*
const init)(uint8_t *work);
202 void (*
const start)(uint8_t *work);
203 void (*
const process)(uint8_t *work);
204 void (*
const established)(uint8_t *work);
205 void (*
const alert)(uint8_t *work);
206 void (*
const seal_app)(uint8_t *work);
207 void (*
const open_app)(uint8_t *work);
212void protocore_tls_connection_init(uint8_t *work);
213void protocore_tls_connection_start(uint8_t *work);
214void protocore_tls_connection_process(uint8_t *work);
215void protocore_tls_connection_established(uint8_t *work);
216void protocore_tls_connection_alert(uint8_t *work);
217void protocore_tls_connection_seal_app(uint8_t *work);
218void protocore_tls_connection_open_app(uint8_t *work);
224static const TlsConnNs TlsConnection __attribute__((unused)) = {
225 .init = protocore_tls_connection_init,
226 .start = protocore_tls_connection_start,
227 .process = protocore_tls_connection_process,
228 .established = protocore_tls_connection_established,
229 .alert = protocore_tls_connection_alert,
230 .seal_app = protocore_tls_connection_seal_app,
231 .open_app = protocore_tls_connection_open_app,
235TlsConn *protocore_tls_conn_at(uint8_t slot);
242const char *protocore_tls_alpn(uint8_t slot);
247 PROTOCORE_TLS_READY = 0,
249 PROTOCORE_TLS_FAILED,
250} protocore_tls_state;
261proto_bool protocore_tls_global_init(
const uint8_t *cert,
size_t cert_len,
const uint8_t *key,
size_t key_len);
267proto_bool protocore_tls_conn_begin(uint8_t slot);
275int protocore_tls_handshake(uint8_t slot);
278proto_bool protocore_tls_established(uint8_t slot);
286int protocore_tls_read(uint8_t slot, uint8_t *buf,
size_t len);
294int protocore_tls_write(uint8_t slot,
const void *data,
size_t len);
297void protocore_tls_conn_end(uint8_t slot);
300void protocore_tls_conn_free(uint8_t slot);
303size_t protocore_tls_arena_peak(
void);
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
TLS 1.3 key schedule (RFC 8446 sec 7.1) for the QUIC handshake.
TLS 1.3 record layer over a reliable stream (RFC 8446 sec 5).
TLS 1.3 handshake messages for the QUIC handshake (RFC 8446 sec 4).
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS