From fe632a3f77ed0d1b70bea53ca51dc41cd94f1e59 Mon Sep 17 00:00:00 2001 From: John Safranek Date: Wed, 17 Oct 2012 13:13:58 -0700 Subject: [PATCH] added non-blocking and session resume as example server and client command line options --- cyassl/test.h | 7 +- examples/client/client.c | 257 +++++++++++++++++++------------------ examples/server/server.c | 120 ++++++++--------- tests/test-dtls.conf | 80 ++++++++++++ tests/test.conf | 270 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 543 insertions(+), 191 deletions(-) diff --git a/cyassl/test.h b/cyassl/test.h index 6c62c04c9..5202a9c03 100644 --- a/cyassl/test.h +++ b/cyassl/test.h @@ -30,9 +30,7 @@ #include #include #include - #ifdef NON_BLOCKING - #include - #endif + #include #ifdef TEST_IPV6 #include #endif @@ -549,7 +547,6 @@ static INLINE void tcp_accept(SOCKET_T* sockfd, int* clientfd, func_args* args, static INLINE void tcp_set_nonblocking(SOCKET_T* sockfd) { -#ifdef NON_BLOCKING #ifdef USE_WINDOWS_API unsigned long blocking = 1; int ret = ioctlsocket(*sockfd, FIONBIO, &blocking); @@ -557,8 +554,6 @@ static INLINE void tcp_set_nonblocking(SOCKET_T* sockfd) int flags = fcntl(*sockfd, F_GETFL, 0); fcntl(*sockfd, F_SETFL, flags | O_NONBLOCK); #endif -#endif - (void)sockfd; } diff --git a/examples/client/client.c b/examples/client/client.c index 2c00a6144..5115de4e5 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -28,10 +28,6 @@ #include "examples/client/client.h" -/* -#define TEST_RESUME -*/ - #ifdef CYASSL_CALLBACKS int handShakeCB(HandShakeInfo*); @@ -39,53 +35,51 @@ Timeval timeout; #endif -#if defined(NON_BLOCKING) || defined(CYASSL_CALLBACKS) - static void NonBlockingSSL_Connect(CYASSL* ssl) - { +static void NonBlockingSSL_Connect(CYASSL* ssl) +{ #ifndef CYASSL_CALLBACKS - int ret = CyaSSL_connect(ssl); + int ret = CyaSSL_connect(ssl); #else - int ret = CyaSSL_connect_ex(ssl, handShakeCB, timeoutCB, timeout); + int ret = CyaSSL_connect_ex(ssl, handShakeCB, timeoutCB, timeout); #endif - int error = CyaSSL_get_error(ssl, 0); - SOCKET_T sockfd = (SOCKET_T)CyaSSL_get_fd(ssl); - int select_ret; + int error = CyaSSL_get_error(ssl, 0); + SOCKET_T sockfd = (SOCKET_T)CyaSSL_get_fd(ssl); + int select_ret; - while (ret != SSL_SUCCESS && (error == SSL_ERROR_WANT_READ || - error == SSL_ERROR_WANT_WRITE)) { - if (error == SSL_ERROR_WANT_READ) - printf("... client would read block\n"); - else - printf("... client would write block\n"); + while (ret != SSL_SUCCESS && (error == SSL_ERROR_WANT_READ || + error == SSL_ERROR_WANT_WRITE)) { + if (error == SSL_ERROR_WANT_READ) + printf("... client would read block\n"); + else + printf("... client would write block\n"); - if (CyaSSL_dtls(ssl)) - select_ret = tcp_select(sockfd, - CyaSSL_dtls_get_current_timeout(ssl)); - else - select_ret = tcp_select(sockfd, 1); + if (CyaSSL_dtls(ssl)) + select_ret = tcp_select(sockfd, + CyaSSL_dtls_get_current_timeout(ssl)); + else + select_ret = tcp_select(sockfd, 1); - if ((select_ret == TEST_RECV_READY) || - (select_ret == TEST_ERROR_READY)) { - #ifndef CYASSL_CALLBACKS - ret = CyaSSL_connect(ssl); - #else - ret = CyaSSL_connect_ex(ssl,handShakeCB,timeoutCB,timeout); - #endif - error = CyaSSL_get_error(ssl, 0); - } - else if (select_ret == TEST_TIMEOUT && - (!CyaSSL_dtls(ssl) || - (CyaSSL_dtls_got_timeout(ssl) >= 0))) { - error = SSL_ERROR_WANT_READ; - } - else { - error = SSL_FATAL_ERROR; - } + if ((select_ret == TEST_RECV_READY) || + (select_ret == TEST_ERROR_READY)) { + #ifndef CYASSL_CALLBACKS + ret = CyaSSL_connect(ssl); + #else + ret = CyaSSL_connect_ex(ssl,handShakeCB,timeoutCB,timeout); + #endif + error = CyaSSL_get_error(ssl, 0); + } + else if (select_ret == TEST_TIMEOUT && + (!CyaSSL_dtls(ssl) || + (CyaSSL_dtls_got_timeout(ssl) >= 0))) { + error = SSL_ERROR_WANT_READ; + } + else { + error = SSL_FATAL_ERROR; } - if (ret != SSL_SUCCESS) - err_sys("SSL_connect failed"); } -#endif + if (ret != SSL_SUCCESS) + err_sys("SSL_connect failed"); +} static void Usage(void) @@ -107,6 +101,8 @@ static void Usage(void) printf("-g Send server HTTP GET\n"); printf("-u Use UDP DTLS\n"); printf("-m Match domain name in cert\n"); + printf("-n Use non-blocking sockets\n"); + printf("-r Resume session\n"); } @@ -118,12 +114,10 @@ void client_test(void* args) CYASSL_CTX* ctx = 0; CYASSL* ssl = 0; -#ifdef TEST_RESUME CYASSL* sslResume = 0; CYASSL_SESSION* session = 0; char resumeMsg[] = "resuming cyassl!"; int resumeSz = sizeof(resumeMsg); -#endif char msg[64] = "hello cyassl!"; char reply[1024]; @@ -142,6 +136,8 @@ void client_test(void* args) int doDTLS = 0; int matchName = 0; int doPeerCheck = 1; + int nonBlocking = 0; + int resumeSession = 0; char* cipherList = NULL; char* verifyCert = (char*)caCert; char* ourCert = (char*)cliCert; @@ -152,7 +148,7 @@ void client_test(void* args) ((func_args*)args)->return_code = -1; /* error state */ - while ((ch = mygetopt(argc, argv, "?gdusmh:p:v:l:A:c:k:b:")) != -1) { + while ((ch = mygetopt(argc, argv, "?gdusmNrh:p:v:l:A:c:k:b:")) != -1) { switch (ch) { case '?' : Usage(); @@ -222,6 +218,14 @@ void client_test(void* args) } break; + case 'N' : + nonBlocking = 1; + break; + + case 'r' : + resumeSession = 1; + break; + default: Usage(); exit(MY_EX_USAGE); @@ -363,23 +367,25 @@ void client_test(void* args) #endif if (matchName && doPeerCheck) CyaSSL_check_domain_name(ssl, domain); -#ifdef NON_BLOCKING - CyaSSL_set_using_nonblock(ssl, 1); - tcp_set_nonblocking(&sockfd); - NonBlockingSSL_Connect(ssl); +#ifndef CYASSL_CALLBACKS + if (nonBlocking) { + CyaSSL_set_using_nonblock(ssl, 1); + tcp_set_nonblocking(&sockfd); + NonBlockingSSL_Connect(ssl); + } + else if (CyaSSL_connect(ssl) != SSL_SUCCESS) { + /* see note at top of README */ + int err = CyaSSL_get_error(ssl, 0); + char buffer[80]; + printf("err = %d, %s\n", err, + CyaSSL_ERR_error_string(err, buffer)); + err_sys("SSL_connect failed"); + /* if you're getting an error here */ + } #else - #ifndef CYASSL_CALLBACKS - if (CyaSSL_connect(ssl) != SSL_SUCCESS) {/* see note at top of README */ - int err = CyaSSL_get_error(ssl, 0); - char buffer[80]; - printf("err = %d, %s\n", err, CyaSSL_ERR_error_string(err, buffer)); - err_sys("SSL_connect failed");/* if you're getting an error here */ - } - #else - timeout.tv_sec = 2; - timeout.tv_usec = 0; - NonBlockingSSL_Connect(ssl); /* will keep retrying on timeout */ - #endif + timeout.tv_sec = 2; + timeout.tv_usec = 0; + NonBlockingSSL_Connect(ssl); /* will keep retrying on timeout */ #endif showPeer(ssl); @@ -408,89 +414,88 @@ void client_test(void* args) } } } - -#ifdef TEST_RESUME - if (doDTLS) { - strncpy(msg, "break", 6); - msgSz = (int)strlen(msg); - /* try to send session close */ - CyaSSL_write(ssl, msg, msgSz); + + if (resumeSession) { + if (doDTLS) { + strncpy(msg, "break", 6); + msgSz = (int)strlen(msg); + /* try to send session close */ + CyaSSL_write(ssl, msg, msgSz); + } + session = CyaSSL_get_session(ssl); + sslResume = CyaSSL_new(ctx); } - session = CyaSSL_get_session(ssl); - sslResume = CyaSSL_new(ctx); -#endif if (doDTLS == 0) /* don't send alert after "break" command */ CyaSSL_shutdown(ssl); /* echoserver will interpret as new conn */ CyaSSL_free(ssl); CloseSocket(sockfd); -#ifdef TEST_RESUME - if (doDTLS) { - SOCKADDR_IN_T addr; - #ifdef USE_WINDOWS_API - Sleep(500); - #else - sleep(1); - #endif - build_addr(&addr, host, port); - CyaSSL_dtls_set_peer(sslResume, &addr, sizeof(addr)); - tcp_socket(&sockfd, 1); - } - else { - tcp_connect(&sockfd, host, port, 0); - } - CyaSSL_set_fd(sslResume, sockfd); - CyaSSL_set_session(sslResume, session); - - showPeer(sslResume); -#ifdef NON_BLOCKING - CyaSSL_set_using_nonblock(sslResume, 1); - tcp_set_nonblocking(&sockfd); - NonBlockingSSL_Connect(sslResume); -#else - #ifndef CYASSL_CALLBACKS - if (CyaSSL_connect(sslResume) != SSL_SUCCESS) + if (resumeSession) { + if (doDTLS) { + SOCKADDR_IN_T addr; + #ifdef USE_WINDOWS_API + Sleep(500); + #else + sleep(1); + #endif + build_addr(&addr, host, port); + CyaSSL_dtls_set_peer(sslResume, &addr, sizeof(addr)); + tcp_socket(&sockfd, 1); + } + else { + tcp_connect(&sockfd, host, port, 0); + } + CyaSSL_set_fd(sslResume, sockfd); + CyaSSL_set_session(sslResume, session); + + showPeer(sslResume); +#ifndef CYASSL_CALLBACKS + if (nonBlocking) { + CyaSSL_set_using_nonblock(sslResume, 1); + tcp_set_nonblocking(&sockfd); + NonBlockingSSL_Connect(sslResume); + } + else if (CyaSSL_connect(sslResume) != SSL_SUCCESS) err_sys("SSL resume failed"); - #else +#else timeout.tv_sec = 2; timeout.tv_usec = 0; NonBlockingSSL_Connect(ssl); /* will keep retrying on timeout */ - #endif #endif #ifdef OPENSSL_EXTRA - if (CyaSSL_session_reused(sslResume)) - printf("reused session id\n"); - else - printf("didn't reuse session id!!!\n"); + if (CyaSSL_session_reused(sslResume)) + printf("reused session id\n"); + else + printf("didn't reuse session id!!!\n"); #endif - - if (CyaSSL_write(sslResume, resumeMsg, resumeSz) != resumeSz) - err_sys("SSL_write failed"); + + if (CyaSSL_write(sslResume, resumeMsg, resumeSz) != resumeSz) + err_sys("SSL_write failed"); -#ifdef NON_BLOCKING - /* need to give server a chance to bounce a message back to client */ - #ifdef USE_WINDOWS_API - Sleep(500); - #else - sleep(1); - #endif -#endif + if (nonBlocking) { + /* need to give server a chance to bounce a message back to client */ + #ifdef USE_WINDOWS_API + Sleep(500); + #else + sleep(1); + #endif + } - input = CyaSSL_read(sslResume, reply, sizeof(reply)); - if (input > 0) { - reply[input] = 0; - printf("Server resume response: %s\n", reply); + input = CyaSSL_read(sslResume, reply, sizeof(reply)); + if (input > 0) { + reply[input] = 0; + printf("Server resume response: %s\n", reply); + } + + /* try to send session break */ + CyaSSL_write(sslResume, msg, msgSz); + + CyaSSL_shutdown(sslResume); + CyaSSL_free(sslResume); } - /* try to send session break */ - CyaSSL_write(sslResume, msg, msgSz); - - CyaSSL_shutdown(sslResume); - CyaSSL_free(sslResume); -#endif /* TEST_RESUME */ - CyaSSL_CTX_free(ctx); CloseSocket(sockfd); diff --git a/examples/server/server.c b/examples/server/server.c index 0a414dbdc..a0a09c684 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -35,51 +35,49 @@ Timeval srvTo; #endif -#if defined(NON_BLOCKING) || defined(CYASSL_CALLBACKS) - static void NonBlockingSSL_Accept(SSL* ssl) - { - #ifndef CYASSL_CALLBACKS - int ret = SSL_accept(ssl); - #else - int ret = CyaSSL_accept_ex(ssl, srvHandShakeCB, srvTimeoutCB, srvTo); - #endif - int error = SSL_get_error(ssl, 0); - SOCKET_T sockfd = (SOCKET_T)CyaSSL_get_fd(ssl); - int select_ret; - - while (ret != SSL_SUCCESS && (error == SSL_ERROR_WANT_READ || - error == SSL_ERROR_WANT_WRITE)) { - printf("... server would block\n"); - - if (CyaSSL_dtls(ssl)) - select_ret = tcp_select(sockfd, - CyaSSL_dtls_get_current_timeout(ssl)); - else - select_ret = tcp_select(sockfd, 1); - - if ((select_ret == TEST_RECV_READY) || - (select_ret == TEST_ERROR_READY)) { - #ifndef CYASSL_CALLBACKS - ret = SSL_accept(ssl); - #else - ret = CyaSSL_accept_ex(ssl, - srvHandShakeCB, srvTimeoutCB, srvTo); - #endif - error = SSL_get_error(ssl, 0); - } - else if (select_ret == TEST_TIMEOUT && - (!CyaSSL_dtls(ssl) || - (CyaSSL_dtls_got_timeout(ssl) >= 0))) { - error = SSL_ERROR_WANT_READ; - } - else { - error = SSL_FATAL_ERROR; - } - } - if (ret != SSL_SUCCESS) - err_sys("SSL_accept failed"); - } +static void NonBlockingSSL_Accept(SSL* ssl) +{ +#ifndef CYASSL_CALLBACKS + int ret = SSL_accept(ssl); +#else + int ret = CyaSSL_accept_ex(ssl, srvHandShakeCB, srvTimeoutCB, srvTo); #endif + int error = SSL_get_error(ssl, 0); + SOCKET_T sockfd = (SOCKET_T)CyaSSL_get_fd(ssl); + int select_ret; + + while (ret != SSL_SUCCESS && (error == SSL_ERROR_WANT_READ || + error == SSL_ERROR_WANT_WRITE)) { + printf("... server would block\n"); + + if (CyaSSL_dtls(ssl)) + select_ret = tcp_select(sockfd, + CyaSSL_dtls_get_current_timeout(ssl)); + else + select_ret = tcp_select(sockfd, 1); + + if ((select_ret == TEST_RECV_READY) || + (select_ret == TEST_ERROR_READY)) { + #ifndef CYASSL_CALLBACKS + ret = SSL_accept(ssl); + #else + ret = CyaSSL_accept_ex(ssl, + srvHandShakeCB, srvTimeoutCB, srvTo); + #endif + error = SSL_get_error(ssl, 0); + } + else if (select_ret == TEST_TIMEOUT && + (!CyaSSL_dtls(ssl) || + (CyaSSL_dtls_got_timeout(ssl) >= 0))) { + error = SSL_ERROR_WANT_READ; + } + else { + error = SSL_FATAL_ERROR; + } + } + if (ret != SSL_SUCCESS) + err_sys("SSL_accept failed"); +} static void Usage(void) @@ -98,6 +96,7 @@ static void Usage(void) printf("-b Bind to any interface instead of localhost only\n"); printf("-s Use pre Shared keys\n"); printf("-u Use UDP DTLS\n"); + printf("-N Use non-blocking sockets\n"); } @@ -121,6 +120,7 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args) int usePsk = 0; int doDTLS = 0; int useNtruKey = 0; + int nonBlocking = 0; char* cipherList = NULL; char* verifyCert = (char*)cliCert; char* ourCert = (char*)svrCert; @@ -130,7 +130,7 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args) ((func_args*)args)->return_code = -1; /* error state */ - while ((ch = mygetopt(argc, argv, "?dbsnup:v:l:A:c:k:")) != -1) { + while ((ch = mygetopt(argc, argv, "?dbsnNup:v:l:A:c:k:")) != -1) { switch (ch) { case '?' : Usage(); @@ -187,6 +187,10 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args) ourKey = myoptarg; break; + case 'N': + nonBlocking = 1; + break; + default: Usage(); exit(MY_EX_USAGE); @@ -310,21 +314,19 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args) #endif #endif -#ifdef NON_BLOCKING - CyaSSL_set_using_nonblock(ssl, 1); - tcp_set_nonblocking(&clientfd); - NonBlockingSSL_Accept(ssl); -#else - #ifndef CYASSL_CALLBACKS - if (SSL_accept(ssl) != SSL_SUCCESS) { - int err = SSL_get_error(ssl, 0); - char buffer[80]; - printf("error = %d, %s\n", err, ERR_error_string(err, buffer)); - err_sys("SSL_accept failed"); - } - #else +#ifndef CYASSL_CALLBACKS + if (nonBlocking) { + CyaSSL_set_using_nonblock(ssl, 1); + tcp_set_nonblocking(&clientfd); NonBlockingSSL_Accept(ssl); - #endif + } else if (SSL_accept(ssl) != SSL_SUCCESS) { + int err = SSL_get_error(ssl, 0); + char buffer[80]; + printf("error = %d, %s\n", err, ERR_error_string(err, buffer)); + err_sys("SSL_accept failed"); + } +#else + NonBlockingSSL_Accept(ssl); #endif showPeer(ssl); diff --git a/tests/test-dtls.conf b/tests/test-dtls.conf index 7cffa9660..18fdd89dd 100644 --- a/tests/test-dtls.conf +++ b/tests/test-dtls.conf @@ -62,3 +62,83 @@ -u -l RABBIT-SHA +# server DTLSv1 RC4-SHA NON-BLOCKING +-u +-l RC4-SHA +-N + +# client DTLSv1 RC4-SHA NON-BLOCKING +-u +-l RC4-SHA +-N + +# server DTLSv1 RC4-MD5 NON-BLOCKING +-u +-l RC4-MD5 +-N + +# client DTLSv1 RC4-MD5 NON-BLOCKING +-u +-l RC4-MD5 +-N + +# server DTLSv1 DES-CBC3-SHA NON-BLOCKING +-u +-l DES-CBC3-SHA +-N + +# client DTLSv1 DES-CBC3-SHA NON-BLOCKING +-u +-l DES-CBC3-SHA +-N + +# server DTLSv1 AES128-SHA NON-BLOCKING +-u +-l AES128-SHA +-N + +# client DTLSv1 AES128-SHA NON-BLOCKING +-u +-l AES128-SHA +-N + +# server DTLSv1 AES256-SHA NON-BLOCKING +-u +-l AES256-SHA +-N + +# client DTLSv1 AES256-SHA NON-BLOCKING +-u +-l AES256-SHA +-N + +# server DTLSv1 AES128-SHA256 NON-BLOCKING +-u +-l AES128-SHA256 +-N + +# client DTLSv1 AES128-SHA256 NON-BLOCKING +-u +-l AES128-SHA256 +-N + +# server DTLSv1 AES256-SHA256 NON-BLOCKING +-u +-l AES256-SHA256 +-N + +# client DTLSv1 AES256-SHA256 NON-BLOCKING +-u +-l AES256-SHA256 +-N + +# server DTLSv1 RABBIT-SHA NON-BLOCKING +-u +-l RABBIT-SHA +-N + +# client DTLSv1 RABBIT-SHA NON-BLOCKING +-u +-l RABBIT-SHA +-N + diff --git a/tests/test.conf b/tests/test.conf index a4a20762c..dfba31965 100644 --- a/tests/test.conf +++ b/tests/test.conf @@ -214,3 +214,273 @@ -v 3 -l RABBIT-SHA +# server SSLv3 RC4-SHA NON-BLOCKING +-v 0 +-l RC4-SHA +-N + +# client SSLv3 RC4-SHA NON-BLOCKING +-v 0 +-l RC4-SHA +-N + +# server SSLv3 RC4-MD5 NON-BLOCKING +-v 0 +-l RC4-MD5 +-N + +# client SSLv3 RC4-MD5 NON-BLOCKING +-v 0 +-l RC4-MD5 +-N + +# server SSLv3 DES-CBC3-SHA NON-BLOCKING +-v 0 +-l DES-CBC3-SHA +-N + +# client SSLv3 DES-CBC3-SHA NON-BLOCKING +-v 0 +-l DES-CBC3-SHA +-N + +# server TLSv1 RC4-SHA NON-BLOCKING +-v 1 +-l RC4-SHA +-N + +# client TLSv1 RC4-SHA NON-BLOCKING +-v 1 +-l RC4-SHA +-N + +# server TLSv1 RC4-MD5 NON-BLOCKING +-v 1 +-l RC4-MD5 +-N + +# client TLSv1 RC4-MD5 NON-BLOCKING +-v 1 +-l RC4-MD5 +-N + +# server TLSv1 DES-CBC3-SHA NON-BLOCKING +-v 1 +-l DES-CBC3-SHA +-N + +# client TLSv1 DES-CBC3-SHA NON-BLOCKING +-v 1 +-l DES-CBC3-SHA +-N + +# server TLSv1 AES128-SHA NON-BLOCKING +-v 1 +-l AES128-SHA +-N + +# client TLSv1 AES128-SHA NON-BLOCKING +-v 1 +-l AES128-SHA +-N + +# server TLSv1 AES256-SHA NON-BLOCKING +-v 1 +-l AES256-SHA +-N + +# client TLSv1 AES256-SHA NON-BLOCKING +-v 1 +-l AES256-SHA +-N + +# server TLSv1 AES128-SHA256 NON-BLOCKING +-v 1 +-l AES128-SHA256 +-N + +# client TLSv1 AES128-SHA256 NON-BLOCKING +-v 1 +-l AES128-SHA256 +-N + +# server TLSv1 AES256-SHA256 NON-BLOCKING +-v 1 +-l AES256-SHA256 +-N + +# client TLSv1 AES256-SHA256 NON-BLOCKING +-v 1 +-l AES256-SHA256 +-N + +# server TLSv1 RABBIT-SHA NON-BLOCKING +-v 1 +-l RABBIT-SHA +-N + +# client TLSv1 RABBIT-SHA NON-BLOCKING +-v 1 +-l RABBIT-SHA +-N + +# server TLSv1.1 RC4-SHA NON-BLOCKING +-v 2 +-l RC4-SHA +-N + +# client TLSv1.1 RC4-SHA NON-BLOCKING +-v 2 +-l RC4-SHA +-N + +# server TLSv1.1 RC4-MD5 NON-BLOCKING +-v 2 +-l RC4-MD5 +-N + +# client TLSv1.1 RC4-MD5 NON-BLOCKING +-v 2 +-l RC4-MD5 +-N + +# server TLSv1.1 DES-CBC3-SHA NON-BLOCKING +-v 2 +-l DES-CBC3-SHA +-N + +# client TLSv1.1 DES-CBC3-SHA NON-BLOCKING +-v 2 +-l DES-CBC3-SHA +-N + +# server TLSv1.1 AES128-SHA NON-BLOCKING +-v 2 +-l AES128-SHA +-N + +# client TLSv1.1 AES128-SHA NON-BLOCKING +-v 2 +-l AES128-SHA +-N + +# server TLSv1.1 AES256-SHA NON-BLOCKING +-v 2 +-l AES256-SHA +-N + +# client TLSv1.1 AES256-SHA NON-BLOCKING +-v 2 +-l AES256-SHA +-N + +# server TLSv1.1 AES128-SHA256 NON-BLOCKING +-v 2 +-l AES128-SHA256 +-N + +# client TLSv1.1 AES128-SHA256 NON-BLOCKING +-v 2 +-l AES128-SHA256 +-N + +# server TLSv1.1 AES256-SHA256 NON-BLOCKING +-v 2 +-l AES256-SHA256 +-N + +# client TLSv1.1 AES256-SHA256 NON-BLOCKING +-v 2 +-l AES256-SHA256 +-N + +# server TLSv1.1 RABBIT-SHA NON-BLOCKING +-v 2 +-l RABBIT-SHA +-N + +# client TLSv1.1 RABBIT-SHA NON-BLOCKING +-v 2 +-l RABBIT-SHA +-N + +# server TLSv1.2 RC4-SHA NON-BLOCKING +-v 3 +-l RC4-SHA +-N + +# client TLSv1.2 RC4-SHA NON-BLOCKING +-v 3 +-l RC4-SHA +-N + +# server TLSv1.2 RC4-MD5 NON-BLOCKING +-v 3 +-l RC4-MD5 +-N + +# client TLSv1.2 RC4-MD5 NON-BLOCKING +-v 3 +-l RC4-MD5 +-N + +# server TLSv1.2 DES-CBC3-SHA NON-BLOCKING +-v 3 +-l DES-CBC3-SHA +-N + +# client TLSv1.2 DES-CBC3-SHA NON-BLOCKING +-v 3 +-l DES-CBC3-SHA +-N + +# server TLSv1.2 AES128-SHA NON-BLOCKING +-v 3 +-l AES128-SHA +-N + +# client TLSv1.2 AES128-SHA NON-BLOCKING +-v 3 +-l AES128-SHA +-N + +# server TLSv1.2 AES256-SHA NON-BLOCKING +-v 3 +-l AES256-SHA +-N + +# client TLSv1.2 AES256-SHA NON-BLOCKING +-v 3 +-l AES256-SHA +-N + +# server TLSv1.2 AES128-SHA256 NON-BLOCKING +-v 3 +-l AES128-SHA256 +-N + +# client TLSv1.2 AES128-SHA256 NON-BLOCKING +-v 3 +-l AES128-SHA256 +-N + +# server TLSv1.2 AES256-SHA256 NON-BLOCKING +-v 3 +-l AES256-SHA256 +-N + +# client TLSv1.2 AES256-SHA256 NON-BLOCKING +-v 3 +-l AES256-SHA256 +-N + +# server TLSv1.2 RABBIT-SHA NON-BLOCKING +-v 3 +-l RABBIT-SHA +-N + +# client TLSv1.2 RABBIT-SHA NON-BLOCKING +-v 3 +-l RABBIT-SHA +-N +