Portability | non-portable (BangPatterns) |
---|---|
Stability | Provisional |
Maintainer | Peter Trško <peter.trsko@gmail.com> |
Safe Haskell | None |
ApacheMD5 is one of the hash algorithms used by Apache HTTP server for basic authentication. It is Apache specific, but e.g. nginx supports this algorithm since version 1.0.3 http://wiki.nginx.org/HttpAuthBasicModule#auth_basic_user_file.
This is a naive implementation that doesn't aim for high speed, but to be
reasonably fast it uses MD5()
function from OpenSSL library so during
compilation you'll nead to have it installed including header files.
Many Linux distributions have separate dev packages for this.
- apacheMD5 :: ByteString -> ByteString -> ByteString
- apacheMD5' :: (ByteString -> ByteString) -> ByteString -> ByteString -> ByteString
- alpha64 :: ByteString
- encode64 :: ByteString -> ByteString
- md5DigestLength :: Int
Htpasswd
Apache comes with utility named htpasswd
that allows to create,
delete and update flat files normally named .htpasswd
that store pairs
of usernames and passwords. While both this utility and Apache support
more algorithms most of them rely on UNIX crypt()
function. ApacheMD5
is not one of them and therefore it is suitable for cross-platform
usage. See also htpasswd
documentation on
http://httpd.apache.org/docs/current/programs/htpasswd.html.
Example: Creating htpasswd-like entry
Output of this function is not identical to what htpasswd
does. To
create htpasswd
-like entry do:
import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as C8 (concat, pack, singleton) import Data.Digest.ApacheMD5 (apacheMD5) htpasswdEntry :: ByteString -> ByteString -> ByteString -> ByteString htpasswdEntry username password salt = C8.concat [ username , C8.pack ":$apr1$" , salt , C8.singleton '$' , apacheMD5 password salt ]
API Documentation
apacheMD5 :: ByteString -> ByteString -> ByteStringSource
Taking password and salt this function produces resulting ApacheMD5 hash which is already base 64 encoded.
:: (ByteString -> ByteString) | MD5 hash function. |
-> ByteString | Password |
-> ByteString | Salt |
-> ByteString | Apache MD5 Hash |
Raw Apache MD5 implementation that is parametrized by MD5 implementation and doesn't encode result in to base 64.
Alphabet used by encode64
.