diff --git a/library/cmac.c b/library/cmac.c
index ff7cb2109..23b8044 100644
--- a/library/cmac.c
+++ b/library/cmac.c
@@ -69,7 +69,8 @@
  *
  * Input and output MUST not point to the same buffer
  */
-static void multiply_by_u( unsigned char *output, const unsigned char *input )
+static void cmac_multiply_by_u( unsigned char *output,
+                                const unsigned char *input )
 {
     const unsigned char Rb = 0x87; /* block size 16 only */
     unsigned char mask;
@@ -101,7 +102,7 @@
 /*
  * Generate subkeys
  */
-static int generate_subkeys( mbedtls_cmac_context *ctx )
+static int cmac_generate_subkeys( mbedtls_cmac_context *ctx )
 {
     int ret;
     unsigned char L[16];
@@ -118,14 +119,17 @@
     /*
      * Generate K1 and K2
      */
-    multiply_by_u( ctx->K1, L );
-    multiply_by_u( ctx->K2, ctx->K1 );
+    cmac_multiply_by_u( ctx->K1, L );
+    cmac_multiply_by_u( ctx->K2, ctx->K1 );
 
     mbedtls_zeroize( L, sizeof( L ) );
 
     return( 0 );
 }
 
+/*
+ * Set key and prepare context for use
+ */
 int mbedtls_cmac_setkey( mbedtls_cmac_context *ctx,
                          mbedtls_cipher_id_t cipher,
                          const unsigned char *key,
@@ -153,7 +157,7 @@
         return( ret );
     }
 
-    return( generate_subkeys( ctx ) );
+    return( cmac_generate_subkeys( ctx ) );
 }
 
 /*
@@ -171,9 +175,9 @@
  * We can't use the padding option from the cipher layer, as it only works for
  * CBC and we use ECB mode, and anyway we need to XOR K1 or K2 in addition.
  */
-static void padding( unsigned char padded_block[16],
-                     const unsigned char *last_block,
-                     size_t length )
+static void cmac_pad( unsigned char padded_block[16],
+                      const unsigned char *last_block,
+                      size_t length )
 {
     size_t j;
 
@@ -237,7 +241,7 @@
     /* Calculate last block */
     if( needs_padding )
     {
-        padding( M_last, input + 16 * ( n - 1 ), in_len % 16 );
+        cmac_pad( M_last, input + 16 * ( n - 1 ), in_len % 16 );
         XOR_128( M_last, M_last, ctx->K2 );
     }
     else
@@ -262,7 +266,7 @@
 #undef UPDATE_CMAC
 
 /*
- * Authenticated decryption
+ * Verify tag on complete message
  */
 int mbedtls_cmac_verify( mbedtls_cmac_context *ctx,
                          const unsigned char *input, size_t in_len,
@@ -281,18 +285,19 @@
 
     /* Check tag in "constant-time" */
     for( diff = 0, i = 0; i < tag_len; i++ )
-    {
         diff |= tag[i] ^ check_tag[i];
-    }
 
     if( diff != 0 )
-    {
         return( MBEDTLS_ERR_CMAC_VERIFY_FAILED );
-    }
 
     return( 0 );
 }
 
+/*
+ * PRF based on CMAC with AES-128
+ * TODO: add reference to the standard
+ * TODO: do we need to take a cmac_context as an argument here?
+ */
 int mbedtls_aes_cmac_prf_128( mbedtls_cmac_context *ctx,
                               const unsigned char *key, size_t key_length,
                               const unsigned char *input, size_t in_len,
@@ -317,22 +322,17 @@
         ret = mbedtls_cmac_setkey( &zero_ctx, MBEDTLS_CIPHER_ID_AES,
                                    zero_key, 8 * sizeof zero_key );
         if( ret != 0 )
-        {
             return( ret );
-        }
+
         ret = mbedtls_cmac_generate( &zero_ctx, key, key_length, int_key, 16 );
         if( ret != 0 )
-        {
             return( ret );
-        }
     }
 
     ret = mbedtls_cmac_setkey( ctx, MBEDTLS_CIPHER_ID_AES,
                                int_key, 8 * sizeof int_key );
     if( ret != 0 )
-    {
         return( ret );
-    }
 
     mbedtls_zeroize( int_key, sizeof( int_key ) );
 
@@ -341,7 +341,7 @@
 
 #if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C)
 /*
- * Examples 1 to 4 from SP800-3B corrected Appendix D.1
+ * Examples 1 to 4 from SP800-38B corrected Appendix D.1
  * http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf
  */
 
@@ -456,7 +456,7 @@
     if( mbedtls_cmac_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, key, 8 * sizeof key ) != 0 )
     {
         if( verbose != 0 )
-            mbedtls_printf( "  CMAC: setup failed" );
+            mbedtls_printf( "  CMAC: setup failed\n" );
 
         return( 1 );
     }
@@ -465,7 +465,7 @@
         ( memcmp( ctx.K2, K2, 16 ) != 0 ) )
     {
         if( verbose != 0 )
-            mbedtls_printf( "  CMAC: subkey generation failed" );
+            mbedtls_printf( "  CMAC: subkey generation failed\n" );
 
         return( 1 );
     }
