--- /dev/null
+#include <bindings.dsl.h>
+#include <apr_md5.h>
+
+module Bindings.APR.MD5 where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.XLate
+
+#num APR_MD5_DIGESTSIZE
+
+#starttype struct apr_md5_ctx_t
+# array_field state , <apr_uint32_t>
+# array_field count , <apr_uint32_t>
+# array_field buffer, CUChar
+# field xlate , Ptr <apr_xlate_t>
+#stoptype
+
+#ccall apr_md5_init , Ptr <apr_md5_ctx_t> -> IO <apr_status_t>
+#ccall apr_md5_set_xlate, Ptr <apr_md5_ctx_t> -> Ptr <apr_xlate_t> -> IO <apr_status_t>
+#ccall apr_md5_update , Ptr <apr_md5_ctx_t> -> Ptr () -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_md5_final , Ptr CUChar -> Ptr <apr_md5_ctx_t> -> IO <apr_status_t>
+#ccall apr_md5 , Ptr CUChar -> Ptr () -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_md5_encode , Ptr CChar -> Ptr CChar -> Ptr CChar -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_password_validate, Ptr CChar -> Ptr CChar -> IO <apr_status_t>