dtls-srtp: no ekm cross check on single threaded/no pthread conf

This commit is contained in:
Marco Oliverio
2022-01-20 16:07:16 +01:00
parent 8e0ece920b
commit 231a0bbb84
4 changed files with 39 additions and 31 deletions

View File

@@ -1770,11 +1770,18 @@ static void Usage(void)
* calls srtp_helper_get_ekm() to wait and then get the ekm computed by the
* server, then check if it matches the one computed by itself.
*/
static int client_srtp_test(WOLFSSL *ssl, srtp_test_helper *srtp_helper)
static int client_srtp_test(WOLFSSL *ssl, func_args *args)
{
byte *srtp_secret, *other_secret = NULL, *p;
size_t srtp_secret_length, other_size = 0;
size_t srtp_secret_length;
byte *srtp_secret, *p;
int ret;
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
srtp_test_helper *srtp_helper = args->srtp_helper;
byte *other_secret = NULL;
size_t other_size = 0;
#else
(void)args;
#endif
ret = wolfSSL_export_dtls_srtp_keying_material(ssl, NULL,
&srtp_secret_length);
@@ -1797,11 +1804,12 @@ static int client_srtp_test(WOLFSSL *ssl, srtp_test_helper *srtp_helper)
return ret;
}
printf("DTLS SRTP: Exported key material:\n");
printf("DTLS SRTP: Exported key material: ");
for (p = srtp_secret; p < srtp_secret + srtp_secret_length; p++)
printf("%02X", *p);
printf("\n");
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
if (srtp_helper != NULL) {
srtp_helper_get_ekm(srtp_helper, &other_secret, &other_size);
@@ -1817,6 +1825,7 @@ static int client_srtp_test(WOLFSSL *ssl, srtp_test_helper *srtp_helper)
/* we are delegated from server to free this buffer */
XFREE(other_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
}
#endif
XFREE(srtp_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
@@ -3976,7 +3985,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
#ifdef WOLFSSL_SRTP
if (dtlsSrtpProfiles != NULL) {
err = client_srtp_test(ssl, ((func_args*)args)->srtp_helper);
err = client_srtp_test(ssl, (func_args*)args);
if (err != 0) {
if (exitWithRet) {
((func_args*)args)->return_code = err;
@@ -4341,7 +4350,7 @@ exit:
StartTCP();
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
args.srtp_helper = NULL;
#endif
args.argc = argc;

View File

@@ -1290,11 +1290,16 @@ static void Usage(void)
* calls srtp_helper_set_ekm() to wake the client and share the ekm with
* him. The client will check that the ekm matches the one computed by itself.
*/
static int server_srtp_test(WOLFSSL *ssl, srtp_test_helper *srtp_helper)
static int server_srtp_test(WOLFSSL *ssl, func_args *args)
{
size_t srtp_secret_length;
byte *srtp_secret, *p;
int ret;
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
srtp_test_helper *srtp_helper = args->srtp_helper;
#else
(void)args;
#endif
ret = wolfSSL_export_dtls_srtp_keying_material(ssl, NULL,
&srtp_secret_length);
@@ -1317,20 +1322,22 @@ static int server_srtp_test(WOLFSSL *ssl, srtp_test_helper *srtp_helper)
return ret;
}
printf("DTLS SRTP: Exported key material:\n");
printf("DTLS SRTP: Exported key material: ");
for (p = srtp_secret; p < srtp_secret + srtp_secret_length; p++)
printf("%02X", *p);
printf("\n");
if (srtp_helper != NULL) {
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
if (srtp_helper != NULL) {
srtp_helper_set_ekm(srtp_helper, srtp_secret, srtp_secret_length);
/* client code will free srtp_secret buffer after checking for
correctness */
return 0;
}
else {
XFREE(srtp_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
}
#endif /* _POSIX_THREADS */
XFREE(srtp_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
return 0;
}
#endif
@@ -3146,7 +3153,7 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args)
#ifdef WOLFSSL_SRTP
if (dtlsSrtpProfiles != NULL) {
err = server_srtp_test(ssl, ((func_args*)args)->srtp_helper);
err = server_srtp_test(ssl, (func_args*)args);
if (err != 0) {
if (exitWithRet) {
((func_args*)args)->return_code = err;
@@ -3423,7 +3430,7 @@ exit:
args.argv = argv;
args.signal = &ready;
args.return_code = 0;
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
args.srtp_helper = NULL;
#endif
InitTcpReady(&ready);

View File

@@ -321,7 +321,7 @@ static int execute_test_case(int svr_argc, char** svr_argv,
int reqClientCert;
#endif
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
srtp_test_helper srtp_helper;
#endif
/* Is Valid Cipher and Version Checks */
@@ -452,11 +452,12 @@ static int execute_test_case(int svr_argc, char** svr_argv,
InitTcpReady(&ready);
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
srtp_helper_init(&srtp_helper);
cliArgs.srtp_helper = &srtp_helper;
svrArgs.srtp_helper = &srtp_helper;
#endif
#ifdef WOLFSSL_TIRTOS
fdOpenSession(Task_self());
#endif
@@ -570,7 +571,7 @@ static int execute_test_case(int svr_argc, char** svr_argv,
#endif
FreeTcpReady(&ready);
#ifdef WOLFSSL_SRTP
#if defined (WOLFSSL_SRTP) &&!defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
srtp_helper_free(&srtp_helper);
#endif

View File

@@ -520,12 +520,10 @@ typedef struct callback_functions {
unsigned char loadToSSL:1;
} callback_functions;
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
typedef struct srtp_test_helper {
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
pthread_mutex_t mutex;
pthread_cond_t cond;
#endif
uint8_t* server_srtp_ekm;
size_t server_srtp_ekm_size;
} srtp_test_helper;
@@ -537,7 +535,7 @@ typedef struct func_args {
int return_code;
tcp_ready* signal;
callback_functions *callbacks;
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
srtp_test_helper* srtp_helper;
#endif
} func_args;
@@ -643,16 +641,15 @@ err_sys_with_errno(const char* msg)
extern int myoptind;
extern char* myoptarg;
#ifdef WOLFSSL_SRTP
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
static WC_INLINE void srtp_helper_init(srtp_test_helper *srtp)
{
srtp->server_srtp_ekm_size = 0;
srtp->server_srtp_ekm = NULL;
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
pthread_mutex_init(&srtp->mutex, 0);
pthread_cond_init(&srtp->cond, 0);
#endif
}
/**
@@ -667,7 +664,6 @@ static WC_INLINE void srtp_helper_init(srtp_test_helper *srtp)
static WC_INLINE void srtp_helper_get_ekm(srtp_test_helper *srtp,
uint8_t **ekm, size_t *size)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
pthread_mutex_lock(&srtp->mutex);
if (srtp->server_srtp_ekm == NULL)
@@ -681,7 +677,6 @@ static WC_INLINE void srtp_helper_get_ekm(srtp_test_helper *srtp,
srtp->server_srtp_ekm_size = 0;
pthread_mutex_unlock(&srtp->mutex);
#endif
}
/**
@@ -698,7 +693,6 @@ static WC_INLINE void srtp_helper_get_ekm(srtp_test_helper *srtp,
static WC_INLINE void srtp_helper_set_ekm(srtp_test_helper *srtp,
uint8_t *ekm, size_t size)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
pthread_mutex_lock(&srtp->mutex);
srtp->server_srtp_ekm_size = size;
@@ -706,18 +700,15 @@ static WC_INLINE void srtp_helper_set_ekm(srtp_test_helper *srtp,
pthread_cond_signal(&srtp->cond);
pthread_mutex_unlock(&srtp->mutex);
#endif
}
static WC_INLINE void srtp_helper_free(srtp_test_helper *srtp)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
pthread_mutex_destroy(&srtp->mutex);
pthread_cond_destroy(&srtp->cond);
#endif
}
#endif /* WOLFSSL_SRTP */
#endif /* WOLFSSL_SRTP && !SINGLE_THREADED && POSIX_THREADS */
/**
*