Skip to content

Commit 8775b5c

Browse files
committed
Minor improvements. Tested with RSA and ECC for both DTLS v1.2 and v1.3. Tested with/without calling accept/connect. Tested with calling wolfSSL_is_init_finished.
1 parent 8ec1a5e commit 8775b5c

File tree

2 files changed

+52
-19
lines changed

2 files changed

+52
-19
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ android/wolfssljni-ndk-sample/proguard-project.txt
5656
/dtls/client-dtls
5757
/dtls/client-dtls13
5858
/dtls/client-udp
59+
/dtls/memory-bio-dtls
5960
/dtls/server-dtls-callback
6061
/dtls/server-dtls-ipv6
6162
/dtls/server-dtls-nonblocking

dtls/memory-bio-dtls.c

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* memory-bio-dtls.c
22
*
3-
* Copyright (C) 2006-2020 wolfSSL Inc.
3+
* Copyright (C) 2006-2025 wolfSSL Inc.
44
*
55
* This file is part of wolfSSL. (formerly known as CyaSSL)
66
*
@@ -22,11 +22,18 @@
2222

2323
/* in memory TLS connection with I/O callbacks, no sockets
2424
*
25-
gcc -Wall memory-tls.c -l wolfssl -lpthread
25+
./configure --enable-opensslall --enable-dtls --enable-dtls13 --enable-debug
26+
make
27+
sudo make install
2628
29+
gcc -o memory-bio-dtls -Wall memory-bio-dtls.c -lwolfssl -lpthread
2730
*/
2831

32+
33+
#ifndef WOLFSSL_USER_SETTINGS
2934
#include <wolfssl/options.h>
35+
#endif
36+
3037
#include <wolfssl/ssl.h>
3138

3239
#include <stdio.h>
@@ -43,10 +50,16 @@ static void err_sys(const char* msg)
4350
exit(1);
4451
}
4552

53+
#ifndef NO_RSA
54+
#define CERT_FILE "../certs/server-cert.pem"
55+
#define KEY_FILE "../certs/server-key.pem"
56+
#define CA_FILE "../certs/ca-cert.pem"
57+
#else
58+
#define CERT_FILE "../certs/server-ecc.pem"
59+
#define KEY_FILE "../certs/ecc-key.pem"
60+
#define CA_FILE "../certs/ca-ecc-cert.pem"
61+
#endif
4662

47-
#define key "../certs/server-key.pem"
48-
#define cert "../certs/server-cert.pem"
49-
#define cacert "../certs/ca-cert.pem"
5063

5164
typedef struct IO_HANDLES {
5265
WOLFSSL_BIO* rbio;
@@ -64,16 +77,16 @@ static void* client_thread(void* args)
6477
/* set up client */
6578
cli_ctx = wolfSSL_CTX_new(
6679
#ifdef WOLFSSL_DTLS13
67-
wolfDTLSv1_3_client_method()
80+
wolfDTLSv1_3_client_method()
6881
#else
69-
wolfDTLSv1_2_client_method()
82+
wolfDTLSv1_2_client_method()
7083
#endif
7184
);
7285
if (cli_ctx == NULL) {
7386
err_sys("bad client ctx new");
7487
}
7588

76-
ret = wolfSSL_CTX_load_verify_locations(cli_ctx, cacert, NULL);
89+
ret = wolfSSL_CTX_load_verify_locations(cli_ctx, CA_FILE, NULL);
7790
if (ret != WOLFSSL_SUCCESS) {
7891
err_sys("bad ca load");
7992
}
@@ -84,23 +97,26 @@ static void* client_thread(void* args)
8497
}
8598

8699
wolfSSL_set_bio(cli_ssl, io->wbio, io->rbio);
100+
101+
#if 1
87102
err = 0;
88103
do {
89104
sem_wait(&io->bioSem);
90105
ret = wolfSSL_connect(cli_ssl);
91106
sem_post(&io->bioSem);
92-
err = wolfSSL_get_error(cli_ssl, ret);
93-
} while (ret != WOLFSSL_SUCCESS &&
107+
err = wolfSSL_get_error(cli_ssl, ret);
108+
} while (ret != WOLFSSL_SUCCESS &&
94109
((err == WOLFSSL_ERROR_WANT_READ) || (err == WOLFSSL_ERROR_WANT_WRITE)));
95110
if (ret != WOLFSSL_SUCCESS) err_sys("bad client tls connect");
96111
printf("wolfSSL client success!\n");
112+
#endif
97113

