src/network/md5.cpp File Reference

#include "md5.h"
#include <string>
#include <memory>
#include <string.h>

Include dependency graph for md5.cpp:

Go to the source code of this file.

Defines

#define T_MASK   ((md5_word_t)~0)
#define T1   /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
#define T2   /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
#define T3   0x242070db
#define T4   /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
#define T5   /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
#define T6   0x4787c62a
#define T7   /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
#define T8   /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
#define T9   0x698098d8
#define T10   /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
#define T11   /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
#define T12   /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
#define T13   0x6b901122
#define T14   /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
#define T15   /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
#define T16   0x49b40821
#define T17   /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
#define T18   /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
#define T19   0x265e5a51
#define T20   /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
#define T21   /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
#define T22   0x02441453
#define T23   /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
#define T24   /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
#define T25   0x21e1cde6
#define T26   /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
#define T27   /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
#define T28   0x455a14ed
#define T29   /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
#define T30   /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
#define T31   0x676f02d9
#define T32   /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
#define T33   /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
#define T34   /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
#define T35   0x6d9d6122
#define T36   /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
#define T37   /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
#define T38   0x4bdecfa9
#define T39   /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
#define T40   /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
#define T41   0x289b7ec6
#define T42   /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
#define T43   /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
#define T44   0x04881d05
#define T45   /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
#define T46   /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
#define T47   0x1fa27cf8
#define T48   /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
#define T49   /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
#define T50   0x432aff97
#define T51   /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
#define T52   /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
#define T53   0x655b59c3
#define T54   /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
#define T55   /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
#define T56   /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
#define T57   0x6fa87e4f
#define T58   /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
#define T59   /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
#define T60   0x4e0811a1
#define T61   /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
#define T62   /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
#define T63   0x2ad7d2bb
#define T64   /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
#define ARCH_IS_BIG_ENDIAN   1
#define ROTATE_LEFT(x, n)   (((x) << (n)) | ((x) >> (32 - (n))))
#define F(x, y, z)   (((x) & (y)) | (~(x) & (z)))
#define SET(a, b, c, d, k, s, Ti)
#define G(x, y, z)   (((x) & (z)) | ((y) & ~(z)))
#define SET(a, b, c, d, k, s, Ti)
#define H(x, y, z)   ((x) ^ (y) ^ (z))
#define SET(a, b, c, d, k, s, Ti)
#define I(x, y, z)   ((y) ^ ((x) | ~(z)))
#define SET(a, b, c, d, k, s, Ti)

Functions

static void md5_process (md5_state_t *pms, const md5_byte_t *data)
void md5_init (md5_state_t *pms)
void md5_append (md5_state_t *pms, const md5_byte_t *data, int nbytes)
void md5_finish (md5_state_t *pms, md5_byte_t digest[16])


Define Documentation

#define ARCH_IS_BIG_ENDIAN   1

#define F ( x,
y,
z   )     (((x) & (y)) | (~(x) & (z)))

Referenced by gCycleMovement::DistanceToDestination(), eGrid::DrawLine(), vValue::Expr::Bindings::CFunction::fBinary< T, Aa, Ab, F >::GetValue(), vValue::Expr::Bindings::CFunction::fUnary< T, Aa, F >::GetValue(), vValue::Expr::Bindings::CFunction::fZeroary< T, F >::GetValue(), and eHalfEdge::Simplify().

#define G ( x,
y,
z   )     (((x) & (z)) | ((y) & ~(z)))

Referenced by eGrid::DrawLine(), ePlayer::ePlayer(), gAIPlayer::gAIPlayer(), gTextureCycle::OnSelect(), gTextureCycle::ProcessImage(), se_MakeColorValid(), and sg_PlayerMenu().

#define H ( x,
y,
z   )     ((x) ^ (y) ^ (z))

Referenced by rConsole::Render(), and gNetPlayerWall::RenderBegin().

#define I ( x,
y,
z   )     ((y) ^ ((x) | ~(z)))

#define ROTATE_LEFT ( x,
 )     (((x) << (n)) | ((x) >> (32 - (n))))

#define SET ( a,
b,
c,
d,
k,
s,
Ti   ) 

Value:

t = a + I(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b

#define SET ( a,
b,
c,
d,
k,
s,
Ti   ) 

Value:

t = a + H(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b

#define SET ( a,
b,
c,
d,
k,
s,
Ti   ) 

