ggstd/crypto/md5/
md5block.rs

1// Copyright 2023 The rust-ggstd authors. All rights reserved.
2// Copyright 2013 The Go Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style
4// license that can be found in the LICENSE file.
5
6// Code generated by go run gen.go -output md5block.go; DO NOT EDIT.
7
8use super::md5;
9use crate::encoding::binary::{self, ByteOrder};
10use crate::math::bits;
11
12pub(super) fn block_generic(state: &mut md5::State, p: &[u8]) {
13    // load state
14    let mut a = state[0];
15    let mut b = state[1];
16    let mut c = state[2];
17    let mut d = state[3];
18
19    let mut i = 0;
20    while i <= p.len() - md5::BLOCK_SIZE {
21        let q = &p[i..i + md5::BLOCK_SIZE];
22
23        // save current state
24        let (aa, bb, cc, dd) = (a, b, c, d);
25
26        // load input block
27        let x0 = binary::LITTLE_ENDIAN.uint32(&q[0..]);
28        let x1 = binary::LITTLE_ENDIAN.uint32(&q[4..]);
29        let x2 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x2..]);
30        let x3 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x3..]);
31        let x4 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x4..]);
32        let x5 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x5..]);
33        let x6 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x6..]);
34        let x7 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x7..]);
35        let x8 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x8..]);
36        let x9 = binary::LITTLE_ENDIAN.uint32(&q[4 * 0x9..]);
37        let xa = binary::LITTLE_ENDIAN.uint32(&q[4 * 0xa..]);
38        let xb = binary::LITTLE_ENDIAN.uint32(&q[4 * 0xb..]);
39        let xc = binary::LITTLE_ENDIAN.uint32(&q[4 * 0xc..]);
40        let xd = binary::LITTLE_ENDIAN.uint32(&q[4 * 0xd..]);
41        let xe = binary::LITTLE_ENDIAN.uint32(&q[4 * 0xe..]);
42        let xf = binary::LITTLE_ENDIAN.uint32(&q[4 * 0xf..]);
43
44        // round 1
45        a = b.wrapping_add(bits::rotate_left32(
46            (((c ^ d) & b) ^ d)
47                .wrapping_add(a)
48                .wrapping_add(x0)
49                .wrapping_add(0xd76aa478),
50            7,
51        ));
52        d = a.wrapping_add(bits::rotate_left32(
53            (((b ^ c) & a) ^ c)
54                .wrapping_add(d)
55                .wrapping_add(x1)
56                .wrapping_add(0xe8c7b756),
57            12,
58        ));
59        c = d.wrapping_add(bits::rotate_left32(
60            (((a ^ b) & d) ^ b)
61                .wrapping_add(c)
62                .wrapping_add(x2)
63                .wrapping_add(0x242070db),
64            17,
65        ));
66        b = c.wrapping_add(bits::rotate_left32(
67            (((d ^ a) & c) ^ a)
68                .wrapping_add(b)
69                .wrapping_add(x3)
70                .wrapping_add(0xc1bdceee),
71            22,
72        ));
73        a = b.wrapping_add(bits::rotate_left32(
74            (((c ^ d) & b) ^ d)
75                .wrapping_add(a)
76                .wrapping_add(x4)
77                .wrapping_add(0xf57c0faf),
78            7,
79        ));
80        d = a.wrapping_add(bits::rotate_left32(
81            (((b ^ c) & a) ^ c)
82                .wrapping_add(d)
83                .wrapping_add(x5)
84                .wrapping_add(0x4787c62a),
85            12,
86        ));
87        c = d.wrapping_add(bits::rotate_left32(
88            (((a ^ b) & d) ^ b)
89                .wrapping_add(c)
90                .wrapping_add(x6)
91                .wrapping_add(0xa8304613),
92            17,
93        ));
94        b = c.wrapping_add(bits::rotate_left32(
95            (((d ^ a) & c) ^ a)
96                .wrapping_add(b)
97                .wrapping_add(x7)
98                .wrapping_add(0xfd469501),
99            22,
100        ));
101        a = b.wrapping_add(bits::rotate_left32(
102            (((c ^ d) & b) ^ d)
103                .wrapping_add(a)
104                .wrapping_add(x8)
105                .wrapping_add(0x698098d8),
106            7,
107        ));
108        d = a.wrapping_add(bits::rotate_left32(
109            (((b ^ c) & a) ^ c)
110                .wrapping_add(d)
111                .wrapping_add(x9)
112                .wrapping_add(0x8b44f7af),
113            12,
114        ));
115        c = d.wrapping_add(bits::rotate_left32(
116            (((a ^ b) & d) ^ b)
117                .wrapping_add(c)
118                .wrapping_add(xa)
119                .wrapping_add(0xffff5bb1),
120            17,
121        ));
122        b = c.wrapping_add(bits::rotate_left32(
123            (((d ^ a) & c) ^ a)
124                .wrapping_add(b)
125                .wrapping_add(xb)
126                .wrapping_add(0x895cd7be),
127            22,
128        ));
129        a = b.wrapping_add(bits::rotate_left32(
130            (((c ^ d) & b) ^ d)
131                .wrapping_add(a)
132                .wrapping_add(xc)
133                .wrapping_add(0x6b901122),
134            7,
135        ));
136        d = a.wrapping_add(bits::rotate_left32(
137            (((b ^ c) & a) ^ c)
138                .wrapping_add(d)
139                .wrapping_add(xd)
140                .wrapping_add(0xfd987193),
141            12,
142        ));
143        c = d.wrapping_add(bits::rotate_left32(
144            (((a ^ b) & d) ^ b)
145                .wrapping_add(c)
146                .wrapping_add(xe)
147                .wrapping_add(0xa679438e),
148            17,
149        ));
150        b = c.wrapping_add(bits::rotate_left32(
151            (((d ^ a) & c) ^ a)
152                .wrapping_add(b)
153                .wrapping_add(xf)
154                .wrapping_add(0x49b40821),
155            22,
156        ));
157
158        // round 2
159        a = b.wrapping_add(bits::rotate_left32(
160            (((b ^ c) & d) ^ c)
161                .wrapping_add(a)
162                .wrapping_add(x1)
163                .wrapping_add(0xf61e2562),
164            5,
165        ));
166        d = a.wrapping_add(bits::rotate_left32(
167            (((a ^ b) & c) ^ b)
168                .wrapping_add(d)
169                .wrapping_add(x6)
170                .wrapping_add(0xc040b340),
171            9,
172        ));
173        c = d.wrapping_add(bits::rotate_left32(
174            (((d ^ a) & b) ^ a)
175                .wrapping_add(c)
176                .wrapping_add(xb)
177                .wrapping_add(0x265e5a51),
178            14,
179        ));
180        b = c.wrapping_add(bits::rotate_left32(
181            (((c ^ d) & a) ^ d)
182                .wrapping_add(b)
183                .wrapping_add(x0)
184                .wrapping_add(0xe9b6c7aa),
185            20,
186        ));
187        a = b.wrapping_add(bits::rotate_left32(
188            (((b ^ c) & d) ^ c)
189                .wrapping_add(a)
190                .wrapping_add(x5)
191                .wrapping_add(0xd62f105d),
192            5,
193        ));
194        d = a.wrapping_add(bits::rotate_left32(
195            (((a ^ b) & c) ^ b)
196                .wrapping_add(d)
197                .wrapping_add(xa)
198                .wrapping_add(0x02441453),
199            9,
200        ));
201        c = d.wrapping_add(bits::rotate_left32(
202            (((d ^ a) & b) ^ a)
203                .wrapping_add(c)
204                .wrapping_add(xf)
205                .wrapping_add(0xd8a1e681),
206            14,
207        ));
208        b = c.wrapping_add(bits::rotate_left32(
209            (((c ^ d) & a) ^ d)
210                .wrapping_add(b)
211                .wrapping_add(x4)
212                .wrapping_add(0xe7d3fbc8),
213            20,
214        ));
215        a = b.wrapping_add(bits::rotate_left32(
216            (((b ^ c) & d) ^ c)
217                .wrapping_add(a)
218                .wrapping_add(x9)
219                .wrapping_add(0x21e1cde6),
220            5,
221        ));
222        d = a.wrapping_add(bits::rotate_left32(
223            (((a ^ b) & c) ^ b)
224                .wrapping_add(d)
225                .wrapping_add(xe)
226                .wrapping_add(0xc33707d6),
227            9,
228        ));
229        c = d.wrapping_add(bits::rotate_left32(
230            (((d ^ a) & b) ^ a)
231                .wrapping_add(c)
232                .wrapping_add(x3)
233                .wrapping_add(0xf4d50d87),
234            14,
235        ));
236        b = c.wrapping_add(bits::rotate_left32(
237            (((c ^ d) & a) ^ d)
238                .wrapping_add(b)
239                .wrapping_add(x8)
240                .wrapping_add(0x455a14ed),
241            20,
242        ));
243        a = b.wrapping_add(bits::rotate_left32(
244            (((b ^ c) & d) ^ c)
245                .wrapping_add(a)
246                .wrapping_add(xd)
247                .wrapping_add(0xa9e3e905),
248            5,
249        ));
250        d = a.wrapping_add(bits::rotate_left32(
251            (((a ^ b) & c) ^ b)
252                .wrapping_add(d)
253                .wrapping_add(x2)
254                .wrapping_add(0xfcefa3f8),
255            9,
256        ));
257        c = d.wrapping_add(bits::rotate_left32(
258            (((d ^ a) & b) ^ a)
259                .wrapping_add(c)
260                .wrapping_add(x7)
261                .wrapping_add(0x676f02d9),
262            14,
263        ));
264        b = c.wrapping_add(bits::rotate_left32(
265            (((c ^ d) & a) ^ d)
266                .wrapping_add(b)
267                .wrapping_add(xc)
268                .wrapping_add(0x8d2a4c8a),
269            20,
270        ));
271
272        // round 3
273        a = b.wrapping_add(bits::rotate_left32(
274            (b ^ c ^ d)
275                .wrapping_add(a)
276                .wrapping_add(x5)
277                .wrapping_add(0xfffa3942),
278            4,
279        ));
280        d = a.wrapping_add(bits::rotate_left32(
281            (a ^ b ^ c)
282                .wrapping_add(d)
283                .wrapping_add(x8)
284                .wrapping_add(0x8771f681),
285            11,
286        ));
287        c = d.wrapping_add(bits::rotate_left32(
288            (d ^ a ^ b)
289                .wrapping_add(c)
290                .wrapping_add(xb)
291                .wrapping_add(0x6d9d6122),
292            16,
293        ));
294        b = c.wrapping_add(bits::rotate_left32(
295            (c ^ d ^ a)
296                .wrapping_add(b)
297                .wrapping_add(xe)
298                .wrapping_add(0xfde5380c),
299            23,
300        ));
301        a = b.wrapping_add(bits::rotate_left32(
302            (b ^ c ^ d)
303                .wrapping_add(a)
304                .wrapping_add(x1)
305                .wrapping_add(0xa4beea44),
306            4,
307        ));
308        d = a.wrapping_add(bits::rotate_left32(
309            (a ^ b ^ c)
310                .wrapping_add(d)
311                .wrapping_add(x4)
312                .wrapping_add(0x4bdecfa9),
313            11,
314        ));
315        c = d.wrapping_add(bits::rotate_left32(
316            (d ^ a ^ b)
317                .wrapping_add(c)
318                .wrapping_add(x7)
319                .wrapping_add(0xf6bb4b60),
320            16,
321        ));
322        b = c.wrapping_add(bits::rotate_left32(
323            (c ^ d ^ a)
324                .wrapping_add(b)
325                .wrapping_add(xa)
326                .wrapping_add(0xbebfbc70),
327            23,
328        ));
329        a = b.wrapping_add(bits::rotate_left32(
330            (b ^ c ^ d)
331                .wrapping_add(a)
332                .wrapping_add(xd)
333                .wrapping_add(0x289b7ec6),
334            4,
335        ));
336        d = a.wrapping_add(bits::rotate_left32(
337            (a ^ b ^ c)
338                .wrapping_add(d)
339                .wrapping_add(x0)
340                .wrapping_add(0xeaa127fa),
341            11,
342        ));
343        c = d.wrapping_add(bits::rotate_left32(
344            (d ^ a ^ b)
345                .wrapping_add(c)
346                .wrapping_add(x3)
347                .wrapping_add(0xd4ef3085),
348            16,
349        ));
350        b = c.wrapping_add(bits::rotate_left32(
351            (c ^ d ^ a)
352                .wrapping_add(b)
353                .wrapping_add(x6)
354                .wrapping_add(0x04881d05),
355            23,
356        ));
357        a = b.wrapping_add(bits::rotate_left32(
358            (b ^ c ^ d)
359                .wrapping_add(a)
360                .wrapping_add(x9)
361                .wrapping_add(0xd9d4d039),
362            4,
363        ));
364        d = a.wrapping_add(bits::rotate_left32(
365            (a ^ b ^ c)
366                .wrapping_add(d)
367                .wrapping_add(xc)
368                .wrapping_add(0xe6db99e5),
369            11,
370        ));
371        c = d.wrapping_add(bits::rotate_left32(
372            (d ^ a ^ b)
373                .wrapping_add(c)
374                .wrapping_add(xf)
375                .wrapping_add(0x1fa27cf8),
376            16,
377        ));
378        b = c.wrapping_add(bits::rotate_left32(
379            (c ^ d ^ a)
380                .wrapping_add(b)
381                .wrapping_add(x2)
382                .wrapping_add(0xc4ac5665),
383            23,
384        ));
385
386        // round 4
387        a = b.wrapping_add(bits::rotate_left32(
388            (c ^ (b | !d))
389                .wrapping_add(a)
390                .wrapping_add(x0)
391                .wrapping_add(0xf4292244),
392            6,
393        ));
394        d = a.wrapping_add(bits::rotate_left32(
395            (b ^ (a | !c))
396                .wrapping_add(d)
397                .wrapping_add(x7)
398                .wrapping_add(0x432aff97),
399            10,
400        ));
401        c = d.wrapping_add(bits::rotate_left32(
402            (a ^ (d | !b))
403                .wrapping_add(c)
404                .wrapping_add(xe)
405                .wrapping_add(0xab9423a7),
406            15,
407        ));
408        b = c.wrapping_add(bits::rotate_left32(
409            (d ^ (c | !a))
410                .wrapping_add(b)
411                .wrapping_add(x5)
412                .wrapping_add(0xfc93a039),
413            21,
414        ));
415        a = b.wrapping_add(bits::rotate_left32(
416            (c ^ (b | !d))
417                .wrapping_add(a)
418                .wrapping_add(xc)
419                .wrapping_add(0x655b59c3),
420            6,
421        ));
422        d = a.wrapping_add(bits::rotate_left32(
423            (b ^ (a | !c))
424                .wrapping_add(d)
425                .wrapping_add(x3)
426                .wrapping_add(0x8f0ccc92),
427            10,
428        ));
429        c = d.wrapping_add(bits::rotate_left32(
430            (a ^ (d | !b))
431                .wrapping_add(c)
432                .wrapping_add(xa)
433                .wrapping_add(0xffeff47d),
434            15,
435        ));
436        b = c.wrapping_add(bits::rotate_left32(
437            (d ^ (c | !a))
438                .wrapping_add(b)
439                .wrapping_add(x1)
440                .wrapping_add(0x85845dd1),
441            21,
442        ));
443        a = b.wrapping_add(bits::rotate_left32(
444            (c ^ (b | !d))
445                .wrapping_add(a)
446                .wrapping_add(x8)
447                .wrapping_add(0x6fa87e4f),
448            6,
449        ));
450        d = a.wrapping_add(bits::rotate_left32(
451            (b ^ (a | !c))
452                .wrapping_add(d)
453                .wrapping_add(xf)
454                .wrapping_add(0xfe2ce6e0),
455            10,
456        ));
457        c = d.wrapping_add(bits::rotate_left32(
458            (a ^ (d | !b))
459                .wrapping_add(c)
460                .wrapping_add(x6)
461                .wrapping_add(0xa3014314),
462            15,
463        ));
464        b = c.wrapping_add(bits::rotate_left32(
465            (d ^ (c | !a))
466                .wrapping_add(b)
467                .wrapping_add(xd)
468                .wrapping_add(0x4e0811a1),
469            21,
470        ));
471        a = b.wrapping_add(bits::rotate_left32(
472            (c ^ (b | !d))
473                .wrapping_add(a)
474                .wrapping_add(x4)
475                .wrapping_add(0xf7537e82),
476            6,
477        ));
478        d = a.wrapping_add(bits::rotate_left32(
479            (b ^ (a | !c))
480                .wrapping_add(d)
481                .wrapping_add(xb)
482                .wrapping_add(0xbd3af235),
483            10,
484        ));
485        c = d.wrapping_add(bits::rotate_left32(
486            (a ^ (d | !b))
487                .wrapping_add(c)
488                .wrapping_add(x2)
489                .wrapping_add(0x2ad7d2bb),
490            15,
491        ));
492        b = c.wrapping_add(bits::rotate_left32(
493            (d ^ (c | !a))
494                .wrapping_add(b)
495                .wrapping_add(x9)
496                .wrapping_add(0xeb86d391),
497            21,
498        ));
499
500        // add saved state
501        a = a.wrapping_add(aa);
502        b = b.wrapping_add(bb);
503        c = c.wrapping_add(cc);
504        d = d.wrapping_add(dd);
505        i += md5::BLOCK_SIZE;
506    }
507
508    // save state
509    (state[0], state[1], state[2], state[3]) = (a, b, c, d);
510}