add test_wolfSSL_msgCb

This commit is contained in:
Takashi Kojo
2017-06-18 09:45:52 +09:00
parent a9cbb0ee10
commit 527c94c06b
5 changed files with 114 additions and 23 deletions

View File

@ -5873,8 +5873,16 @@ int wolfSSL_CertManagerDisableOCSPStapling(WOLFSSL_CERT_MANAGER* cm)
#endif
return ret;
}
#if defined(SESSION_CERTS)
STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL* ssl)
{
WOLFSSL_ENTER("wolfSSL_get_peer_cert_chain");
if ((ssl == NULL) || (ssl->session.chain.count == 0))
return NULL;
else
return (STACK_OF(WOLFSSL_X509)* )&ssl->session.chain;
}
#endif
#ifdef HAVE_OCSP
@ -24993,15 +25001,6 @@ int wolfSSL_version(WOLFSSL* ssl)
return WOLFSSL_FAILURE;
}
STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL* ssl)
{
WOLFSSL_ENTER("wolfSSL_get_peer_cert_chain");
if (ssl == NULL)
return NULL;
else
return (STACK_OF(WOLFSSL_X509)* )&ssl->session.chain;
}
WOLFSSL_CTX* wolfSSL_get_SSL_CTX(WOLFSSL* ssl)
{
WOLFSSL_ENTER("wolfSSL_get_SSL_CTX");
@ -26403,20 +26402,20 @@ int wolfSSL_set_msg_callback(WOLFSSL *ssl, SSL_Msg_Cb cb)
}
#ifndef NO_WOLFSSL_STUB
int wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg)
void wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg)
{
WOLFSSL_STUB("SSL_CTX_set_msg_callback_arg");
(void)ctx;
(void)arg;
return WOLFSSL_FAILURE;
return;
}
#endif
int wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg)
void wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg)
{
WOLFSSL_ENTER("wolfSSL_set_msg_callback_arg");
ssl->protoMsgCtx = arg;
return SSL_SUCCESS;
return;
}
void *wolfSSL_OPENSSL_memdup(const void *data, size_t siz, const char* file, int line)

View File

@ -45,6 +45,8 @@
#include <wolfssl/ssl.h> /* compatibility layer */
#include <wolfssl/test.h>
#include <tests/unit.h>
#include "examples/server/server.h"
/* for testing compatibility layer callbacks */
#ifndef NO_MD5
#include <wolfssl/wolfcrypt/md5.h>
@ -10345,9 +10347,10 @@ static void test_wolfSSL_BN(void)
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_ASN) */
}
#define TEST_ARG 0x1234
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
#define TEST_ARG 0x1234
static void msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)
{
(void)write_p;
@ -10360,6 +10363,91 @@ static void msg_cb(int write_p, int version, int content_type, const void *buf,
}
#endif
#if defined(OPENSSL_EXTRA)
static int folk_testServer(THREAD_TYPE *serverThread, tcp_ready *ready)
{
static char **svr_argv ;
#ifdef WOLFSSL_TIRTOS
func_args svrArgs = {0};
svrArgs.argc = 1;
svrArgs.argv = svr_argv;
#else
func_args svrArgs = { 1, svr_argv, 0, NULL, NULL};
#endif
InitTcpReady(ready);
/* start server */
svrArgs.signal = ready;
start_thread(server_test, &svrArgs, serverThread);
wait_tcp_ready(&svrArgs);
printf("Server folked\n");
return SSL_SUCCESS;
}
static int join_testServer(THREAD_TYPE *serverThread, tcp_ready *ready)
{
printf("Joining server\n");
join_thread(*serverThread);
#ifdef WOLFSSL_TIRTOS
fdCloseSession(Task_self());
#endif
FreeTcpReady(ready);
return SSL_SUCCESS;
}
#endif
static void test_wolfSSL_msgCb(void){
#if defined(OPENSSL_EXTRA)
SSL* ssl;
SSL_CTX* ctx;
#if defined(SESSION_CERTS)
STACK_OF(WOLFSSL_X509)* chain;
#endif
THREAD_TYPE serverThread;
tcp_ready ready;
SOCKET_T sockfd = WOLFSSL_SOCKET_INVALID;
const char testMsg[] = "Hello Server";
#define BUF_SIZE 100
char recvBuff[BUF_SIZE];
printf(testingFmt, "test_wolfSSL_Get_others()");
AssertNotNull(ctx = SSL_CTX_new(wolfTLSv1_2_client_method()));
AssertTrue(wolfSSL_CTX_load_verify_locations(ctx, caCertFile,0)
== SSL_SUCCESS);
AssertTrue(wolfSSL_CTX_use_certificate_chain_file(ctx, cliCertFile)
== SSL_SUCCESS);
AssertTrue(wolfSSL_CTX_use_PrivateKey_file(ctx, cliKeyFile, SSL_FILETYPE_PEM)
== SSL_SUCCESS);
AssertTrue(folk_testServer(&serverThread, &ready) == SSL_SUCCESS);
AssertNotNull(ssl = SSL_new(ctx));
AssertTrue(SSL_set_msg_callback(ssl, msg_cb) == SSL_SUCCESS);
SSL_set_msg_callback_arg(ssl, (void*)TEST_ARG);
#if defined(SESSION_CERTS)
AssertNull(chain = SSL_get_peer_cert_chain(ssl));
#endif
tcp_connect(&sockfd, wolfSSLIP, wolfSSLPort, 0, 0, ssl);
AssertTrue(wolfSSL_set_fd(ssl, sockfd) == SSL_SUCCESS);
AssertTrue(wolfSSL_connect(ssl) == SSL_SUCCESS);
#if defined(SESSION_CERTS)
AssertTrue((chain = SSL_get_peer_cert_chain(ssl)) != NULL);
#endif
AssertTrue(wolfSSL_write(ssl, testMsg, (int)strlen(testMsg)) ==
(int)strlen(testMsg));
AssertTrue(wolfSSL_read(ssl, recvBuff, sizeof(recvBuff)) > 0);
AssertTrue(join_testServer (&serverThread, &ready) == SSL_SUCCESS);
printf(resultFmt, passed);
#endif
}
static void test_wolfSSL_set_options(void)
{
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
@ -10395,7 +10483,7 @@ static void test_wolfSSL_set_options(void)
SSL_OP_NO_COMPRESSION) == SSL_OP_NO_COMPRESSION);
AssertTrue(SSL_set_msg_callback(ssl, msg_cb) == SSL_SUCCESS);
AssertTrue(SSL_set_msg_callback_arg(ssl, arg) == SSL_SUCCESS);
SSL_set_msg_callback_arg(ssl, arg);
AssertTrue(SSL_CTX_set_alpn_protos(ctx, protos, len) == SSL_SUCCESS);
@ -11349,6 +11437,9 @@ void ApiTest(void)
test_wolfSSL_EVP_MD_hmac_signing();
test_wolfSSL_CTX_add_extra_chain_cert();
test_wolfSSL_ERR_peek_last_error_line();
test_wolfSSL_set_options();
test_wolfSSL_X509_STORE_CTX();
test_wolfSSL_msgCb();
test_wolfSSL_X509_STORE_set_flags();
test_wolfSSL_X509_LOOKUP_load_file();
test_wolfSSL_X509_NID();

