Add RIPEMD-160 to the generic MD layer
diff --git a/library/md.c b/library/md.c
index af66756..291219d 100644
--- a/library/md.c
+++ b/library/md.c
@@ -55,6 +55,10 @@
POLARSSL_MD_MD5,
#endif
+#if defined(POLARSSL_RMD160_C)
+ POLARSSL_MD_RMD160,
+#endif
+
#if defined(POLARSSL_SHA1_C)
POLARSSL_MD_SHA1,
#endif
@@ -95,6 +99,10 @@
if( !strcasecmp( "MD5", md_name ) )
return md_info_from_type( POLARSSL_MD_MD5 );
#endif
+#if defined(POLARSSL_RMD160_C)
+ if( !strcasecmp( "RMD160", md_name ) )
+ return md_info_from_type( POLARSSL_MD_RMD160 );
+#endif
#if defined(POLARSSL_SHA1_C)
if( !strcasecmp( "SHA1", md_name ) || !strcasecmp( "SHA", md_name ) )
return md_info_from_type( POLARSSL_MD_SHA1 );
@@ -130,6 +138,10 @@
case POLARSSL_MD_MD5:
return &md5_info;
#endif
+#if defined(POLARSSL_RMD160_C)
+ case POLARSSL_MD_RMD160:
+ return &rmd160_info;
+#endif
#if defined(POLARSSL_SHA1_C)
case POLARSSL_MD_SHA1:
return &sha1_info;
diff --git a/library/md_wrap.c b/library/md_wrap.c
index 038b132..bc159ba 100644
--- a/library/md_wrap.c
+++ b/library/md_wrap.c
@@ -45,6 +45,10 @@
#include "polarssl/md5.h"
#endif
+#if defined(POLARSSL_RMD160_C)
+#include "polarssl/rmd160.h"
+#endif
+
#if defined(POLARSSL_SHA1_C)
#include "polarssl/sha1.h"
#endif
@@ -320,6 +324,90 @@
#endif
+#if defined(POLARSSL_RMD160_C)
+
+static void rmd160_starts_wrap( void *ctx )
+{
+ rmd160_starts( (rmd160_context *) ctx );
+}
+
+static void rmd160_update_wrap( void *ctx, const unsigned char *input, size_t ilen )
+{
+ rmd160_update( (rmd160_context *) ctx, input, ilen );
+}
+
+static void rmd160_finish_wrap( void *ctx, unsigned char *output )
+{
+ rmd160_finish( (rmd160_context *) ctx, output );
+}
+
+static int rmd160_file_wrap( const char *path, unsigned char *output )
+{
+#if defined(POLARSSL_FS_IO)
+ return rmd160_file( path, output );
+#else
+ ((void) path);
+ ((void) output);
+ return POLARSSL_ERR_MD_FEATURE_UNAVAILABLE;
+#endif
+}
+
+static void rmd160_hmac_starts_wrap( void *ctx, const unsigned char *key, size_t keylen )
+{
+ rmd160_hmac_starts( (rmd160_context *) ctx, key, keylen );
+}
+
+static void rmd160_hmac_update_wrap( void *ctx, const unsigned char *input, size_t ilen )
+{
+ rmd160_hmac_update( (rmd160_context *) ctx, input, ilen );
+}
+
+static void rmd160_hmac_finish_wrap( void *ctx, unsigned char *output )
+{
+ rmd160_hmac_finish( (rmd160_context *) ctx, output );
+}
+
+static void rmd160_hmac_reset_wrap( void *ctx )
+{
+ rmd160_hmac_reset( (rmd160_context *) ctx );
+}
+
+static void * rmd160_ctx_alloc( void )
+{
+ return polarssl_malloc( sizeof( rmd160_context ) );
+}
+
+static void rmd160_ctx_free( void *ctx )
+{
+ polarssl_free( ctx );
+}
+
+static void rmd160_process_wrap( void *ctx, const unsigned char *data )
+{
+ rmd160_process( (rmd160_context *) ctx, data );
+}
+
+const md_info_t rmd160_info = {
+ POLARSSL_MD_RMD160,
+ "RMD160",
+ 20,
+ rmd160_starts_wrap,
+ rmd160_update_wrap,
+ rmd160_finish_wrap,
+ rmd160,
+ rmd160_file_wrap,
+ rmd160_hmac_starts_wrap,
+ rmd160_hmac_update_wrap,
+ rmd160_hmac_finish_wrap,
+ rmd160_hmac_reset_wrap,
+ rmd160_hmac,
+ rmd160_ctx_alloc,
+ rmd160_ctx_free,
+ rmd160_process_wrap,
+};
+
+#endif
+
#if defined(POLARSSL_SHA1_C)
static void sha1_starts_wrap( void *ctx )
diff --git a/library/rmd160.c b/library/rmd160.c
index 515ed1c..5dadb3a 100644
--- a/library/rmd160.c
+++ b/library/rmd160.c
@@ -81,6 +81,9 @@
ctx->state[4] = 0xC3D2E1F0;
}
+/*
+ * Process one block
+ */
void rmd160_process( rmd160_context *ctx, const unsigned char data[64] )
{
uint32_t A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, X[16];