\section{Built-in Module \sectcode{md5}}
\label{module-md5}
\bimodindex{md5}

This module implements the interface to RSA's MD5 message digest
algorithm (see also Internet RFC 1321).  Its use is quite
straightforward:\ use the \code{md5.new()} to create an md5 object.
You can now feed this object with arbitrary strings using the
\code{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 contatenation of the strings fed to it
so far using the \code{digest()} method.

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

\bcode\begin{verbatim}
>>> import md5
>>> m = md5.new()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\273d\234\203\335\036\245\311\331\336\311\241\215\360\377\351'
\end{verbatim}\ecode
%
More condensed:

\bcode\begin{verbatim}
>>> md5.new("Nobody inspects the spammish repetition").digest()
'\273d\234\203\335\036\245\311\331\336\311\241\215\360\377\351'
\end{verbatim}\ecode
%
\renewcommand{\indexsubitem}{(in module md5)}

\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
\code{new()} function.
\end{funcdesc}

An md5 object has the following methods:

\renewcommand{\indexsubitem}{(md5 method)}
\begin{funcdesc}{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, i.e.\ \code{m.update(a); m.update(b)} is equivalent to
\code{m.update(a+b)}.
\end{funcdesc}

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

\begin{funcdesc}{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{funcdesc}
