forked from wolfSSL/wolfssl
add test_wolfSSL_msgCb
This commit is contained in:
29
src/ssl.c
29
src/ssl.c
@ -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)
|
||||
|
95
tests/api.c
95
tests/api.c
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user