Move the checkhandshake.pm module into test/testlib
authorMatt Caswell <matt@openssl.org>
Thu, 8 Dec 2016 00:03:53 +0000 (00:03 +0000)
committerMatt Caswell <matt@openssl.org>
Thu, 8 Dec 2016 17:21:30 +0000 (17:21 +0000)
Move this module into the same place as other test helper modules. It
simplifies the code and keeps like things together.

Perl changes reviewed by Richard Levitte. Non-perl changes reviewed by Rich
Salz

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
test/recipes/70-test_sslmessages.t
test/recipes/70-test_tls13messages.t
test/recipes/checkhandshake.pm [deleted file]
test/testlib/checkhandshake.pm [new file with mode: 0644]

index dc2b3addc2b4cff9d8637b349665cbc41452bd01..2476fb118483b80440bf2b539c4e83e0051d85d6 100755 (executable)
@@ -11,17 +11,10 @@ use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
 use OpenSSL::Test::Utils;
 use File::Temp qw(tempfile);
 use TLSProxy::Proxy;
+use checkhandshake qw(checkhandshake @handmessages @extensions);
 
-my $test_name;
-
-# This block needs to run before 'use lib srctop_dir' directives.
-BEGIN {
-    $test_name = "test_sslmessages";
-    OpenSSL::Test::setup($test_name);
-}
-use lib srctop_dir("test");
-
-use recipes::checkhandshake qw(checkhandshake @handmessages @extensions);
+my $test_name = "test_sslmessages";
+setup($test_name);
 
 plan skip_all => "TLSProxy isn't usable on $^O"
     if $^O =~ /^(VMS|MSWin32)$/;
@@ -47,101 +40,101 @@ my $proxy = TLSProxy::Proxy->new(
 
 @handmessages = (
     [TLSProxy::Message::MT_CLIENT_HELLO,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_SERVER_HELLO,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_CERTIFICATE,
-        recipes::checkhandshake::ALL_HANDSHAKES
-        & ~recipes::checkhandshake::RESUME_HANDSHAKE],
+        checkhandshake::ALL_HANDSHAKES
+        & ~checkhandshake::RESUME_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE_STATUS,
-        recipes::checkhandshake::OCSP_HANDSHAKE],
+        checkhandshake::OCSP_HANDSHAKE],
     #ServerKeyExchange handshakes not currently supported by TLSProxy
     [TLSProxy::Message::MT_CERTIFICATE_REQUEST,
-        recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE],
+        checkhandshake::CLIENT_AUTH_HANDSHAKE],
     [TLSProxy::Message::MT_SERVER_HELLO_DONE,
-        recipes::checkhandshake::ALL_HANDSHAKES
-        & ~recipes::checkhandshake::RESUME_HANDSHAKE],
+        checkhandshake::ALL_HANDSHAKES
+        & ~checkhandshake::RESUME_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE,
-        recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE],
+        checkhandshake::CLIENT_AUTH_HANDSHAKE],
     [TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE,
-        recipes::checkhandshake::ALL_HANDSHAKES
-        & ~recipes::checkhandshake::RESUME_HANDSHAKE],
+        checkhandshake::ALL_HANDSHAKES
+        & ~checkhandshake::RESUME_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
-        recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE],
+        checkhandshake::CLIENT_AUTH_HANDSHAKE],
     [TLSProxy::Message::MT_NEXT_PROTO,
-        recipes::checkhandshake::NPN_HANDSHAKE],
+        checkhandshake::NPN_HANDSHAKE],
     [TLSProxy::Message::MT_FINISHED,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_NEW_SESSION_TICKET,
-        recipes::checkhandshake::ALL_HANDSHAKES
-        & ~recipes::checkhandshake::RESUME_HANDSHAKE],
+        checkhandshake::ALL_HANDSHAKES
+        & ~checkhandshake::RESUME_HANDSHAKE],
     [TLSProxy::Message::MT_FINISHED,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_CLIENT_HELLO,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_SERVER_HELLO,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_SERVER_HELLO_DONE,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_FINISHED,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_NEW_SESSION_TICKET,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [TLSProxy::Message::MT_FINISHED,
-        recipes::checkhandshake::RENEG_HANDSHAKE],
+        checkhandshake::RENEG_HANDSHAKE],
     [0, 0]
 );
 
 @extensions = (
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
-        recipes::checkhandshake::SERVER_NAME_CLI_EXTENSION],
+        checkhandshake::SERVER_NAME_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
-        recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+        checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
-        recipes::checkhandshake::ALPN_CLI_EXTENSION],
+        checkhandshake::ALPN_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
-        recipes::checkhandshake::SCT_CLI_EXTENSION],
+        checkhandshake::SCT_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_RENEGOTIATE,
-        recipes::checkhandshake::RENEGOTIATE_CLI_EXTENSION],
+        checkhandshake::RENEGOTIATE_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_NPN,
-        recipes::checkhandshake::NPN_CLI_EXTENSION],
+        checkhandshake::NPN_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SRP,
-        recipes::checkhandshake::SRP_CLI_EXTENSION],
+        checkhandshake::SRP_CLI_EXTENSION],
 
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_RENEGOTIATE,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
-        recipes::checkhandshake::SESSION_TICKET_SRV_EXTENSION],
+        checkhandshake::SESSION_TICKET_SRV_EXTENSION],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
-        recipes::checkhandshake::SERVER_NAME_SRV_EXTENSION],
+        checkhandshake::SERVER_NAME_SRV_EXTENSION],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
-        recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
+        checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_ALPN,
-        recipes::checkhandshake::ALPN_SRV_EXTENSION],
+        checkhandshake::ALPN_SRV_EXTENSION],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SCT,
-        recipes::checkhandshake::SCT_SRV_EXTENSION],
+        checkhandshake::SCT_SRV_EXTENSION],
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_NPN,
-        recipes::checkhandshake::NPN_SRV_EXTENSION],
+        checkhandshake::NPN_SRV_EXTENSION],
     [0,0,0]
 );
 
