annotate Modules/md5c.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents d6c7e40cbfdf
children 8424ec4c4bb2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1385
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 rights reserved.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 License to copy and use this software is granted provided that it
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 is identified as the "RSA Data Security, Inc. MD5 Message-Digest
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 Algorithm" in all material mentioning or referencing this software
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 or this function.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 License is also granted to make and use derivative works provided
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 that such works are identified as "derived from the RSA Data
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 Security, Inc. MD5 Message-Digest Algorithm" in all material
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 mentioning or referencing the derived work.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 RSA Data Security, Inc. makes no representations concerning either
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 the merchantability of this software or the suitability of this
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 software for any particular purpose. It is provided "as is"
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 without express or implied warranty of any kind.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 These notices must be retained in any copies of any part of this
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 documentation and/or software.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1385
diff changeset
26 #include "config.h"
1385
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 #include "md5.h"
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 /* Constants for MD5Transform routine.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 #define S11 7
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 #define S12 12
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #define S13 17
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 #define S14 22
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 #define S21 5
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 #define S22 9
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 #define S23 14
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 #define S24 20
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 #define S31 4
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #define S32 11
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 #define S33 16
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 #define S34 23
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 #define S41 6
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 #define S42 10
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 #define S43 15
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 #define S44 21
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 static void Encode PROTO_LIST
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 ((unsigned char *, UINT4 *, unsigned int));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 static void Decode PROTO_LIST
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 ((UINT4 *, unsigned char *, unsigned int));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 static unsigned char PADDING[64] = {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 };
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 /* F, G, H and I are basic MD5 functions.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 #define H(x, y, z) ((x) ^ (y) ^ (z))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 #define I(x, y, z) ((y) ^ ((x) | (~z)))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 /* ROTATE_LEFT rotates x left n bits.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 Rotation is separate from addition to prevent recomputation.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 #define FF(a, b, c, d, x, s, ac) { \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 (a) = ROTATE_LEFT ((a), (s)); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 (a) += (b); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 #define GG(a, b, c, d, x, s, ac) { \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 (a) = ROTATE_LEFT ((a), (s)); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 (a) += (b); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 #define HH(a, b, c, d, x, s, ac) { \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 (a) = ROTATE_LEFT ((a), (s)); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 (a) += (b); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 #define II(a, b, c, d, x, s, ac) { \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 (a) = ROTATE_LEFT ((a), (s)); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 (a) += (b); \
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 /* MD5 initialization. Begins an MD5 operation, writing a new context.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 void MD5Init (context)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 MD5_CTX *context; /* context */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 context->count[0] = context->count[1] = 0;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 /* Load magic initialization constants.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 context->state[0] = 0x67452301;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 context->state[1] = 0xefcdab89;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 context->state[2] = 0x98badcfe;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 context->state[3] = 0x10325476;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
111
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 /* MD5 block update operation. Continues an MD5 message-digest
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 operation, processing another message block, and updating the
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 context.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 void MD5Update (context, input, inputLen)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 MD5_CTX *context; /* context */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 unsigned char *input; /* input block */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 unsigned int inputLen; /* length of input block */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 unsigned int i, index, partLen;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
122
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 /* Compute number of bytes mod 64 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 index = (unsigned int)((context->count[0] >> 3) & 0x3F);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
125
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 /* Update number of bits */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 if ((context->count[0] += ((UINT4)inputLen << 3))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 < ((UINT4)inputLen << 3))
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 context->count[1]++;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 context->count[1] += ((UINT4)inputLen >> 29);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
131
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 partLen = 64 - index;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
133
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 /* Transform as many times as possible.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 if (inputLen >= partLen) {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 MD5_memcpy
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 ((POINTER)&context->buffer[index], (POINTER)input, partLen);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 MD5Transform (context->state, context->buffer);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
140
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 for (i = partLen; i + 63 < inputLen; i += 64)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 MD5Transform (context->state, &input[i]);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
143
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 index = 0;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 else
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 i = 0;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 /* Buffer remaining input */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 MD5_memcpy
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 ((POINTER)&context->buffer[index], (POINTER)&input[i],
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 inputLen-i);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
154
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 /* MD5 finalization. Ends an MD5 message-digest operation, writing the
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 the message digest and zeroizing the context.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 void MD5Final (digest, context)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 unsigned char digest[16]; /* message digest */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 MD5_CTX *context; /* context */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 unsigned char bits[8];
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 unsigned int index, padLen;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
164
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 /* Save number of bits */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 Encode (bits, context->count, 8);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
167
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 /* Pad out to 56 mod 64.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 index = (unsigned int)((context->count[0] >> 3) & 0x3f);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 padLen = (index < 56) ? (56 - index) : (120 - index);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 MD5Update (context, PADDING, padLen);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
173
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 /* Append length (before padding) */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 MD5Update (context, bits, 8);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
176
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 /* Store state in digest */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 Encode (digest, context->state, 16);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
179
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 /* Zeroize sensitive information.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 MD5_memset ((POINTER)context, 0, sizeof (*context));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
184
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 /* MD5 basic transformation. Transforms state based on block.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 static void MD5Transform (state, block)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 UINT4 state[4];
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 unsigned char block[64];
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
192
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 Decode (x, block, 64);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
194
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 /* Round 1 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
212
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 /* Round 2 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
230
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 /* Round 3 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
248
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 /* Round 4 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
266
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 state[0] += a;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 state[1] += b;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 state[2] += c;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 state[3] += d;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
271
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 /* Zeroize sensitive information.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 MD5_memset ((POINTER)x, 0, sizeof (x));
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
276
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 /* Encodes input (UINT4) into output (unsigned char). Assumes len is
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 a multiple of 4.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 static void Encode (output, input, len)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 unsigned char *output;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 UINT4 *input;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 unsigned int len;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 unsigned int i, j;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
286
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 for (i = 0, j = 0; j < len; i++, j += 4) {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 output[j] = (unsigned char)(input[i] & 0xff);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
294
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 /* Decodes input (unsigned char) into output (UINT4). Assumes len is
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 a multiple of 4.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 static void Decode (output, input, len)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 UINT4 *output;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 unsigned char *input;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 unsigned int len;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 unsigned int i, j;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
304
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 for (i = 0, j = 0; j < len; i++, j += 4)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
309
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 /* Note: Replace "for loop" with standard memcpy if possible.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
312
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 static void MD5_memcpy (output, input, len)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 POINTER output;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 POINTER input;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 unsigned int len;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 unsigned int i;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
319
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 for (i = 0; i < len; i++)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 output[i] = input[i];
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 }
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
323
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 /* Note: Replace "for loop" with standard memset if possible.
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 */
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 static void MD5_memset (output, value, len)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
327 POINTER output;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 int value;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
329 unsigned int len;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
330 {
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 unsigned int i;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
332
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 for (i = 0; i < len; i++)
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
334 ((char *)output)[i] = (char)value;
158f0d9cdd40 Simplify life for md5: include (slightly modified) md5.h and md5c.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 }