From 692a5be4c23bf1bc2fa59207113ae6c4d9f294a9 Mon Sep 17 00:00:00 2001
From: beck <>
Date: Sat, 10 Nov 2018 00:18:25 +0000
Subject: Fix last of the empty hash nonsense ok jsing@

---
 src/lib/libssl/tls13_key_schedule.c                | 29 +++-------------------
 src/regress/lib/libssl/key_schedule/key_schedule.c |  9 +++----
 2 files changed, 6 insertions(+), 32 deletions(-)

diff --git a/src/lib/libssl/tls13_key_schedule.c b/src/lib/libssl/tls13_key_schedule.c
index f20e9b741b..25c183fbb0 100644
--- a/src/lib/libssl/tls13_key_schedule.c
+++ b/src/lib/libssl/tls13_key_schedule.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tls13_key_schedule.c,v 1.4 2018/11/09 23:56:20 jsing Exp $ */
+/* $OpenBSD: tls13_key_schedule.c,v 1.5 2018/11/10 00:18:25 beck Exp $ */
 /* Copyright (c) 2018, Bob Beck <beck@openbsd.org>
  *
  * Permission to use, copy, modify, and/or distribute this software for any
@@ -220,32 +220,9 @@ int
 tls13_derive_early_secrets(struct tls13_secrets *secrets,
     uint8_t *psk, size_t psk_len, const struct tls13_secret *context)
 {
-	struct tls13_secret binder_context;
-	uint8_t binder_context_data[EVP_MAX_MD_SIZE] = { 0 };
-	unsigned binder_context_len;
-	EVP_MD_CTX *mdctx;
-
 	if (!secrets->init_done || secrets->early_done)
 		return 0;
 
-	if ((mdctx = EVP_MD_CTX_new()) == NULL)
-		return 0;
-
-	if (!EVP_DigestInit_ex(mdctx, secrets->digest, NULL) ||
-	    !EVP_DigestUpdate(mdctx, secrets->zeros.data, secrets->zeros.len) ||
-	    !EVP_DigestFinal_ex(mdctx, binder_context_data,
-		&binder_context_len)) {
-		EVP_MD_CTX_free(mdctx);
-		return 0;
-	}
-	binder_context.data = binder_context_data;
-	binder_context.len = binder_context_len;
-	EVP_MD_CTX_free(mdctx);
-
-	/* If these don't match, we were initialized with the wrong length */
-	if (binder_context_len != secrets->zeros.len)
-		return 0;
-
 	if (!HKDF_extract(secrets->extracted_early.data,
 	    &secrets->extracted_early.len, secrets->digest, psk, psk_len,
 	    secrets->zeros.data, secrets->zeros.len))
@@ -257,7 +234,7 @@ tls13_derive_early_secrets(struct tls13_secrets *secrets,
 	if (!tls13_derive_secret(&secrets->binder_key, secrets->digest,
 	    &secrets->extracted_early,
 	    secrets->resumption ? "res binder" : "ext binder",
-	    &binder_context))
+	    &secrets->empty_hash))
 		return 0;
 	if (!tls13_derive_secret(&secrets->client_early_traffic,
 	    secrets->digest, &secrets->extracted_early, "c e traffic",
@@ -313,7 +290,7 @@ tls13_derive_handshake_secrets(struct tls13_secrets *secrets,
 		return 0;
 	if (!tls13_derive_secret(&secrets->derived_handshake,
 	    secrets->digest, &secrets->extracted_handshake, "derived",
-	    context))
+	    &secrets->empty_hash))
 		return 0;
 
 	/* RFC 8446 recommends */
diff --git a/src/regress/lib/libssl/key_schedule/key_schedule.c b/src/regress/lib/libssl/key_schedule/key_schedule.c
index 36211644fc..1db9214939 100644
--- a/src/regress/lib/libssl/key_schedule/key_schedule.c
+++ b/src/regress/lib/libssl/key_schedule/key_schedule.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: key_schedule.c,v 1.2 2018/11/09 23:57:19 jsing Exp $ */
+/* $OpenBSD: key_schedule.c,v 1.3 2018/11/10 00:18:25 beck Exp $ */
 /*
  * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
  *
@@ -160,13 +160,10 @@ int main () {
 	if (tls13_derive_handshake_secrets(secrets, ecdhe, 32, &cshello_hash))
 		FAIL("derive_handshake_secrets worked when it shouldn't(2)\n");
 
-	/* XXX XXX this should get fixed when test vectors clarified */
-	memcpy(secrets->derived_handshake.data, expected_derived_handshake,
-	    32);
 	/* XXX fix hash here once test vector sorted */
-	if (!tls13_derive_application_secrets(secrets, &chello_hash))
+	if (!tls13_derive_application_secrets(secrets, &cshello_hash))
 		FAIL("derive_application_secrets failed\n");
-	if (tls13_derive_application_secrets(secrets, &chello_hash))
+	if (tls13_derive_application_secrets(secrets, &cshello_hash))
 		FAIL("derive_application_secrets worked when it "
 		    "shouldn't(2)\n");
 
-- 
cgit v1.2.3-55-g6feb