11 #define T_MASK ( (unsigned int)~0 ) 12 #define T1 ( T_MASK ^ 0x28955b87 ) 13 #define T2 ( T_MASK ^ 0x173848a9 ) 15 #define T4 ( T_MASK ^ 0x3e423111 ) 16 #define T5 ( T_MASK ^ 0x0a83f050 ) 18 #define T7 ( T_MASK ^ 0x57cfb9ec ) 19 #define T8 ( T_MASK ^ 0x02b96afe ) 21 #define T10 ( T_MASK ^ 0x74bb0850 ) 22 #define T11 ( T_MASK ^ 0x0000a44e ) 23 #define T12 ( T_MASK ^ 0x76a32841 ) 24 #define T13 0x6b901122 25 #define T14 ( T_MASK ^ 0x02678e6c ) 26 #define T15 ( T_MASK ^ 0x5986bc71 ) 27 #define T16 0x49b40821 28 #define T17 ( T_MASK ^ 0x09e1da9d ) 29 #define T18 ( T_MASK ^ 0x3fbf4cbf ) 30 #define T19 0x265e5a51 31 #define T20 ( T_MASK ^ 0x16493855 ) 32 #define T21 ( T_MASK ^ 0x29d0efa2 ) 33 #define T22 0x02441453 34 #define T23 ( T_MASK ^ 0x275e197e ) 35 #define T24 ( T_MASK ^ 0x182c0437 ) 36 #define T25 0x21e1cde6 37 #define T26 ( T_MASK ^ 0x3cc8f829 ) 38 #define T27 ( T_MASK ^ 0x0b2af278 ) 39 #define T28 0x455a14ed 40 #define T29 ( T_MASK ^ 0x561c16fa ) 41 #define T30 ( T_MASK ^ 0x03105c07 ) 42 #define T31 0x676f02d9 43 #define T32 ( T_MASK ^ 0x72d5b375 ) 44 #define T33 ( T_MASK ^ 0x0005c6bd ) 45 #define T34 ( T_MASK ^ 0x788e097e ) 46 #define T35 0x6d9d6122 47 #define T36 ( T_MASK ^ 0x021ac7f3 ) 48 #define T37 ( T_MASK ^ 0x5b4115bb ) 49 #define T38 0x4bdecfa9 50 #define T39 ( T_MASK ^ 0x0944b49f ) 51 #define T40 ( T_MASK ^ 0x4140438f ) 52 #define T41 0x289b7ec6 53 #define T42 ( T_MASK ^ 0x155ed805 ) 54 #define T43 ( T_MASK ^ 0x2b10cf7a ) 55 #define T44 0x04881d05 56 #define T45 ( T_MASK ^ 0x262b2fc6 ) 57 #define T46 ( T_MASK ^ 0x1924661a ) 58 #define T47 0x1fa27cf8 59 #define T48 ( T_MASK ^ 0x3b53a99a ) 60 #define T49 ( T_MASK ^ 0x0bd6ddbb ) 61 #define T50 0x432aff97 62 #define T51 ( T_MASK ^ 0x546bdc58 ) 63 #define T52 ( T_MASK ^ 0x036c5fc6 ) 64 #define T53 0x655b59c3 65 #define T54 ( T_MASK ^ 0x70f3336d ) 66 #define T55 ( T_MASK ^ 0x00100b82 ) 67 #define T56 ( T_MASK ^ 0x7a7ba22e ) 68 #define T57 0x6fa87e4f 69 #define T58 ( T_MASK ^ 0x01d3191f ) 70 #define T59 ( T_MASK ^ 0x5cfebceb ) 71 #define T60 0x4e0811a1 72 #define T61 ( T_MASK ^ 0x08ac817d ) 73 #define T62 ( T_MASK ^ 0x42c50dca ) 74 #define T63 0x2ad7d2bb 75 #define T64 ( T_MASK ^ 0x14792c6e ) 93 append( &tmpMd5, (
const unsigned char*)Data, Size );
99 for (
int i = 0; i < len; i++ )
107 unsigned int a = pms->
abcd[0], b = pms->
abcd[1], c = pms->
abcd[2], d = pms->
abcd[3];
110 const unsigned char* xp =
data;
112 for (
int i = 0; i < 16; ++i, xp += 4 )
113 X[i] = xp[0] + ( xp[1] << 8 ) + ( xp[2] << 16 ) + ( xp[3] << 24 );
115 #define ROTATE_LEFT( x, n ) ( ( ( x ) << ( n ) ) | ( ( x ) >> ( 32 - ( n ) ) ) ) 120 #define F( x, y, z ) ( ( ( x ) & ( y ) ) | ( ~( x ) & ( z ) ) ) 121 #define SET( a, b, c, d, k, s, Ti ) \ 122 t = a + F( b, c, d ) + X[k] + Ti; \ 123 a = ROTATE_LEFT( t, s ) + b 125 SET( a, b, c, d, 0, 7,
T1 );
126 SET( d, a, b, c, 1, 12,
T2 );
127 SET( c, d, a, b, 2, 17,
T3 );
128 SET( b, c, d, a, 3, 22,
T4 );
129 SET( a, b, c, d, 4, 7,
T5 );
130 SET( d, a, b, c, 5, 12,
T6 );
131 SET( c, d, a, b, 6, 17,
T7 );
132 SET( b, c, d, a, 7, 22,
T8 );
133 SET( a, b, c, d, 8, 7,
T9 );
134 SET( d, a, b, c, 9, 12,
T10 );
135 SET( c, d, a, b, 10, 17,
T11 );
136 SET( b, c, d, a, 11, 22,
T12 );
137 SET( a, b, c, d, 12, 7,
T13 );
138 SET( d, a, b, c, 13, 12,
T14 );
139 SET( c, d, a, b, 14, 17,
T15 );
140 SET( b, c, d, a, 15, 22,
T16 );
146 #define G( x, y, z ) ( ( ( x ) & ( z ) ) | ( ( y ) & ~( z ) ) ) 147 #define SET( a, b, c, d, k, s, Ti ) \ 148 t = a + G( b, c, d ) + X[k] + Ti; \ 149 a = ROTATE_LEFT( t, s ) + b 151 SET( a, b, c, d, 1, 5,
T17 );
152 SET( d, a, b, c, 6, 9,
T18 );
153 SET( c, d, a, b, 11, 14,
T19 );
154 SET( b, c, d, a, 0, 20,
T20 );
155 SET( a, b, c, d, 5, 5,
T21 );
156 SET( d, a, b, c, 10, 9,
T22 );
157 SET( c, d, a, b, 15, 14,
T23 );
158 SET( b, c, d, a, 4, 20,
T24 );
159 SET( a, b, c, d, 9, 5,
T25 );
160 SET( d, a, b, c, 14, 9,
T26 );
161 SET( c, d, a, b, 3, 14,
T27 );
162 SET( b, c, d, a, 8, 20,
T28 );
163 SET( a, b, c, d, 13, 5,
T29 );
164 SET( d, a, b, c, 2, 9,
T30 );
165 SET( c, d, a, b, 7, 14,
T31 );
166 SET( b, c, d, a, 12, 20,
T32 );
172 #define H( x, y, z ) ( ( x ) ^ ( y ) ^ ( z ) ) 173 #define SET( a, b, c, d, k, s, Ti ) \ 174 t = a + H( b, c, d ) + X[k] + Ti; \ 175 a = ROTATE_LEFT( t, s ) + b 177 SET( a, b, c, d, 5, 4,
T33 );
178 SET( d, a, b, c, 8, 11,
T34 );
179 SET( c, d, a, b, 11, 16,
T35 );
180 SET( b, c, d, a, 14, 23,
T36 );
181 SET( a, b, c, d, 1, 4,
T37 );
182 SET( d, a, b, c, 4, 11,
T38 );
183 SET( c, d, a, b, 7, 16,
T39 );
184 SET( b, c, d, a, 10, 23,
T40 );
185 SET( a, b, c, d, 13, 4,
T41 );
186 SET( d, a, b, c, 0, 11,
T42 );
187 SET( c, d, a, b, 3, 16,
T43 );
188 SET( b, c, d, a, 6, 23,
T44 );
189 SET( a, b, c, d, 9, 4,
T45 );
190 SET( d, a, b, c, 12, 11,
T46 );
191 SET( c, d, a, b, 15, 16,
T47 );
192 SET( b, c, d, a, 2, 23,
T48 );
198 #define I( x, y, z ) ( ( y ) ^ ( ( x ) | ~( z ) ) ) 199 #define SET( a, b, c, d, k, s, Ti ) \ 200 t = a + I( b, c, d ) + X[k] + Ti; \ 201 a = ROTATE_LEFT( t, s ) + b 203 SET( a, b, c, d, 0, 6,
T49 );
204 SET( d, a, b, c, 7, 10,
T50 );
205 SET( c, d, a, b, 14, 15,
T51 );
206 SET( b, c, d, a, 5, 21,
T52 );
207 SET( a, b, c, d, 12, 6,
T53 );
208 SET( d, a, b, c, 3, 10,
T54 );
209 SET( c, d, a, b, 10, 15,
T55 );
210 SET( b, c, d, a, 1, 21,
T56 );
211 SET( a, b, c, d, 8, 6,
T57 );
212 SET( d, a, b, c, 15, 10,
T58 );
213 SET( c, d, a, b, 6, 15,
T59 );
214 SET( b, c, d, a, 13, 21,
T60 );
215 SET( a, b, c, d, 4, 6,
T61 );
216 SET( d, a, b, c, 11, 10,
T62 );
217 SET( c, d, a, b, 2, 15,
T63 );
218 SET( b, c, d, a, 9, 21,
T64 );
233 pms->
abcd[0] = 0x67452301;
236 pms->
abcd[3] = 0x10325476;
241 const unsigned char* p =
data;
242 unsigned int nbits = (
unsigned int)( nbytes << 3 );
243 int left = nbytes, offset = ( pms->
count[0] >> 3 ) & 63;
249 pms->
count[1] += nbytes >> 29;
250 pms->
count[0] += nbits;
251 if ( pms->
count[0] < nbits )
257 int copy = ( offset + nbytes > 64 ? 64 - offset : nbytes );
258 memcpy( pms->
buf + offset, p, copy );
260 if ( offset + copy < 64 )
269 for ( ; left >= 64; p += 64, left -= 64 )
277 memcpy( pms->
buf, p, left );
283 static const unsigned char pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
285 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
288 unsigned char data[8];
291 for (
int i = 0; i < 8; ++i )
292 data[i] = (
unsigned char)( pms->
count[i >> 2] >> ( ( i & 3 ) << 3 ) );
295 append( pms, pad, ( ( 55 - ( pms->
count[0] >> 3 ) ) & 63 ) + 1 );
299 for (
int i = 0; i < 16; ++i )
300 digest[i] = (
unsigned char)( pms->
abcd[i >> 2] >> ( ( i & 3 ) << 3 ) );
static void finish(md5_state *pms, unsigned char digest[16])
static void start(md5_state *pms)
#define SET(a, b, c, d, k, s, Ti)
void Encrypt(unsigned char *in, unsigned char *out, int len)
static void process(md5_state *pms, const unsigned char *data)
std::unordered_map< u64, ScriptDiffData > data
static void append(md5_state *pms, const unsigned char *data, int nbytes)
void Init(unsigned char *Data, unsigned int Size)