Skip to content

Commit 5bdc731

Browse files
author
Antti Kauppila
committed
more error handling added for ctr and hmac
1 parent 3dbe97b commit 5bdc731

File tree

4 files changed

+46
-39
lines changed

4 files changed

+46
-39
lines changed

features/lwipstack/lwip/src/apps/altcp_tls/altcp_tls_mbedtls.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,15 @@ struct altcp_tls_config {
102102
#if defined(MBEDTLS_CTR_DRBG_C)
103103
mbedtls_ctr_drbg_context _drbg;
104104
#define DRBG_INIT mbedtls_ctr_drbg_init
105-
#define DRBG_SEED mbedtls_ctr_drbg_seed
106105
#define DRBG_SEED_ERROR "mbedtls_ctr_drbg_seed failed: %d\n"
107106
#define DRBG_RANDOM mbedtls_ctr_drbg_random
108107
#elif defined(MBEDTLS_HMAC_DRBG_C)
109108
mbedtls_hmac_drbg_context _drbg;
110109
#define DRBG_INIT mbedtls_hmac_drbg_init
111-
#define DRBG_SEED mbedtls_hmac_drbg_seed
112110
#define DRBG_SEED_ERROR "mbedtls_hmac_drbg_seed failed: %d\n"
113111
#define DRBG_RANDOM mbedtls_hmac_drbg_random
114112
#else
115-
#error "CTR or HMAC must be defined for coap_security_handler!"
113+
#error "CTR or HMAC must be defined for altcp_tls_mbedtls!"
116114
#endif
117115
mbedtls_x509_crt *cert;
118116
mbedtls_pk_context *pkey;
@@ -740,7 +738,16 @@ altcp_tls_create_config(int is_server, int have_cert, int have_pkey, int have_ca
740738
DRBG_INIT(&conf->_drbg);
741739

742740
/* Seed the RNG */
743-
ret = DRBG_SEED(&conf->_drbg, ALTCP_MBEDTLS_RNG_FN, &conf->entropy, ALTCP_MBEDTLS_ENTROPY_PTR, ALTCP_MBEDTLS_ENTROPY_LEN);
741+
#if defined(MBEDTLS_CTR_DRBG_C)
742+
ret = mbedtls_ctr_drbg_seed(&conf->_drbg, ALTCP_MBEDTLS_RNG_FN,
743+
&conf->entropy, ALTCP_MBEDTLS_ENTROPY_PTR, ALTCP_MBEDTLS_ENTROPY_LEN);
744+
#elif defined(MBEDTLS_HMAC_DRBG_C)
745+
ret = mbedtls_hmac_drbg_seed(&conf->_drbg, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256),
746+
ALTCP_MBEDTLS_RNG_FN, &conf->entropy,
747+
ALTCP_MBEDTLS_ENTROPY_PTR, ALTCP_MBEDTLS_ENTROPY_LEN);
748+
#else
749+
#error "CTR or HMAC must be defined for altcp_tls_mbedtls!"
750+
#endif
744751

745752
if (ret != 0) {
746753
LWIP_DEBUGF(ALTCP_MBEDTLS_DEBUG, (DRBG_SEED_ERROR, ret));

features/nanostack/coap-service/source/coap_security_handler.c

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,14 @@ struct coap_security_s {
4444

4545
#if defined(MBEDTLS_CTR_DRBG_C)
4646
mbedtls_ctr_drbg_context _drbg;
47+
#define DRBG_INIT mbedtls_ctr_drbg_init
48+
#define DRBG_RANDOM mbedtls_ctr_drbg_random
49+
#define DRBG_FREE mbedtls_ctr_drbg_free
4750
#elif defined(MBEDTLS_HMAC_DRBG_C)
4851
mbedtls_hmac_drbg_context _drbg;
52+
#define DRBG_INIT mbedtls_hmac_drbg_init
53+
#define DRBG_RANDOM mbedtls_hmac_drbg_random
54+
#define DRBG_FREE mbedtls_hmac_drbg_free
4955
#else
5056
#error "CTR or HMAC must be defined for coap_security_handler!"
5157
#endif
@@ -122,11 +128,7 @@ static int coap_security_handler_init(coap_security_t *sec)
122128

123129
mbedtls_ssl_init(&sec->_ssl);
124130
mbedtls_ssl_config_init(&sec->_conf);
125-
#if defined(MBEDTLS_CTR_DRBG_C)
126-
mbedtls_ctr_drbg_init(&sec->_drbg);
127-
#elif defined(MBEDTLS_HMAC_DRBG_C)
128-
mbedtls_hmac_drbg_init(&sec->_drbg);
129-
#endif
131+
DRBG_INIT(&sec->_drbg);
130132
mbedtls_entropy_init(&sec->_entropy);
131133

132134
#if defined(MBEDTLS_X509_CRT_PARSE_C)
@@ -157,6 +159,8 @@ static int coap_security_handler_init(coap_security_t *sec)
157159
strlen(pers))) != 0) {
158160
return -1;
159161
}
162+
#else
163+
#error "CTR or HMAC must be defined for coap_security_handler!"
160164
#endif
161165
return 0;
162166
}
@@ -180,11 +184,9 @@ static void coap_security_handler_reset(coap_security_t *sec)
180184
#endif
181185

