65 const uint8_t *context, uint8_t context_sz,
66 uint16_t length, uint8_t *result)
68 return edhoc_kdf(in_key, exporter_label, context, context_sz,
78 int prk_out_sz = HASH_LEN;
79 uint8_t prk_out[prk_out_sz];
80 int8_t err =
edhoc_kdf(ctx->state.prk_4e3m, PRK_OUT_LABEL, ctx->state.th,
81 HASH_LEN, prk_out_sz, prk_out);
85 LOG_DBG(
"PRK_out (%d bytes): ", prk_out_sz);
86 LOG_DBG_BYTES(prk_out, prk_out_sz);
90 int prk_exporter_sz = HASH_LEN;
91 uint8_t prk_exporter[prk_exporter_sz];
92 err =
edhoc_kdf(prk_out, PRK_EXPORTER_LABEL, NULL, 0,
93 prk_exporter_sz, prk_exporter);
97 LOG_DBG(
"PRK_exporter (%d bytes): ", prk_exporter_sz);
98 LOG_DBG_BYTES(prk_exporter, prk_exporter_sz);
104 if(ctx->state.cid_len == 1) {
105 osc->client_ID = ctx->state.cid[0];
107 LOG_WARN(
"Multi-byte CID not supported for OSCORE\n");
110 if(ctx->state.cid_rx_len == 1) {
111 osc->server_ID = ctx->state.cid_rx[0];
113 LOG_WARN(
"Multi-byte CID not supported for OSCORE\n");
118 if(ctx->state.cid_rx_len == 1) {
119 osc->client_ID = ctx->state.cid_rx[0];
121 LOG_WARN(
"Multi-byte CID not supported for OSCORE\n");
124 if(ctx->state.cid_len == 1) {
125 osc->server_ID = ctx->state.cid[0];
127 LOG_WARN(
"Multi-byte CID not supported for OSCORE\n");
133 err =
edhoc_exporter(prk_exporter, OSCORE_MASTER_SECRET_LABEL, NULL,
134 0, OSCORE_KEY_SZ, osc->master_secret);
139 err =
edhoc_exporter(prk_exporter, OSCORE_MASTER_SALT_LABEL, NULL,
140 0, OSCORE_SALT_SZ, osc->master_salt);
int16_t edhoc_kdf(const uint8_t *prk, uint8_t info_label, const uint8_t *context, uint8_t context_sz, uint16_t length, uint8_t *result)
EDHOC Key Derivation Function (KDF) based on HMAC-based Expand (RFC 5869).
int8_t edhoc_exporter(const uint8_t *in_key, uint8_t exporter_label, const uint8_t *context, uint8_t context_sz, uint16_t length, uint8_t *result)
Derive an application-specific key from EDHOC.