+#include <bindings.dsl.h>
+#include <apr_md4.h>
+
+module Bindings.APR.MD4 where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.XLate
+
+#num APR_MD4_DIGESTSIZE
+
+#starttype struct apr_md4_ctx_t
+# array_field state , <apr_uint32_t>
+# array_field count , <apr_uint32_t>
+# array_field buffer, CUChar
+# if APR_HAS_XLATE
+# field xlate, Ptr <apr_xlate_t>
+# endif
+#stoptype
+
+#ccall apr_md4_init , Ptr <apr_md4_ctx_t> -> IO <apr_status_t>
+#cinline apr_md4_set_xlate, Ptr <apr_md4_ctx_t> -> Ptr <apr_xlate_t> -> IO <apr_status_t>
+#ccall apr_md4_update , Ptr <apr_md4_ctx_t> -> Ptr CUChar -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_md4_final , Ptr CUChar -> Ptr <apr_md4_ctx_t> -> IO <apr_status_t>
+#ccall apr_md4 , Ptr CUChar -> Ptr CUChar -> <apr_size_t> -> IO <apr_status_t>