View File

@ -181,7 +181,7 @@ enum wolfSSL_ErrorCodes {
};
#ifdef WOLFSSL_CALLBACKS
#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA)
enum {
MIN_PARAM_ERR = UNSUPPORTED_SUITE,
MAX_PARAM_ERR = MIN_PARAM_ERR - 10

View File

@ -434,6 +434,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
#define SSL_CTX_set_session_id_context wolfSSL_CTX_set_session_id_context
#define SSL_get_peer_certificate wolfSSL_get_peer_certificate
#define SSL_get_peer_cert_chain wolfSSL_get_peer_cert_chain
#define SSL_want_read wolfSSL_want_read
#define SSL_want_write wolfSSL_want_write
@ -656,7 +657,7 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
#define SSL_version wolfSSL_version
#define SSL_get_state wolfSSL_get_state
#define SSL_state_string_long wolfSSL_state_string_long
#define SSL_get_peer_cert_chain wolfSSL_get_peer_cert_chain
#define sk_X509_NAME_value wolfSSL_sk_X509_NAME_value
#define sk_X509_value wolfSSL_sk_X509_value
#define SSL_SESSION_get_ex_data wolfSSL_SESSION_get_ex_data

View File

@ -2430,8 +2430,6 @@ WOLFSSL_API void* wolfSSL_sk_X509_NAME_value(const WOLF_STACK_OF(WOLFSSL_X509_NA
WOLFSSL_API void* wolfSSL_sk_X509_value(WOLF_STACK_OF(WOLFSSL_X509)*, int);
WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int);
WOLFSSL_API int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION*, int, void*);
@ -2505,8 +2503,10 @@ typedef void (*SSL_Msg_Cb)(int write_p, int version, int content_type,
WOLFSSL_API int wolfSSL_CTX_set_msg_callback(WOLFSSL_CTX *ctx, SSL_Msg_Cb cb);
WOLFSSL_API int wolfSSL_set_msg_callback(WOLFSSL *ssl, SSL_Msg_Cb cb);
WOLFSSL_API int wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg);
WOLFSSL_API int wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg);
WOLFSSL_API void wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg);
WOLFSSL_API void wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg);
WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
#endif
#ifdef OPENSSL_EXTRA