@@ -151,17 +144,17 @@ $proxy->serverconnects(2);
 $proxy->clientflags("-no_tls1_3 -sess_out ".$session);
 $proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
 plan tests => 20;
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
                "Default handshake test");
 
 #Test 2: Resumption handshake
 $proxy->clearClient();
 $proxy->clientflags("-no_tls1_3 -sess_in ".$session);
 $proxy->clientstart();
-checkhandshake($proxy, recipes::checkhandshake::RESUME_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS
-               & ~recipes::checkhandshake::SESSION_TICKET_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS
+               & ~checkhandshake::SESSION_TICKET_SRV_EXTENSION,
                "Resumption handshake test");
 unlink $session;
 
@@ -169,9 +162,9 @@ unlink $session;
 $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -status");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION,
               "status_request handshake test (client)");
 
 #Test 4: A status_request handshake (server support only)
@@ -180,8 +173,8 @@ $proxy->clientflags("-no_tls1_3");
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "status_request handshake test (server)");
 
 #Test 5: A status_request handshake (client and server)
@@ -190,10 +183,10 @@ $proxy->clientflags("-no_tls1_3 -status");
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::OCSP_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
               "status_request handshake test");
 
 #Test 6: A client auth handshake
@@ -201,8 +194,8 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -cert ".srctop_file("apps", "server.pem"));
 $proxy->serverflags("-Verify 5");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::CLIENT_AUTH_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
                "Client auth handshake test");
 
 #Test 7: A handshake with a renegotiation
@@ -210,17 +203,17 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3");
 $proxy->reneg(1);
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::RENEG_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::RENEG_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
                "Rengotiation handshake test");
 
 #Test 8: Server name handshake (client request only)
 $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -servername testhost");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS
-               | recipes::checkhandshake::SERVER_NAME_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS
+               | checkhandshake::SERVER_NAME_CLI_EXTENSION,
               "Server name handshake test (client)");
 
 #Test 9: Server name handshake (server support only)
@@ -228,8 +221,8 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3");
 $proxy->serverflags("-servername testhost");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "Server name handshake test (server)");
 
 #Test 10: Server name handshake (client and server)
@@ -237,19 +230,19 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -servername testhost");
 $proxy->serverflags("-servername testhost");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::SERVER_NAME_CLI_EXTENSION
