annotate Modules/md5.c @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents b36cb4602e21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
1 /*
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
2 Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
3
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
4 This software is provided 'as-is', without any express or implied
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
5 warranty. In no event will the authors be held liable for any damages
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
6 arising from the use of this software.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
7
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
8 Permission is granted to anyone to use this software for any purpose,
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
9 including commercial applications, and to alter it and redistribute it
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
10 freely, subject to the following restrictions:
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
11
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
12 1. The origin of this software must not be misrepresented; you must not
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
13 claim that you wrote the original software. If you use this software
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
14 in a product, an acknowledgment in the product documentation would be
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
15 appreciated but is not required.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
16 2. Altered source versions must be plainly marked as such, and must not be
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
17 misrepresented as being the original software.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
18 3. This notice may not be removed or altered from any source distribution.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
19
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
20 L. Peter Deutsch
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
21 ghost@aladdin.com
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
22
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
23 */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
24 /* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
25 /*
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
26 Independent implementation of MD5 (RFC 1321).
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
27
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
28 This code implements the MD5 Algorithm defined in RFC 1321, whose
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
29 text is available at
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
30 http://www.ietf.org/rfc/rfc1321.txt
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
31 The code is derived from the text of the RFC, including the test suite
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
32 (section A.5) but excluding the rest of Appendix A. It does not include
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
33 any code or documentation that is identified in the RFC as being
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
34 copyrighted.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
35
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
36 The original and principal author of md5.c is L. Peter Deutsch
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
37 <ghost@aladdin.com>. Other authors are noted in the change history
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
38 that follows (in reverse chronological order):
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
39
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
40 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
41 either statically or dynamically; added missing #include <string.h>
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
42 in library.
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
43 2002-03-11 lpd Corrected argument list for main(), and added int return
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
44 type, in test program and T value program.
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
45 2002-02-21 lpd Added missing #include <stdio.h> in test program.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
46 2000-07-03 lpd Patched to eliminate warnings about "constant is
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
47 unsigned in ANSI C, signed in traditional"; made test program
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
48 self-checking.
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
49 1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
50 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
51 1999-05-03 lpd Original version.
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
52 */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
53
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
54 #include "md5.h"
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
55 #include <string.h>
45337
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
56 #include <limits.h>
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
57
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
58 #undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
59 #ifdef ARCH_IS_BIG_ENDIAN
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
60 # define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
61 #else
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
62 # define BYTE_ORDER 0
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
63 #endif
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
64
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
65 #define T_MASK ((md5_word_t)~0)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
66 #define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
67 #define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
68 #define T3 0x242070db
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
69 #define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
70 #define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
71 #define T6 0x4787c62a
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
72 #define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
73 #define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
74 #define T9 0x698098d8
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
75 #define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
76 #define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
77 #define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
78 #define T13 0x6b901122
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
79 #define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
80 #define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
81 #define T16 0x49b40821
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
82 #define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
83 #define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
84 #define T19 0x265e5a51
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
85 #define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
86 #define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
87 #define T22 0x02441453
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
88 #define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
89 #define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
90 #define T25 0x21e1cde6
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
91 #define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
92 #define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
93 #define T28 0x455a14ed
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
94 #define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
95 #define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
96 #define T31 0x676f02d9
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
97 #define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
98 #define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
99 #define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
100 #define T35 0x6d9d6122
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
101 #define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
102 #define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
103 #define T38 0x4bdecfa9
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
104 #define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
105 #define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
106 #define T41 0x289b7ec6
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
107 #define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
108 #define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
109 #define T44 0x04881d05
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
110 #define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
111 #define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
112 #define T47 0x1fa27cf8
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
113 #define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
114 #define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
115 #define T50 0x432aff97
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
116 #define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
117 #define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
118 #define T53 0x655b59c3
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
119 #define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
120 #define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
121 #define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
122 #define T57 0x6fa87e4f
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
123 #define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
124 #define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
125 #define T60 0x4e0811a1
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
126 #define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
127 #define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
128 #define T63 0x2ad7d2bb
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
129 #define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
130
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
131
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
132 static void
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
133 md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
134 {
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
135 md5_word_t
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
136 a = pms->abcd[0], b = pms->abcd[1],
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
137 c = pms->abcd[2], d = pms->abcd[3];
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
138 md5_word_t t;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
139 #if BYTE_ORDER > 0
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
140 /* Define storage only for big-endian CPUs. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
141 md5_word_t X[16];
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
142 #else
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
143 /* Define storage for little-endian or both types of CPUs. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
144 md5_word_t xbuf[16];
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
145 const md5_word_t *X;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
146 #endif
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
147
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
148 {
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
149 #if BYTE_ORDER == 0
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
150 /*
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
151 * Determine dynamically whether this is a big-endian or
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
152 * little-endian machine, since we can use a more efficient
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
153 * algorithm on the latter.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
154 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
155 static const int w = 1;
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
156
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
157 if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
158 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
159 #if BYTE_ORDER <= 0 /* little-endian */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
160 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
161 /*
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
162 * On little-endian machines, we can process properly aligned
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
163 * data without copying it.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
164 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
165 if (!((data - (const md5_byte_t *)0) & 3)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
166 /* data are properly aligned */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
167 X = (const md5_word_t *)data;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
168 } else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
169 /* not aligned */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
170 memcpy(xbuf, data, 64);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
171 X = xbuf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
172 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
173 }
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
174 #endif
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
175 #if BYTE_ORDER == 0
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
176 else /* dynamic big-endian */
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
177 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
178 #if BYTE_ORDER >= 0 /* big-endian */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
179 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
180 /*
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
181 * On big-endian machines, we must arrange the bytes in the
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
182 * right order.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
183 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
184 const md5_byte_t *xp = data;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
185 int i;
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
186
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
187 # if BYTE_ORDER == 0
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
188 X = xbuf; /* (dynamic only) */
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
189 # else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
190 # define xbuf X /* (static only) */
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
191 # endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
192 for (i = 0; i < 16; ++i, xp += 4)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
193 xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
194 }
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
195 #endif
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
196 }
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
197
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
198 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
199
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
200 /* Round 1. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
201 /* Let [abcd k s i] denote the operation
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
202 a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
203 #define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
204 #define SET(a, b, c, d, k, s, Ti)\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
205 t = a + F(b,c,d) + X[k] + Ti;\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
206 a = ROTATE_LEFT(t, s) + b
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
207 /* Do the following 16 operations. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
208 SET(a, b, c, d, 0, 7, T1);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
209 SET(d, a, b, c, 1, 12, T2);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
210 SET(c, d, a, b, 2, 17, T3);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
211 SET(b, c, d, a, 3, 22, T4);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
212 SET(a, b, c, d, 4, 7, T5);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
213 SET(d, a, b, c, 5, 12, T6);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
214 SET(c, d, a, b, 6, 17, T7);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
215 SET(b, c, d, a, 7, 22, T8);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
216 SET(a, b, c, d, 8, 7, T9);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
217 SET(d, a, b, c, 9, 12, T10);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
218 SET(c, d, a, b, 10, 17, T11);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
219 SET(b, c, d, a, 11, 22, T12);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
220 SET(a, b, c, d, 12, 7, T13);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
221 SET(d, a, b, c, 13, 12, T14);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
222 SET(c, d, a, b, 14, 17, T15);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
223 SET(b, c, d, a, 15, 22, T16);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
224 #undef SET
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
225
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
226 /* Round 2. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
227 /* Let [abcd k s i] denote the operation
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
228 a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
229 #define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
230 #define SET(a, b, c, d, k, s, Ti)\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
231 t = a + G(b,c,d) + X[k] + Ti;\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
232 a = ROTATE_LEFT(t, s) + b
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
233 /* Do the following 16 operations. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
234 SET(a, b, c, d, 1, 5, T17);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
235 SET(d, a, b, c, 6, 9, T18);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
236 SET(c, d, a, b, 11, 14, T19);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
237 SET(b, c, d, a, 0, 20, T20);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
238 SET(a, b, c, d, 5, 5, T21);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
239 SET(d, a, b, c, 10, 9, T22);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
240 SET(c, d, a, b, 15, 14, T23);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
241 SET(b, c, d, a, 4, 20, T24);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
242 SET(a, b, c, d, 9, 5, T25);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
243 SET(d, a, b, c, 14, 9, T26);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
244 SET(c, d, a, b, 3, 14, T27);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
245 SET(b, c, d, a, 8, 20, T28);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
246 SET(a, b, c, d, 13, 5, T29);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
247 SET(d, a, b, c, 2, 9, T30);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
248 SET(c, d, a, b, 7, 14, T31);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
249 SET(b, c, d, a, 12, 20, T32);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
250 #undef SET
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
251
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
252 /* Round 3. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
253 /* Let [abcd k s t] denote the operation
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
254 a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
255 #define H(x, y, z) ((x) ^ (y) ^ (z))
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
256 #define SET(a, b, c, d, k, s, Ti)\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
257 t = a + H(b,c,d) + X[k] + Ti;\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
258 a = ROTATE_LEFT(t, s) + b
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
259 /* Do the following 16 operations. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
260 SET(a, b, c, d, 5, 4, T33);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
261 SET(d, a, b, c, 8, 11, T34);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
262 SET(c, d, a, b, 11, 16, T35);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
263 SET(b, c, d, a, 14, 23, T36);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
264 SET(a, b, c, d, 1, 4, T37);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
265 SET(d, a, b, c, 4, 11, T38);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
266 SET(c, d, a, b, 7, 16, T39);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
267 SET(b, c, d, a, 10, 23, T40);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
268 SET(a, b, c, d, 13, 4, T41);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
269 SET(d, a, b, c, 0, 11, T42);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
270 SET(c, d, a, b, 3, 16, T43);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
271 SET(b, c, d, a, 6, 23, T44);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
272 SET(a, b, c, d, 9, 4, T45);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
273 SET(d, a, b, c, 12, 11, T46);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
274 SET(c, d, a, b, 15, 16, T47);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
275 SET(b, c, d, a, 2, 23, T48);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
276 #undef SET
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
277
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
278 /* Round 4. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
279 /* Let [abcd k s t] denote the operation
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
280 a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
281 #define I(x, y, z) ((y) ^ ((x) | ~(z)))
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
282 #define SET(a, b, c, d, k, s, Ti)\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
283 t = a + I(b,c,d) + X[k] + Ti;\
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
284 a = ROTATE_LEFT(t, s) + b
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
285 /* Do the following 16 operations. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
286 SET(a, b, c, d, 0, 6, T49);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
287 SET(d, a, b, c, 7, 10, T50);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
288 SET(c, d, a, b, 14, 15, T51);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
289 SET(b, c, d, a, 5, 21, T52);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
290 SET(a, b, c, d, 12, 6, T53);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
291 SET(d, a, b, c, 3, 10, T54);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
292 SET(c, d, a, b, 10, 15, T55);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
293 SET(b, c, d, a, 1, 21, T56);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
294 SET(a, b, c, d, 8, 6, T57);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
295 SET(d, a, b, c, 15, 10, T58);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
296 SET(c, d, a, b, 6, 15, T59);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
297 SET(b, c, d, a, 13, 21, T60);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
298 SET(a, b, c, d, 4, 6, T61);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
299 SET(d, a, b, c, 11, 10, T62);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
300 SET(c, d, a, b, 2, 15, T63);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
301 SET(b, c, d, a, 9, 21, T64);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
302 #undef SET
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
303
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
304 /* Then perform the following additions. (That is increment each
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
305 of the four registers by the value it had before this block
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
306 was started.) */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
307 pms->abcd[0] += a;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
308 pms->abcd[1] += b;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
309 pms->abcd[2] += c;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
310 pms->abcd[3] += d;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
311 }
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
312
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
313 void
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
314 md5_init(md5_state_t *pms)
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
315 {
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
316 pms->count[0] = pms->count[1] = 0;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
317 pms->abcd[0] = 0x67452301;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
318 pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
319 pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
320 pms->abcd[3] = 0x10325476;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
321 }
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
322
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
323 void
51580
1e7ac14e4938 - Issue #3745: Fix hashlib to always reject unicode and non buffer-api
Gregory P. Smith <greg@mad-scientist.com>
parents: 45337
diff changeset
324 md5_append(md5_state_t *pms, const md5_byte_t *data, unsigned int nbytes)
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
325 {
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
326 const md5_byte_t *p = data;
51580
1e7ac14e4938 - Issue #3745: Fix hashlib to always reject unicode and non buffer-api
Gregory P. Smith <greg@mad-scientist.com>
parents: 45337
diff changeset
327 unsigned int left = nbytes;
54857
8882f8fe823c Fix a compilation warning on Windows
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51580
diff changeset
328 unsigned int offset = (pms->count[0] >> 3) & 63;
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
329 md5_word_t nbits = (md5_word_t)(nbytes << 3);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
330
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
331 if (nbytes <= 0)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
332 return;
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
333
45337
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
334 /* this special case is handled recursively */
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
335 if (nbytes > INT_MAX - offset) {
51580
1e7ac14e4938 - Issue #3745: Fix hashlib to always reject unicode and non buffer-api
Gregory P. Smith <greg@mad-scientist.com>
parents: 45337
diff changeset
336 unsigned int overlap;
45337
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
337
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
338 /* handle the append in two steps to prevent overflow */
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
339 overlap = 64 - offset;
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
340
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
341 md5_append(pms, data, overlap);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
342 md5_append(pms, data + overlap, nbytes - overlap);
45337
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
343 return;
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
344 }
8cbe0bd93c28 Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents: 37436
diff changeset
345
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
346 /* Update the message length. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
347 pms->count[1] += nbytes >> 29;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
348 pms->count[0] += nbits;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
349 if (pms->count[0] < nbits)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
350 pms->count[1]++;
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
351
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
352 /* Process an initial partial block. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
353 if (offset) {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 54857
diff changeset
354 unsigned int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
355
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
356 memcpy(pms->buf + offset, p, copy);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
357 if (offset + copy < 64)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
358 return;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
359 p += copy;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
360 left -= copy;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
361 md5_process(pms, pms->buf);
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
362 }
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
363
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
364 /* Process full blocks. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
365 for (; left >= 64; p += 64, left -= 64)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
366 md5_process(pms, p);
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
367
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
368 /* Process a final partial block. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
369 if (left)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
370 memcpy(pms->buf, p, left);
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
371 }
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
372
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
373 void
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
374 md5_finish(md5_state_t *pms, md5_byte_t digest[16])
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
375 {
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
376 static const md5_byte_t pad[64] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
377 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
378 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
381 };
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
382 md5_byte_t data[8];
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
383 int i;
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
384
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
385 /* Save the length before padding. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
386 for (i = 0; i < 8; ++i)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
387 data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
388 /* Pad to 56 bytes mod 64. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
389 md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
390 /* Append the length. */
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
391 md5_append(pms, data, 8);
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
392 for (i = 0; i < 16; ++i)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 45337
diff changeset
393 digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
37436
115428bb1d3f - Patch #360466: Replace the MD5 implementation from RSA Data Security Inc
Matthias Klose <doko@ubuntu.com>
parents:
diff changeset
394 }