X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=src%2Fssl%2Fssl_hs_server.t0;h=9f6e934e1be98a30ecfdd17efb36bbd8ecc24ca5;hp=bb3bc3dc3b5723306905ac1a9bdd27f03b0b3956;hb=b2ec2030e40acf5e9e4cd0f2669aacb27eadb540;hpb=81437e11754521d1120ce4aced784f3f35c3f21f;ds=sidebyside diff --git a/src/ssl/ssl_hs_server.t0 b/src/ssl/ssl_hs_server.t0 index bb3bc3d..9f6e934 100644 --- a/src/ssl/ssl_hs_server.t0 +++ b/src/ssl/ssl_hs_server.t0 @@ -31,7 +31,7 @@ preamble { * specific name. It must be noted that since the engine context is the * first field of the br_ssl_server_context structure ('eng'), then * pointers values of both types are interchangeable, modulo an - * appropriate cast. This also means that "adresses" computed as offsets + * appropriate cast. This also means that "addresses" computed as offsets * within the structure work for both kinds of context. */ #define CTX ((br_ssl_server_context *)ENG) @@ -611,6 +611,13 @@ cc: save-session ( -- ) { } } +\ Read and drop ClientHello. This is used when a client-triggered +\ renegotiation attempt is rejected. +: skip-ClientHello ( -- ) + read-handshake-header-core + 1 = ifnot ERR_UNEXPECTED fail then + dup skip-blob drop ; + \ Read ClientHello. If the session is resumed, then -1 is returned. : read-ClientHello ( -- resume ) \ Get header, and check message type. @@ -857,7 +864,7 @@ cc: save-session ( -- ) { \ suites are filtered out. In particular: \ -- ECDHE suites are removed if there is no common hash function \ (for the relevant signature algorithm) or no common curve. - \ -- TLS-1.2-only suites are removed if the negociated version is + \ -- TLS-1.2-only suites are removed if the negotiated version is \ TLS-1.1 or lower. addr-client_suites dup >css-off begin dup css-max < while @@ -1473,6 +1480,7 @@ cc: verify-CV-sig ( sig-len -- err ) { \ The best we can do is ask for a \ renegotiation, then wait for it \ to happen. + 0 addr-application_data set8 send-HelloRequest then endof @@ -1482,11 +1490,16 @@ cc: verify-CV-sig ( sig-len -- err ) { \ "no renegotiation" flag is set. drop addr-reneg get8 1 = 1 flag? or if + skip-ClientHello flush-record begin can-output? not while wait-co drop repeat 100 send-warning + \ Put back connection in "application + \ data" state: it's not dead yet. + 1 addr-application_data set8 + 23 addr-record_type_out set8 else 0 do-handshake then