@@ -514,66 +514,68 @@ def do_io(*, src, dst, amt=1024):
514514 src .consume_outgoing (len (in_transit ))
515515 dst .receive_from_network (in_transit )
516516
517- def do_handshake (* end_state_pair ):
518- for end , state in end_state_pair :
517+ def do_handshake (end , states ):
518+ while end ._handshake_state is not states [0 ]:
519+ # The backend goes through every state for both
520+ # ends. This is not relevant.
521+ end .do_handshake ()
522+
523+ for state in states :
524+ assert end ._handshake_state is state
525+ if state is HandshakeStep .HANDSHAKE_OVER :
526+ break
519527 with suppress (WantReadError , WantWriteError ):
520528 end .do_handshake ()
521- assert end ._handshake_state is state
522529
523530 do_handshake (
524- (server , HandshakeStep .CLIENT_HELLO ),
525- (client , HandshakeStep .CLIENT_HELLO ),
526- (client , HandshakeStep .SERVER_HELLO ),
531+ client ,
532+ (
533+ HandshakeStep .HELLO_REQUEST ,
534+ HandshakeStep .CLIENT_HELLO ,
535+ ),
527536 )
528537
529538 do_io (src = client , dst = server )
530539 do_handshake (
531- (server , HandshakeStep .SERVER_HELLO ),
532- (server , HandshakeStep .SERVER_CERTIFICATE ),
533- (server , HandshakeStep .SERVER_KEY_EXCHANGE ),
534- (server , HandshakeStep .CERTIFICATE_REQUEST ),
535- (server , HandshakeStep .SERVER_HELLO_DONE ),
536- (server , HandshakeStep .CLIENT_CERTIFICATE ),
537- (server , HandshakeStep .CLIENT_KEY_EXCHANGE ),
540+ server ,
541+ (
542+ HandshakeStep .SERVER_HELLO ,
543+ HandshakeStep .SERVER_CERTIFICATE ,
544+ HandshakeStep .SERVER_KEY_EXCHANGE ,
545+ HandshakeStep .CERTIFICATE_REQUEST ,
546+ HandshakeStep .SERVER_HELLO_DONE ,
547+ ),
538548 )
539549 assert client .negotiated_protocol () == server .negotiated_protocol ()
540550
541551 do_io (src = server , dst = client )
542552 do_handshake (
543- (client , HandshakeStep .SERVER_CERTIFICATE ),
544- (client , HandshakeStep .SERVER_KEY_EXCHANGE ),
545- (client , HandshakeStep .CERTIFICATE_REQUEST ),
546- (client , HandshakeStep .SERVER_HELLO_DONE ),
547- (client , HandshakeStep .CLIENT_CERTIFICATE ),
548- (client , HandshakeStep .CLIENT_KEY_EXCHANGE ),
549- (client , HandshakeStep .CERTIFICATE_VERIFY ),
550- (client , HandshakeStep .CLIENT_CHANGE_CIPHER_SPEC ),
551- (client , HandshakeStep .CLIENT_FINISHED ),
552- (client , HandshakeStep .SERVER_CHANGE_CIPHER_SPEC ),
553+ client ,
554+ (
555+ HandshakeStep .CLIENT_KEY_EXCHANGE ,
556+ HandshakeStep .CERTIFICATE_VERIFY ,
557+ HandshakeStep .CLIENT_CHANGE_CIPHER_SPEC ,
558+ HandshakeStep .CLIENT_FINISHED ,
559+ ),
553560 )
554561 assert (
555562 client .negotiated_tls_version () == server .negotiated_tls_version ()
556563 )
557564
558565 do_io (src = client , dst = server )
559566 do_handshake (
560- ( server , HandshakeStep . CERTIFICATE_VERIFY ) ,
561- (server , HandshakeStep . CLIENT_CHANGE_CIPHER_SPEC ),
562- ( server , HandshakeStep .CLIENT_FINISHED ) ,
563- ( server , HandshakeStep .SERVER_CHANGE_CIPHER_SPEC ) ,
564- ( server , HandshakeStep .SERVER_FINISHED ) ,
565- ( server , HandshakeStep .FLUSH_BUFFERS ) ,
566- ( server , HandshakeStep .HANDSHAKE_WRAPUP ) ,
567- ( server , HandshakeStep . HANDSHAKE_OVER ),
567+ server ,
568+ (
569+ HandshakeStep .SERVER_CHANGE_CIPHER_SPEC ,
570+ HandshakeStep .SERVER_FINISHED ,
571+ HandshakeStep .FLUSH_BUFFERS ,
572+ HandshakeStep .HANDSHAKE_WRAPUP ,
573+ HandshakeStep .HANDSHAKE_OVER ,
574+ ),
568575 )
569576
570577 do_io (src = server , dst = client )
571- do_handshake (
572- (client , HandshakeStep .SERVER_FINISHED ),
573- (client , HandshakeStep .FLUSH_BUFFERS ),
574- (client , HandshakeStep .HANDSHAKE_WRAPUP ),
575- (client , HandshakeStep .HANDSHAKE_OVER ),
576- )
578+ do_handshake (client , (HandshakeStep .HANDSHAKE_OVER ,))
577579 assert client .cipher () == server .cipher ()
578580
579581 secret = b"a very secret message"
0 commit comments