the alignment of resbuf is not guaranteed, so use memcpy to move
the bytes in/out.  on arches which can do unaligned accesses, this
will generate the same code.

patch by Mike Frysinger

--- a/md5.c
+++ b/md5.c
@@ -74,10 +74,13 @@ md5_read_ctx (ctx, resbuf)
      const struct md5_ctx *ctx;
      void *resbuf;
 {
-  ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
-  ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
-  ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
-  ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
+  md5_uint32 swap;
+#define set(i, c) { swap = SWAP (ctx->c); memcpy (resbuf + (i * 4), &swap, 4); }
+  set (0, A);
+  set (1, B);
+  set (2, C);
+  set (3, D);
+#undef set
 
   return resbuf;
 }
