diff --git a/programs/util/pem2der.c b/programs/util/pem2der.c
index 9f5d70a..b66226d 100644
--- a/programs/util/pem2der.c
+++ b/programs/util/pem2der.c
@@ -45,10 +45,10 @@
     "\n"
 
 #if !defined(MBEDTLS_BASE64_C) || !defined(MBEDTLS_FS_IO)
-int main( void )
+int main(void)
 {
     mbedtls_printf("MBEDTLS_BASE64_C and/or MBEDTLS_FS_IO not defined.\n");
-    mbedtls_exit( 0 );
+    mbedtls_exit(0);
 }
 #else
 
@@ -56,120 +56,127 @@
 /*
  * global options
  */
-struct options
-{
+struct options {
     const char *filename;       /* filename of the input file             */
     const char *output_file;    /* where to store the output              */
 } opt;
 
-int convert_pem_to_der( const unsigned char *input, size_t ilen,
-                        unsigned char *output, size_t *olen )
+int convert_pem_to_der(const unsigned char *input, size_t ilen,
+                       unsigned char *output, size_t *olen)
 {
     int ret;
     const unsigned char *s1, *s2, *end = input + ilen;
     size_t len = 0;
 
-    s1 = (unsigned char *) strstr( (const char *) input, "-----BEGIN" );
-    if( s1 == NULL )
-        return( -1 );
+    s1 = (unsigned char *) strstr((const char *) input, "-----BEGIN");
+    if (s1 == NULL) {
+        return -1;
+    }
 
-    s2 = (unsigned char *) strstr( (const char *) input, "-----END" );
-    if( s2 == NULL )
-        return( -1 );
+    s2 = (unsigned char *) strstr((const char *) input, "-----END");
+    if (s2 == NULL) {
+        return -1;
+    }
 
     s1 += 10;
-    while( s1 < end && *s1 != '-' )
+    while (s1 < end && *s1 != '-') {
         s1++;
-    while( s1 < end && *s1 == '-' )
+    }
+    while (s1 < end && *s1 == '-') {
         s1++;
-    if( *s1 == '\r' ) s1++;
-    if( *s1 == '\n' ) s1++;
+    }
+    if (*s1 == '\r') {
+        s1++;
+    }
+    if (*s1 == '\n') {
+        s1++;
+    }
 
-    if( s2 <= s1 || s2 > end )
-        return( -1 );
+    if (s2 <= s1 || s2 > end) {
+        return -1;
+    }
 
-    ret = mbedtls_base64_decode( NULL, 0, &len, (const unsigned char *) s1, s2 - s1 );
-    if( ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER )
-        return( ret );
+    ret = mbedtls_base64_decode(NULL, 0, &len, (const unsigned char *) s1, s2 - s1);
+    if (ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER) {
+        return ret;
+    }
 
-    if( len > *olen )
-        return( -1 );
+    if (len > *olen) {
+        return -1;
+    }
 
-    if( ( ret = mbedtls_base64_decode( output, len, &len, (const unsigned char *) s1,
-                               s2 - s1 ) ) != 0 )
-    {
-        return( ret );
+    if ((ret = mbedtls_base64_decode(output, len, &len, (const unsigned char *) s1,
+                                     s2 - s1)) != 0) {
+        return ret;
     }
 
     *olen = len;
 
-    return( 0 );
+    return 0;
 }
 
 /*
  * Load all data from a file into a given buffer.
  */
-static int load_file( const char *path, unsigned char **buf, size_t *n )
+static int load_file(const char *path, unsigned char **buf, size_t *n)
 {
     FILE *f;
     long size;
 
-    if( ( f = fopen( path, "rb" ) ) == NULL )
-        return( -1 );
-
-    fseek( f, 0, SEEK_END );
-    if( ( size = ftell( f ) ) == -1 )
-    {
-        fclose( f );
-        return( -1 );
+    if ((f = fopen(path, "rb")) == NULL) {
+        return -1;
     }
-    fseek( f, 0, SEEK_SET );
+
+    fseek(f, 0, SEEK_END);
+    if ((size = ftell(f)) == -1) {
+        fclose(f);
+        return -1;
+    }
+    fseek(f, 0, SEEK_SET);
 
     *n = (size_t) size;
 
-    if( *n + 1 == 0 ||
-        ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL )
-    {
-        fclose( f );
-        return( -1 );
+    if (*n + 1 == 0 ||
+        (*buf = mbedtls_calloc(1, *n + 1)) == NULL) {
+        fclose(f);
+        return -1;
     }
 
-    if( fread( *buf, 1, *n, f ) != *n )
-    {
-        fclose( f );
-        free( *buf );
+    if (fread(*buf, 1, *n, f) != *n) {
+        fclose(f);
+        free(*buf);
         *buf = NULL;
-        return( -1 );
+        return -1;
     }
 
-    fclose( f );
+    fclose(f);
 
     (*buf)[*n] = '\0';
 
-    return( 0 );
+    return 0;
 }
 
 /*
  * Write buffer to a file
  */
-static int write_file( const char *path, unsigned char *buf, size_t n )
+static int write_file(const char *path, unsigned char *buf, size_t n)
 {
     FILE *f;
 
-    if( ( f = fopen( path, "wb" ) ) == NULL )
-        return( -1 );
-
-    if( fwrite( buf, 1, n, f ) != n )
-    {
-        fclose( f );
-        return( -1 );
+    if ((f = fopen(path, "wb")) == NULL) {
+        return -1;
     }
 
-    fclose( f );
-    return( 0 );
+    if (fwrite(buf, 1, n, f) != n) {
+        fclose(f);
+        return -1;
+    }
+
+    fclose(f);
+    return 0;
 }
 
-int main( int argc, char *argv[] )
+int main(int argc, char *argv[])
 {
     int ret = 1;
     int exit_code = MBEDTLS_EXIT_FAILURE;
@@ -183,100 +190,97 @@
     /*
      * Set to sane values
      */
-    memset( buf, 0, sizeof(buf) );
-    memset( der_buffer, 0, sizeof(der_buffer) );
+    memset(buf, 0, sizeof(buf));
+    memset(der_buffer, 0, sizeof(der_buffer));
 
-    if( argc == 0 )
-    {
-    usage:
-        mbedtls_printf( USAGE );
+    if (argc == 0) {
+usage:
+        mbedtls_printf(USAGE);
         goto exit;
     }
 
     opt.filename            = DFL_FILENAME;
     opt.output_file         = DFL_OUTPUT_FILENAME;
 
-    for( i = 1; i < argc; i++ )
-    {
+    for (i = 1; i < argc; i++) {
 
         p = argv[i];
-        if( ( q = strchr( p, '=' ) ) == NULL )
+        if ((q = strchr(p, '=')) == NULL) {
             goto usage;
+        }
         *q++ = '\0';
 
-        if( strcmp( p, "filename" ) == 0 )
+        if (strcmp(p, "filename") == 0) {
             opt.filename = q;
-        else if( strcmp( p, "output_file" ) == 0 )
+        } else if (strcmp(p, "output_file") == 0) {
             opt.output_file = q;
-        else
+        } else {
             goto usage;
+        }
     }
 
     /*
      * 1.1. Load the PEM file
      */
-    mbedtls_printf( "\n  . Loading the PEM file ..." );
-    fflush( stdout );
+    mbedtls_printf("\n  . Loading the PEM file ...");
+    fflush(stdout);
 
-    ret = load_file( opt.filename, &pem_buffer, &pem_size );
+    ret = load_file(opt.filename, &pem_buffer, &pem_size);
 
-    if( ret != 0 )
-    {
+    if (ret != 0) {
 #ifdef MBEDTLS_ERROR_C
-        mbedtls_strerror( ret, buf, 1024 );
+        mbedtls_strerror(ret, buf, 1024);
 #endif
-        mbedtls_printf( " failed\n  !  load_file returned %d - %s\n\n", ret, buf );
+        mbedtls_printf(" failed\n  !  load_file returned %d - %s\n\n", ret, buf);
         goto exit;
     }
 
-    mbedtls_printf( " ok\n" );
+    mbedtls_printf(" ok\n");
 
     /*
      * 1.2. Convert from PEM to DER
      */
-    mbedtls_printf( "  . Converting from PEM to DER ..." );
-    fflush( stdout );
+    mbedtls_printf("  . Converting from PEM to DER ...");
+    fflush(stdout);
 
-    if( ( ret = convert_pem_to_der( pem_buffer, pem_size, der_buffer, &der_size ) ) != 0 )
-    {
+    if ((ret = convert_pem_to_der(pem_buffer, pem_size, der_buffer, &der_size)) != 0) {
 #ifdef MBEDTLS_ERROR_C
-        mbedtls_strerror( ret, buf, 1024 );
+        mbedtls_strerror(ret, buf, 1024);
 #endif
-        mbedtls_printf( " failed\n  !  convert_pem_to_der %d - %s\n\n", ret, buf );
+        mbedtls_printf(" failed\n  !  convert_pem_to_der %d - %s\n\n", ret, buf);
         goto exit;
     }
 
-    mbedtls_printf( " ok\n" );
+    mbedtls_printf(" ok\n");
 
     /*
      * 1.3. Write the DER file
      */
-    mbedtls_printf( "  . Writing the DER file ..." );
-    fflush( stdout );
+    mbedtls_printf("  . Writing the DER file ...");
+    fflush(stdout);
 
-    ret = write_file( opt.output_file, der_buffer, der_size );
+    ret = write_file(opt.output_file, der_buffer, der_size);
 
-    if( ret != 0 )
-    {
+    if (ret != 0) {
 #ifdef MBEDTLS_ERROR_C
-        mbedtls_strerror( ret, buf, 1024 );
+        mbedtls_strerror(ret, buf, 1024);
 #endif
-        mbedtls_printf( " failed\n  !  write_file returned %d - %s\n\n", ret, buf );
+        mbedtls_printf(" failed\n  !  write_file returned %d - %s\n\n", ret, buf);
         goto exit;
     }
 
-    mbedtls_printf( " ok\n" );
+    mbedtls_printf(" ok\n");
 
     exit_code = MBEDTLS_EXIT_SUCCESS;
 
 exit:
-    free( pem_buffer );
+    free(pem_buffer);
 
 #if defined(_WIN32)
-    mbedtls_printf( "  + Press Enter to exit this program.\n" );
-    fflush( stdout ); getchar();
+    mbedtls_printf("  + Press Enter to exit this program.\n");
+    fflush(stdout); getchar();
 #endif
 
-    mbedtls_exit( exit_code );
+    mbedtls_exit(exit_code);
 }
 #endif /* MBEDTLS_BASE64_C && MBEDTLS_FS_IO */
diff --git a/programs/util/strerror.c b/programs/util/strerror.c
index 7dde90d..77f1831 100644
--- a/programs/util/strerror.c
+++ b/programs/util/strerror.c
@@ -38,48 +38,45 @@
     "\n where <errorcode> can be a decimal or hexadecimal (starts with 0x or -0x)\n"
 
 #if !defined(MBEDTLS_ERROR_C) && !defined(MBEDTLS_ERROR_STRERROR_DUMMY)
-int main( void )
+int main(void)
 {
     mbedtls_printf("MBEDTLS_ERROR_C and/or MBEDTLS_ERROR_STRERROR_DUMMY not defined.\n");
-    mbedtls_exit( 0 );
+    mbedtls_exit(0);
 }
 #else
-int main( int argc, char *argv[] )
+int main(int argc, char *argv[])
 {
     long int val;
     char *end = argv[1];
 
-    if( argc != 2 )
-    {
-        mbedtls_printf( USAGE );
-        mbedtls_exit( 0 );
+    if (argc != 2) {
+        mbedtls_printf(USAGE);
+        mbedtls_exit(0);
     }
 
-    val = strtol( argv[1], &end, 10 );
-    if( *end != '\0' )
-    {
-        val = strtol( argv[1], &end, 16 );
-        if( *end != '\0' )
-        {
-            mbedtls_printf( USAGE );
-            return( 0 );
+    val = strtol(argv[1], &end, 10);
+    if (*end != '\0') {
+        val = strtol(argv[1], &end, 16);
+        if (*end != '\0') {
+            mbedtls_printf(USAGE);
+            return 0;
         }
     }
-    if( val > 0 )
+    if (val > 0) {
         val = -val;
+    }
 
-    if( val != 0 )
-    {
+    if (val != 0) {
         char error_buf[200];
-        mbedtls_strerror( val, error_buf, 200 );
-        mbedtls_printf("Last error was: -0x%04x - %s\n\n", (unsigned int) -val, error_buf );
+        mbedtls_strerror(val, error_buf, 200);
+        mbedtls_printf("Last error was: -0x%04x - %s\n\n", (unsigned int) -val, error_buf);
     }
 
 #if defined(_WIN32)
-    mbedtls_printf( "  + Press Enter to exit this program.\n" );
-    fflush( stdout ); getchar();
+    mbedtls_printf("  + Press Enter to exit this program.\n");
+    fflush(stdout); getchar();
 #endif
 
-    mbedtls_exit( val );
+    mbedtls_exit(val);
 }
 #endif /* MBEDTLS_ERROR_C */
