\hypertarget{md5c_8c_source}{}\doxysection{md5c.\+c}
\label{md5c_8c_source}\index{kern/md5c.c@{kern/md5c.c}}
\mbox{\hyperlink{md5c_8c}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00001}00001 \textcolor{comment}{/*-\/}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00002}00002 \textcolor{comment}{ * MD5C.C -\/ RSA Data Security, Inc., MD5 message-\/digest algorithm}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00003}00003 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00004}00004 \textcolor{comment}{ * Copyright (C) 1991-\/2, RSA Data Security, Inc. Created 1991. All}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00005}00005 \textcolor{comment}{ * rights reserved.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00006}00006 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00007}00007 \textcolor{comment}{ * License to copy and use this software is granted provided that it}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00008}00008 \textcolor{comment}{ * is identified as the "{}RSA Data Security, Inc. MD5 Message-\/Digest}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00009}00009 \textcolor{comment}{ * Algorithm"{} in all material mentioning or referencing this software}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00010}00010 \textcolor{comment}{ * or this function.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00011}00011 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00012}00012 \textcolor{comment}{ * License is also granted to make and use derivative works provided}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00013}00013 \textcolor{comment}{ * that such works are identified as "{}derived from the RSA Data}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00014}00014 \textcolor{comment}{ * Security, Inc. MD5 Message-\/Digest Algorithm"{} in all material}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00015}00015 \textcolor{comment}{ * mentioning or referencing the derived work.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00016}00016 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00017}00017 \textcolor{comment}{ * RSA Data Security, Inc. makes no representations concerning either}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00018}00018 \textcolor{comment}{ * the merchantability of this software or the suitability of this}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00019}00019 \textcolor{comment}{ * software for any particular purpose. It is provided "{}as is"{}}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00020}00020 \textcolor{comment}{ * without express or implied warranty of any kind.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00021}00021 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00022}00022 \textcolor{comment}{ * These notices must be retained in any copies of any part of this}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00023}00023 \textcolor{comment}{ * documentation and/or software.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00024}00024 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00025}00025 \textcolor{comment}{ * This code is the same as the code published by RSA Inc.  It has been}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00026}00026 \textcolor{comment}{ * edited for clarity and style only.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00027}00027 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00028}00028 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00029}00029 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00030}00030 \textcolor{comment}{ * This file should be kept in sync with src/lib/libmd/md5c.c}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00031}00031 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00032}00032 \textcolor{preprocessor}{\#include <sys/cdefs.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00033}\mbox{\hyperlink{md5c_8c_a8c3ef283470a68cd30afe9b8a72cb60f}{00033}} \mbox{\hyperlink{md5c_8c_a8c3ef283470a68cd30afe9b8a72cb60f}{\_\_FBSDID}}(\textcolor{stringliteral}{"{}\$FreeBSD\$"{}});}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00034}00034 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00035}00035 \textcolor{preprocessor}{\#include <sys/types.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00036}00036 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00037}00037 \textcolor{preprocessor}{\#ifdef \_KERNEL}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00038}00038 \textcolor{preprocessor}{\#include <sys/systm.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00039}00039 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00040}00040 \textcolor{preprocessor}{\#include <string.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00041}00041 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00042}00042 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00043}00043 \textcolor{preprocessor}{\#include <machine/endian.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00044}00044 \textcolor{preprocessor}{\#include <sys/endian.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00045}00045 \textcolor{preprocessor}{\#include <sys/md5.h>}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00046}00046 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00047}\mbox{\hyperlink{md5c_8c_a515e45a4deb2b7cb7bc902fd81283173}{00047}} \textcolor{keyword}{static} \textcolor{keywordtype}{void} \mbox{\hyperlink{md5c_8c_a515e45a4deb2b7cb7bc902fd81283173}{MD5Transform}}(uint32\_t [4], \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} [64]);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00048}00048 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00049}00049 \textcolor{preprocessor}{\#if (BYTE\_ORDER == LITTLE\_ENDIAN)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00050}\mbox{\hyperlink{md5c_8c_a0d62978e58780635f8d595ad9a05f467}{00050}} \textcolor{preprocessor}{\#define Encode memcpy}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00051}\mbox{\hyperlink{md5c_8c_a255f9a384e3cac6b49faeb7c2e8df584}{00051}} \textcolor{preprocessor}{\#define Decode memcpy}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00052}00052 \textcolor{preprocessor}{\#else }}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00053}00053 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00054}00054 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00055}00055 \textcolor{comment}{ * Encodes input (uint32\_t) into output (unsigned char). Assumes len is}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00056}00056 \textcolor{comment}{ * a multiple of 4.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00057}00057 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00058}00058 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00059}00059 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00060}00060 \mbox{\hyperlink{md5c_8c_a0d62978e58780635f8d595ad9a05f467}{Encode}} (\textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *output, uint32\_t *input, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} len)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00061}00061 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00062}00062         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} i;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00063}00063         uint32\_t ip;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00064}00064 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00065}00065         \textcolor{keywordflow}{for} (i = 0; i < len / 4; i++) \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00066}00066                 ip = input[i];}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00067}00067                 *output++ = ip;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00068}00068                 *output++ = ip >> 8;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00069}00069                 *output++ = ip >> 16;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00070}00070                 *output++ = ip >> 24;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00071}00071         \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00072}00072 \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00073}00073 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00074}00074 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00075}00075 \textcolor{comment}{ * Decodes input (unsigned char) into output (uint32\_t). Assumes len is}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00076}00076 \textcolor{comment}{ * a multiple of 4.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00077}00077 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00078}00078 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00079}00079 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00080}00080 \mbox{\hyperlink{md5c_8c_a255f9a384e3cac6b49faeb7c2e8df584}{Decode}} (uint32\_t *output, \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *input, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} len)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00081}00081 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00082}00082         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} i;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00083}00083 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00084}00084         \textcolor{keywordflow}{for} (i = 0; i < len; i += 4) \{ }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00085}00085                 *output++ = input[i] | (input[i+1] << 8) | (input[i+2] << 16) |}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00086}00086                     (input[i+3] << 24);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00087}00087         \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00088}00088 \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00089}00089 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00090}00090 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00091}\mbox{\hyperlink{md5c_8c_aee6f420120b0fbc0fb096cb61655cec4}{00091}} \textcolor{keyword}{static} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \mbox{\hyperlink{md5c_8c_aee6f420120b0fbc0fb096cb61655cec4}{PADDING}}[64] = \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00092}00092   0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00093}00093   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00094}00094   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00095}00095 \};}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00096}00096 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00097}00097 \textcolor{comment}{/* F, G, H and I are basic MD5 functions. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00098}\mbox{\hyperlink{md5c_8c_a96d73bbd7af15cb1fc38c3f4a3bd82e9}{00098}} \textcolor{preprocessor}{\#define F(x, y, z) (((x) \& (y)) | ((\string~x) \& (z)))}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00099}\mbox{\hyperlink{md5c_8c_ad96b7cf3182ce2ba85e5a7a93b12c441}{00099}} \textcolor{preprocessor}{\#define G(x, y, z) (((x) \& (z)) | ((y) \& (\string~z)))}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00100}\mbox{\hyperlink{md5c_8c_ae42219072d798876e6b08e6b78614ff6}{00100}} \textcolor{preprocessor}{\#define H(x, y, z) ((x) \string^ (y) \string^ (z))}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00101}\mbox{\hyperlink{md5c_8c_ac0eafdc9ee161b71e7af98af736952fd}{00101}} \textcolor{preprocessor}{\#define I(x, y, z) ((y) \string^ ((x) | (\string~z)))}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00102}00102 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00103}00103 \textcolor{comment}{/* ROTATE\_LEFT rotates x left n bits. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00104}\mbox{\hyperlink{md5c_8c_a7417fd4e875360c0533fa5b412cdab49}{00104}} \textcolor{preprocessor}{\#define ROTATE\_LEFT(x, n) (((x) << (n)) | ((x) >> (32-\/(n))))}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00105}00105 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00106}00106 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00107}00107 \textcolor{comment}{ * FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00108}00108 \textcolor{comment}{ * Rotation is separate from addition to prevent recomputation.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00109}00109 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00110}\mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{00110}} \textcolor{preprocessor}{\#define FF(a, b, c, d, x, s, ac) \{ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00111}00111 \textcolor{preprocessor}{        (a) += F ((b), (c), (d)) + (x) + (uint32\_t)(ac); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00112}00112 \textcolor{preprocessor}{        (a) = ROTATE\_LEFT ((a), (s)); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00113}00113 \textcolor{preprocessor}{        (a) += (b); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00114}00114 \textcolor{preprocessor}{        \}}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00115}\mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{00115}} \textcolor{preprocessor}{\#define GG(a, b, c, d, x, s, ac) \{ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00116}00116 \textcolor{preprocessor}{        (a) += G ((b), (c), (d)) + (x) + (uint32\_t)(ac); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00117}00117 \textcolor{preprocessor}{        (a) = ROTATE\_LEFT ((a), (s)); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00118}00118 \textcolor{preprocessor}{        (a) += (b); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00119}00119 \textcolor{preprocessor}{        \}}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00120}\mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{00120}} \textcolor{preprocessor}{\#define HH(a, b, c, d, x, s, ac) \{ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00121}00121 \textcolor{preprocessor}{        (a) += H ((b), (c), (d)) + (x) + (uint32\_t)(ac); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00122}00122 \textcolor{preprocessor}{        (a) = ROTATE\_LEFT ((a), (s)); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00123}00123 \textcolor{preprocessor}{        (a) += (b); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00124}00124 \textcolor{preprocessor}{        \}}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00125}\mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{00125}} \textcolor{preprocessor}{\#define II(a, b, c, d, x, s, ac) \{ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00126}00126 \textcolor{preprocessor}{        (a) += I ((b), (c), (d)) + (x) + (uint32\_t)(ac); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00127}00127 \textcolor{preprocessor}{        (a) = ROTATE\_LEFT ((a), (s)); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00128}00128 \textcolor{preprocessor}{        (a) += (b); \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00129}00129 \textcolor{preprocessor}{        \}}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00130}00130 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00131}00131 \textcolor{comment}{/* MD5 initialization. Begins an MD5 operation, writing a new context. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00132}00132 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00133}00133 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00134}\mbox{\hyperlink{md5c_8c_a08e47999152d737f33fda2b8729c4f7c}{00134}} \mbox{\hyperlink{md5c_8c_a08e47999152d737f33fda2b8729c4f7c}{MD5Init}} (context)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00135}00135         MD5\_CTX *context;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00136}00136 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00137}00137 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00138}00138         context-\/>count[0] = context-\/>count[1] = 0;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00139}00139 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00140}00140         \textcolor{comment}{/* Load magic initialization constants.  */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00141}00141         context-\/>state[0] = 0x67452301;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00142}00142         context-\/>state[1] = 0xefcdab89;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00143}00143         context-\/>state[2] = 0x98badcfe;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00144}00144         context-\/>state[3] = 0x10325476;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00145}00145 \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00146}00146 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00147}00147 \textcolor{comment}{/* }}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00148}00148 \textcolor{comment}{ * MD5 block update operation. Continues an MD5 message-\/digest}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00149}00149 \textcolor{comment}{ * operation, processing another message block, and updating the}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00150}00150 \textcolor{comment}{ * context.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00151}00151 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00152}00152 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00153}00153 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00154}\mbox{\hyperlink{md5c_8c_a5bebd80cd124d846a4f0090ea4e756af}{00154}} \mbox{\hyperlink{md5c_8c_a5bebd80cd124d846a4f0090ea4e756af}{MD5Update}} (context, in, inputLen)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00155}00155         MD5\_CTX *context;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00156}00156         \textcolor{keyword}{const} \textcolor{keywordtype}{void} *in;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00157}00157         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} inputLen;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00158}00158 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00159}00159         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} i, index, partLen;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00160}00160         \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *input = in;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00161}00161 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00162}00162         \textcolor{comment}{/* Compute number of bytes mod 64 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00163}00163         index = (\textcolor{keywordtype}{unsigned} int)((context-\/>count[0] >> 3) \& 0x3F);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00164}00164 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00165}00165         \textcolor{comment}{/* Update number of bits */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00166}00166         \textcolor{keywordflow}{if} ((context-\/>count[0] += ((uint32\_t)inputLen << 3))}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00167}00167             < ((uint32\_t)inputLen << 3))}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00168}00168                 context-\/>count[1]++;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00169}00169         context-\/>count[1] += ((uint32\_t)inputLen >> 29);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00170}00170 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00171}00171         partLen = 64 -\/ index;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00172}00172 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00173}00173         \textcolor{comment}{/* Transform as many times as possible. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00174}00174         \textcolor{keywordflow}{if} (inputLen >= partLen) \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00175}00175                 memcpy((\textcolor{keywordtype}{void} *)\&context-\/>buffer[index], (\textcolor{keyword}{const} \textcolor{keywordtype}{void} *)input,}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00176}00176                     partLen);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00177}00177                 \mbox{\hyperlink{md5c_8c_a515e45a4deb2b7cb7bc902fd81283173}{MD5Transform}} (context-\/>state, context-\/>buffer);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00178}00178 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00179}00179                 \textcolor{keywordflow}{for} (i = partLen; i + 63 < inputLen; i += 64)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00180}00180                         \mbox{\hyperlink{md5c_8c_a515e45a4deb2b7cb7bc902fd81283173}{MD5Transform}} (context-\/>state, \&input[i]);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00181}00181 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00182}00182                 index = 0;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00183}00183         \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00184}00184         \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00185}00185                 i = 0;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00186}00186 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00187}00187         \textcolor{comment}{/* Buffer remaining input */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00188}00188         memcpy ((\textcolor{keywordtype}{void} *)\&context-\/>buffer[index], (\textcolor{keyword}{const} \textcolor{keywordtype}{void} *)\&input[i],}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00189}00189             inputLen-\/i);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00190}00190 \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00191}00191 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00192}00192 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00193}00193 \textcolor{comment}{ * MD5 padding. Adds padding followed by original length.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00194}00194 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00195}00195 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00196}00196 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00197}\mbox{\hyperlink{md5c_8c_a189a9933c3ab5517863c9efbfef12aee}{00197}} \mbox{\hyperlink{md5c_8c_a189a9933c3ab5517863c9efbfef12aee}{MD5Pad}} (MD5\_CTX *context)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00198}00198 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00199}00199         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} bits[8];}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00200}00200         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} index, padLen;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00201}00201 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00202}00202         \textcolor{comment}{/* Save number of bits */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00203}00203         \mbox{\hyperlink{md5c_8c_a0d62978e58780635f8d595ad9a05f467}{Encode}} (bits, context-\/>count, 8);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00204}00204 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00205}00205         \textcolor{comment}{/* Pad out to 56 mod 64. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00206}00206         index = (\textcolor{keywordtype}{unsigned} int)((context-\/>count[0] >> 3) \& 0x3f);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00207}00207         padLen = (index < 56) ? (56 -\/ index) : (120 -\/ index);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00208}00208         \mbox{\hyperlink{md5c_8c_a5bebd80cd124d846a4f0090ea4e756af}{MD5Update}} (context, \mbox{\hyperlink{md5c_8c_aee6f420120b0fbc0fb096cb61655cec4}{PADDING}}, padLen);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00209}00209 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00210}00210         \textcolor{comment}{/* Append length (before padding) */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00211}00211         \mbox{\hyperlink{md5c_8c_a5bebd80cd124d846a4f0090ea4e756af}{MD5Update}} (context, bits, 8);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00212}00212 \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00213}00213 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00214}00214 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00215}00215 \textcolor{comment}{ * MD5 finalization. Ends an MD5 message-\/digest operation, writing the}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00216}00216 \textcolor{comment}{ * the message digest and zeroizing the context.}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00217}00217 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00218}00218 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00219}00219 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00220}\mbox{\hyperlink{md5c_8c_a911e41e4b0a2d433e6fbb7d2d67a380e}{00220}} \mbox{\hyperlink{md5c_8c_a911e41e4b0a2d433e6fbb7d2d67a380e}{MD5Final}}(\textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} digest[\textcolor{keyword}{static} MD5\_DIGEST\_LENGTH], MD5\_CTX *context)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00221}00221 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00222}00222         \textcolor{comment}{/* Do padding. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00223}00223         \mbox{\hyperlink{md5c_8c_a189a9933c3ab5517863c9efbfef12aee}{MD5Pad}} (context);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00224}00224 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00225}00225         \textcolor{comment}{/* Store state in digest */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00226}00226         \mbox{\hyperlink{md5c_8c_a0d62978e58780635f8d595ad9a05f467}{Encode}} (digest, context-\/>state, MD5\_DIGEST\_LENGTH);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00227}00227 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00228}00228         \textcolor{comment}{/* Zeroize sensitive information. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00229}00229         memset (context, 0, \textcolor{keyword}{sizeof} (*context));}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00230}00230 \}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00231}00231 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00232}00232 \textcolor{comment}{/* MD5 basic transformation. Transforms state based on block. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00233}00233 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00234}00234 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00235}\mbox{\hyperlink{md5c_8c_a280c182a0ef65aaa657a98248dd2c2f3}{00235}} \mbox{\hyperlink{md5c_8c_a515e45a4deb2b7cb7bc902fd81283173}{MD5Transform}} (state, block)}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00236}00236         uint32\_t state[4];}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00237}00237         \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} block[64];}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00238}00238 \{}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00239}00239         uint32\_t a = state[0], b = state[1], c = state[2], d = state[3], x[16];}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00240}00240 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00241}00241         \mbox{\hyperlink{md5c_8c_a255f9a384e3cac6b49faeb7c2e8df584}{Decode}} (x, block, 64);}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00242}00242 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00243}00243         \textcolor{comment}{/* Round 1 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00244}00244 \textcolor{preprocessor}{\#define S11 7}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00245}00245 \textcolor{preprocessor}{\#define S12 12}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00246}00246 \textcolor{preprocessor}{\#define S13 17}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00247}00247 \textcolor{preprocessor}{\#define S14 22}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00248}00248         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (a, b, c, d, x[ 0], \mbox{\hyperlink{md5c_8c_a51398c0e5541164ad4d6615880073305}{S11}}, 0xd76aa478); \textcolor{comment}{/* 1 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00249}00249         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (d, a, b, c, x[ 1], \mbox{\hyperlink{md5c_8c_a1ec499cd0e54ecc28c2ac2afea5b038e}{S12}}, 0xe8c7b756); \textcolor{comment}{/* 2 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00250}00250         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (c, d, a, b, x[ 2], \mbox{\hyperlink{md5c_8c_aaeec90429105fb54d853dd4fc7027a54}{S13}}, 0x242070db); \textcolor{comment}{/* 3 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00251}00251         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (b, c, d, a, x[ 3], \mbox{\hyperlink{md5c_8c_a78342b0ccde2ed12fdf19a113cc266cf}{S14}}, 0xc1bdceee); \textcolor{comment}{/* 4 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00252}00252         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (a, b, c, d, x[ 4], \mbox{\hyperlink{md5c_8c_a51398c0e5541164ad4d6615880073305}{S11}}, 0xf57c0faf); \textcolor{comment}{/* 5 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00253}00253         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (d, a, b, c, x[ 5], \mbox{\hyperlink{md5c_8c_a1ec499cd0e54ecc28c2ac2afea5b038e}{S12}}, 0x4787c62a); \textcolor{comment}{/* 6 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00254}00254         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (c, d, a, b, x[ 6], \mbox{\hyperlink{md5c_8c_aaeec90429105fb54d853dd4fc7027a54}{S13}}, 0xa8304613); \textcolor{comment}{/* 7 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00255}00255         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (b, c, d, a, x[ 7], \mbox{\hyperlink{md5c_8c_a78342b0ccde2ed12fdf19a113cc266cf}{S14}}, 0xfd469501); \textcolor{comment}{/* 8 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00256}00256         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (a, b, c, d, x[ 8], \mbox{\hyperlink{md5c_8c_a51398c0e5541164ad4d6615880073305}{S11}}, 0x698098d8); \textcolor{comment}{/* 9 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00257}00257         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (d, a, b, c, x[ 9], \mbox{\hyperlink{md5c_8c_a1ec499cd0e54ecc28c2ac2afea5b038e}{S12}}, 0x8b44f7af); \textcolor{comment}{/* 10 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00258}00258         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (c, d, a, b, x[10], \mbox{\hyperlink{md5c_8c_aaeec90429105fb54d853dd4fc7027a54}{S13}}, 0xffff5bb1); \textcolor{comment}{/* 11 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00259}00259         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (b, c, d, a, x[11], \mbox{\hyperlink{md5c_8c_a78342b0ccde2ed12fdf19a113cc266cf}{S14}}, 0x895cd7be); \textcolor{comment}{/* 12 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00260}00260         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (a, b, c, d, x[12], \mbox{\hyperlink{md5c_8c_a51398c0e5541164ad4d6615880073305}{S11}}, 0x6b901122); \textcolor{comment}{/* 13 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00261}00261         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (d, a, b, c, x[13], \mbox{\hyperlink{md5c_8c_a1ec499cd0e54ecc28c2ac2afea5b038e}{S12}}, 0xfd987193); \textcolor{comment}{/* 14 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00262}00262         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (c, d, a, b, x[14], \mbox{\hyperlink{md5c_8c_aaeec90429105fb54d853dd4fc7027a54}{S13}}, 0xa679438e); \textcolor{comment}{/* 15 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00263}00263         \mbox{\hyperlink{md5c_8c_a0a143972cb6c4fe16f0ffa8a3d41ebf3}{FF}} (b, c, d, a, x[15], \mbox{\hyperlink{md5c_8c_a78342b0ccde2ed12fdf19a113cc266cf}{S14}}, 0x49b40821); \textcolor{comment}{/* 16 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00264}00264 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00265}00265         \textcolor{comment}{/* Round 2 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00266}00266 \textcolor{preprocessor}{\#define S21 5}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00267}00267 \textcolor{preprocessor}{\#define S22 9}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00268}00268 \textcolor{preprocessor}{\#define S23 14}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00269}00269 \textcolor{preprocessor}{\#define S24 20}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00270}00270         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (a, b, c, d, x[ 1], \mbox{\hyperlink{md5c_8c_ab6d5354f647a0e7592a1f051fc8377b2}{S21}}, 0xf61e2562); \textcolor{comment}{/* 17 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00271}00271         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (d, a, b, c, x[ 6], \mbox{\hyperlink{md5c_8c_addad30455da936bc1879ee9c72b46d59}{S22}}, 0xc040b340); \textcolor{comment}{/* 18 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00272}00272         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (c, d, a, b, x[11], \mbox{\hyperlink{md5c_8c_a6321a8b29628936f76e9e78cf5bda95f}{S23}}, 0x265e5a51); \textcolor{comment}{/* 19 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00273}00273         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (b, c, d, a, x[ 0], \mbox{\hyperlink{md5c_8c_a0c09eb77d30a0d5f9154914147b86c20}{S24}}, 0xe9b6c7aa); \textcolor{comment}{/* 20 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00274}00274         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (a, b, c, d, x[ 5], \mbox{\hyperlink{md5c_8c_ab6d5354f647a0e7592a1f051fc8377b2}{S21}}, 0xd62f105d); \textcolor{comment}{/* 21 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00275}00275         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (d, a, b, c, x[10], \mbox{\hyperlink{md5c_8c_addad30455da936bc1879ee9c72b46d59}{S22}},  0x2441453); \textcolor{comment}{/* 22 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00276}00276         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (c, d, a, b, x[15], \mbox{\hyperlink{md5c_8c_a6321a8b29628936f76e9e78cf5bda95f}{S23}}, 0xd8a1e681); \textcolor{comment}{/* 23 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00277}00277         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (b, c, d, a, x[ 4], \mbox{\hyperlink{md5c_8c_a0c09eb77d30a0d5f9154914147b86c20}{S24}}, 0xe7d3fbc8); \textcolor{comment}{/* 24 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00278}00278         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (a, b, c, d, x[ 9], \mbox{\hyperlink{md5c_8c_ab6d5354f647a0e7592a1f051fc8377b2}{S21}}, 0x21e1cde6); \textcolor{comment}{/* 25 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00279}00279         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (d, a, b, c, x[14], \mbox{\hyperlink{md5c_8c_addad30455da936bc1879ee9c72b46d59}{S22}}, 0xc33707d6); \textcolor{comment}{/* 26 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00280}00280         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (c, d, a, b, x[ 3], \mbox{\hyperlink{md5c_8c_a6321a8b29628936f76e9e78cf5bda95f}{S23}}, 0xf4d50d87); \textcolor{comment}{/* 27 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00281}00281         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (b, c, d, a, x[ 8], \mbox{\hyperlink{md5c_8c_a0c09eb77d30a0d5f9154914147b86c20}{S24}}, 0x455a14ed); \textcolor{comment}{/* 28 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00282}00282         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (a, b, c, d, x[13], \mbox{\hyperlink{md5c_8c_ab6d5354f647a0e7592a1f051fc8377b2}{S21}}, 0xa9e3e905); \textcolor{comment}{/* 29 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00283}00283         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (d, a, b, c, x[ 2], \mbox{\hyperlink{md5c_8c_addad30455da936bc1879ee9c72b46d59}{S22}}, 0xfcefa3f8); \textcolor{comment}{/* 30 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00284}00284         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (c, d, a, b, x[ 7], \mbox{\hyperlink{md5c_8c_a6321a8b29628936f76e9e78cf5bda95f}{S23}}, 0x676f02d9); \textcolor{comment}{/* 31 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00285}00285         \mbox{\hyperlink{md5c_8c_a685f32faa2a66e743850b990a13b8bfa}{GG}} (b, c, d, a, x[12], \mbox{\hyperlink{md5c_8c_a0c09eb77d30a0d5f9154914147b86c20}{S24}}, 0x8d2a4c8a); \textcolor{comment}{/* 32 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00286}00286 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00287}00287         \textcolor{comment}{/* Round 3 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00288}00288 \textcolor{preprocessor}{\#define S31 4}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00289}00289 \textcolor{preprocessor}{\#define S32 11}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00290}00290 \textcolor{preprocessor}{\#define S33 16}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00291}00291 \textcolor{preprocessor}{\#define S34 23}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00292}00292         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (a, b, c, d, x[ 5], \mbox{\hyperlink{md5c_8c_aef26590f8a880ee6f4a158168defcd89}{S31}}, 0xfffa3942); \textcolor{comment}{/* 33 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00293}00293         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (d, a, b, c, x[ 8], \mbox{\hyperlink{md5c_8c_a1d512424dd8a91e0a5bcc98563f33914}{S32}}, 0x8771f681); \textcolor{comment}{/* 34 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00294}00294         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (c, d, a, b, x[11], \mbox{\hyperlink{md5c_8c_a1c854214533f6220e859b0063196abb3}{S33}}, 0x6d9d6122); \textcolor{comment}{/* 35 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00295}00295         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (b, c, d, a, x[14], \mbox{\hyperlink{md5c_8c_af6472be1d535970afee8e5266a74aa07}{S34}}, 0xfde5380c); \textcolor{comment}{/* 36 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00296}00296         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (a, b, c, d, x[ 1], \mbox{\hyperlink{md5c_8c_aef26590f8a880ee6f4a158168defcd89}{S31}}, 0xa4beea44); \textcolor{comment}{/* 37 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00297}00297         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (d, a, b, c, x[ 4], \mbox{\hyperlink{md5c_8c_a1d512424dd8a91e0a5bcc98563f33914}{S32}}, 0x4bdecfa9); \textcolor{comment}{/* 38 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00298}00298         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (c, d, a, b, x[ 7], \mbox{\hyperlink{md5c_8c_a1c854214533f6220e859b0063196abb3}{S33}}, 0xf6bb4b60); \textcolor{comment}{/* 39 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00299}00299         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (b, c, d, a, x[10], \mbox{\hyperlink{md5c_8c_af6472be1d535970afee8e5266a74aa07}{S34}}, 0xbebfbc70); \textcolor{comment}{/* 40 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00300}00300         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (a, b, c, d, x[13], \mbox{\hyperlink{md5c_8c_aef26590f8a880ee6f4a158168defcd89}{S31}}, 0x289b7ec6); \textcolor{comment}{/* 41 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00301}00301         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (d, a, b, c, x[ 0], \mbox{\hyperlink{md5c_8c_a1d512424dd8a91e0a5bcc98563f33914}{S32}}, 0xeaa127fa); \textcolor{comment}{/* 42 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00302}00302         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (c, d, a, b, x[ 3], \mbox{\hyperlink{md5c_8c_a1c854214533f6220e859b0063196abb3}{S33}}, 0xd4ef3085); \textcolor{comment}{/* 43 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00303}00303         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (b, c, d, a, x[ 6], \mbox{\hyperlink{md5c_8c_af6472be1d535970afee8e5266a74aa07}{S34}},  0x4881d05); \textcolor{comment}{/* 44 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00304}00304         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (a, b, c, d, x[ 9], \mbox{\hyperlink{md5c_8c_aef26590f8a880ee6f4a158168defcd89}{S31}}, 0xd9d4d039); \textcolor{comment}{/* 45 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00305}00305         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (d, a, b, c, x[12], \mbox{\hyperlink{md5c_8c_a1d512424dd8a91e0a5bcc98563f33914}{S32}}, 0xe6db99e5); \textcolor{comment}{/* 46 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00306}00306         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (c, d, a, b, x[15], \mbox{\hyperlink{md5c_8c_a1c854214533f6220e859b0063196abb3}{S33}}, 0x1fa27cf8); \textcolor{comment}{/* 47 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00307}00307         \mbox{\hyperlink{md5c_8c_a8b9f1c4778df01ef970b87dbe5541dc5}{HH}} (b, c, d, a, x[ 2], \mbox{\hyperlink{md5c_8c_af6472be1d535970afee8e5266a74aa07}{S34}}, 0xc4ac5665); \textcolor{comment}{/* 48 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00308}00308 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00309}00309         \textcolor{comment}{/* Round 4 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00310}00310 \textcolor{preprocessor}{\#define S41 6}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00311}00311 \textcolor{preprocessor}{\#define S42 10}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00312}00312 \textcolor{preprocessor}{\#define S43 15}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00313}00313 \textcolor{preprocessor}{\#define S44 21}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00314}00314         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (a, b, c, d, x[ 0], \mbox{\hyperlink{md5c_8c_ab674ba129e588da55d1d494e1cf3c15e}{S41}}, 0xf4292244); \textcolor{comment}{/* 49 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00315}00315         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (d, a, b, c, x[ 7], \mbox{\hyperlink{md5c_8c_a268ef1a49114a94b931cc6b313e3cd1b}{S42}}, 0x432aff97); \textcolor{comment}{/* 50 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00316}00316         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (c, d, a, b, x[14], \mbox{\hyperlink{md5c_8c_a5aaa7121f39650d472746942ca68f959}{S43}}, 0xab9423a7); \textcolor{comment}{/* 51 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00317}00317         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (b, c, d, a, x[ 5], \mbox{\hyperlink{md5c_8c_a6a3989af72b55d169bd73a66f8620aae}{S44}}, 0xfc93a039); \textcolor{comment}{/* 52 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00318}00318         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (a, b, c, d, x[12], \mbox{\hyperlink{md5c_8c_ab674ba129e588da55d1d494e1cf3c15e}{S41}}, 0x655b59c3); \textcolor{comment}{/* 53 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00319}00319         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (d, a, b, c, x[ 3], \mbox{\hyperlink{md5c_8c_a268ef1a49114a94b931cc6b313e3cd1b}{S42}}, 0x8f0ccc92); \textcolor{comment}{/* 54 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00320}00320         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (c, d, a, b, x[10], \mbox{\hyperlink{md5c_8c_a5aaa7121f39650d472746942ca68f959}{S43}}, 0xffeff47d); \textcolor{comment}{/* 55 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00321}00321         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (b, c, d, a, x[ 1], \mbox{\hyperlink{md5c_8c_a6a3989af72b55d169bd73a66f8620aae}{S44}}, 0x85845dd1); \textcolor{comment}{/* 56 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00322}00322         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (a, b, c, d, x[ 8], \mbox{\hyperlink{md5c_8c_ab674ba129e588da55d1d494e1cf3c15e}{S41}}, 0x6fa87e4f); \textcolor{comment}{/* 57 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00323}00323         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (d, a, b, c, x[15], \mbox{\hyperlink{md5c_8c_a268ef1a49114a94b931cc6b313e3cd1b}{S42}}, 0xfe2ce6e0); \textcolor{comment}{/* 58 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00324}00324         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (c, d, a, b, x[ 6], \mbox{\hyperlink{md5c_8c_a5aaa7121f39650d472746942ca68f959}{S43}}, 0xa3014314); \textcolor{comment}{/* 59 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00325}00325         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (b, c, d, a, x[13], \mbox{\hyperlink{md5c_8c_a6a3989af72b55d169bd73a66f8620aae}{S44}}, 0x4e0811a1); \textcolor{comment}{/* 60 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00326}00326         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (a, b, c, d, x[ 4], \mbox{\hyperlink{md5c_8c_ab674ba129e588da55d1d494e1cf3c15e}{S41}}, 0xf7537e82); \textcolor{comment}{/* 61 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00327}00327         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (d, a, b, c, x[11], \mbox{\hyperlink{md5c_8c_a268ef1a49114a94b931cc6b313e3cd1b}{S42}}, 0xbd3af235); \textcolor{comment}{/* 62 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00328}00328         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (c, d, a, b, x[ 2], \mbox{\hyperlink{md5c_8c_a5aaa7121f39650d472746942ca68f959}{S43}}, 0x2ad7d2bb); \textcolor{comment}{/* 63 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00329}00329         \mbox{\hyperlink{md5c_8c_ad26626e5efb37b2dadef4e88e35e4329}{II}} (b, c, d, a, x[ 9], \mbox{\hyperlink{md5c_8c_a6a3989af72b55d169bd73a66f8620aae}{S44}}, 0xeb86d391); \textcolor{comment}{/* 64 */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00330}00330 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00331}00331         state[0] += a;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00332}00332         state[1] += b;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00333}00333         state[2] += c;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00334}00334         state[3] += d;}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00335}00335 }
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00336}00336         \textcolor{comment}{/* Zeroize sensitive information. */}}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00337}00337         memset ((\textcolor{keywordtype}{void} *)x, 0, \textcolor{keyword}{sizeof} (x));}
\DoxyCodeLine{\Hypertarget{md5c_8c_source_l00338}00338 \}}

\end{DoxyCode}