-              | recipes::checkhandshake::SERVER_NAME_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::SERVER_NAME_CLI_EXTENSION
+              | checkhandshake::SERVER_NAME_SRV_EXTENSION,
               "Server name handshake test");
 
 #Test 11: ALPN handshake (client request only)
 $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -alpn test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS
-               | recipes::checkhandshake::ALPN_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS
+               | checkhandshake::ALPN_CLI_EXTENSION,
               "ALPN handshake test (client)");
 
 #Test 12: ALPN handshake (server support only)
@@ -257,8 +250,8 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3");
 $proxy->serverflags("-alpn test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "ALPN handshake test (server)");
 
 #Test 13: ALPN handshake (client and server)
@@ -266,10 +259,10 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -alpn test");
 $proxy->serverflags("-alpn test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::ALPN_CLI_EXTENSION
-              | recipes::checkhandshake::ALPN_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::ALPN_CLI_EXTENSION
+              | checkhandshake::ALPN_SRV_EXTENSION,
               "ALPN handshake test");
 
 #Test 14: SCT handshake (client request only)
@@ -279,11 +272,11 @@ $proxy->clientflags("-no_tls1_3 -ct");
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::OCSP_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::SCT_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::SCT_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
               "SCT handshake test (client)");
 
 #Test 15: SCT handshake (server support only)
@@ -293,8 +286,8 @@ $proxy->clientflags("-no_tls1_3");
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS,
               "SCT handshake test (server)");
 
 #Test 16: SCT handshake (client and server)
@@ -307,12 +300,12 @@ $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der")
                     ." -serverinfo ".srctop_file("test", "serverinfo.pem"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::OCSP_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::SCT_CLI_EXTENSION
-              | recipes::checkhandshake::SCT_SRV_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::SCT_CLI_EXTENSION
+              | checkhandshake::SCT_SRV_EXTENSION
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
               "SCT handshake test");
 
 
@@ -320,9 +313,9 @@ checkhandshake($proxy, recipes::checkhandshake::OCSP_HANDSHAKE,
 $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -nextprotoneg test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS
-               | recipes::checkhandshake::NPN_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS
+               | checkhandshake::NPN_CLI_EXTENSION,
               "NPN handshake test (client)");
 
 #Test 18: NPN handshake (server support only)
