- Added CMake makefiles as alternative to regular Makefiles.
 - Added preliminary Code Coverage tests for AES, ARC4, Base64, MPI, SHA-family, MD-family and  HMAC-SHA-family.

diff --git a/tests/suites/test_suite_hmac_shax.function b/tests/suites/test_suite_hmac_shax.function
new file mode 100644
index 0000000..7b4a0dc
--- /dev/null
+++ b/tests/suites/test_suite_hmac_shax.function
@@ -0,0 +1,120 @@
+BEGIN_HEADER
+#include <polarssl/sha1.h>
+#include <polarssl/sha2.h>
+#include <polarssl/sha4.h>
+END_HEADER
+
+BEGIN_CASE
+sha1_hmac:trunc_size:hex_key_string:hex_src_string:hex_hash_string
+{
+    unsigned char src_str[10000];
+    unsigned char key_str[10000];
+    unsigned char hash_str[10000];
+    unsigned char output[41];
+
+    memset(src_str, 0x00, 10000);
+    memset(key_str, 0x00, 10000);
+    memset(hash_str, 0x00, 10000);
+    memset(output, 0x00, 41);
+
+    int key_len = unhexify( key_str, {hex_key_string} );
+    int src_len = unhexify( src_str, {hex_src_string} );
+
+    sha1_hmac( key_str, key_len, src_str, src_len, output );
+    hexify( hash_str, output, 20 );
+
+    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+sha224_hmac:trunc_size:hex_key_string:hex_src_string:hex_hash_string
+{
+    unsigned char src_str[10000];
+    unsigned char key_str[10000];
+    unsigned char hash_str[10000];
+    unsigned char output[57];
+
+    memset(src_str, 0x00, 10000);
+    memset(key_str, 0x00, 10000);
+    memset(hash_str, 0x00, 10000);
+    memset(output, 0x00, 57);
+
+    int key_len = unhexify( key_str, {hex_key_string} );
+    int src_len = unhexify( src_str, {hex_src_string} );
+
+    sha2_hmac( key_str, key_len, src_str, src_len, output, 1 );
+    hexify( hash_str, output, 28 );
+
+    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+sha256_hmac:trunc_size:hex_key_string:hex_src_string:hex_hash_string
+{
+    unsigned char src_str[10000];
+    unsigned char key_str[10000];
+    unsigned char hash_str[10000];
+    unsigned char output[65];
+
+    memset(src_str, 0x00, 10000);
+    memset(key_str, 0x00, 10000);
+    memset(hash_str, 0x00, 10000);
+    memset(output, 0x00, 65);
+
+    int key_len = unhexify( key_str, {hex_key_string} );
+    int src_len = unhexify( src_str, {hex_src_string} );
+
+    sha2_hmac( key_str, key_len, src_str, src_len, output, 0 );
+    hexify( hash_str, output, 32 );
+
+    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+sha384_hmac:trunc_size:hex_key_string:hex_src_string:hex_hash_string
+{
+    unsigned char src_str[10000];
+    unsigned char key_str[10000];
+    unsigned char hash_str[10000];
+    unsigned char output[97];
+
+    memset(src_str, 0x00, 10000);
+    memset(key_str, 0x00, 10000);
+    memset(hash_str, 0x00, 10000);
+    memset(output, 0x00, 97);
+
+    int key_len = unhexify( key_str, {hex_key_string} );
+    int src_len = unhexify( src_str, {hex_src_string} );
+
+    sha4_hmac( key_str, key_len, src_str, src_len, output, 1 );
+    hexify( hash_str, output, 48 );
+
+    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+sha512_hmac:trunc_size:hex_key_string:hex_src_string:hex_hash_string
+{
+    unsigned char src_str[10000];
+    unsigned char key_str[10000];
+    unsigned char hash_str[10000];
+    unsigned char output[129];
+
+    memset(src_str, 0x00, 10000);
+    memset(key_str, 0x00, 10000);
+    memset(hash_str, 0x00, 10000);
+    memset(output, 0x00, 129);
+
+    int key_len = unhexify( key_str, {hex_key_string} );
+    int src_len = unhexify( src_str, {hex_src_string} );
+
+    sha4_hmac( key_str, key_len, src_str, src_len, output, 0 );
+    hexify( hash_str, output, 64 );
+
+    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+}
+END_CASE