Add HMAC support to RIPEMD-160
diff --git a/tests/suites/test_suite_mdx.data b/tests/suites/test_suite_mdx.data
index 72325d4..869ae96 100644
--- a/tests/suites/test_suite_mdx.data
+++ b/tests/suites/test_suite_mdx.data
@@ -142,6 +142,27 @@
 HMAC-MD5 Bouncy Castle test #1
 md5_hmac:16:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":"4869205468657265":"5ccec34ea9656392457fa1ac27f08fbc"
 
+HMAC-RMD160 Test vector RFC 2286 #1
+rmd160_hmac:20:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":"4869205468657265":"24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668"
+
+HMAC-RMD160 Test vector RFC 2286 #2
+rmd160_hmac:20:"4a656665":"7768617420646f2079612077616e7420666f72206e6f7468696e673f":"dda6c0213a485a9e24f4742064a7f033b43c4069"
+
+HMAC-RMD160 Test vector RFC 2286 #3
+rmd160_hmac:20:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd":"b0b105360de759960ab4f35298e116e295d8e7c1"
+
+HMAC-RMD160 Test vector RFC 2286 #4
+rmd160_hmac:20:"0102030405060708090a0b0c0d0e0f10111213141516171819":"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd":"d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4"
+
+HMAC-RMD160 Test vector RFC 2286 #5
+rmd160_hmac:20:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":"546573742057697468205472756e636174696f6e":"7619693978f91d90539ae786500ff3d8e0518e39"
+
+HMAC-RMD160 Test vector RFC 2286 #6
+rmd160_hmac:20:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374":"6466ca07ac5eac29e1bd523e5ada7605b791fd8b"
+
+HMAC-RMD160 Test vector RFC 2286 #7
+rmd160_hmac:20:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d53697a652044617461":"69ea60798d71616cce5fd0871e23754cd75d5a0a"
+
 MD2 Hash file #1
 md2_file:"data_files/hash_file_1":"b593c098712d2e21628c8986695451a8"
 
diff --git a/tests/suites/test_suite_mdx.function b/tests/suites/test_suite_mdx.function
index 5c01056..6f43aac 100644
--- a/tests/suites/test_suite_mdx.function
+++ b/tests/suites/test_suite_mdx.function
@@ -160,6 +160,31 @@
 }
 /* END_CASE */
 
+/* BEGIN_CASE depends_on:POLARSSL_RMD160_C */
+void rmd160_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+                  char *hex_hash_string )
+{
+    unsigned char src_str[200];
+    unsigned char key_str[200];
+    unsigned char hash_str[41];
+    unsigned char output[20];
+    int key_len, src_len;
+
+    memset( src_str, 0x00, sizeof src_str );
+    memset( key_str, 0x00, sizeof key_str );
+    memset( hash_str, 0x00, sizeof hash_str );
+    memset( output, 0x00, sizeof output );
+
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
+
+    rmd160_hmac( key_str, key_len, src_str, src_len, output );
+    hexify( hash_str, output, sizeof  output );
+
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
+}
+/* END_CASE */
+
 /* BEGIN_CASE depends_on:POLARSSL_MD2_C:POLARSSL_FS_IO */
 void md2_file( char *filename, char *hex_hash_string )
 {