@@ -330,8 +323,8 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3");
 $proxy->serverflags("-nextprotoneg test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "NPN handshake test (server)");
 
 #Test 19: NPN handshake (client and server)
@@ -339,10 +332,10 @@ $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -nextprotoneg test");
 $proxy->serverflags("-nextprotoneg test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::NPN_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::NPN_CLI_EXTENSION
-              | recipes::checkhandshake::NPN_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::NPN_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::NPN_CLI_EXTENSION
+              | checkhandshake::NPN_SRV_EXTENSION,
               "NPN handshake test");
 
 #Test 20: SRP extension
@@ -353,7 +346,7 @@ checkhandshake($proxy, recipes::checkhandshake::NPN_HANDSHAKE,
 $proxy->clear();
 $proxy->clientflags("-no_tls1_3 -srpuser user -srppass pass:pass");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::SRP_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::SRP_CLI_EXTENSION,
               "SRP extension test");
index d0530ff8adf12c9165a3d9b67a0a8225cefe450e..f1493613b7f3e463b23bc2fba0e7fc57fb3c7d70 100755 (executable)
@@ -11,17 +11,10 @@ use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
 use OpenSSL::Test::Utils;
 use File::Temp qw(tempfile);
 use TLSProxy::Proxy;
+use checkhandshake qw(checkhandshake @handmessages @extensions);
 
-my $test_name;
-
-# This block needs to run before 'use lib srctop_dir' directives.
-BEGIN {
-    $test_name = "test_tls13messages";
-    OpenSSL::Test::setup($test_name);
-}
-use lib srctop_dir("test");
-
-use recipes::checkhandshake qw(checkhandshake @handmessages @extensions);
+my $test_name = "test_tls13messages";
+setup($test_name);
 
 plan skip_all => "TLSProxy isn't usable on $^O"
     if $^O =~ /^(VMS|MSWin32)$/;
@@ -41,63 +34,63 @@ $ENV{CTLOG_FILE} = srctop_file("test", "ct", "log_list.conf");
 
 @handmessages = (
     [TLSProxy::Message::MT_CLIENT_HELLO,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_SERVER_HELLO,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_CERTIFICATE_REQUEST,
-        recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE],
+        checkhandshake::CLIENT_AUTH_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE,
-        recipes::checkhandshake::ALL_HANDSHAKES & ~recipes::checkhandshake::RESUME_HANDSHAKE],
+        checkhandshake::ALL_HANDSHAKES & ~checkhandshake::RESUME_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE_STATUS,
-        recipes::checkhandshake::OCSP_HANDSHAKE],
+        checkhandshake::OCSP_HANDSHAKE],
     [TLSProxy::Message::MT_FINISHED,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [TLSProxy::Message::MT_CERTIFICATE,
-        recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE],
+        checkhandshake::CLIENT_AUTH_HANDSHAKE],
     [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
-        recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE],
+        checkhandshake::CLIENT_AUTH_HANDSHAKE],
     [TLSProxy::Message::MT_FINISHED,
-        recipes::checkhandshake::ALL_HANDSHAKES],
+        checkhandshake::ALL_HANDSHAKES],
     [0, 0]
 );
 
 @extensions = (
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
-        recipes::checkhandshake::SERVER_NAME_CLI_EXTENSION],
+        checkhandshake::SERVER_NAME_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
-        recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+        checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
-        recipes::checkhandshake::ALPN_CLI_EXTENSION],
+        checkhandshake::ALPN_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
-        recipes::checkhandshake::SCT_CLI_EXTENSION],
+        checkhandshake::SCT_CLI_EXTENSION],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
     [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
 
     [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
-        recipes::checkhandshake::DEFAULT_EXTENSIONS],
+        checkhandshake::DEFAULT_EXTENSIONS],
 
     [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS, TLSProxy::Message::EXT_SERVER_NAME,
-        recipes::checkhandshake::SERVER_NAME_SRV_EXTENSION],
+        checkhandshake::SERVER_NAME_SRV_EXTENSION],
     [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS, TLSProxy::Message::EXT_STATUS_REQUEST,
-        recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
+        checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
     [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS, TLSProxy::Message::EXT_ALPN,
-        recipes::checkhandshake::ALPN_SRV_EXTENSION],
+        checkhandshake::ALPN_SRV_EXTENSION],
     [0,0,0]
 );
 
@@ -114,8 +107,8 @@ my $proxy = TLSProxy::Proxy->new(
 $proxy->clientflags("-sess_out ".$session);
 $proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
 plan tests => 12;
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
                "Default handshake test");
 
 #TODO(TLS1.3): Test temporarily disabled until we implement TLS1.3 resumption
@@ -130,9 +123,9 @@ unlink $session;
 $proxy->clear();
 $proxy->clientflags("-status");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION,
               "status_request handshake test (client)");
 
 #Test 4: A status_request handshake (server support only)
@@ -140,8 +133,8 @@ $proxy->clear();
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "status_request handshake test (server)");
 
 #Test 5: A status_request handshake (client and server)
@@ -153,10 +146,10 @@ $proxy->clientflags("-status");
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::OCSP_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
               "status_request handshake test");
 
 #Test 6: A client auth handshake
@@ -164,25 +157,25 @@ $proxy->clear();
 $proxy->clientflags("-cert ".srctop_file("apps", "server.pem"));
 $proxy->serverflags("-Verify 5");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::CLIENT_AUTH_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::CLIENT_AUTH_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "Client auth handshake test");
 
 #Test 7: Server name handshake (client request only)
 $proxy->clear();
 $proxy->clientflags("-servername testhost");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS
-               | recipes::checkhandshake::SERVER_NAME_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS
+               | checkhandshake::SERVER_NAME_CLI_EXTENSION,
               "Server name handshake test (client)");
 
 #Test 8: Server name handshake (server support only)
 $proxy->clear();
 $proxy->serverflags("-servername testhost");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "Server name handshake test (server)");
 
 #Test 9: Server name handshake (client and server)
