32#ifndef PROTOCORE_TLS_H
33#define PROTOCORE_TLS_H
39#if PC_ENABLE_TLS && defined(ARDUINO)
54bool pc_tls_global_init(
const uint8_t *cert,
size_t cert_len,
const uint8_t *key,
size_t key_len);
63const char *pc_tls_alpn(uint8_t slot);
66bool pc_tls_conn_begin(uint8_t slot);
73int pc_tls_handshake(uint8_t slot);
81 volatile long long last_cpu_us;
82 volatile long long last_wall_us;
83 volatile unsigned count;
84 volatile long long pumps[8];
87extern TlsHsBenchCtx pc_tls_hs_bench;
91bool pc_tls_established(uint8_t slot);
97int pc_tls_read(uint8_t slot, uint8_t *buf,
size_t len);
103int pc_tls_write(uint8_t slot,
const void *data,
size_t len);
106void pc_tls_conn_end(uint8_t slot);
109void pc_tls_conn_free(uint8_t slot);
112size_t pc_tls_arena_peak();
123typedef int (*pc_tls_bio_send_fn)(
void *ctx,
const unsigned char *buf,
size_t len);
124typedef int (*pc_tls_bio_recv_fn)(
void *ctx,
unsigned char *buf,
size_t len);
138bool pc_tls_set_client_ca(
const uint8_t *ca,
size_t ca_len);
147int pc_tls_peer_subject(uint8_t slot,
char *out,
size_t out_len);
150#if PC_ENABLE_HTTP_CLIENT_TLS
166int pc_tls_client_run(
const char *host,
const uint8_t *req,
size_t reqlen, uint8_t *out,
size_t out_cap,
167 size_t *out_len, pc_tls_bio_send_fn send_fn, pc_tls_bio_recv_fn recv_fn, uint32_t deadline_ms);
170#if PC_ENABLE_CLIENT_TLS
178void pc_tls_client_set_ca(
const uint8_t *ca,
size_t ca_len);
187void pc_tls_client_set_pin(
const uint8_t sha256[32]);
190void pc_tls_client_clear_verify();
199bool pc_tls_client_session_begin(
const char *host, pc_tls_bio_send_fn send_fn, pc_tls_bio_recv_fn recv_fn);
203bool pc_tls_client_session_active();
206int pc_tls_client_session_handshake();
209int pc_tls_client_session_read(uint8_t *buf,
size_t len);
212int pc_tls_client_session_write(
const uint8_t *data,
size_t len);
215void pc_tls_client_session_end();
225void pc_tls_client_session_forget_session();
230static inline bool pc_tls_global_init(
const uint8_t *,
size_t,
const uint8_t *,
size_t)
234static inline bool pc_tls_ready()
238static inline bool pc_tls_conn_begin(uint8_t)
242static inline int pc_tls_handshake(uint8_t)
246static inline bool pc_tls_established(uint8_t)
250static inline int pc_tls_read(uint8_t, uint8_t *,
size_t)
254static inline int pc_tls_write(uint8_t,
const void *,
size_t)
258static inline void pc_tls_conn_end(uint8_t)
261static inline void pc_tls_conn_free(uint8_t)
264static inline size_t pc_tls_arena_peak()
270static inline bool pc_tls_set_client_ca(
const uint8_t *,
size_t)
274static inline int pc_tls_peer_subject(uint8_t,
char *,
size_t)
280#if PC_ENABLE_CLIENT_TLS
281typedef int (*pc_tls_bio_send_fn)(
void *ctx,
const unsigned char *buf,
size_t len);
282typedef int (*pc_tls_bio_recv_fn)(
void *ctx,
unsigned char *buf,
size_t len);
283static inline void pc_tls_client_set_ca(
const uint8_t *,
size_t)
286static inline void pc_tls_client_set_pin(
const uint8_t *)
289static inline void pc_tls_client_clear_verify()
292static inline bool pc_tls_client_session_begin(
const char *, pc_tls_bio_send_fn, pc_tls_bio_recv_fn)
296static inline bool pc_tls_client_session_active()
300static inline int pc_tls_client_session_handshake()
304static inline int pc_tls_client_session_read(uint8_t *,
size_t)
308static inline int pc_tls_client_session_write(
const uint8_t *,
size_t)
312static inline void pc_tls_client_session_end()
315static inline void pc_tls_client_session_forget_session()
320#if PC_ENABLE_HTTP_CLIENT_TLS
321static inline int pc_tls_client_run(
const char *,
const uint8_t *,
size_t, uint8_t *,
size_t,
size_t *,
322 pc_tls_bio_send_fn, pc_tls_bio_recv_fn, uint32_t)
User-facing configuration for ProtoCore.