annotate libvo/md5sum.c @ 13840:62af31e1bdc8

more panscan fix
author nplourde
date Mon, 01 Nov 2004 16:17:49 +0000
parents 07708ec98d87
children 31109192db12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13395
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
1 /* ========================================================================== **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
2 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
3 * MD5.c
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
4 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
5 * Copyright:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
6 * Copyright (C) 2003, 2004 by Christopher R. Hertel
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
7 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
8 * Email: crh@ubiqx.mn.org
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
9 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
10 * $Id$
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
11 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
12 * -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
13 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
14 * Description:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
15 * Implements the MD5 hash algorithm, as described in RFC 1321.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
16 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
17 * -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
18 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
19 * License:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
20 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
21 * This library is free software; you can redistribute it and/or
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
22 * modify it under the terms of the GNU Lesser General Public
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
23 * License as published by the Free Software Foundation; either
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
24 * version 2.1 of the License, or (at your option) any later version.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
25 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
26 * This library is distributed in the hope that it will be useful,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
29 * Lesser General Public License for more details.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
30 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
31 * You should have received a copy of the GNU Lesser General Public
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
32 * License along with this library; if not, write to the Free Software
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
33 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
34 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
35 * -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
36 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
37 * Notes:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
38 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
39 * None of this will make any sense unless you're studying RFC 1321 as you
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
40 * read the code.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
41 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
42 * MD5 is described in RFC 1321.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
43 * The MD*4* algorithm is described in RFC 1320 (that's 1321 - 1).
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
44 * MD5 is very similar to MD4, but not quite similar enough to justify
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
45 * putting the two into a single module. Besides, I wanted to add a few
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
46 * extra functions to this one to expand its usability.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
47 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
48 * There are three primary motivations for this particular implementation.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
49 * 1) Programmer's pride. I wanted to be able to say I'd done it, and I
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
50 * wanted to learn from the experience.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
51 * 2) Portability. I wanted an implementation that I knew to be portable
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
52 * to a reasonable number platforms. In particular, the algorithm is
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
53 * designed with little-endian platforms in mind, but I wanted an
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
54 * endian-agnostic implementation.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
55 * 3) Compactness. While not an overriding goal, I thought it worth-while
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
56 * to see if I could reduce the overall size of the result. This is in
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
57 * keeping with my hopes that this library will be suitable for use in
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
58 * some embedded environments.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
59 * Beyond that, cleanliness and clarity are always worth pursuing.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
60 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
61 * As mentioned above, the code really only makes sense if you are familiar
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
62 * with the MD5 algorithm or are using RFC 1321 as a guide. This code is
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
63 * quirky, however, so you'll want to be reading carefully.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
64 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
65 * Yeah...most of the comments are cut-and-paste from my MD4 implementation.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
66 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
67 * -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
68 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
69 * References:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
70 * IETF RFC 1321: The MD5 Message-Digest Algorithm
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
71 * Ron Rivest. IETF, April, 1992
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
72 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
73 * ========================================================================== **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
74 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
75
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
76 /* #include "MD5.h" Line of original code */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
77
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
78 #include "md5sum.h" /* Added this line */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
79
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
80 /* -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
81 * Static Constants:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
82 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
83 * K[][] - In round one, the values of k (which are used to index
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
84 * particular four-byte sequences in the input) are simply
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
85 * sequential. In later rounds, however, they are a bit more
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
86 * varied. Rather than calculate the values of k (which may
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
87 * or may not be possible--I haven't though about it) the
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
88 * values are stored in this array.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
89 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
90 * S[][] - In each round there is a left rotate operation performed as
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
91 * part of the 16 permutations. The number of bits varies in
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
92 * a repeating patter. This array keeps track of the patterns
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
93 * used in each round.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
94 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
95 * T[][] - There are four rounds of 16 permutations for a total of 64.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
96 * In each of these 64 permutation operations, a different
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
97 * constant value is added to the mix. The constants are
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
98 * based on the sine function...read RFC 1321 for more detail.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
99 * In any case, the correct constants are stored in the T[][]
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
100 * array. They're divided up into four groups of 16.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
101 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
102
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
103 static const uint8_t K[3][16] =
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
104 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
105 /* Round 1: skipped (since it is simply sequential). */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
106 { 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12 }, /* R2 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
107 { 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2 }, /* R3 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
108 { 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9 } /* R4 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
109 };
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
110
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
111 static const uint8_t S[4][4] =
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
112 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
113 { 7, 12, 17, 22 }, /* Round 1 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
114 { 5, 9, 14, 20 }, /* Round 2 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
115 { 4, 11, 16, 23 }, /* Round 3 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
116 { 6, 10, 15, 21 } /* Round 4 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
117 };
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
118
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
119
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
120 static const uint32_t T[4][16] =
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
121 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
122 { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, /* Round 1 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
123 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
124 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
125 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 },
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
126
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
127 { 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, /* Round 2 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
128 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
129 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
130 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a },
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
131
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
132 { 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, /* Round 3 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
133 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
134 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
135 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 },
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
136
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
137 { 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, /* Round 4 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
138 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
139 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
140 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 },
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
141 };
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
142
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
143
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
144 /* -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
145 * Macros:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
146 * md5F(), md5G(), md5H(), and md5I() are described in RFC 1321.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
147 * All of these operations are bitwise, and so not impacted by endian-ness.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
148 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
149 * GetLongByte()
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
150 * Extract one byte from a (32-bit) longword. A value of 0 for <idx>
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
151 * indicates the lowest order byte, while 3 indicates the highest order
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
152 * byte.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
153 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
154 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
155
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
156 #define md5F( X, Y, Z ) ( ((X) & (Y)) | ((~(X)) & (Z)) )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
157 #define md5G( X, Y, Z ) ( ((X) & (Z)) | ((Y) & (~(Z))) )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
158 #define md5H( X, Y, Z ) ( (X) ^ (Y) ^ (Z) )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
159 #define md5I( X, Y, Z ) ( (Y) ^ ((X) | (~(Z))) )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
160
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
161 #define GetLongByte( L, idx ) ((uchar)(( L >> (((idx) & 0x03) << 3) ) & 0xFF))
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
162
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
163
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
164 /* -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
165 * Static Functions:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
166 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
167
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
168 static void Permute( uint32_t ABCD[4], const uchar block[64] )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
169 /* ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
170 * Permute the ABCD "registers" using the 64-byte <block> as a driver.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
171 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
172 * Input: ABCD - Pointer to an array of four unsigned longwords.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
173 * block - An array of bytes, 64 bytes in size.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
174 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
175 * Output: none.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
176 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
177 * Notes: The MD5 algorithm operates on a set of four longwords stored
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
178 * (conceptually) in four "registers". It is easy to imagine a
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
179 * simple MD4/5 chip that would operate this way. In any case,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
180 * the mangling of the contents of those registers is driven by
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
181 * the input message. The message is chopped and finally padded
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
182 * into 64-byte chunks and each chunk is used to manipulate the
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
183 * contents of the registers.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
184 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
185 * The MD5 Algorithm calls for padding the input to ensure that
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
186 * it is a multiple of 64 bytes in length. The last 16 bytes
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
187 * of the padding space are used to store the message length
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
188 * (the length of the original message, before padding, expressed
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
189 * in terms of bits). If there is not enough room for 16 bytes
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
190 * worth of bitcount (eg., if the original message was 122 bytes
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
191 * long) then the block is padded to the end with zeros and
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
192 * passed to this function. Then *another* block is filled with
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
193 * zeros except for the last 16 bytes which contain the length.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
194 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
195 * Oh... and the algorithm requires that there be at least one
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
196 * padding byte. The first padding byte has a value of 0x80,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
197 * and any others are 0x00.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
198 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
199 * ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
200 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
201 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
202 int round;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
203 int i, j;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
204 uint8_t s;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
205 uint32_t a, b, c, d;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
206 uint32_t KeepABCD[4];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
207 uint32_t X[16];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
208
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
209 /* Store the current ABCD values for later re-use.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
210 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
211 for( i = 0; i < 4; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
212 KeepABCD[i] = ABCD[i];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
213
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
214 /* Convert the input block into an array of unsigned longs, taking care
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
215 * to read the block in Little Endian order (the algorithm assumes this).
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
216 * The uint32_t values are then handled in host order.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
217 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
218 for( i = 0, j = 0; i < 16; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
219 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
220 X[i] = (uint32_t)block[j++];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
221 X[i] |= ((uint32_t)block[j++] << 8);
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
222 X[i] |= ((uint32_t)block[j++] << 16);
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
223 X[i] |= ((uint32_t)block[j++] << 24);
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
224 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
225
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
226 /* This loop performs the four rounds of permutations.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
227 * The rounds are each very similar. The differences are in three areas:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
228 * - The function (F, G, H, or I) used to perform bitwise permutations
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
229 * on the registers,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
230 * - The order in which values from X[] are chosen.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
231 * - Changes to the number of bits by which the registers are rotated.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
232 * This implementation uses a switch statement to deal with some of the
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
233 * differences between rounds. Other differences are handled by storing
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
234 * values in arrays and using the round number to select the correct set
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
235 * of values.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
236 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
237 * (My implementation appears to be a poor compromise between speed, size,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
238 * and clarity. Ugh. [crh])
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
239 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
240 for( round = 0; round < 4; round++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
241 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
242 for( i = 0; i < 16; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
243 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
244 j = (4 - (i % 4)) & 0x3; /* <j> handles the rotation of ABCD. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
245 s = S[round][i%4]; /* <s> is the bit shift for this iteration. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
246
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
247 b = ABCD[(j+1) & 0x3]; /* Copy the b,c,d values per ABCD rotation. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
248 c = ABCD[(j+2) & 0x3]; /* This isn't really necessary, it just looks */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
249 d = ABCD[(j+3) & 0x3]; /* clean & will hopefully be optimized away. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
250
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
251 /* The actual perumation function.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
252 * This is broken out to minimize the code within the switch().
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
253 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
254 switch( round )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
255 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
256 case 0:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
257 /* round 1 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
258 a = md5F( b, c, d ) + X[i];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
259 break;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
260 case 1:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
261 /* round 2 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
262 a = md5G( b, c, d ) + X[ K[0][i] ];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
263 break;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
264 case 2:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
265 /* round 3 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
266 a = md5H( b, c, d ) + X[ K[1][i] ];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
267 break;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
268 default:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
269 /* round 4 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
270 a = md5I( b, c, d ) + X[ K[2][i] ];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
271 break;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
272 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
273 a = 0xFFFFFFFF & ( ABCD[j] + a + T[round][i] );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
274 ABCD[j] = b + (0xFFFFFFFF & (( a << s ) | ( a >> (32 - s) )));
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
275 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
276 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
277
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
278 /* Use the stored original A, B, C, D values to perform
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
279 * one last convolution.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
280 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
281 for( i = 0; i < 4; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
282 ABCD[i] = 0xFFFFFFFF & ( ABCD[i] + KeepABCD[i] );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
283
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
284 } /* Permute */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
285
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
286
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
287 /* -------------------------------------------------------------------------- **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
288 * Functions:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
289 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
290
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
291 auth_md5Ctx *auth_md5InitCtx( auth_md5Ctx *ctx )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
292 /* ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
293 * Initialize an MD5 context.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
294 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
295 * Input: ctx - A pointer to the MD5 context structure to be initialized.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
296 * Contexts are typically created thusly:
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
297 * ctx = (auth_md5Ctx *)malloc( sizeof(auth_md5Ctx) );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
298 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
299 * Output: A pointer to the initialized context (same as <ctx>).
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
300 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
301 * Notes: The purpose of the context is to make it possible to generate
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
302 * an MD5 Message Digest in stages, rather than having to pass a
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
303 * single large block to a single MD5 function. The context
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
304 * structure keeps track of various bits of state information.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
305 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
306 * Once the context is initialized, the blocks of message data
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
307 * are passed to the <auth_md5SumCtx()> function. Once the
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
308 * final bit of data has been handed to <auth_md5SumCtx()> the
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
309 * context can be closed out by calling <auth_md5CloseCtx()>,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
310 * which also calculates the final MD5 result.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
311 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
312 * Don't forget to free an allocated context structure when
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
313 * you've finished using it.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
314 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
315 * See Also: <auth_md5SumCtx()>, <auth_md5CloseCtx()>
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
316 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
317 * ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
318 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
319 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
320 ctx->len = 0;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
321 ctx->b_used = 0;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
322
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
323 ctx->ABCD[0] = 0x67452301; /* The array ABCD[] contains the four 4-byte */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
324 ctx->ABCD[1] = 0xefcdab89; /* "registers" that are manipulated to */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
325 ctx->ABCD[2] = 0x98badcfe; /* produce the MD5 digest. The input acts */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
326 ctx->ABCD[3] = 0x10325476; /* upon the registers, not the other way */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
327 /* 'round. The initial values are those */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
328 /* given in RFC 1321 (pg. 4). Note, however, that RFC 1321 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
329 /* provides these values as bytes, not as longwords, and the */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
330 /* bytes are arranged in little-endian order as if they were */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
331 /* the bytes of (little endian) 32-bit ints. That's */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
332 /* confusing as all getout (to me, anyway). The values given */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
333 /* here are provided as 32-bit values in C language format, */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
334 /* so they are endian-agnostic. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
335 return( ctx );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
336 } /* auth_md5InitCtx */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
337
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
338
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
339 auth_md5Ctx *auth_md5SumCtx( auth_md5Ctx *ctx,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
340 const uchar *src,
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
341 const int len )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
342 /* ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
343 * Build an MD5 Message Digest within the given context.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
344 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
345 * Input: ctx - Pointer to the context in which the MD5 sum is being
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
346 * built.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
347 * src - A chunk of source data. This will be used to drive
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
348 * the MD5 algorithm.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
349 * len - The number of bytes in <src>.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
350 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
351 * Output: A pointer to the updated context (same as <ctx>).
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
352 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
353 * See Also: <auth_md5InitCtx()>, <auth_md5CloseCtx()>, <auth_md5Sum()>
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
354 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
355 * ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
356 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
357 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
358 int i;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
359
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
360 /* Add the new block's length to the total length.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
361 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
362 ctx->len += (uint32_t)len;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
363
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
364 /* Copy the new block's data into the context block.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
365 * Call the Permute() function whenever the context block is full.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
366 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
367 for( i = 0; i < len; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
368 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
369 ctx->block[ ctx->b_used ] = src[i];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
370 (ctx->b_used)++;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
371 if( 64 == ctx->b_used )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
372 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
373 Permute( ctx->ABCD, ctx->block );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
374 ctx->b_used = 0;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
375 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
376 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
377
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
378 /* Return the updated context.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
379 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
380 return( ctx );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
381 } /* auth_md5SumCtx */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
382
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
383
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
384 auth_md5Ctx *auth_md5CloseCtx( auth_md5Ctx *ctx, uchar *dst )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
385 /* ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
386 * Close an MD5 Message Digest context and generate the final MD5 sum.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
387 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
388 * Input: ctx - Pointer to the context in which the MD5 sum is being
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
389 * built.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
390 * dst - A pointer to at least 16 bytes of memory, which will
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
391 * receive the finished MD5 sum.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
392 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
393 * Output: A pointer to the closed context (same as <ctx>).
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
394 * You might use this to free a malloc'd context structure. :)
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
395 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
396 * Notes: The context (<ctx>) is returned in an undefined state.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
397 * It must be re-initialized before re-use.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
398 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
399 * See Also: <auth_md5InitCtx()>, <auth_md5SumCtx()>
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
400 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
401 * ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
402 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
403 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
404 int i;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
405 uint32_t l;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
406
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
407 /* Add the required 0x80 padding initiator byte.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
408 * The auth_md5SumCtx() function always permutes and resets the context
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
409 * block when it gets full, so we know that there must be at least one
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
410 * free byte in the context block.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
411 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
412 ctx->block[ctx->b_used] = 0x80;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
413 (ctx->b_used)++;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
414
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
415 /* Zero out any remaining free bytes in the context block.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
416 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
417 for( i = ctx->b_used; i < 64; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
418 ctx->block[i] = 0;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
419
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
420 /* We need 8 bytes to store the length field.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
421 * If we don't have 8, call Permute() and reset the context block.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
422 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
423 if( 56 < ctx->b_used )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
424 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
425 Permute( ctx->ABCD, ctx->block );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
426 for( i = 0; i < 64; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
427 ctx->block[i] = 0;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
428 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
429
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
430 /* Add the total length and perform the final perumation.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
431 * Note: The 60'th byte is read from the *original* <ctx->len> value
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
432 * and shifted to the correct position. This neatly avoids
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
433 * any MAXINT numeric overflow issues.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
434 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
435 l = ctx->len << 3;
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
436 for( i = 0; i < 4; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
437 ctx->block[56+i] |= GetLongByte( l, i );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
438 ctx->block[60] = ((GetLongByte( ctx->len, 3 ) & 0xE0) >> 5); /* See Above! */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
439 Permute( ctx->ABCD, ctx->block );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
440
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
441 /* Now copy the result into the output buffer and we're done.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
442 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
443 for( i = 0; i < 4; i++ )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
444 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
445 dst[ 0+i] = GetLongByte( ctx->ABCD[0], i );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
446 dst[ 4+i] = GetLongByte( ctx->ABCD[1], i );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
447 dst[ 8+i] = GetLongByte( ctx->ABCD[2], i );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
448 dst[12+i] = GetLongByte( ctx->ABCD[3], i );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
449 }
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
450
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
451 /* Return the context.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
452 * This is done for compatibility with the other auth_md5*Ctx() functions.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
453 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
454 return( ctx );
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
455 } /* auth_md5CloseCtx */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
456
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
457
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
458 uchar *auth_md5Sum( uchar *dst, const uchar *src, const int len )
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
459 /* ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
460 * Compute an MD5 message digest.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
461 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
462 * Input: dst - Destination buffer into which the result will be written.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
463 * Must be 16 bytes, minimum.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
464 * src - Source data block to be MD5'd.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
465 * len - The length, in bytes, of the source block.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
466 * (Note that the length is given in bytes, not bits.)
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
467 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
468 * Output: A pointer to <dst>, which will contain the calculated 16-byte
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
469 * MD5 message digest.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
470 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
471 * Notes: This function is a shortcut. It takes a single input block.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
472 * For more drawn-out operations, see <auth_md5InitCtx()>.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
473 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
474 * This function is interface-compatible with the
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
475 * <auth_md4Sum()> function in the MD4 module.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
476 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
477 * The MD5 algorithm is designed to work on data with an
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
478 * arbitrary *bit* length. Most implementations, this one
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
479 * included, handle the input data in byte-sized chunks.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
480 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
481 * The MD5 algorithm does much of its work using four-byte
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
482 * words, and so can be tuned for speed based on the endian-ness
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
483 * of the host. This implementation is intended to be
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
484 * endian-neutral, which may make it a teeny bit slower than
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
485 * others. ...maybe.
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
486 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
487 * See Also: <auth_md5InitCtx()>
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
488 *
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
489 * ------------------------------------------------------------------------ **
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
490 */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
491 {
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
492 auth_md5Ctx ctx[1];
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
493
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
494 (void)auth_md5InitCtx( ctx ); /* Open a context. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
495 (void)auth_md5SumCtx( ctx, src, len ); /* Pass only one block. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
496 (void)auth_md5CloseCtx( ctx, dst ); /* Close the context. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
497
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
498 return( dst ); /* Makes life easy. */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
499 } /* auth_md5Sum */
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
500
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
501
07708ec98d87 New MD5 sum video output driver. For every frame, it calculates the MD5 sum
ivo
parents:
diff changeset
502 /* ========================================================================== */