Blender  V2.93
util_md5.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved.
3  *
4  * This software is provided 'as-is', without any express or implied
5  * warranty. In no event will the authors be held liable for any damages
6  * arising from the use of this software.
7  *
8  * Permission is granted to anyone to use this software for any purpose,
9  * including commercial applications, and to alter it and redistribute it
10  * freely, subject to the following restrictions:
11  *
12  * 1. The origin of this software must not be misrepresented; you must not
13  * claim that you wrote the original software. If you use this software
14  * in a product, an acknowledgment in the product documentation would be
15  * appreciated but is not required.
16  * 2. Altered source versions must be plainly marked as such, and must not be
17  * misrepresented as being the original software.
18  * 3. This notice may not be removed or altered from any source distribution.
19  *
20  * L. Peter Deutsch
21  * ghost@aladdin.com
22  */
23 
24 /* Minor modifications done to remove some code and change style. */
25 
26 #include "util_md5.h"
27 #include "util_path.h"
28 
29 #include <stdio.h>
30 #include <string.h>
31 
33 
34 #define T_MASK ((uint32_t)~0)
35 #define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
36 #define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
37 #define T3 0x242070db
38 #define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
39 #define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
40 #define T6 0x4787c62a
41 #define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
42 #define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
43 #define T9 0x698098d8
44 #define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
45 #define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
46 #define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
47 #define T13 0x6b901122
48 #define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
49 #define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
50 #define T16 0x49b40821
51 #define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
52 #define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
53 #define T19 0x265e5a51
54 #define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
55 #define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
56 #define T22 0x02441453
57 #define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
58 #define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
59 #define T25 0x21e1cde6
60 #define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
61 #define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
62 #define T28 0x455a14ed
63 #define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
64 #define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
65 #define T31 0x676f02d9
66 #define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
67 #define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
68 #define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
69 #define T35 0x6d9d6122
70 #define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
71 #define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
72 #define T38 0x4bdecfa9
73 #define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
74 #define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
75 #define T41 0x289b7ec6
76 #define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
77 #define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
78 #define T44 0x04881d05
79 #define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
80 #define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
81 #define T47 0x1fa27cf8
82 #define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
83 #define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
84 #define T50 0x432aff97
85 #define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
86 #define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
87 #define T53 0x655b59c3
88 #define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
89 #define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
90 #define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
91 #define T57 0x6fa87e4f
92 #define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
93 #define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
94 #define T60 0x4e0811a1
95 #define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
96 #define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
97 #define T63 0x2ad7d2bb
98 #define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
99 
100 void MD5Hash::process(const uint8_t *data /*[64]*/)
101 {
102  uint32_t a = abcd[0], b = abcd[1], c = abcd[2], d = abcd[3];
103  uint32_t t;
104  /* Define storage for little-endian or both types of CPUs. */
105  uint32_t xbuf[16];
106  const uint32_t *X;
107 
108  {
109  /*
110  * Determine dynamically whether this is a big-endian or
111  * little-endian machine, since we can use a more efficient
112  * algorithm on the latter.
113  */
114  static const int w = 1;
115 
116  if (*((const uint8_t *)&w)) /* dynamic little-endian */
117  {
118  /*
119  * On little-endian machines, we can process properly aligned
120  * data without copying it.
121  */
122  if (!((data - (const uint8_t *)0) & 3)) {
123  /* data are properly aligned */
124  X = (const uint32_t *)data;
125  }
126  else {
127  /* not aligned */
128  memcpy(xbuf, data, 64);
129  X = xbuf;
130  }
131  }
132  else { /* dynamic big-endian */
133  /*
134  * On big-endian machines, we must arrange the bytes in the
135  * right order.
136  */
137  const uint8_t *xp = data;
138  int i;
139 
140  X = xbuf; /* (dynamic only) */
141  for (i = 0; i < 16; ++i, xp += 4)
142  xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
143  }
144  }
145 
146 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
147 
148  /* Round 1. */
149  /* Let [abcd k s i] denote the operation
150  * a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
151 #define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
152 #define SET(a, b, c, d, k, s, Ti) \
153  t = a + F(b, c, d) + X[k] + Ti; \
154  a = ROTATE_LEFT(t, s) + b
155  /* Do the following 16 operations. */
156  SET(a, b, c, d, 0, 7, T1);
157  SET(d, a, b, c, 1, 12, T2);
158  SET(c, d, a, b, 2, 17, T3);
159  SET(b, c, d, a, 3, 22, T4);
160  SET(a, b, c, d, 4, 7, T5);
161  SET(d, a, b, c, 5, 12, T6);
162  SET(c, d, a, b, 6, 17, T7);
163  SET(b, c, d, a, 7, 22, T8);
164  SET(a, b, c, d, 8, 7, T9);
165  SET(d, a, b, c, 9, 12, T10);
166  SET(c, d, a, b, 10, 17, T11);
167  SET(b, c, d, a, 11, 22, T12);
168  SET(a, b, c, d, 12, 7, T13);
169  SET(d, a, b, c, 13, 12, T14);
170  SET(c, d, a, b, 14, 17, T15);
171  SET(b, c, d, a, 15, 22, T16);
172 #undef SET
173 
174  /* Round 2. */
175  /* Let [abcd k s i] denote the operation
176  * a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
177 #define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
178 #define SET(a, b, c, d, k, s, Ti) \
179  t = a + G(b, c, d) + X[k] + Ti; \
180  a = ROTATE_LEFT(t, s) + b
181  /* Do the following 16 operations. */
182  SET(a, b, c, d, 1, 5, T17);
183  SET(d, a, b, c, 6, 9, T18);
184  SET(c, d, a, b, 11, 14, T19);
185  SET(b, c, d, a, 0, 20, T20);
186  SET(a, b, c, d, 5, 5, T21);
187  SET(d, a, b, c, 10, 9, T22);
188  SET(c, d, a, b, 15, 14, T23);
189  SET(b, c, d, a, 4, 20, T24);
190  SET(a, b, c, d, 9, 5, T25);
191  SET(d, a, b, c, 14, 9, T26);
192  SET(c, d, a, b, 3, 14, T27);
193  SET(b, c, d, a, 8, 20, T28);
194  SET(a, b, c, d, 13, 5, T29);
195  SET(d, a, b, c, 2, 9, T30);
196  SET(c, d, a, b, 7, 14, T31);
197  SET(b, c, d, a, 12, 20, T32);
198 #undef SET
199 
200  /* Round 3. */
201  /* Let [abcd k s t] denote the operation
202  * a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
203 #define H(x, y, z) ((x) ^ (y) ^ (z))
204 #define SET(a, b, c, d, k, s, Ti) \
205  t = a + H(b, c, d) + X[k] + Ti; \
206  a = ROTATE_LEFT(t, s) + b
207  /* Do the following 16 operations. */
208  SET(a, b, c, d, 5, 4, T33);
209  SET(d, a, b, c, 8, 11, T34);
210  SET(c, d, a, b, 11, 16, T35);
211  SET(b, c, d, a, 14, 23, T36);
212  SET(a, b, c, d, 1, 4, T37);
213  SET(d, a, b, c, 4, 11, T38);
214  SET(c, d, a, b, 7, 16, T39);
215  SET(b, c, d, a, 10, 23, T40);
216  SET(a, b, c, d, 13, 4, T41);
217  SET(d, a, b, c, 0, 11, T42);
218  SET(c, d, a, b, 3, 16, T43);
219  SET(b, c, d, a, 6, 23, T44);
220  SET(a, b, c, d, 9, 4, T45);
221  SET(d, a, b, c, 12, 11, T46);
222  SET(c, d, a, b, 15, 16, T47);
223  SET(b, c, d, a, 2, 23, T48);
224 #undef SET
225 
226  /* Round 4. */
227  /* Let [abcd k s t] denote the operation
228  * a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
229 #define I(x, y, z) ((y) ^ ((x) | ~(z)))
230 #define SET(a, b, c, d, k, s, Ti) \
231  t = a + I(b, c, d) + X[k] + Ti; \
232  a = ROTATE_LEFT(t, s) + b
233  /* Do the following 16 operations. */
234  SET(a, b, c, d, 0, 6, T49);
235  SET(d, a, b, c, 7, 10, T50);
236  SET(c, d, a, b, 14, 15, T51);
237  SET(b, c, d, a, 5, 21, T52);
238  SET(a, b, c, d, 12, 6, T53);
239  SET(d, a, b, c, 3, 10, T54);
240  SET(c, d, a, b, 10, 15, T55);
241  SET(b, c, d, a, 1, 21, T56);
242  SET(a, b, c, d, 8, 6, T57);
243  SET(d, a, b, c, 15, 10, T58);
244  SET(c, d, a, b, 6, 15, T59);
245  SET(b, c, d, a, 13, 21, T60);
246  SET(a, b, c, d, 4, 6, T61);
247  SET(d, a, b, c, 11, 10, T62);
248  SET(c, d, a, b, 2, 15, T63);
249  SET(b, c, d, a, 9, 21, T64);
250 #undef SET
251 
252  /* Then perform the following additions. (That is increment each
253  * of the four registers by the value it had before this block
254  * was started.) */
255  abcd[0] += a;
256  abcd[1] += b;
257  abcd[2] += c;
258  abcd[3] += d;
259 }
260 
262 {
263  count[0] = count[1] = 0;
264  abcd[0] = 0x67452301;
265  abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
266  abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
267  abcd[3] = 0x10325476;
268 }
269 
271 {
272 }
273 
274 void MD5Hash::append(const uint8_t *data, int nbytes)
275 {
276  const uint8_t *p = data;
277  int left = nbytes;
278  int offset = (count[0] >> 3) & 63;
279  uint32_t nbits = (uint32_t)(nbytes << 3);
280 
281  if (nbytes <= 0)
282  return;
283 
284  /* Update the message length. */
285  count[1] += nbytes >> 29;
286  count[0] += nbits;
287  if (count[0] < nbits)
288  count[1]++;
289 
290  /* Process an initial partial block. */
291  if (offset) {
292  int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
293 
294  memcpy(buf + offset, p, copy);
295  if (offset + copy < 64)
296  return;
297  p += copy;
298  left -= copy;
299  process(buf);
300  }
301 
302  /* Process full blocks. */
303  for (; left >= 64; p += 64, left -= 64)
304  process(p);
305 
306  /* Process a final partial block. */
307  if (left)
308  memcpy(buf, p, left);
309 }
310 
311 void MD5Hash::append(const string &str)
312 {
313  if (str.size()) {
314  append((const uint8_t *)str.c_str(), str.size());
315  }
316 }
317 
318 bool MD5Hash::append_file(const string &filepath)
319 {
320  FILE *f = path_fopen(filepath, "rb");
321 
322  if (!f) {
323  fprintf(stderr, "MD5: failed to open file %s\n", filepath.c_str());
324  return false;
325  }
326 
327  const size_t buffer_size = 1024;
328  uint8_t buffer[buffer_size];
329  size_t n;
330 
331  do {
332  n = fread(buffer, 1, buffer_size, f);
333  append(buffer, n);
334  } while (n == buffer_size);
335 
336  bool success = (ferror(f) == 0);
337 
338  fclose(f);
339 
340  return success;
341 }
342 
343 void MD5Hash::finish(uint8_t digest[16])
344 {
345  static const uint8_t pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
346  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
347  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
348  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
349 
350  uint8_t data[8];
351  int i;
352 
353  /* Save the length before padding. */
354  for (i = 0; i < 8; ++i)
355  data[i] = (uint8_t)(count[i >> 2] >> ((i & 3) << 3));
356 
357  /* Pad to 56 bytes mod 64. */
358  append(pad, ((55 - (count[0] >> 3)) & 63) + 1);
359  /* Append the length. */
360  append(data, 8);
361 
362  for (i = 0; i < 16; ++i)
363  digest[i] = (uint8_t)(abcd[i >> 2] >> ((i & 3) << 3));
364 }
365 
367 {
368  uint8_t digest[16];
369  char buf[16 * 2 + 1];
370 
371  finish(digest);
372 
373  for (int i = 0; i < 16; i++)
374  sprintf(buf + i * 2, "%02X", (unsigned int)digest[i]);
375  buf[sizeof(buf) - 1] = '\0';
376 
377  return string(buf);
378 }
379 
380 string util_md5_string(const string &str)
381 {
382  MD5Hash md5;
383  md5.append((uint8_t *)str.c_str(), str.size());
384  return md5.get_hex();
385 }
386 
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
#define X
Definition: GeomUtils.cpp:213
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btQuadWord.h:119
bool append_file(const string &filepath)
Definition: util_md5.cpp:318
string get_hex()
Definition: util_md5.cpp:366
uint8_t buf[64]
Definition: util_md5.h:54
~MD5Hash()
Definition: util_md5.cpp:270
void finish(uint8_t digest[16])
Definition: util_md5.cpp:343
void append(const uint8_t *data, int size)
Definition: util_md5.cpp:274
void process(const uint8_t *data)
Definition: util_md5.cpp:100
uint32_t abcd[4]
Definition: util_md5.h:53
uint32_t count[2]
Definition: util_md5.h:52
#define str(s)
#define CCL_NAMESPACE_END
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
static int left
static unsigned c
Definition: RandGen.cpp:97
static unsigned a[3]
Definition: RandGen.cpp:92
static void copy(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node)
unsigned int uint32_t
Definition: stdint.h:83
unsigned char uint8_t
Definition: stdint.h:81
#define T51
Definition: util_md5.cpp:85
#define T46
Definition: util_md5.cpp:80
#define T50
Definition: util_md5.cpp:84
#define T45
Definition: util_md5.cpp:79
#define T56
Definition: util_md5.cpp:90
#define T17
Definition: util_md5.cpp:51
#define T54
Definition: util_md5.cpp:88
#define T20
Definition: util_md5.cpp:54
#define T43
Definition: util_md5.cpp:77
#define T9
Definition: util_md5.cpp:43
#define T14
Definition: util_md5.cpp:48
#define T57
Definition: util_md5.cpp:91
#define T37
Definition: util_md5.cpp:71
#define T2
Definition: util_md5.cpp:36
#define T_MASK
Definition: util_md5.cpp:34
#define T7
Definition: util_md5.cpp:41
#define T61
Definition: util_md5.cpp:95
#define T10
Definition: util_md5.cpp:44
#define T31
Definition: util_md5.cpp:65
#define T62
Definition: util_md5.cpp:96
#define T26
Definition: util_md5.cpp:60
#define T24
Definition: util_md5.cpp:58
#define T44
Definition: util_md5.cpp:78
#define T25
Definition: util_md5.cpp:59
#define T36
Definition: util_md5.cpp:70
#define T18
Definition: util_md5.cpp:52
#define T21
Definition: util_md5.cpp:55
#define T6
Definition: util_md5.cpp:40
#define T3
Definition: util_md5.cpp:37
#define T58
Definition: util_md5.cpp:92
#define SET(a, b, c, d, k, s, Ti)
#define T29
Definition: util_md5.cpp:63
#define T60
Definition: util_md5.cpp:94
#define T59
Definition: util_md5.cpp:93
#define T5
Definition: util_md5.cpp:39
#define T53
Definition: util_md5.cpp:87
#define T39
Definition: util_md5.cpp:73
#define T38
Definition: util_md5.cpp:72
#define T19
Definition: util_md5.cpp:53
#define T33
Definition: util_md5.cpp:67
#define T49
Definition: util_md5.cpp:83
#define T16
Definition: util_md5.cpp:50
#define T22
Definition: util_md5.cpp:56
#define T55
Definition: util_md5.cpp:89
#define T41
Definition: util_md5.cpp:75
#define T48
Definition: util_md5.cpp:82
#define T4
Definition: util_md5.cpp:38
#define T64
Definition: util_md5.cpp:98
#define T40
Definition: util_md5.cpp:74
#define T47
Definition: util_md5.cpp:81
#define T13
Definition: util_md5.cpp:47
#define T30
Definition: util_md5.cpp:64
#define T11
Definition: util_md5.cpp:45
#define T63
Definition: util_md5.cpp:97
#define T1
Definition: util_md5.cpp:35
#define T35
Definition: util_md5.cpp:69
string util_md5_string(const string &str)
Definition: util_md5.cpp:380
#define T8
Definition: util_md5.cpp:42
#define T23
Definition: util_md5.cpp:57
#define T42
Definition: util_md5.cpp:76
#define T15
Definition: util_md5.cpp:49
#define T34
Definition: util_md5.cpp:68
#define T27
Definition: util_md5.cpp:61
#define T28
Definition: util_md5.cpp:62
#define T52
Definition: util_md5.cpp:86
#define T32
Definition: util_md5.cpp:66
#define T12
Definition: util_md5.cpp:46
FILE * path_fopen(const string &path, const string &mode)
Definition: util_path.cpp:913