\section{md5.c File Reference}
\label{md5_8c}\index{md5.c@{md5.c}}
Implementation of the MD5 algorithm by Ron Rivest, code Colin Plumb (public domain). 


{\tt \#include $<$string.h$>$}\par
{\tt \#include \char`\"{}md5.h\char`\"{}}\par
\subsection*{Defines}
\begin{CompactItemize}
\item 
\#define {\bf byte\-Reverse}(buf, len)
\item 
\#define {\bf F1}(x, y, z)\ (z $^\wedge$ (x \& (y $^\wedge$ z)))
\item 
\#define {\bf F2}(x, y, z)\ F1(z, x, y)
\item 
\#define {\bf F3}(x, y, z)\ (x $^\wedge$ y $^\wedge$ z)
\item 
\#define {\bf F4}(x, y, z)\ (y $^\wedge$ (x $|$ $\sim$z))
\item 
\#define {\bf MD5STEP}(f, w, x, y, z, data, s)\ ( w += f(x, y, z) + data,  w = w$<$$<$s $|$ w$>$$>$(32-s),  w += x )
\end{CompactItemize}
\subsection*{Functions}
\begin{CompactItemize}
\item 
void {\bf MD5Init} (struct {\bf MD5Context} $\ast$ctx)
\item 
void {\bf MD5Update} (struct {\bf MD5Context} $\ast$ctx, unsigned char const $\ast$buf, unsigned len)
\item 
void {\bf MD5Final} (unsigned char digest[16], struct {\bf MD5Context} $\ast$ctx)
\item 
void {\bf MD5Transform} ({\bf uint32} buf[4], {\bf uint32} const in[16])
\end{CompactItemize}


\subsection{Detailed Description}
Implementation of the MD5 algorithm by Ron Rivest, code Colin Plumb (public domain).





\subsection{Define Documentation}
\index{md5.c@{md5.c}!byteReverse@{byteReverse}}
\index{byteReverse@{byteReverse}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define byte\-Reverse(buf, len)}\label{md5_8c_a0}


\index{md5.c@{md5.c}!F1@{F1}}
\index{F1@{F1}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define F1(x, y, z)\ (z $^\wedge$ (x \& (y $^\wedge$ z)))}\label{md5_8c_a1}


\index{md5.c@{md5.c}!F2@{F2}}
\index{F2@{F2}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define F2(x, y, z)\ F1(z, x, y)}\label{md5_8c_a2}


\index{md5.c@{md5.c}!F3@{F3}}
\index{F3@{F3}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define F3(x, y, z)\ (x $^\wedge$ y $^\wedge$ z)}\label{md5_8c_a3}


\index{md5.c@{md5.c}!F4@{F4}}
\index{F4@{F4}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define F4(x, y, z)\ (y $^\wedge$ (x $|$ $\sim$z))}\label{md5_8c_a4}


\index{md5.c@{md5.c}!MD5STEP@{MD5STEP}}
\index{MD5STEP@{MD5STEP}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define MD5STEP(f, w, x, y, z, data, s)\ ( w += f(x, y, z) + data,  w = w$<$$<$s $|$ w$>$$>$(32-s),  w += x )}\label{md5_8c_a5}




\subsection{Function Documentation}
\index{md5.c@{md5.c}!MD5Final@{MD5Final}}
\index{MD5Final@{MD5Final}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void MD5Final (unsigned char {\em digest}[16], struct {\bf MD5Context} $\ast$ {\em ctx})}\label{md5_8c_a8}


\index{md5.c@{md5.c}!MD5Init@{MD5Init}}
\index{MD5Init@{MD5Init}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void MD5Init (struct {\bf MD5Context} $\ast$ {\em ctx})}\label{md5_8c_a6}


\index{md5.c@{md5.c}!MD5Transform@{MD5Transform}}
\index{MD5Transform@{MD5Transform}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void MD5Transform ({\bf uint32} {\em buf}[4], {\bf uint32} const {\em in}[16])}\label{md5_8c_a9}


\index{md5.c@{md5.c}!MD5Update@{MD5Update}}
\index{MD5Update@{MD5Update}!md5.c@{md5.c}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void MD5Update (struct {\bf MD5Context} $\ast$ {\em ctx}, unsigned char const $\ast$ {\em buf}, unsigned {\em len})}\label{md5_8c_a7}


