Add RIPEMD-160 (core functions)
diff --git a/tests/suites/test_suite_mdx.data b/tests/suites/test_suite_mdx.data
index 8ad609e..0e2114e 100644
--- a/tests/suites/test_suite_mdx.data
+++ b/tests/suites/test_suite_mdx.data
@@ -82,6 +82,30 @@
 depends_on:POLARSSL_MD5_C
 md5_text:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":"57edf4a22be3c955ac49da2e2107b67a"
 
+rmd160 Test vector from paper #1
+rmd160_text:"":"9c1185a5c5e9fc54612808977ee8f548b2258d31"
+
+rmd160 Test vector from paper #2
+rmd160_text:"a":"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe"
+
+rmd160 Test vector from paper #3
+rmd160_text:"abc":"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc"
+
+rmd160 Test vector from paper #4
+rmd160_text:"message digest":"5d0689ef49d2fae572b881b123a85ffa21595f36"
+
+rmd160 Test vector from paper #5
+rmd160_text:"abcdefghijklmnopqrstuvwxyz":"f71c27109c692c1b56bbdceb5b9d2865b3708dbc"
+
+rmd160 Test vector from paper #6
+rmd160_text:"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":"12a053384a9c0c88e405a06c27dcf49ada62eb2b"
+
+rmd160 Test vector from paper #7
+rmd160_text:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":"b0e20b6e3116640286ed3a87a5713079b21f5189"
+
+rmd160 Test vector from paper #8
+rmd160_text:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":"9b752e45573d4b39f4dbd3323cab82bf63326bfb"
+
 HMAC-MD2 Hash File OpenSSL test #1
 depends_on:POLARSSL_MD2_C
 md2_hmac:16:"61616161616161616161616161616161":"b91ce5ac77d33c234e61002ed6":"d5732582f494f5ddf35efd166c85af9c"
@@ -206,6 +230,21 @@
 depends_on:POLARSSL_MD5_C
 md5_file:"data_files/hash_file_4":"d41d8cd98f00b204e9800998ecf8427e"
 
+RMD160 Hash file #0 (from paper)
+rmd160_file:"data_files/hash_file_5":"52783243c1697bdbe16d37f97f68f08325dc1528"
+
+RMD160 Hash file #1
+rmd160_file:"data_files/hash_file_1":"82f1d072f0ec0c2b353703a7b575a04c113af1a6"
+
+RMD160 Hash file #2
+rmd160_file:"data_files/hash_file_2":"996fbc8b79206ba7393ebcd246584069b1c08f0f"
+
+RMD160 Hash file #3
+rmd160_file:"data_files/hash_file_3":"8653b46d65998fa8c8846efa17937e742533ae48"
+
+RMD160 Hash file #4
+rmd160_file:"data_files/hash_file_4":"9c1185a5c5e9fc54612808977ee8f548b2258d31"
+
 MD2 Selftest
 depends_on:POLARSSL_MD2_C:POLARSSL_SELF_TEST
 md2_selftest:
@@ -217,3 +256,7 @@
 MD5 Selftest
 depends_on:POLARSSL_MD5_C:POLARSSL_SELF_TEST
 md5_selftest:
+
+RMD160 Selftest
+depends_on:POLARSSL_RMD160_C:POLARSSL_SELF_TEST
+rmd160_selftest:
diff --git a/tests/suites/test_suite_mdx.function b/tests/suites/test_suite_mdx.function
index e9a8347..b9db696 100644
--- a/tests/suites/test_suite_mdx.function
+++ b/tests/suites/test_suite_mdx.function
@@ -2,6 +2,7 @@
 #include <polarssl/md2.h>
 #include <polarssl/md4.h>
 #include <polarssl/md5.h>
+#include <polarssl/rmd160.h>
 /* END_HEADER */
 
 /* BEGIN_CASE depends_on:POLARSSL_MD2_C */
@@ -64,6 +65,26 @@
 }
 /* END_CASE */
 
+/* BEGIN_CASE depends_on:POLARSSL_RMD160_C */
+void rmd160_text( char *text_src_string, char *hex_hash_string )
+{
+    unsigned char src_str[1000];
+    unsigned char hash_str[41];
+    unsigned char output[20];
+
+    memset(src_str, 0x00, sizeof src_str);
+    memset(hash_str, 0x00, sizeof hash_str);
+    memset(output, 0x00, sizeof output);
+
+    strcpy( (char *) src_str, text_src_string );
+
+    rmd160( src_str, strlen( (char *) src_str ), output );
+    hexify( hash_str, output, sizeof output );
+
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
+}
+/* END_CASE */
+
 /* BEGIN_CASE depends_on:POLARSSL_MD2_C */
 void md2_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
                char *hex_hash_string )
@@ -187,6 +208,22 @@
 }
 /* END_CASE */
 
+/* BEGIN_CASE depends_on:POLARSSL_RMD160_C:POLARSSL_FS_IO */
+void rmd160_file( char *filename, char *hex_hash_string )
+{
+    unsigned char hash_str[41];
+    unsigned char output[20];
+
+    memset(hash_str, 0x00, sizeof hash_str );
+    memset(output, 0x00, sizeof output );
+
+    rmd160_file( filename, output);
+    hexify( hash_str, output, 20 );
+
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
+}
+/* END_CASE */
+
 /* BEGIN_CASE depends_on:POLARSSL_MD2_C:POLARSSL_SELF_TEST */
 void md2_selftest()
 {
@@ -207,3 +244,10 @@
     TEST_ASSERT( md5_self_test( 0 ) == 0 );
 }
 /* END_CASE */
+
+/* BEGIN_CASE depends_on:POLARSSL_RMD160_C:POLARSSL_SELF_TEST */
+void rmd160_selftest()
+{
+    TEST_ASSERT( rmd160_self_test( 0 ) == 0 );
+}
+/* END_CASE */