apache-md5-0.5.0.1: Apache specific MD5 digest algorighm.

Portabilitynon-portable (BangPatterns)
StabilityProvisional
MaintainerPeter Trško <peter.trsko@gmail.com>
Safe HaskellNone

Data.Digest.ApacheMD5

Contents

Description

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.

Synopsis

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.

apacheMD5'Source

Arguments

:: (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.

alpha64 :: ByteStringSource

Alphabet used by encode64.