@@ -190,27 +183,27 @@ $proxy->clear();
 $proxy->clientflags("-servername testhost");
 $proxy->serverflags("-servername testhost");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::SERVER_NAME_CLI_EXTENSION
-              | recipes::checkhandshake::SERVER_NAME_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::SERVER_NAME_CLI_EXTENSION
+              | checkhandshake::SERVER_NAME_SRV_EXTENSION,
               "Server name handshake test");
 
 #Test 10: ALPN handshake (client request only)
 $proxy->clear();
 $proxy->clientflags("-alpn test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS
-               | recipes::checkhandshake::ALPN_CLI_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS
+               | checkhandshake::ALPN_CLI_EXTENSION,
               "ALPN handshake test (client)");
 
 #Test 11: ALPN handshake (server support only)
 $proxy->clear();
 $proxy->serverflags("-alpn test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-               recipes::checkhandshake::DEFAULT_EXTENSIONS,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+               checkhandshake::DEFAULT_EXTENSIONS,
               "ALPN handshake test (server)");
 
 #Test 12: ALPN handshake (client and server)
@@ -218,10 +211,10 @@ $proxy->clear();
 $proxy->clientflags("-alpn test");
 $proxy->serverflags("-alpn test");
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::DEFAULT_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::ALPN_CLI_EXTENSION
-              | recipes::checkhandshake::ALPN_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::ALPN_CLI_EXTENSION
+              | checkhandshake::ALPN_SRV_EXTENSION,
               "ALPN handshake test");
 
 #Test 13: SCT handshake (client request only)
@@ -237,9 +230,9 @@ $proxy->clientflags("-ct");
 $proxy->serverflags("-status_file "
                     .srctop_file("test", "recipes", "ocsp-response.der"));
 $proxy->start();
-checkhandshake($proxy, recipes::checkhandshake::OCSP_HANDSHAKE,
-              recipes::checkhandshake::DEFAULT_EXTENSIONS
-              | recipes::checkhandshake::SCT_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_CLI_EXTENSION
-              | recipes::checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+              checkhandshake::DEFAULT_EXTENSIONS
+              | checkhandshake::SCT_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+              | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
               "SCT handshake test");
