Fix resumption after HRR
authorMatt Caswell <matt@openssl.org>
Mon, 20 Mar 2017 18:03:34 +0000 (18:03 +0000)
committerMatt Caswell <matt@openssl.org>
Tue, 21 Mar 2017 10:09:14 +0000 (10:09 +0000)
commit2c7e64564cf7ab00c099d4f398ae9e53698b68f6
treed2f22aa0fa7e07d2ad0f3db8199ec5307b670368
parent7baabf45c424c135ecfafc6b3bb7ea1d225fbfda
Fix resumption after HRR

Commit 6b1bb98fa moved the processing of ClientHello extensions into the
state machine post-processing stage. After processing s->init_num is reset
to 0, so by post-processing we cannot rely on its value. Unfortunately we
were using it to handle the PSK extension. This causes the handshake to
fail.

We were using init_num to figure out the length of ClientHello2 so we can
remove it from the handshake_buffer. The handshake_buffer holds the
transcript of all the messages sent so far. For PSK processing though we
only want to add in a partial ClientHello2. This commit changes things so
we just work out where ClientHello2 starts, working forward from the
beginning of handshake_buffer.

Fixes #2983

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2996)
(cherry picked from commit 77815a026cbedbb7b9a89558612f69e6294fe1ea)
ssl/statem/extensions.c