Skip to content

Commit 7904ff0

Browse files
author
Antti Kauppila
committed
more error handling added for ctr and hmac
1 parent abb37c0 commit 7904ff0

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
@@ -47,11 +47,7 @@ TLSSocketWrapper::TLSSocketWrapper(Socket *transport, const char *hostname, cont
4747
}
4848
#endif /* MBEDTLS_PLATFORM_C */
4949
mbedtls_entropy_init(&_entropy);
50-
#if defined(MBEDTLS_CTR_DRBG_C)
51-
mbedtls_ctr_drbg_init(&_drbg);
52-
#elif defined(MBEDTLS_HMAC_DRBG_C)
53-
mbedtls_hmac_drbg_init(&_drbg);
54-
#endif
50+
DRBG_INIT(&_drbg);
5551

5652
mbedtls_ssl_init(&_ssl);
5753
#if defined(MBEDTLS_X509_CRT_PARSE_C)
@@ -69,11 +65,9 @@ TLSSocketWrapper::~TLSSocketWrapper()
6965
close();
7066
}
7167
mbedtls_entropy_free(&_entropy);
72-
#if defined(MBEDTLS_CTR_DRBG_C)
73-
mbedtls_ctr_drbg_free(&_drbg);
74-
#elif defined(MBEDTLS_HMAC_DRBG_C)
75-
mbedtls_hmac_drbg_free(&_drbg);
76-
#endif
68+
69+
DRBG_FREE(&_drbg);
70+
7771
mbedtls_ssl_free(&_ssl);
7872
#if defined(MBEDTLS_X509_CRT_PARSE_C)
7973
mbedtls_pk_free(&_pkctx);
@@ -201,14 +195,12 @@ nsapi_error_t TLSSocketWrapper::start_handshake(bool first_call)
201195
print_mbedtls_error("mbedtls_hmac_drbg_seed", ret);
202196
return NSAPI_ERROR_AUTH_FAILURE;
203197
}
198+
#else
199+
#error "CTR or HMAC must be defined for TLSSocketWrapper!"
204200
#endif
205201

206202
#if !defined(MBEDTLS_SSL_CONF_RNG)
207-
#if defined(MBEDTLS_CTR_DRBG_C)
208-
mbedtls_ssl_conf_rng(get_ssl_config(), mbedtls_ctr_drbg_random, &_drbg);
209-
#elif defined(MBEDTLS_HMAC_DRBG_C)
210-
mbedtls_ssl_conf_rng(get_ssl_config(), mbedtls_hmac_drbg_random, &_drbg);
211-
#endif
203+
mbedtls_ssl_conf_rng(get_ssl_config(), DRBG_RANDOM, &_drbg);
212204
#endif
213205

214206

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
*
@@ -295,11 +309,7 @@ class TLSSocketWrapper : public Socket {
295309
mbedtls_pk_context _pkctx;
296310
#endif
297311

298-
#if defined(MBEDTLS_CTR_DRBG_C)
299-
mbedtls_ctr_drbg_context _drbg;
300-
#elif defined(MBEDTLS_HMAC_DRBG_C)
301-
mbedtls_hmac_drbg_context _drbg;
302-
#endif
312+
DRBG_CTX _drbg;
303313

304314
mbedtls_entropy_context _entropy;
305315

0 commit comments

Comments
 (0)