11#if (DETWS_ENABLE_HTTP3 || DETWS_ENABLE_DTLS)
16void quic_hkdf_extract(
const uint8_t *salt,
size_t salt_len,
const uint8_t *ikm,
size_t ikm_len,
17 uint8_t prk[QUIC_HKDF_HASH_LEN])
29void hkdf_expand(
const uint8_t prk[QUIC_HKDF_HASH_LEN],
const uint8_t *info,
size_t info_len, uint8_t *out,
32 uint8_t t[QUIC_HKDF_HASH_LEN];
36 while (done < out_len)
45 t_len = QUIC_HKDF_HASH_LEN;
47 size_t take = out_len - done;
48 if (take > QUIC_HKDF_HASH_LEN)
49 take = QUIC_HKDF_HASH_LEN;
50 memcpy(out + done, t, take);
56void quic_hkdf_expand_label_ctx(
const uint8_t secret[QUIC_HKDF_HASH_LEN],
const char *label,
const uint8_t *context,
57 size_t context_len, uint8_t *out,
size_t out_len,
const char *label_prefix)
68 size_t prefix_len = strnlen(label_prefix, 255);
69 size_t label_len = strnlen(label, 255 - prefix_len);
70 uint8_t info[2 + 1 + 255 + 1 + 255];
72 info[p++] = (uint8_t)(out_len >> 8);
73 info[p++] = (uint8_t)(out_len & 0xff);
74 info[p++] = (uint8_t)(prefix_len + label_len);
75 memcpy(info + p, label_prefix, prefix_len);
77 memcpy(info + p, label, label_len);
79 info[p++] = (uint8_t)context_len;
82 memcpy(info + p, context, context_len);
86 hkdf_expand(secret, info, p, out, out_len);
89void quic_hkdf_expand_label(
const uint8_t secret[QUIC_HKDF_HASH_LEN],
const char *label, uint8_t *out,
size_t out_len,
90 const char *label_prefix)
92 quic_hkdf_expand_label_ctx(secret, label,
nullptr, 0, out, out_len, label_prefix);
HKDF-SHA256 (RFC 5869) and TLS 1.3 HKDF-Expand-Label (RFC 8446 sec 7.1).
void ssh_hmac_sha256_final(SshHmacCtx *ctx, uint8_t mac[SSH_HMAC_SHA256_LEN])
Finalize and write the 32-byte MAC.
void ssh_hmac_sha256_init(SshHmacCtx *ctx, const uint8_t *key, size_t key_len)
Initialize a streaming HMAC-SHA2-256 context.
void ssh_hmac_sha256_update(SshHmacCtx *ctx, const uint8_t *data, size_t len)
Feed len bytes into the running HMAC.
void ssh_hmac_sha256(const uint8_t *key, size_t key_len, const uint8_t *data, size_t len, uint8_t mac[SSH_HMAC_SHA256_LEN])
Compute HMAC-SHA2-256 over a single contiguous buffer.
HMAC-SHA2-256 (RFC 2104 + FIPS 198-1).
Streaming HMAC-SHA2-256 context.