diff --git a/mongoose.c b/mongoose.c
index 2c17e7b7fd868f9b8b89256b27b42c9c9557562b..6e743303e3e3bddba4c0c6f7b990fe3597aa44f8 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -2190,7 +2190,7 @@ static void bin2str(char *to, const unsigned char *p, size_t len) {
 }
 
 // Return stringified MD5 hash for list of strings. Buffer must be 33 bytes.
-void mg_md5(char buf[33], ...) {
+char *mg_md5(char buf[33], ...) {
   unsigned char hash[16];
   const char *p;
   va_list ap;
@@ -2206,6 +2206,7 @@ void mg_md5(char buf[33], ...) {
 
   MD5Final(hash, &ctx);
   bin2str(buf, hash, sizeof(hash));
+  return buf;
 }
 
 // Check the user's password, return 1 if OK
diff --git a/mongoose.h b/mongoose.h
index ac4bf67173fa25e98858c04cfce4fb55f350775b..dee018b4f666d23b4593f426c4afcdca74417d48 100644
--- a/mongoose.h
+++ b/mongoose.h
@@ -340,7 +340,7 @@ const char *mg_version(void);
 // MD5 hash. Example:
 //   char buf[33];
 //   mg_md5(buf, "aa", "bb", NULL);
-void mg_md5(char buf[33], ...);
+char *mg_md5(char buf[33], ...);
 
 
 #ifdef __cplusplus