\section{\module{md5} ---
         MD5 message digest algorithm}

\declaremodule{builtin}{md5}
\modulesynopsis{RSA's MD5 message digest algorithm.}


This module implements the interface to RSA's MD5 message digest
\index{message digest, MD5}
algorithm (see also Internet \rfc{1321}).  Its use is quite
straightforward:\ use \function{new()} to create an md5 object.
You can now feed this object with arbitrary strings using the
\method{update()} method, and at any point you can ask it for the
\dfn{digest} (a strong kind of 128-bit checksum,
a.k.a. ``fingerprint'') of the concatenation of the strings fed to it
so far using the \method{digest()} method.
\index{checksum!MD5}

For example, to obtain the digest of the string \code{'Nobody inspects
the spammish repetition'}:

\begin{verbatim}
>>> import md5
>>> m = md5.new()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
\end{verbatim}

More condensed:

\begin{verbatim}
>>> md5.new("Nobody inspects the spammish repetition").digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
\end{verbatim}

The following values are provided as constants in the module and as
attributes of the md5 objects returned by \function{new()}:

\begin{datadesc}{digest_size}
  The size of the resulting digest in bytes.  This is always
  \code{16}.
\end{datadesc}

md5 objects support the following methods:

\begin{funcdesc}{new}{\optional{arg}}
Return a new md5 object.  If \var{arg} is present, the method call
\code{update(\var{arg})} is made.
\end{funcdesc}

\begin{funcdesc}{md5}{\optional{arg}}
For backward compatibility reasons, this is an alternative name for the
\function{new()} function.
\end{funcdesc}

An md5 object has the following methods:

\begin{methoddesc}[md5]{update}{arg}
Update the md5 object with the string \var{arg}.  Repeated calls are
equivalent to a single call with the concatenation of all the
arguments: \code{m.update(a); m.update(b)} is equivalent to
\code{m.update(a+b)}.
\end{methoddesc}

\begin{methoddesc}[md5]{digest}{}
Return the digest of the strings passed to the \method{update()}
method so far.  This is a 16-byte string which may contain
non-\ASCII{} characters, including null bytes.
\end{methoddesc}

\begin{methoddesc}[md5]{hexdigest}{}
Like \method{digest()} except the digest is returned as a string of
length 32, containing only hexadecimal digits.  This may 
be used to exchange the value safely in email or other non-binary
environments.
\end{methoddesc}

\begin{methoddesc}[md5]{copy}{}
Return a copy (``clone'') of the md5 object.  This can be used to
efficiently compute the digests of strings that share a common initial
substring.
\end{methoddesc}


\begin{seealso}
  \seemodule{sha}{Similar module implementing the Secure Hash
                  Algorithm (SHA).  The SHA algorithm is considered a
                  more secure hash.}
\end{seealso}