98114
do {
99115
sem_wait(&io->bioSem);
100116
ret = wolfSSL_write(cli_ssl, "hello memory wolfSSL!", 21);
101117
sem_post(&io->bioSem);
102-
err = wolfSSL_get_error(cli_ssl, ret);
103-
} while (ret <= 0 &&
118+
err = wolfSSL_get_error(cli_ssl, ret);
119+
} while (ret <= 0 &&
104120
((err == WOLFSSL_ERROR_WANT_READ) || (err == WOLFSSL_ERROR_WANT_WRITE)));
105121

106122
/* clean up, wolfSSL_free would also free the WOLFSSL_BIO's so set as NULL
@@ -120,8 +136,15 @@ int main()
120136
int ret, err;
121137
WOLFSSL_CTX* srv_ctx = NULL;
122138
WOLFSSL* srv_ssl = NULL;
139+
WOLFSSL_CIPHER* cipher;
140+
const char *name;
123141
pthread_t tid;
124142

143+
#if 0
144+
wolfSSL_Debugging_ON();
145+
#endif
146+
wolfSSL_Init();
147+
125148
io.rbio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
126149
io.wbio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
127150
sem_init(&io.bioSem, 0, 1);
@@ -136,12 +159,12 @@ int main()
136159
);
137160
if (srv_ctx == NULL) err_sys("bad server ctx new");
138161

139-
ret = wolfSSL_CTX_use_PrivateKey_file(srv_ctx, key, WOLFSSL_FILETYPE_PEM);
162+
ret = wolfSSL_CTX_use_PrivateKey_file(srv_ctx, KEY_FILE, WOLFSSL_FILETYPE_PEM);
140163
if (ret != WOLFSSL_SUCCESS) {
141164
err_sys("bad server key file load");
142165
}
143166

144-
ret = wolfSSL_CTX_use_certificate_file(srv_ctx, cert, WOLFSSL_FILETYPE_PEM);
167+
ret = wolfSSL_CTX_use_certificate_file(srv_ctx, CERT_FILE, WOLFSSL_FILETYPE_PEM);
145168
if (ret != WOLFSSL_SUCCESS) {
146169
err_sys("bad server cert file load");
147170
}
@@ -157,26 +180,34 @@ int main()
157180
/* start client thread */
158181
pthread_create(&tid, 0, client_thread, (void*)&io);
159182

183+
#if 1
160184
/* accept tls connection without tcp sockets */
161185
err = 0;
162186
do {
163187
sem_wait(&io.bioSem);
164188
ret = wolfSSL_accept(srv_ssl);
165189
sem_post(&io.bioSem);
166-
err = wolfSSL_get_error(srv_ssl, ret);
167-
} while (ret != WOLFSSL_SUCCESS &&
190+
err = wolfSSL_get_error(srv_ssl, ret);
191+
} while (ret != WOLFSSL_SUCCESS &&
168192
((err == WOLFSSL_ERROR_WANT_READ) || (err == WOLFSSL_ERROR_WANT_WRITE)));
169193
if (ret != WOLFSSL_SUCCESS) err_sys("bad server tls accept");
170194
printf("wolfSSL accept success!\n");
171195

196+
printf("Version: %s\n", wolfSSL_get_version(srv_ssl));
197+
cipher = wolfSSL_get_current_cipher(srv_ssl);
198+
printf("Cipher Suite: %s\n", wolfSSL_CIPHER_get_name(cipher));
199+
if ((name = wolfSSL_get_curve_name(srv_ssl)) != NULL)
200+
printf("Curve: %s\n", name);
201+
#endif
202+
172203
/* read msg post handshake from client */
173204
memset(buf, 0, sizeof(buf));
174205
do {
175206
sem_wait(&io.bioSem);
176207
ret = wolfSSL_read(srv_ssl, buf, sizeof(buf)-1);
177208
sem_post(&io.bioSem);
178-
err = wolfSSL_get_error(srv_ssl, ret);
179-
} while (ret != 0 &&
209+
err = wolfSSL_get_error(srv_ssl, ret);
210+
} while (ret != 0 &&
180211
((err == WOLFSSL_ERROR_WANT_READ) || (err == WOLFSSL_ERROR_WANT_WRITE)));
181212
if (ret >= 0) {
182213
printf("client msg = %s\n", buf);
@@ -189,6 +220,7 @@ int main()
189220
wolfSSL_free(srv_ssl); /* This also does free on rbio and wbio */
190221
wolfSSL_CTX_free(srv_ctx);
191222

223+
wolfSSL_Cleanup();
224+
192225
return 0;
193226
}
194-

0 commit comments

Comments
 (0)