Addes libopenjpeg (jpeg2000) support to the Makefiles
[blender.git] / source / blender / imbuf / intern / md5.c
1 /* md5.c - Functions to compute MD5 message digest of files or memory blocks
2    according to the definition of MD5 in RFC 1321 from April 1992.
3    Copyright (C) 1995 Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2, or (at your option)
8    any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
18
19 /* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>.  */
20
21 #ifdef HAVE_CONFIG_H
22 # include <config.h>
23 #endif
24
25 #include <sys/types.h>
26
27 # include <stdlib.h>
28 # include <string.h>
29
30 #include "md5.h"
31
32 #ifdef WORDS_BIGENDIAN
33 # define SWAP(n)                                                        \
34     (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
35 #else
36 # define SWAP(n) (n)
37 #endif
38
39
40 /* This array contains the bytes used to pad the buffer to the next
41    64-byte boundary.  (RFC 1321, 3.1: Step 1)  */
42 static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */ };
43
44
45 /* Initialize structure containing state of computation.
46    (RFC 1321, 3.3: Step 3)  */
47 void
48 md5_init_ctx (ctx)
49      struct md5_ctx *ctx;
50 {
51   ctx->A = 0x67452301;
52   ctx->B = 0xefcdab89;
53   ctx->C = 0x98badcfe;
54   ctx->D = 0x10325476;
55 }
56
57 /* Put result from CTX in first 16 bytes following RESBUF.  The result must
58    be in little endian byte order.  */
59 void *
60 md5_read_ctx (ctx, resbuf)
61      const struct md5_ctx *ctx;
62      void *resbuf;
63 {
64   ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
65   ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
66   ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
67   ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
68
69   return resbuf;
70 }
71
72 /* Compute MD5 message digest for bytes read from STREAM.  The
73    resulting message digest number will be written into the 16 bytes
74    beginning at RESBLOCK.  */
75 int
76 md5_stream (stream, resblock)
77      FILE *stream;
78      void *resblock;
79 {
80   /* Important: BLOCKSIZE must be a multiple of 64.  */
81 #define BLOCKSIZE 4096
82   struct md5_ctx ctx;
83   md5_uint32 len[2];
84   char buffer[BLOCKSIZE + 72];
85   size_t pad, sum;
86
87   /* Initialize the computation context.  */
88   md5_init_ctx (&ctx);
89
90   len[0] = 0;
91   len[1] = 0;
92
93   /* Iterate over full file contents.  */
94   while (1)
95     {
96       /* We read the file in blocks of BLOCKSIZE bytes.  One call of the
97          computation function processes the whole buffer so that with the
98          next round of the loop another block can be read.  */
99       size_t n;
100       sum = 0;
101
102       /* Read block.  Take care for partial reads.  */
103       do
104         {
105           n = fread (buffer, 1, BLOCKSIZE - sum, stream);
106
107           sum += n;
108         }
109       while (sum < BLOCKSIZE && n != 0);
110       if (n == 0 && ferror (stream))
111         return 1;
112
113       /* RFC 1321 specifies the possible length of the file up to 2^64 bits.
114          Here we only compute the number of bytes.  Do a double word
115          increment.  */
116       len[0] += sum;
117       if (len[0] < sum)
118         ++len[1];
119
120       /* If end of file is reached, end the loop.  */
121       if (n == 0)
122         break;
123
124       /* Process buffer with BLOCKSIZE bytes.  Note that
125                         BLOCKSIZE % 64 == 0
126        */
127       md5_process_block (buffer, BLOCKSIZE, &ctx);
128     }
129
130   /* We can copy 64 byte because the buffer is always big enough.  FILLBUF
131      contains the needed bits.  */
132   memcpy (&buffer[sum], fillbuf, 64);
133
134   /* Compute amount of padding bytes needed.  Alignment is done to
135                 (N + PAD) % 64 == 56
136      There is always at least one byte padded.  I.e. even the alignment
137      is correctly aligned 64 padding bytes are added.  */
138   pad = sum & 63;
139   pad = pad >= 56 ? 64 + 56 - pad : 56 - pad;
140
141   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
142   *(md5_uint32 *) &buffer[sum + pad] = SWAP (len[0] << 3);
143   *(md5_uint32 *) &buffer[sum + pad + 4] = SWAP ((len[1] << 3)
144                                                  | (len[0] >> 29));
145
146   /* Process last bytes.  */
147   md5_process_block (buffer, sum + pad + 8, &ctx);
148
149   /* Construct result in desired memory.  */
150   md5_read_ctx (&ctx, resblock);
151   return 0;
152 }
153
154 /* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The
155    result is always in little endian byte order, so that a byte-wise
156    output yields to the wanted ASCII representation of the message
157    digest.  */
158 void *
159 md5_buffer (buffer, len, resblock)
160      const char *buffer;
161      size_t len;
162      void *resblock;
163 {
164   struct md5_ctx ctx;
165   char restbuf[64 + 72];
166   size_t blocks = len & ~63;
167   size_t pad, rest;
168
169   /* Initialize the computation context.  */
170   md5_init_ctx (&ctx);
171
172   /* Process whole buffer but last len % 64 bytes.  */
173   md5_process_block (buffer, blocks, &ctx);
174
175   /* REST bytes are not processed yet.  */
176   rest = len - blocks;
177   /* Copy to own buffer.  */
178   memcpy (restbuf, &buffer[blocks], rest);
179   /* Append needed fill bytes at end of buffer.  We can copy 64 byte
180      because the buffer is always big enough.  */
181   memcpy (&restbuf[rest], fillbuf, 64);
182
183   /* PAD bytes are used for padding to correct alignment.  Note that
184      always at least one byte is padded.  */
185   pad = rest >= 56 ? 64 + 56 - rest : 56 - rest;
186
187   /* Put length of buffer in *bits* in last eight bytes.  */
188   *(md5_uint32 *) &restbuf[rest + pad] = (md5_uint32) SWAP (len << 3);
189   *(md5_uint32 *) &restbuf[rest + pad + 4] = (md5_uint32) SWAP (len >> 29);
190
191   /* Process last bytes.  */
192   md5_process_block (restbuf, rest + pad + 8, &ctx);
193
194   /* Put result in desired memory area.  */
195   return md5_read_ctx (&ctx, resblock);
196 }
197
198
199 /* These are the four functions used in the four steps of the MD5 algorithm
200    and defined in the RFC 1321.  The first function is a little bit optimized
201    (as found in Colin Plumbs public domain implementation).  */
202 /* #define FF(b, c, d) ((b & c) | (~b & d)) */
203 #define FF(b, c, d) (d ^ (b & (c ^ d)))
204 #define FG(b, c, d) FF (d, b, c)
205 #define FH(b, c, d) (b ^ c ^ d)
206 #define FI(b, c, d) (c ^ (b | ~d))
207
208 /* Process LEN bytes of BUFFER, accumulating context into CTX.
209    It is assumed that LEN % 64 == 0.  */
210
211 void
212 md5_process_block (buffer, len, ctx)
213      const void *buffer;
214      size_t len;
215      struct md5_ctx *ctx;
216 {
217   md5_uint32 correct_words[16];
218   const md5_uint32 *words = buffer;
219   size_t nwords = len / sizeof (md5_uint32);
220   const md5_uint32 *endp = words + nwords;
221   md5_uint32 A = ctx->A;
222   md5_uint32 B = ctx->B;
223   md5_uint32 C = ctx->C;
224   md5_uint32 D = ctx->D;
225
226   /* Process all bytes in the buffer with 64 bytes in each round of
227      the loop.  */
228   while (words < endp)
229     {
230       md5_uint32 *cwp = correct_words;
231       md5_uint32 A_save = A;
232       md5_uint32 B_save = B;
233       md5_uint32 C_save = C;
234       md5_uint32 D_save = D;
235
236       /* First round: using the given function, the context and a constant
237          the next context is computed.  Because the algorithms processing
238          unit is a 32-bit word and it is determined to work on words in
239          little endian byte order we perhaps have to change the byte order
240          before the computation.  To reduce the work for the next steps
241          we store the swapped words in the array CORRECT_WORDS.  */
242
243 #define OP(a, b, c, d, s, T)                                            \
244       do                                                                \
245         {                                                               \
246           a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T;             \
247           ++words;                                                      \
248           CYCLIC (a, s);                                                \
249           a += b;                                                       \
250         }                                                               \
251       while (0)
252
253       /* It is unfortunate that C does not provide an operator for
254          cyclic rotation.  Hope the C compiler is smart enough.  */
255 #define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))
256
257       /* Before we start, one word to the strange constants.
258          They are defined in RFC 1321 as
259
260          T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
261        */
262
263       /* Round 1.  */
264       OP (A, B, C, D,  7, 0xd76aa478);
265       OP (D, A, B, C, 12, 0xe8c7b756);
266       OP (C, D, A, B, 17, 0x242070db);
267       OP (B, C, D, A, 22, 0xc1bdceee);
268       OP (A, B, C, D,  7, 0xf57c0faf);
269       OP (D, A, B, C, 12, 0x4787c62a);
270       OP (C, D, A, B, 17, 0xa8304613);
271       OP (B, C, D, A, 22, 0xfd469501);
272       OP (A, B, C, D,  7, 0x698098d8);
273       OP (D, A, B, C, 12, 0x8b44f7af);
274       OP (C, D, A, B, 17, 0xffff5bb1);
275       OP (B, C, D, A, 22, 0x895cd7be);
276       OP (A, B, C, D,  7, 0x6b901122);
277       OP (D, A, B, C, 12, 0xfd987193);
278       OP (C, D, A, B, 17, 0xa679438e);
279       OP (B, C, D, A, 22, 0x49b40821);
280
281       /* For the second to fourth round we have the possibly swapped words
282          in CORRECT_WORDS.  Redefine the macro to take an additional first
283          argument specifying the function to use.  */
284 #undef OP
285 #define OP(f, a, b, c, d, k, s, T)                                      \
286       do                                                                \
287         {                                                               \
288           a += f (b, c, d) + correct_words[k] + T;                      \
289           CYCLIC (a, s);                                                \
290           a += b;                                                       \
291         }                                                               \
292       while (0)
293
294       /* Round 2.  */
295       OP (FG, A, B, C, D,  1,  5, 0xf61e2562);
296       OP (FG, D, A, B, C,  6,  9, 0xc040b340);
297       OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
298       OP (FG, B, C, D, A,  0, 20, 0xe9b6c7aa);
299       OP (FG, A, B, C, D,  5,  5, 0xd62f105d);
300       OP (FG, D, A, B, C, 10,  9, 0x02441453);
301       OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
302       OP (FG, B, C, D, A,  4, 20, 0xe7d3fbc8);
303       OP (FG, A, B, C, D,  9,  5, 0x21e1cde6);
304       OP (FG, D, A, B, C, 14,  9, 0xc33707d6);
305       OP (FG, C, D, A, B,  3, 14, 0xf4d50d87);
306       OP (FG, B, C, D, A,  8, 20, 0x455a14ed);
307       OP (FG, A, B, C, D, 13,  5, 0xa9e3e905);
308       OP (FG, D, A, B, C,  2,  9, 0xfcefa3f8);
309       OP (FG, C, D, A, B,  7, 14, 0x676f02d9);
310       OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
311
312       /* Round 3.  */
313       OP (FH, A, B, C, D,  5,  4, 0xfffa3942);
314       OP (FH, D, A, B, C,  8, 11, 0x8771f681);
315       OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
316       OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
317       OP (FH, A, B, C, D,  1,  4, 0xa4beea44);
318       OP (FH, D, A, B, C,  4, 11, 0x4bdecfa9);
319       OP (FH, C, D, A, B,  7, 16, 0xf6bb4b60);
320       OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
321       OP (FH, A, B, C, D, 13,  4, 0x289b7ec6);
322       OP (FH, D, A, B, C,  0, 11, 0xeaa127fa);
323       OP (FH, C, D, A, B,  3, 16, 0xd4ef3085);
324       OP (FH, B, C, D, A,  6, 23, 0x04881d05);
325       OP (FH, A, B, C, D,  9,  4, 0xd9d4d039);
326       OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
327       OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
328       OP (FH, B, C, D, A,  2, 23, 0xc4ac5665);
329
330       /* Round 4.  */
331       OP (FI, A, B, C, D,  0,  6, 0xf4292244);
332       OP (FI, D, A, B, C,  7, 10, 0x432aff97);
333       OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
334       OP (FI, B, C, D, A,  5, 21, 0xfc93a039);
335       OP (FI, A, B, C, D, 12,  6, 0x655b59c3);
336       OP (FI, D, A, B, C,  3, 10, 0x8f0ccc92);
337       OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
338       OP (FI, B, C, D, A,  1, 21, 0x85845dd1);
339       OP (FI, A, B, C, D,  8,  6, 0x6fa87e4f);
340       OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
341       OP (FI, C, D, A, B,  6, 15, 0xa3014314);
342       OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
343       OP (FI, A, B, C, D,  4,  6, 0xf7537e82);
344       OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
345       OP (FI, C, D, A, B,  2, 15, 0x2ad7d2bb);
346       OP (FI, B, C, D, A,  9, 21, 0xeb86d391);
347
348       /* Add the starting values of the context.  */
349       A += A_save;
350       B += B_save;
351       C += C_save;
352       D += D_save;
353     }
354
355   /* Put checksum in context given as argument.  */
356   ctx->A = A;
357   ctx->B = B;
358   ctx->C = C;
359   ctx->D = D;
360 }
361