182186
mbedtls_entropy_free(&sec->_entropy);
183-
#if defined(MBEDTLS_CTR_DRBG_C)
184-
mbedtls_ctr_drbg_free(&sec->_drbg);
185-
#elif defined(MBEDTLS_HMAC_DRBG_C)
186-
mbedtls_hmac_drbg_free(&sec->_drbg);
187-
#endif
187+
188+
DRBG_FREE(&sec->_drbg);
189+
188190
mbedtls_ssl_config_free(&sec->_conf);
189191
mbedtls_ssl_free(&sec->_ssl);
190192
#if defined(MBEDTLS_PLATFORM_C)
@@ -421,11 +423,7 @@ int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_ser
421423
}
422424

423425
#if !defined(MBEDTLS_SSL_CONF_RNG)
424-
#if defined(MBEDTLS_CTR_DRBG_C)
425-
mbedtls_ssl_conf_rng(&sec->_conf, mbedtls_ctr_drbg_random, &sec->_drbg);
426-
#elif defined(MBEDTLS_HMAC_DRBG_C)
427-
mbedtls_ssl_conf_rng(&sec->_conf, mbedtls_hmac_drbg_random, &sec->_drbg);
428-
#endif
426+
mbedtls_ssl_conf_rng(&sec->_conf, DRBG_RANDOM, &sec->_drbg);
429427
#endif
430428

431429
if ((mbedtls_ssl_setup(&sec->_ssl, &sec->_conf)) != 0) {

features/netsocket/TLSSocketWrapper.cpp

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,7 @@ TLSSocketWrapper::TLSSocketWrapper(Socket *transport, const char *hostname, cont
5353
}
5454
#endif /* MBEDTLS_PLATFORM_C */
5555
mbedtls_entropy_init(&_entropy);
56-
#if defined(MBEDTLS_CTR_DRBG_C)
57-
mbedtls_ctr_drbg_init(&_drbg);
58-
#elif defined(MBEDTLS_HMAC_DRBG_C)
59-
mbedtls_hmac_drbg_init(&_drbg);
60-
#endif
56+
DRBG_INIT(&_drbg);
6157

6258
mbedtls_ssl_init(&_ssl);
6359
#if defined(MBEDTLS_X509_CRT_PARSE_C)
@@ -75,11 +71,9 @@ TLSSocketWrapper::~TLSSocketWrapper()
7571
close();
7672
}
7773
mbedtls_entropy_free(&_entropy);
78-
#if defined(MBEDTLS_CTR_DRBG_C)
79-
mbedtls_ctr_drbg_free(&_drbg);
80-
#elif defined(MBEDTLS_HMAC_DRBG_C)
81-
mbedtls_hmac_drbg_free(&_drbg);
82-
#endif
74+
75+
DRBG_FREE(&_drbg);
76+
8377
mbedtls_ssl_free(&_ssl);
8478
#if defined(MBEDTLS_X509_CRT_PARSE_C)
8579
mbedtls_pk_free(&_pkctx);
@@ -207,14 +201,12 @@ nsapi_error_t TLSSocketWrapper::start_handshake(bool first_call)
207201
print_mbedtls_error("mbedtls_hmac_drbg_seed", ret);
208202
return NSAPI_ERROR_AUTH_FAILURE;
209203
}
204+
#else
205+
#error "CTR or HMAC must be defined for TLSSocketWrapper!"
210206
#endif
211207

212208
#if !defined(MBEDTLS_SSL_CONF_RNG)
213-
#if defined(MBEDTLS_CTR_DRBG_C)
214-
mbedtls_ssl_conf_rng(get_ssl_config(), mbedtls_ctr_drbg_random, &_drbg);
215-
#elif defined(MBEDTLS_HMAC_DRBG_C)
216-
mbedtls_ssl_conf_rng(get_ssl_config(), mbedtls_hmac_drbg_random, &_drbg);
217-
#endif
209+
mbedtls_ssl_conf_rng(get_ssl_config(), DRBG_RANDOM, &_drbg);
218210
#endif
219211

220212

features/netsocket/TLSSocketWrapper.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@
3535
// This class requires Mbed TLS SSL/TLS client code
3636
#if defined(MBEDTLS_SSL_CLI_C) || defined(DOXYGEN_ONLY)
3737

38+
#if defined(MBEDTLS_CTR_DRBG_C)
39+
#define DRBG_CTX mbedtls_ctr_drbg_context
40+
#define DRBG_INIT mbedtls_ctr_drbg_init
41+
#define DRBG_RANDOM mbedtls_ctr_drbg_random
42+
#define DRBG_FREE mbedtls_ctr_drbg_free
43+
#elif defined(MBEDTLS_HMAC_DRBG_C)
44+
#define DRBG_CTX mbedtls_hmac_drbg_context
45+
#define DRBG_INIT mbedtls_hmac_drbg_init
46+
#define DRBG_RANDOM mbedtls_hmac_drbg_random
47+
#define DRBG_FREE mbedtls_hmac_drbg_free
48+
#else
49+
#error "CTR or HMAC must be defined for TLSSocketWrapper!"
50+
#endif
51+
3852
/**
3953
* TLSSocket is a wrapper around Socket for interacting with TLS servers.
4054
*
@@ -292,11 +306,7 @@ class TLSSocketWrapper : public Socket {
292306
mbedtls_pk_context _pkctx;
293307
#endif
294308

295-
#if defined(MBEDTLS_CTR_DRBG_C)
296-
mbedtls_ctr_drbg_context _drbg;
297-
#elif defined(MBEDTLS_HMAC_DRBG_C)
298-
mbedtls_hmac_drbg_context _drbg;
299-
#endif
309+
DRBG_CTX _drbg;
300310

301311
mbedtls_entropy_context _entropy;
302312

0 commit comments

Comments
 (0)