diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c
index c7655ca..d12d447 100644
--- a/programs/ssl/ssl_client2.c
+++ b/programs/ssl/ssl_client2.c
@@ -2575,19 +2575,21 @@
 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
 
     if (opt.exp_label != NULL && opt.exp_len > 0) {
-        unsigned char *exported_key = calloc((size_t)opt.exp_len, sizeof(unsigned int));
+        unsigned char *exported_key = calloc((size_t) opt.exp_len, sizeof(unsigned int));
         if (exported_key == NULL) {
             mbedtls_printf("Could not allocate %d bytes\n", opt.exp_len);
             ret = 3;
             goto exit;
         }
-        ret = mbedtls_ssl_export_keying_material(&ssl, exported_key, (size_t)opt.exp_len,
+        ret = mbedtls_ssl_export_keying_material(&ssl, exported_key, (size_t) opt.exp_len,
                                                  opt.exp_label, strlen(opt.exp_label),
                                                  NULL, 0, 0);
         if (ret != 0) {
             goto exit;
         }
-        mbedtls_printf("Exporting key of length %d with label \"%s\": 0x", opt.exp_len, opt.exp_label);
+        mbedtls_printf("Exporting key of length %d with label \"%s\": 0x",
+                       opt.exp_len,
+                       opt.exp_label);
         for (i = 0; i < opt.exp_len; i++) {
             mbedtls_printf("%02X", exported_key[i]);
         }
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index 01be48a..1d6cc12 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -3657,19 +3657,21 @@
     }
 
     if (opt.exp_label != NULL && opt.exp_len > 0) {
-        unsigned char *exported_key = calloc((size_t)opt.exp_len, sizeof(unsigned int));
+        unsigned char *exported_key = calloc((size_t) opt.exp_len, sizeof(unsigned int));
         if (exported_key == NULL) {
             mbedtls_printf("Could not allocate %d bytes\n", opt.exp_len);
             ret = 3;
             goto exit;
         }
-        ret = mbedtls_ssl_export_keying_material(&ssl, exported_key, (size_t)opt.exp_len,
+        ret = mbedtls_ssl_export_keying_material(&ssl, exported_key, (size_t) opt.exp_len,
                                                  opt.exp_label, strlen(opt.exp_label),
                                                  NULL, 0, 0);
         if (ret != 0) {
             goto exit;
         }
-        mbedtls_printf("Exporting key of length %d with label \"%s\": 0x", opt.exp_len, opt.exp_label);
+        mbedtls_printf("Exporting key of length %d with label \"%s\": 0x",
+                       opt.exp_len,
+                       opt.exp_label);
         for (i = 0; i < opt.exp_len; i++) {
             mbedtls_printf("%02X", exported_key[i]);
         }
