Skip to content

Commit b8ad8f7

Browse files
authored
Merge pull request #473 from aidangarske/fix-tls-ecdh-curve-mismatch
Fix tls ecdh curve mismatch (wolfTPM build test CI failures)
2 parents d1756f9 + c12ea75 commit b8ad8f7

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

examples/run_examples.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ run_tpm_tls_client() { # Usage: run_tpm_tls_client [ecc/rsa] [tpmargs] [tlsversi
410410
generate_port
411411
pushd $WOLFSSL_PATH >> $TPMPWD/run.out 2>&1
412412
echo -e "./examples/server/server -v $3 -p $port -w -g -A ./certs/tpm-ca-$1-cert.pem"
413-
./examples/server/server -p $port -w -g -A ./certs/tpm-ca-$1-cert.pem >> $TPMPWD/run.out 2>&1 &
413+
./examples/server/server -v $3 -p $port -w -g -A ./certs/tpm-ca-$1-cert.pem >> $TPMPWD/run.out 2>&1 &
414414
RESULT=$?
415415
[ $RESULT -ne 0 ] && echo -e "tls server $1 $2 failed! $RESULT" && exit 1
416416
popd >> $TPMPWD/run.out 2>&1
@@ -431,10 +431,10 @@ run_tpm_tls_server() { # Usage: run_tpm_tls_server [ecc/rsa] [tpmargs] [tlsversi
431431
RESULT=$?
432432
[ $RESULT -ne 0 ] && echo -e "tpm tls server $1 $2 failed! $RESULT" && exit 1
433433
pushd $WOLFSSL_PATH >> $TPMPWD/run.out 2>&1
434-
sleep 0.1
434+
sleep 1
435435

436436
echo -e "./examples/client/client -v $3 -p $port -w -g -A ./certs/tpm-ca-$1-cert.pem $4"
437-
./examples/client/client -p $port -w -g -A ./certs/tpm-ca-$1-cert.pem $4 >> $TPMPWD/run.out 2>&1
437+
./examples/client/client -v $3 -p $port -w -g -A ./certs/tpm-ca-$1-cert.pem $4 >> $TPMPWD/run.out 2>&1
438438
RESULT=$?
439439
[ $RESULT -ne 0 ] && echo -e "tls client $1 $2 failed! $RESULT" && exit 1
440440
popd >> $TPMPWD/run.out 2>&1

src/tpm2_cryptocb.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,22 @@ int wolfTPM2_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx)
268268
}
269269
#ifndef WOLFTPM2_USE_SW_ECDHE
270270
else {
271-
/* Generate ephemeral key - if one isn't already created */
271+
/* Generate ephemeral key - if one isn't already created
272+
* or if the curve has changed (e.g. TLS 1.3 key share
273+
* negotiation may generate a key for one curve, then
274+
* fall back to a different curve) */
272275
key = tlsCtx->ecdhKey;
276+
if (key->handle.hndl != 0 &&
277+
key->handle.hndl != TPM_RH_NULL &&
278+
(int)key->pub.publicArea.parameters.eccDetail.curveID
279+
!= curve_id) {
280+
/* curve changed, release old key */
281+
rc = wolfTPM2_UnloadHandle(tlsCtx->dev,
282+
&key->handle);
283+
if (rc != 0) {
284+
return rc;
285+
}
286+
}
273287
if (key->handle.hndl == 0 ||
274288
key->handle.hndl == TPM_RH_NULL) {
275289
rc = wolfTPM2_ECDHGenKey(tlsCtx->dev, tlsCtx->ecdhKey,

0 commit comments

Comments
 (0)