xref: /openbsd-src/lib/libssl/tls13_lib.c (revision 25c4e8bd056e974b28f4a0ffd39d76c190a56013)
1 /*	$OpenBSD: tls13_lib.c,v 1.67 2022/07/20 06:32:24 jsing Exp $ */
2 /*
3  * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4  * Copyright (c) 2019 Bob Beck <beck@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #include <stddef.h>
20 
21 #include <openssl/evp.h>
22 
23 #include "ssl_locl.h"
24 #include "ssl_tlsext.h"
25 #include "tls13_internal.h"
26 
27 /*
28  * Downgrade sentinels - RFC 8446 section 4.1.3, magic values which must be set
29  * by the server in server random if it is willing to downgrade but supports
30  * TLSv1.3
31  */
32 const uint8_t tls13_downgrade_12[8] = {
33 	0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x01,
34 };
35 const uint8_t tls13_downgrade_11[8] = {
36 	0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x00,
37 };
38 
39 /*
40  * HelloRetryRequest hash - RFC 8446 section 4.1.3.
41  */
42 const uint8_t tls13_hello_retry_request_hash[32] = {
43 	0xcf, 0x21, 0xad, 0x74, 0xe5, 0x9a, 0x61, 0x11,
44 	0xbe, 0x1d, 0x8c, 0x02, 0x1e, 0x65, 0xb8, 0x91,
45 	0xc2, 0xa2, 0x11, 0x16, 0x7a, 0xbb, 0x8c, 0x5e,
46 	0x07, 0x9e, 0x09, 0xe2, 0xc8, 0xa8, 0x33, 0x9c,
47 };
48 
49 /*
50  * Certificate Verify padding - RFC 8446 section 4.4.3.
51  */
52 const uint8_t tls13_cert_verify_pad[64] = {
53 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
54 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
55 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
56 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
57 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
58 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
59 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
60 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
61 };
62 
63 const uint8_t tls13_cert_client_verify_context[] =
64     "TLS 1.3, client CertificateVerify";
65 const uint8_t tls13_cert_server_verify_context[] =
66     "TLS 1.3, server CertificateVerify";
67 
68 const EVP_AEAD *
69 tls13_cipher_aead(const SSL_CIPHER *cipher)
70 {
71 	if (cipher == NULL)
72 		return NULL;
73 	if (cipher->algorithm_ssl != SSL_TLSV1_3)
74 		return NULL;
75 
76 	switch (cipher->algorithm_enc) {
77 	case SSL_AES128GCM:
78 		return EVP_aead_aes_128_gcm();
79 	case SSL_AES256GCM:
80 		return EVP_aead_aes_256_gcm();
81 	case SSL_CHACHA20POLY1305:
82 		return EVP_aead_chacha20_poly1305();
83 	}
84 
85 	return NULL;
86 }
87 
88 const EVP_MD *
89 tls13_cipher_hash(const SSL_CIPHER *cipher)
90 {
91 	if (cipher == NULL)
92 		return NULL;
93 	if (cipher->algorithm_ssl != SSL_TLSV1_3)
94 		return NULL;
95 
96 	switch (cipher->algorithm2) {
97 	case SSL_HANDSHAKE_MAC_SHA256:
98 		return EVP_sha256();
99 	case SSL_HANDSHAKE_MAC_SHA384:
100 		return EVP_sha384();
101 	}
102 
103 	return NULL;
104 }
105 
106 static void
107 tls13_alert_received_cb(uint8_t alert_desc, void *arg)
108 {
109 	struct tls13_ctx *ctx = arg;
110 
111 	if (alert_desc == TLS13_ALERT_CLOSE_NOTIFY) {
112 		ctx->close_notify_recv = 1;
113 		ctx->ssl->internal->shutdown |= SSL_RECEIVED_SHUTDOWN;
114 		ctx->ssl->s3->warn_alert = alert_desc;
115 		return;
116 	}
117 
118 	if (alert_desc == TLS13_ALERT_USER_CANCELED) {
119 		/*
120 		 * We treat this as advisory, since a close_notify alert
121 		 * SHOULD follow this alert (RFC 8446 section 6.1).
122 		 */
123 		return;
124 	}
125 
126 	/* All other alerts are treated as fatal in TLSv1.3. */
127 	ctx->ssl->s3->fatal_alert = alert_desc;
128 
129 	SSLerror(ctx->ssl, SSL_AD_REASON_OFFSET + alert_desc);
130 	ERR_asprintf_error_data("SSL alert number %d", alert_desc);
131 
132 	SSL_CTX_remove_session(ctx->ssl->ctx, ctx->ssl->session);
133 }
134 
135 static void
136 tls13_alert_sent_cb(uint8_t alert_desc, void *arg)
137 {
138 	struct tls13_ctx *ctx = arg;
139 
140 	if (alert_desc == TLS13_ALERT_CLOSE_NOTIFY) {
141 		ctx->close_notify_sent = 1;
142 		return;
143 	}
144 
145 	if (alert_desc == TLS13_ALERT_USER_CANCELED) {
146 		return;
147 	}
148 
149 	/* All other alerts are treated as fatal in TLSv1.3. */
150 	if (ctx->error.code == 0)
151 		SSLerror(ctx->ssl, SSL_AD_REASON_OFFSET + alert_desc);
152 }
153 
154 static void
155 tls13_legacy_handshake_message_recv_cb(void *arg)
156 {
157 	struct tls13_ctx *ctx = arg;
158 	SSL *s = ctx->ssl;
159 	CBS cbs;
160 
161 	if (s->internal->msg_callback == NULL)
162 		return;
163 
164 	tls13_handshake_msg_data(ctx->hs_msg, &cbs);
165 	ssl_msg_callback(s, 0, SSL3_RT_HANDSHAKE, CBS_data(&cbs), CBS_len(&cbs));
166 }
167 
168 static void
169 tls13_legacy_handshake_message_sent_cb(void *arg)
170 {
171 	struct tls13_ctx *ctx = arg;
172 	SSL *s = ctx->ssl;
173 	CBS cbs;
174 
175 	if (s->internal->msg_callback == NULL)
176 		return;
177 
178 	tls13_handshake_msg_data(ctx->hs_msg, &cbs);
179 	ssl_msg_callback(s, 1, SSL3_RT_HANDSHAKE, CBS_data(&cbs), CBS_len(&cbs));
180 }
181 
182 static void
183 tls13_legacy_info_cb(void *arg, int state, int ret)
184 {
185 	struct tls13_ctx *ctx = arg;
186 	SSL *s = ctx->ssl;
187 
188 	ssl_info_callback(s, state, ret);
189 }
190 
191 static int
192 tls13_legacy_ocsp_status_recv_cb(void *arg)
193 {
194 	struct tls13_ctx *ctx = arg;
195 	SSL *s = ctx->ssl;
196 	int ret;
197 
198 	if (s->ctx->internal->tlsext_status_cb == NULL)
199 		return 1;
200 
201 	ret = s->ctx->internal->tlsext_status_cb(s,
202 	    s->ctx->internal->tlsext_status_arg);
203 	if (ret < 0) {
204 		ctx->alert = TLS13_ALERT_INTERNAL_ERROR;
205 		SSLerror(s, ERR_R_MALLOC_FAILURE);
206 		return 0;
207 	}
208 	if (ret == 0) {
209 		ctx->alert = TLS13_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE;
210 		SSLerror(s, SSL_R_INVALID_STATUS_RESPONSE);
211 		return 0;
212 	}
213 
214 	return 1;
215 }
216 
217 static int
218 tls13_phh_update_read_traffic_secret(struct tls13_ctx *ctx)
219 {
220 	struct tls13_secrets *secrets = ctx->hs->tls13.secrets;
221 	struct tls13_secret *secret;
222 
223 	if (ctx->mode == TLS13_HS_CLIENT) {
224 		secret = &secrets->server_application_traffic;
225 		if (!tls13_update_server_traffic_secret(secrets))
226 			return 0;
227 	} else {
228 		secret = &secrets->client_application_traffic;
229 		if (!tls13_update_client_traffic_secret(secrets))
230 			return 0;
231 	}
232 
233 	return tls13_record_layer_set_read_traffic_key(ctx->rl, secret);
234 }
235 
236 static int
237 tls13_phh_update_write_traffic_secret(struct tls13_ctx *ctx)
238 {
239 	struct tls13_secrets *secrets = ctx->hs->tls13.secrets;
240 	struct tls13_secret *secret;
241 
242 	if (ctx->mode == TLS13_HS_CLIENT) {
243 		secret = &secrets->client_application_traffic;
244 		if (!tls13_update_client_traffic_secret(secrets))
245 			return 0;
246 	} else {
247 		secret = &secrets->server_application_traffic;
248 		if (!tls13_update_server_traffic_secret(secrets))
249 			return 0;
250 	}
251 
252 	return tls13_record_layer_set_write_traffic_key(ctx->rl, secret);
253 }
254 
255 /*
256  * XXX arbitrarily chosen limit of 100 post handshake handshake
257  * messages in an hour - to avoid a hostile peer from constantly
258  * requesting certificates or key renegotiaitons, etc.
259  */
260 static int
261 tls13_phh_limit_check(struct tls13_ctx *ctx)
262 {
263 	time_t now = time(NULL);
264 
265 	if (ctx->phh_last_seen > now - TLS13_PHH_LIMIT_TIME) {
266 		if (ctx->phh_count > TLS13_PHH_LIMIT)
267 			return 0;
268 	} else
269 		ctx->phh_count = 0;
270 	ctx->phh_count++;
271 	ctx->phh_last_seen = now;
272 	return 1;
273 }
274 
275 static ssize_t
276 tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs)
277 {
278 	struct tls13_handshake_msg *hs_msg = NULL;
279 	CBB cbb_hs;
280 	CBS cbs_hs;
281 	uint8_t alert = TLS13_ALERT_INTERNAL_ERROR;
282 	uint8_t key_update_request;
283 	ssize_t ret;
284 
285 	if (!CBS_get_u8(cbs, &key_update_request)) {
286 		alert = TLS13_ALERT_DECODE_ERROR;
287 		goto err;
288 	}
289 	if (CBS_len(cbs) != 0) {
290 		alert = TLS13_ALERT_DECODE_ERROR;
291 		goto err;
292 	}
293 	if (key_update_request > 1) {
294 		alert = TLS13_ALERT_ILLEGAL_PARAMETER;
295 		goto err;
296 	}
297 
298 	if (!tls13_phh_update_read_traffic_secret(ctx))
299 		goto err;
300 
301 	if (key_update_request == 0)
302 		return TLS13_IO_SUCCESS;
303 
304 	/* Our peer requested that we update our write traffic keys. */
305 	if ((hs_msg = tls13_handshake_msg_new()) == NULL)
306 		goto err;
307 	if (!tls13_handshake_msg_start(hs_msg, &cbb_hs, TLS13_MT_KEY_UPDATE))
308 		goto err;
309 	if (!CBB_add_u8(&cbb_hs, 0))
310 		goto err;
311 	if (!tls13_handshake_msg_finish(hs_msg))
312 		goto err;
313 
314 	ctx->key_update_request = 1;
315 	tls13_handshake_msg_data(hs_msg, &cbs_hs);
316 	ret = tls13_record_layer_phh(ctx->rl, &cbs_hs);
317 
318 	tls13_handshake_msg_free(hs_msg);
319 	hs_msg = NULL;
320 
321 	return ret;
322 
323  err:
324 	tls13_handshake_msg_free(hs_msg);
325 
326 	return tls13_send_alert(ctx->rl, alert);
327 }
328 
329 static void
330 tls13_phh_done_cb(void *cb_arg)
331 {
332 	struct tls13_ctx *ctx = cb_arg;
333 
334 	if (ctx->key_update_request) {
335 		tls13_phh_update_write_traffic_secret(ctx);
336 		ctx->key_update_request = 0;
337 	}
338 }
339 
340 static ssize_t
341 tls13_phh_received_cb(void *cb_arg)
342 {
343 	ssize_t ret = TLS13_IO_FAILURE;
344 	struct tls13_ctx *ctx = cb_arg;
345 	CBS cbs;
346 
347 	if (!tls13_phh_limit_check(ctx))
348 		return tls13_send_alert(ctx->rl, TLS13_ALERT_UNEXPECTED_MESSAGE);
349 
350 	if ((ctx->hs_msg == NULL) &&
351 	    ((ctx->hs_msg = tls13_handshake_msg_new()) == NULL))
352 		return TLS13_IO_FAILURE;
353 
354 	if ((ret = tls13_handshake_msg_recv(ctx->hs_msg, ctx->rl)) !=
355 	    TLS13_IO_SUCCESS)
356 		return ret;
357 
358 	if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs))
359 		return TLS13_IO_FAILURE;
360 
361 	switch(tls13_handshake_msg_type(ctx->hs_msg)) {
362 	case TLS13_MT_KEY_UPDATE:
363 		ret = tls13_key_update_recv(ctx, &cbs);
364 		break;
365 	case TLS13_MT_NEW_SESSION_TICKET:
366 		/* XXX do nothing for now and ignore this */
367 		break;
368 	case TLS13_MT_CERTIFICATE_REQUEST:
369 		/* XXX add support if we choose to advertise this */
370 		/* FALLTHROUGH */
371 	default:
372 		ret = TLS13_IO_FAILURE; /* XXX send alert */
373 		break;
374 	}
375 
376 	tls13_handshake_msg_free(ctx->hs_msg);
377 	ctx->hs_msg = NULL;
378 	return ret;
379 }
380 
381 static const struct tls13_record_layer_callbacks rl_callbacks = {
382 	.wire_read = tls13_legacy_wire_read_cb,
383 	.wire_write = tls13_legacy_wire_write_cb,
384 	.wire_flush = tls13_legacy_wire_flush_cb,
385 	.alert_recv = tls13_alert_received_cb,
386 	.alert_sent = tls13_alert_sent_cb,
387 	.phh_recv = tls13_phh_received_cb,
388 	.phh_sent = tls13_phh_done_cb,
389 };
390 
391 struct tls13_ctx *
392 tls13_ctx_new(int mode, SSL *ssl)
393 {
394 	struct tls13_ctx *ctx = NULL;
395 
396 	if ((ctx = calloc(sizeof(struct tls13_ctx), 1)) == NULL)
397 		goto err;
398 
399 	ctx->hs = &ssl->s3->hs;
400 	ctx->mode = mode;
401 	ctx->ssl = ssl;
402 
403 	if ((ctx->rl = tls13_record_layer_new(&rl_callbacks, ctx)) == NULL)
404 		goto err;
405 
406 	ctx->handshake_message_sent_cb = tls13_legacy_handshake_message_sent_cb;
407 	ctx->handshake_message_recv_cb = tls13_legacy_handshake_message_recv_cb;
408 	ctx->info_cb = tls13_legacy_info_cb;
409 	ctx->ocsp_status_recv_cb = tls13_legacy_ocsp_status_recv_cb;
410 
411 	if (!SSL_is_quic(ssl))
412 		ctx->middlebox_compat = 1;
413 
414 	ssl->internal->tls13 = ctx;
415 
416 	return ctx;
417 
418  err:
419 	tls13_ctx_free(ctx);
420 
421 	return NULL;
422 }
423 
424 void
425 tls13_ctx_free(struct tls13_ctx *ctx)
426 {
427 	if (ctx == NULL)
428 		return;
429 
430 	tls13_error_clear(&ctx->error);
431 	tls13_record_layer_free(ctx->rl);
432 	tls13_handshake_msg_free(ctx->hs_msg);
433 
434 	freezero(ctx, sizeof(struct tls13_ctx));
435 }
436 
437 int
438 tls13_cert_add(struct tls13_ctx *ctx, CBB *cbb, X509 *cert,
439     int (*build_extensions)(SSL *s, uint16_t msg_type, CBB *cbb))
440 {
441 	CBB cert_data, cert_exts;
442 	uint8_t *data;
443 	int cert_len;
444 
445 	if ((cert_len = i2d_X509(cert, NULL)) < 0)
446 		return 0;
447 
448 	if (!CBB_add_u24_length_prefixed(cbb, &cert_data))
449 		return 0;
450 	if (!CBB_add_space(&cert_data, &data, cert_len))
451 		return 0;
452 	if (i2d_X509(cert, &data) != cert_len)
453 		return 0;
454 	if (build_extensions != NULL) {
455 		if (!build_extensions(ctx->ssl, SSL_TLSEXT_MSG_CT, cbb))
456 			return 0;
457 	} else {
458 		if (!CBB_add_u16_length_prefixed(cbb, &cert_exts))
459 			return 0;
460 	}
461 	if (!CBB_flush(cbb))
462 		return 0;
463 
464 	return 1;
465 }
466 
467 int
468 tls13_synthetic_handshake_message(struct tls13_ctx *ctx)
469 {
470 	struct tls13_handshake_msg *hm = NULL;
471 	unsigned char buf[EVP_MAX_MD_SIZE];
472 	size_t hash_len;
473 	CBB cbb;
474 	CBS cbs;
475 	SSL *s = ctx->ssl;
476 	int ret = 0;
477 
478 	/*
479 	 * Replace ClientHello with synthetic handshake message - see
480 	 * RFC 8446 section 4.4.1.
481 	 */
482 	if (!tls1_transcript_hash_init(s))
483 		goto err;
484 	if (!tls1_transcript_hash_value(s, buf, sizeof(buf), &hash_len))
485 		goto err;
486 
487 	if ((hm = tls13_handshake_msg_new()) == NULL)
488 		goto err;
489 	if (!tls13_handshake_msg_start(hm, &cbb, TLS13_MT_MESSAGE_HASH))
490 		goto err;
491 	if (!CBB_add_bytes(&cbb, buf, hash_len))
492 		goto err;
493 	if (!tls13_handshake_msg_finish(hm))
494 		goto err;
495 
496 	tls13_handshake_msg_data(hm, &cbs);
497 
498 	tls1_transcript_reset(ctx->ssl);
499 	if (!tls1_transcript_record(ctx->ssl, CBS_data(&cbs), CBS_len(&cbs)))
500 		goto err;
501 
502 	ret = 1;
503 
504  err:
505 	tls13_handshake_msg_free(hm);
506 
507 	return ret;
508 }
509 
510 int
511 tls13_clienthello_hash_init(struct tls13_ctx *ctx)
512 {
513 	if (ctx->hs->tls13.clienthello_md_ctx != NULL)
514 		return 0;
515 	if ((ctx->hs->tls13.clienthello_md_ctx = EVP_MD_CTX_new()) == NULL)
516 		return 0;
517 	if (!EVP_DigestInit_ex(ctx->hs->tls13.clienthello_md_ctx,
518 	    EVP_sha256(), NULL))
519 		return 0;
520 
521 	if ((ctx->hs->tls13.clienthello_hash == NULL) &&
522 	    (ctx->hs->tls13.clienthello_hash = calloc(1, EVP_MAX_MD_SIZE)) ==
523 	    NULL)
524 		return 0;
525 
526 	return 1;
527 }
528 
529 void
530 tls13_clienthello_hash_clear(struct ssl_handshake_tls13_st *hs) /* XXX */
531 {
532 	EVP_MD_CTX_free(hs->clienthello_md_ctx);
533 	hs->clienthello_md_ctx = NULL;
534 	freezero(hs->clienthello_hash, EVP_MAX_MD_SIZE);
535 	hs->clienthello_hash = NULL;
536 }
537 
538 int
539 tls13_clienthello_hash_update_bytes(struct tls13_ctx *ctx, void *data,
540     size_t len)
541 {
542 	return EVP_DigestUpdate(ctx->hs->tls13.clienthello_md_ctx, data, len);
543 }
544 
545 int
546 tls13_clienthello_hash_update(struct tls13_ctx *ctx, CBS *cbs)
547 {
548 	return tls13_clienthello_hash_update_bytes(ctx, (void *)CBS_data(cbs),
549 	    CBS_len(cbs));
550 }
551 
552 int
553 tls13_clienthello_hash_finalize(struct tls13_ctx *ctx)
554 {
555 	if (!EVP_DigestFinal_ex(ctx->hs->tls13.clienthello_md_ctx,
556 	    ctx->hs->tls13.clienthello_hash,
557 	    &ctx->hs->tls13.clienthello_hash_len))
558 		return 0;
559 	EVP_MD_CTX_free(ctx->hs->tls13.clienthello_md_ctx);
560 	ctx->hs->tls13.clienthello_md_ctx = NULL;
561 	return 1;
562 }
563 
564 int
565 tls13_clienthello_hash_validate(struct tls13_ctx *ctx)
566 {
567 	unsigned char new_ch_hash[EVP_MAX_MD_SIZE];
568 	unsigned int new_ch_hash_len;
569 
570 	if (ctx->hs->tls13.clienthello_hash == NULL)
571 		return 0;
572 
573 	if (!EVP_DigestFinal_ex(ctx->hs->tls13.clienthello_md_ctx,
574 	    new_ch_hash, &new_ch_hash_len))
575 		return 0;
576 	EVP_MD_CTX_free(ctx->hs->tls13.clienthello_md_ctx);
577 	ctx->hs->tls13.clienthello_md_ctx = NULL;
578 
579 	if (ctx->hs->tls13.clienthello_hash_len != new_ch_hash_len)
580 		return 0;
581 	if (memcmp(ctx->hs->tls13.clienthello_hash, new_ch_hash,
582 	    new_ch_hash_len) != 0)
583 		return 0;
584 
585 	return 1;
586 }
587 
588 int
589 tls13_exporter(struct tls13_ctx *ctx, const uint8_t *label, size_t label_len,
590     const uint8_t *context_value, size_t context_value_len, uint8_t *out,
591     size_t out_len)
592 {
593 	struct tls13_secret context, export_out, export_secret;
594 	struct tls13_secrets *secrets = ctx->hs->tls13.secrets;
595 	EVP_MD_CTX *md_ctx = NULL;
596 	unsigned int md_out_len;
597 	int md_len;
598 	int ret = 0;
599 
600 	/*
601 	 * RFC 8446 Section 7.5.
602 	 */
603 
604 	memset(&context, 0, sizeof(context));
605 	memset(&export_secret, 0, sizeof(export_secret));
606 
607 	export_out.data = out;
608 	export_out.len = out_len;
609 
610 	if (!ctx->handshake_completed)
611 		return 0;
612 
613 	md_len = EVP_MD_size(secrets->digest);
614 	if (md_len <= 0 || md_len > EVP_MAX_MD_SIZE)
615 		goto err;
616 
617 	if (!tls13_secret_init(&export_secret, md_len))
618 		goto err;
619 	if (!tls13_secret_init(&context, md_len))
620 		goto err;
621 
622 	/* In TLSv1.3 no context is equivalent to an empty context. */
623 	if (context_value == NULL) {
624 		context_value = "";
625 		context_value_len = 0;
626 	}
627 
628 	if ((md_ctx = EVP_MD_CTX_new()) == NULL)
629 		goto err;
630 	if (!EVP_DigestInit_ex(md_ctx, secrets->digest, NULL))
631 		goto err;
632 	if (!EVP_DigestUpdate(md_ctx, context_value, context_value_len))
633 		goto err;
634 	if (!EVP_DigestFinal_ex(md_ctx, context.data, &md_out_len))
635 		goto err;
636 	if (md_len != md_out_len)
637 		goto err;
638 
639 	if (!tls13_derive_secret_with_label_length(&export_secret,
640 	    secrets->digest, &secrets->exporter_master, label, label_len,
641 	    &secrets->empty_hash))
642 		goto err;
643 
644 	if (!tls13_hkdf_expand_label(&export_out, secrets->digest,
645 	    &export_secret, "exporter", &context))
646 		goto err;
647 
648 	ret = 1;
649 
650  err:
651 	EVP_MD_CTX_free(md_ctx);
652 	tls13_secret_cleanup(&context);
653 	tls13_secret_cleanup(&export_secret);
654 
655 	return ret;
656 }
657