Value:

t = a + G(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b

#define SET ( a,
b,
c,
d,
k,
s,
Ti   ) 

Value:

t = a + F(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b

Referenced by md5_process().

#define T1   /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)

Definition at line 153 of file md5.cpp.

Referenced by md5_process().

#define T10   /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)

Definition at line 162 of file md5.cpp.

Referenced by md5_process().

#define T11   /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)

Definition at line 163 of file md5.cpp.

Referenced by md5_process().

#define T12   /* 0x895cd7be */ (T_MASK ^ 0x76a32841)

Definition at line 164 of file md5.cpp.

Referenced by md5_process().

#define T13   0x6b901122

Definition at line 165 of file md5.cpp.

Referenced by md5_process().

#define T14   /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)

Definition at line 166 of file md5.cpp.

Referenced by md5_process().

#define T15   /* 0xa679438e */ (T_MASK ^ 0x5986bc71)

Definition at line 167 of file md5.cpp.

Referenced by md5_process().

#define T16   0x49b40821

Definition at line 168 of file md5.cpp.

Referenced by md5_process().

#define T17   /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)

Definition at line 169 of file md5.cpp.

Referenced by md5_process().

#define T18   /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)

Definition at line 170 of file md5.cpp.

Referenced by md5_process().

#define T19   0x265e5a51

Definition at line 171 of file md5.cpp.

Referenced by md5_process().

#define T2   /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)

Definition at line 154 of file md5.cpp.

Referenced by md5_process().

#define T20   /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)

Definition at line 172 of file md5.cpp.

Referenced by md5_process().

#define T21   /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)

Definition at line 173 of file md5.cpp.

Referenced by md5_process().

#define T22   0x02441453

Definition at line 174 of file md5.cpp.

Referenced by md5_process().

#define T23   /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)

Definition at line 175 of file md5.cpp.

Referenced by md5_process().

#define T24   /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)

Definition at line 176 of file md5.cpp.

Referenced by md5_process().

#define T25   0x21e1cde6

Definition at line 177 of file md5.cpp.

Referenced by md5_process().

#define T26   /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)

Definition at line 178 of file md5.cpp.

Referenced by md5_process().

#define T27   /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)

Definition at line 179 of file md5.cpp.

Referenced by md5_process().

#define T28   0x455a14ed

Definition at line 180 of file md5.cpp.

Referenced by md5_process().

#define T29   /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)

Definition at line 181 of file md5.cpp.

Referenced by md5_process().

#define T3   0x242070db

Definition at line 155 of file md5.cpp.

Referenced by md5_process().

#define T30   /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)

Definition at line 182 of file md5.cpp.

Referenced by md5_process().

#define T31   0x676f02d9

Definition at line 183 of file md5.cpp.

Referenced by md5_process().

#define T32   /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)

Definition at line 184 of file md5.cpp.

Referenced by md5_process().

#define T33   /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)

Definition at line 185 of file md5.cpp.

Referenced by md5_process().

#define T34   /* 0x8771f681 */ (T_MASK ^ 0x788e097e)

Definition at line 186 of file md5.cpp.

Referenced by md5_process().

#define T35   0x6d9d6122

Definition at line 187 of file md5.cpp.

Referenced by md5_process().

#define T36   /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)

Definition at line 188 of file md5.cpp.

Referenced by md5_process().

#define T37   /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)

Definition at line 189 of file md5.cpp.

Referenced by md5_process().

#define T38   0x4bdecfa9

Definition at line 190 of file md5.cpp.

Referenced by md5_process().

#define T39   /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)

Definition at line 191 of file md5.cpp.

Referenced by md5_process().

#define T4   /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)

Definition at line 156 of file md5.cpp.

Referenced by md5_process().

#define T40   /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)

Definition at line 192 of file md5.cpp.

Referenced by md5_process().

#define T41   0x289b7ec6

Definition at line 193 of file md5.cpp.

Referenced by md5_process().

#define T42   /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)

Definition at line 194 of file md5.cpp.

Referenced by md5_process().

#define T43   /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)

Definition at line 195 of file md5.cpp.

Referenced by md5_process().

#define T44   0x04881d05

Definition at line 196 of file md5.cpp.

Referenced by md5_process().

#define T45   /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)

Definition at line 197 of file md5.cpp.

Referenced by md5_process().

#define T46   /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)

Definition at line 198 of file md5.cpp.

Referenced by md5_process().

#define T47   0x1fa27cf8

Definition at line 199 of file md5.cpp.

Referenced by md5_process().

#define T48   /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)

Definition at line 200 of file md5.cpp.

Referenced by md5_process().

#define T49   /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)

Definition at line 201 of file md5.cpp.

Referenced by md5_process().

#define T5   /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)

Definition at line 157 of file md5.cpp.

Referenced by md5_process().

#define T50   0x432aff97

Definition at line 202 of file md5.cpp.

Referenced by md5_process().

#define T51   /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)

Definition at line 203 of file md5.cpp.

Referenced by md5_process().

#define T52   /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)

Definition at line 204 of file md5.cpp.

Referenced by md5_process().

#define T53   0x655b59c3

Definition at line 205 of file md5.cpp.

Referenced by md5_process().

#define T54   /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)

Definition at line 206 of file md5.cpp.

Referenced by md5_process().

#define T55   /* 0xffeff47d */ (T_MASK ^ 0x00100b82)

Definition at line 207 of file md5.cpp.

Referenced by md5_process().

#define T56   /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)

Definition at line 208 of file md5.cpp.

Referenced by md5_process().

#define T57   0x6fa87e4f

Definition at line 209 of file md5.cpp.

Referenced by md5_process().

#define T58   /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)

Definition at line 210 of file md5.cpp.

Referenced by md5_process().

#define T59   /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)

Definition at line 211 of file md5.cpp.

Referenced by md5_process().

#define T6   0x4787c62a

Definition at line 158 of file md5.cpp.

Referenced by md5_process().

#define T60   0x4e0811a1

Definition at line 212 of file md5.cpp.

Referenced by md5_process().

#define T61   /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)

Definition at line 213 of file md5.cpp.

Referenced by md5_process().

#define T62   /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)

Definition at line 214 of file md5.cpp.

Referenced by md5_process().

#define T63   0x2ad7d2bb

Definition at line 215 of file md5.cpp.

Referenced by md5_process().

#define T64   /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)

Definition at line 216 of file md5.cpp.

Referenced by md5_process().

#define T7   /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)

Definition at line 159 of file md5.cpp.

Referenced by md5_process().

#define T8   /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)

Definition at line 160 of file md5.cpp.

Referenced by md5_process().

#define T9   0x698098d8

Definition at line 161 of file md5.cpp.

Referenced by md5_process().

#define T_MASK   ((md5_word_t)~0)

Definition at line 152 of file md5.cpp.

Referenced by md5_init().


Function Documentation

void md5_append ( md5_state_t pms,
const md5_byte_t data,
int  nbytes 
)

Definition at line 387 of file md5.cpp.

References md5_state_s::buf, md5_state_s::count, and md5_process().

Referenced by nKrawall::BrokenScramblePassword(), md5_finish(), nKrawall::ScramblePassword(), and nKrawall::ScrambleWithSalt2().

00390 {
00391     const md5_byte_t *p = data;
00392     int left = nbytes;
00393     int offset = (pms->count[0] >> 3) & 63;
00394     md5_word_t nbits = (md5_word_t)(nbytes << 3);
00395 
00396     if (nbytes <= 0)
00397         return;
00398 
00399     /* Update the message length. */
00400     pms->count[1] += nbytes >> 29;
00401     pms->count[0] += nbits;
00402     if (pms->count[0] < nbits)
00403         pms->count[1]++;
00404 
00405     /* Process an initial partial block. */
00406     if (offset) {
00407         int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
00408 
00409         memcpy(pms->buf + offset, p, copy);
00410         if (offset + copy < 64)
00411             return;
00412         p += copy;
00413         left -= copy;
00414         md5_process(pms, pms->buf);
00415     }
00416 
00417     /* Process full blocks. */
00418     for (; left >= 64; p += 64, left -= 64)
00419         md5_process(pms, p);
00420 
00421     /* Process a final partial block. */
00422     if (left)

Here is the call graph for this function:

Here is the caller graph for this function:

void md5_finish ( md5_state_t pms,
md5_byte_t  digest[16] 
)

Definition at line 425 of file md5.cpp.

References md5_state_s::abcd, md5_state_s::count, and md5_append().

Referenced by nKrawall::BrokenScramblePassword(), nKrawall::ScramblePassword(), and nKrawall::ScrambleWithSalt2().

00428 {
00429     static const md5_byte_t pad[64] = {
00430                                           0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00431                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00432                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00433                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
00434                                       };
00435     md5_byte_t data[8];
00436     int i;
00437 
00438     /* Save the length before padding. */
00439     for (i = 0; i < 8; ++i)
00440         data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
00441     /* Pad to 56 bytes mod 64. */
00442     md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
00443     /* Append the length. */
00444     md5_append(pms, data, 8);
00445     for (i = 0; i < 16; ++i)

Here is the call graph for this function:

Here is the caller graph for this function:

void md5_init ( md5_state_t pms  ) 

Definition at line 377 of file md5.cpp.

References md5_state_s::abcd, md5_state_s::count, and T_MASK.

Referenced by nKrawall::BrokenScramblePassword(), nKrawall::ScramblePassword(), and nKrawall::ScrambleWithSalt2().

00380 {
00381     pms->count[0] = pms->count[1] = 0;
00382     pms->abcd[0] = 0x67452301;
00383     pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
00384     pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;

Here is the caller graph for this function:

static void md5_process ( md5_state_t pms,
const md5_byte_t data 
) [static]

Definition at line 220 of file md5.cpp.

References a, md5_state_s::abcd, b, c, d, SET, T1, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T2, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T3, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T4, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T5, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59, T6, T60, T61, T62, T63, T64, T7, T8, and T9.

Referenced by md5_append().

00222 {
00223     md5_word_t
00224     a = pms->abcd[0], b = pms->abcd[1],
00225                           c = pms->abcd[2], d = pms->abcd[3];
00226     md5_word_t t;
00227 
00228 #ifndef ARCH_IS_BIG_ENDIAN
00229 # define ARCH_IS_BIG_ENDIAN 1   /* slower, default implementation */
00230 #endif
00231 #if ARCH_IS_BIG_ENDIAN
00232 
00233     /*
00234      * On big-endian machines, we must arrange the bytes in the right
00235      * order.  (This also works on machines of unknown byte order.)
00236      */
00237     md5_word_t X[16];
00238     const md5_byte_t *xp = data;
00239     int i;
00240 
00241     for (i = 0; i < 16; ++i, xp += 4)
00242         X[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
00243 
00244 #else  /* !ARCH_IS_BIG_ENDIAN */
00245 
00246     /*
00247     * On little-endian machines, we can process properly aligned data
00248     * without copying it.
00249     */
00250     md5_word_t xbuf[16];
00251     const md5_word_t *X;
00252 
00253     if (!((data - (const md5_byte_t *)0) & 3)) {
00254         /* data are properly aligned */
00255         X = (const md5_word_t *)data;
00256     } else {
00257         /* not aligned */
00258         memcpy(xbuf, data, 64);
00259         X = xbuf;
00260     }
00261 #endif
00262 
00263 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
00264 
00265     /* Round 1. */
00266     /* Let [abcd k s i] denote the operation
00267        a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
00268 #define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
00269 #define SET(a, b, c, d, k, s, Ti)\
00270   t = a + F(b,c,d) + X[k] + Ti;\
00271   a = ROTATE_LEFT(t, s) + b
00272     /* Do the following 16 operations. */
00273     SET(a, b, c, d,  0,  7,  T1);
00274     SET(d, a, b, c,  1, 12,  T2);
00275     SET(c, d, a, b,  2, 17,  T3);
00276     SET(b, c, d, a,  3, 22,  T4);
00277     SET(a, b, c, d,  4,  7,  T5);
00278     SET(d, a, b, c,  5, 12,  T6);
00279     SET(c, d, a, b,  6, 17,  T7);
00280     SET(b, c, d, a,  7, 22,  T8);
00281     SET(a, b, c, d,  8,  7,  T9);
00282     SET(d, a, b, c,  9, 12, T10);
00283     SET(c, d, a, b, 10, 17, T11);
00284     SET(b, c, d, a, 11, 22, T12);
00285     SET(a, b, c, d, 12,  7, T13);
00286     SET(d, a, b, c, 13, 12, T14);
00287     SET(c, d, a, b, 14, 17, T15);
00288     SET(b, c, d, a, 15, 22, T16);
00289 #undef SET
00290 
00291     /* Round 2. */
00292     /* Let [abcd k s i] denote the operation
00293          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
00294 #define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
00295 #define SET(a, b, c, d, k, s, Ti)\
00296   t = a + G(b,c,d) + X[k] + Ti;\
00297   a = ROTATE_LEFT(t, s) + b
00298     /* Do the following 16 operations. */
00299     SET(a, b, c, d,  1,  5, T17);
00300     SET(d, a, b, c,  6,  9, T18);
00301     SET(c, d, a, b, 11, 14, T19);
00302     SET(b, c, d, a,  0, 20, T20);
00303     SET(a, b, c, d,  5,  5, T21);
00304     SET(d, a, b, c, 10,  9, T22);
00305     SET(c, d, a, b, 15, 14, T23);
00306     SET(b, c, d, a,  4, 20, T24);
00307     SET(a, b, c, d,  9,  5, T25);
00308     SET(d, a, b, c, 14,  9, T26);
00309     SET(c, d, a, b,  3, 14, T27);
00310     SET(b, c, d, a,  8, 20, T28);
00311     SET(a, b, c, d, 13,  5, T29);
00312     SET(d, a, b, c,  2,  9, T30);
00313     SET(c, d, a, b,  7, 14, T31);
00314     SET(b, c, d, a, 12, 20, T32);
00315 #undef SET
00316 
00317     /* Round 3. */
00318     /* Let [abcd k s t] denote the operation
00319          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
00320 #define H(x, y, z) ((x) ^ (y) ^ (z))
00321 #define SET(a, b, c, d, k, s, Ti)\
00322   t = a + H(b,c,d) + X[k] + Ti;\
00323   a = ROTATE_LEFT(t, s) + b
00324     /* Do the following 16 operations. */
00325     SET(a, b, c, d,  5,  4, T33);
00326     SET(d, a, b, c,  8, 11, T34);
00327     SET(c, d, a, b, 11, 16, T35);
00328     SET(b, c, d, a, 14, 23, T36);
00329     SET(a, b, c, d,  1,  4, T37);
00330     SET(d, a, b, c,  4, 11, T38);
00331     SET(c, d, a, b,  7, 16, T39);
00332     SET(b, c, d, a, 10, 23, T40);
00333     SET(a, b, c, d, 13,  4, T41);
00334     SET(d, a, b, c,  0, 11, T42);
00335     SET(c, d, a, b,  3, 16, T43);
00336     SET(b, c, d, a,  6, 23, T44);
00337     SET(a, b, c, d,  9,  4, T45);
00338     SET(d, a, b, c, 12, 11, T46);
00339     SET(c, d, a, b, 15, 16, T47);
00340     SET(b, c, d, a,  2, 23, T48);
00341 #undef SET
00342 
00343     /* Round 4. */
00344     /* Let [abcd k s t] denote the operation
00345          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
00346 #define I(x, y, z) ((y) ^ ((x) | ~(z)))
00347 #define SET(a, b, c, d, k, s, Ti)\
00348   t = a + I(b,c,d) + X[k] + Ti;\
00349   a = ROTATE_LEFT(t, s) + b
00350     /* Do the following 16 operations. */
00351     SET(a, b, c, d,  0,  6, T49);
00352     SET(d, a, b, c,  7, 10, T50);
00353     SET(c, d, a, b, 14, 15, T51);
00354     SET(b, c, d, a,  5, 21, T52);
00355     SET(a, b, c, d, 12,  6, T53);
00356     SET(d, a, b, c,  3, 10, T54);
00357     SET(c, d, a, b, 10, 15, T55);
00358     SET(b, c, d, a,  1, 21, T56);
00359     SET(a, b, c, d,  8,  6, T57);
00360     SET(d, a, b, c, 15, 10, T58);
00361     SET(c, d, a, b,  6, 15, T59);
00362     SET(b, c, d, a, 13, 21, T60);
00363     SET(a, b, c, d,  4,  6, T61);
00364     SET(d, a, b, c, 11, 10, T62);
00365     SET(c, d, a, b,  2, 15, T63);
00366     SET(b, c, d, a,  9, 21, T64);
00367 #undef SET
00368 
00369     /* Then perform the following additions. (That is increment each
00370        of the four registers by the value it had before this block
00371        was started.) */
00372     pms->abcd[0] += a;
00373     pms->abcd[1] += b;
00374     pms->abcd[2] += c;

Here is the caller graph for this function:


Generated on Sat Mar 15 23:00:19 2008 for Armagetron Advanced by  doxygen 1.5.4