diff --git a/test/recipes/checkhandshake.pm b/test/recipes/checkhandshake.pm
deleted file mode 100644 (file)
index abd1ffd..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License").  You may not use
-# this file except in compliance with the License.  You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-package recipes::checkhandshake;
-
-use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
-use OpenSSL::Test::Utils;
-use TLSProxy::Proxy;
-
-use Exporter;
-our @ISA = 'Exporter';
-our @EXPORT = qw(@handmessages @extensions checkhandshake);
-
-use constant {
-    DEFAULT_HANDSHAKE => 1,
-    OCSP_HANDSHAKE => 2,
-    RESUME_HANDSHAKE => 4,
-    CLIENT_AUTH_HANDSHAKE => 8,
-    RENEG_HANDSHAKE => 16,
-    NPN_HANDSHAKE => 32,
-
-    ALL_HANDSHAKES => 63
-};
-
-use constant {
-    #DEFAULT ALSO INCLUDES SESSION_TICKET_SRV_EXTENSION
-    DEFAULT_EXTENSIONS => 0x00000003,
-    SESSION_TICKET_SRV_EXTENSION => 0x00000002,
-    SERVER_NAME_CLI_EXTENSION => 0x00000004,
-    SERVER_NAME_SRV_EXTENSION => 0x00000008,
-    STATUS_REQUEST_CLI_EXTENSION => 0x00000010,
-    STATUS_REQUEST_SRV_EXTENSION => 0x00000020,
-    ALPN_CLI_EXTENSION => 0x00000040,
-    ALPN_SRV_EXTENSION => 0x00000080,
-    SCT_CLI_EXTENSION => 0x00000100,
-    SCT_SRV_EXTENSION => 0x00000200,
-    RENEGOTIATE_CLI_EXTENSION => 0x00000400,
-    NPN_CLI_EXTENSION => 0x00000800,
-    NPN_SRV_EXTENSION => 0x00001000,
-    SRP_CLI_EXTENSION => 0x00002000,
-};
-
-our @handmessages = ();
-our @extensions = ();
-
-sub checkhandshake($$$$)
-{
-    my ($proxy, $handtype, $exttype, $testname) = @_;
-
-    subtest $testname => sub {
-        my $loop = 0;
-        my $numtests;
-        my $extcount;
-        my $clienthelloseen = 0;
-
-        #First count the number of tests
-        for ($numtests = 0; $handmessages[$loop][1] != 0; $loop++) {
-            $numtests++ if (($handmessages[$loop][1] & $handtype) != 0);
-        }
-
-        #Add number of extensions we check plus 2 for the number of messages
-        #that contain extensions
-        $numtests += $#extensions + 2;
-        #In a renegotiation we will have double the number of extension tests
-        if (($handtype & RENEG_HANDSHAKE) != 0) {
-            $numtests += $#extensions + 2;
-        }
-        #In TLS1.3 there are 3 messages with extensions (and no renegotiations)
-        $numtests += 1 if ($proxy->is_tls13());
-
-        plan tests => $numtests;
-
-        my $nextmess = 0;
-        my $message = undef;
-        for ($loop = 0; $handmessages[$loop][1] != 0; $loop++) {
-            next if (($handmessages[$loop][1] & $handtype) == 0);
-            if (scalar @{$proxy->message_list} > $nextmess) {
-                $message = ${$proxy->message_list}[$nextmess];
-                $nextmess++;
-            } else {
-                $message = undef;
-            }
-            if (!defined $message) {
-                fail("Message type check. Got nothing, expected "
-                     .$handmessages[$loop][0]);
-                next;
-            } else {
-                ok($message->mt == $handmessages[$loop][0],
-                   "Message type check. Got ".$message->mt
-                   .", expected ".$handmessages[$loop][0]);
-            }
-
-            next if ($message->mt() != TLSProxy::Message::MT_CLIENT_HELLO
-                    && $message->mt() != TLSProxy::Message::MT_SERVER_HELLO
-                    && $message->mt() !=
-                       TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS);
-
-            if ($message->mt() == TLSProxy::Message::MT_CLIENT_HELLO) {
-                #Add renegotiate extension we will expect if renegotiating
-                $exttype |= RENEGOTIATE_CLI_EXTENSION if ($clienthelloseen);
-                $clienthelloseen = 1;
-            }
-            #Now check that we saw the extensions we expected
-            my $msgexts = $message->extension_data();
-
-            for (my $extloop = 0, $extcount = 0; $extensions[$extloop][2] != 0;
-                                $extloop++) {
-                next if ($message->mt() != $extensions[$extloop][0]);
-                ok (($extensions[$extloop][2] & $exttype) == 0
-                      || defined ($msgexts->{$extensions[$extloop][1]}),
-                    "Extension presence check (Message: ".$message->mt()
-                    ." Extension: ".($extensions[$extloop][2] & $exttype).", "
-                    .$extloop.")");
-                $extcount++ if (($extensions[$extloop][2] & $exttype) != 0);
-             }
-            ok($extcount == keys %$msgexts, "Extensions count mismatch ("
-                                            .$extcount.", ".(keys %$msgexts)
-                                            .")");
-        }
-    }
-}
-
-1;
diff --git a/test/testlib/checkhandshake.pm b/test/testlib/checkhandshake.pm
new file mode 100644 (file)
index 0000000..eb34fff
--- /dev/null
@@ -0,0 +1,128 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the OpenSSL license (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package checkhandshake;
+
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+use Exporter;
+our @ISA = 'Exporter';
+our @EXPORT = qw(@handmessages @extensions checkhandshake);
+
+use constant {
+    DEFAULT_HANDSHAKE => 1,
+    OCSP_HANDSHAKE => 2,
+    RESUME_HANDSHAKE => 4,
+    CLIENT_AUTH_HANDSHAKE => 8,
+    RENEG_HANDSHAKE => 16,
+    NPN_HANDSHAKE => 32,
+
+    ALL_HANDSHAKES => 63
+};
+
+use constant {
+    #DEFAULT ALSO INCLUDES SESSION_TICKET_SRV_EXTENSION
+    DEFAULT_EXTENSIONS => 0x00000003,
+    SESSION_TICKET_SRV_EXTENSION => 0x00000002,
+    SERVER_NAME_CLI_EXTENSION => 0x00000004,
+    SERVER_NAME_SRV_EXTENSION => 0x00000008,
+    STATUS_REQUEST_CLI_EXTENSION => 0x00000010,
+    STATUS_REQUEST_SRV_EXTENSION => 0x00000020,
+    ALPN_CLI_EXTENSION => 0x00000040,
+    ALPN_SRV_EXTENSION => 0x00000080,
+    SCT_CLI_EXTENSION => 0x00000100,
+    SCT_SRV_EXTENSION => 0x00000200,
+    RENEGOTIATE_CLI_EXTENSION => 0x00000400,
+    NPN_CLI_EXTENSION => 0x00000800,
+    NPN_SRV_EXTENSION => 0x00001000,
+    SRP_CLI_EXTENSION => 0x00002000,
+};
+
+our @handmessages = ();
+our @extensions = ();
+
+sub checkhandshake($$$$)
+{
+    my ($proxy, $handtype, $exttype, $testname) = @_;
+
+    subtest $testname => sub {
+        my $loop = 0;
+        my $numtests;
+        my $extcount;
+        my $clienthelloseen = 0;
+
+        #First count the number of tests
+        for ($numtests = 0; $handmessages[$loop][1] != 0; $loop++) {
+            $numtests++ if (($handmessages[$loop][1] & $handtype) != 0);
+        }
+
+        #Add number of extensions we check plus 2 for the number of messages
+        #that contain extensions
+        $numtests += $#extensions + 2;
+        #In a renegotiation we will have double the number of extension tests
+        if (($handtype & RENEG_HANDSHAKE) != 0) {
+            $numtests += $#extensions + 2;
+        }
+        #In TLS1.3 there are 3 messages with extensions (and no renegotiations)
+        $numtests += 1 if ($proxy->is_tls13());
+
+        plan tests => $numtests;
+
+        my $nextmess = 0;
+        my $message = undef;
+        for ($loop = 0; $handmessages[$loop][1] != 0; $loop++) {
+            next if (($handmessages[$loop][1] & $handtype) == 0);
+            if (scalar @{$proxy->message_list} > $nextmess) {
+                $message = ${$proxy->message_list}[$nextmess];
+                $nextmess++;
+            } else {
+                $message = undef;
+            }
+            if (!defined $message) {
+                fail("Message type check. Got nothing, expected "
+                     .$handmessages[$loop][0]);
+                next;
+            } else {
+                ok($message->mt == $handmessages[$loop][0],
+                   "Message type check. Got ".$message->mt
+                   .", expected ".$handmessages[$loop][0]);
+            }
+
+            next if ($message->mt() != TLSProxy::Message::MT_CLIENT_HELLO
+                    && $message->mt() != TLSProxy::Message::MT_SERVER_HELLO
+                    && $message->mt() !=
+                       TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS);
+
+            if ($message->mt() == TLSProxy::Message::MT_CLIENT_HELLO) {
+                #Add renegotiate extension we will expect if renegotiating
+                $exttype |= RENEGOTIATE_CLI_EXTENSION if ($clienthelloseen);
+                $clienthelloseen = 1;
+            }
+            #Now check that we saw the extensions we expected
+            my $msgexts = $message->extension_data();
+
+            for (my $extloop = 0, $extcount = 0; $extensions[$extloop][2] != 0;
+                                $extloop++) {
+                next if ($message->mt() != $extensions[$extloop][0]);
+                ok (($extensions[$extloop][2] & $exttype) == 0
+                      || defined ($msgexts->{$extensions[$extloop][1]}),
+                    "Extension presence check (Message: ".$message->mt()
+                    ." Extension: ".($extensions[$extloop][2] & $exttype).", "
+                    .$extloop.")");
+                $extcount++ if (($extensions[$extloop][2] & $exttype) != 0);
+             }
+            ok($extcount == keys %$msgexts, "Extensions count mismatch ("
+                                            .$extcount.", ".(keys %$msgexts)
+                                            .")");
+        }
+    }
+}
+
+1;