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

This module implements the interface to RSA's MD5 message digest
algorithm (see also the file \file{md5.doc}). Its use is quite
straightforward: use the function \code{md5} to create an
\dfn{md5}-object. You can now ``feed'' this object with arbitrary
strings.

At any time you can ask for the ``final'' digest of the object. Internally,
a temporary copy of the object is made and the digest is computed and
returned. Because of the copy, the digest operation is not destructive
for the object. Before a more exact description of the module's use, a small
example will be helpful: 
to obtain the digest of the string \code{'abc'}, use \ldots

\bcode\begin{verbatim}
>>> import md5
>>> m = md5.new()
>>> m.update('abc')
>>> m.digest()
'\220\001P\230<\322O\260\326\226?}(\341\177r'
\end{verbatim}\ecode

More condensed:

\bcode\begin{verbatim}
>>> md5.new('abc').digest()
'\220\001P\230<\322O\260\326\226?}(\341\177r'
\end{verbatim}\ecode

\renewcommand{\indexsubitem}{(in module md5)}

\begin{funcdesc}{new}{\optional{arg}}
  Create a new md5-object. If \var{arg} is present, an initial
  \code{update} method is called with \var{arg} as argument.
\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 this md5-object with the string \var{arg}.
\end{funcdesc}

\begin{funcdesc}{digest}{}
% XXX The following is not quite clear; what does MD5Final do?
  Return the \dfn{digest} of this md5-object. Internally, a copy is made
  and the \C-function \code{MD5Final} is called. Finally the digest is
  returned.
\end{funcdesc}

\begin{funcdesc}{copy}{}
  Return a separate copy of this md5-object.  An \code{update} to this
  copy won't affect the original object.
\end{funcdesc}
