annotate dvdread/md5.c @ 25026:afead6ecb8ba

Remove the pause filter and the cmd queue hack, to know the mplayer going to pause by checking mpctx directly. If there's any video update before the pause then capture the frame or fallback to use last captured frame as pausing frame.
author ulion
date Thu, 15 Nov 2007 01:07:56 +0000
parents 1542693b2a30
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
1 /* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
2 /* md5.c - Functions to compute MD5 message digest of files or memory blocks
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
3 according to the definition of MD5 in RFC 1321 from April 1992.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
4 Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
5 NOTE: The canonical source of this file is maintained with the GNU C
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
6 Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
7
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
8 This program is free software; you can redistribute it and/or modify it
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
11 later version.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
12
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
16 GNU General Public License for more details.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
17
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
19 along with this program; if not, write to the Free Software Foundation,
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
20 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
21
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
22 /* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
23
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
25 # include <config.h>
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
26 #endif
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
27
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
28 #include <sys/types.h>
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
29
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
30 #if STDC_HEADERS || defined _LIBC
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
31 # include <stdlib.h>
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
32 # include <string.h>
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
33 #else
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
34 # ifndef HAVE_MEMCPY
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
35 # define memcpy(d, s, n) bcopy ((s), (d), (n))
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
36 # endif
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
37 #endif
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
38
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
39 #include "md5.h"
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
40 //#include "unlocked-io.h"
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
41
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
42 #ifdef _LIBC
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
43 # include <endian.h>
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
44 # if __BYTE_ORDER == __BIG_ENDIAN
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
45 # define WORDS_BIGENDIAN 1
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
46 # endif
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
47 #endif
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
48
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
49 #ifdef WORDS_BIGENDIAN
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
50 # define SWAP(n) \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
51 (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
52 #else
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
53 # define SWAP(n) (n)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
54 #endif
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
55
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
56
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
57 /* This array contains the bytes used to pad the buffer to the next
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
58 64-byte boundary. (RFC 1321, 3.1: Step 1) */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
59 static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
60
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
61
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
62 /* Initialize structure containing state of computation.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
63 (RFC 1321, 3.3: Step 3) */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
64 void
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
65 md5_init_ctx (ctx)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
66 struct md5_ctx *ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
67 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
68 ctx->A = 0x67452301;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
69 ctx->B = 0xefcdab89;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
70 ctx->C = 0x98badcfe;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
71 ctx->D = 0x10325476;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
72
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
73 ctx->total[0] = ctx->total[1] = 0;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
74 ctx->buflen = 0;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
75 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
76
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
77 /* Put result from CTX in first 16 bytes following RESBUF. The result
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
78 must be in little endian byte order.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
79
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
80 IMPORTANT: On some systems it is required that RESBUF is correctly
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
81 aligned for a 32 bits value. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
82 void *
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
83 md5_read_ctx (ctx, resbuf)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
84 const struct md5_ctx *ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
85 void *resbuf;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
86 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
87 ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
88 ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
89 ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
90 ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
91
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
92 return resbuf;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
93 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
94
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
95 /* Process the remaining bytes in the internal buffer and the usual
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
96 prolog according to the standard and write the result to RESBUF.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
97
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
98 IMPORTANT: On some systems it is required that RESBUF is correctly
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
99 aligned for a 32 bits value. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
100 void *
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
101 md5_finish_ctx (ctx, resbuf)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
102 struct md5_ctx *ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
103 void *resbuf;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
104 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
105 /* Take yet unprocessed bytes into account. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
106 md5_uint32 bytes = ctx->buflen;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
107 size_t pad;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
108
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
109 /* Now count remaining bytes. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
110 ctx->total[0] += bytes;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
111 if (ctx->total[0] < bytes)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
112 ++ctx->total[1];
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
113
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
114 pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
115 memcpy (&ctx->buffer[bytes], fillbuf, pad);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
116
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
117 /* Put the 64-bit file length in *bits* at the end of the buffer. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
118 *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
119 *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
120 (ctx->total[0] >> 29));
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
121
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
122 /* Process last bytes. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
123 md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
124
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
125 return md5_read_ctx (ctx, resbuf);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
126 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
127
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
128 /* Compute MD5 message digest for bytes read from STREAM. The
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
129 resulting message digest number will be written into the 16 bytes
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
130 beginning at RESBLOCK. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
131 int
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
132 md5_stream (stream, resblock)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
133 FILE *stream;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
134 void *resblock;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
135 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
136 /* Important: BLOCKSIZE must be a multiple of 64. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
137 #define BLOCKSIZE 4096
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
138 struct md5_ctx ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
139 char buffer[BLOCKSIZE + 72];
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
140 size_t sum;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
141
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
142 /* Initialize the computation context. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
143 md5_init_ctx (&ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
144
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
145 /* Iterate over full file contents. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
146 while (1)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
147 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
148 /* We read the file in blocks of BLOCKSIZE bytes. One call of the
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
149 computation function processes the whole buffer so that with the
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
150 next round of the loop another block can be read. */
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
151 size_t n;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
152 sum = 0;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
153
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
154 /* Read block. Take care for partial reads. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
155 do
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
156 {
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
157 n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
158
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
159 sum += n;
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
160 }
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
161 while (sum < BLOCKSIZE && n != 0);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
162 if (n == 0 && ferror (stream))
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
163 return 1;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
164
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
165 /* If end of file is reached, end the loop. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
166 if (n == 0)
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
167 break;
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
168
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
169 /* Process buffer with BLOCKSIZE bytes. Note that
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
170 BLOCKSIZE % 64 == 0
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
171 */
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
172 md5_process_block (buffer, BLOCKSIZE, &ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
173 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
174
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
175 /* Add the last bytes if necessary. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
176 if (sum > 0)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
177 md5_process_bytes (buffer, sum, &ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
178
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
179 /* Construct result in desired memory. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
180 md5_finish_ctx (&ctx, resblock);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
181 return 0;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
182 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
183
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
184 /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
185 result is always in little endian byte order, so that a byte-wise
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
186 output yields to the wanted ASCII representation of the message
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
187 digest. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
188 void *
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
189 md5_buffer (buffer, len, resblock)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
190 const char *buffer;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
191 size_t len;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
192 void *resblock;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
193 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
194 struct md5_ctx ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
195
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
196 /* Initialize the computation context. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
197 md5_init_ctx (&ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
198
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
199 /* Process whole buffer but last len % 64 bytes. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
200 md5_process_bytes (buffer, len, &ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
201
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
202 /* Put result in desired memory area. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
203 return md5_finish_ctx (&ctx, resblock);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
204 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
205
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
206
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
207 void
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
208 md5_process_bytes (buffer, len, ctx)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
209 const void *buffer;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
210 size_t len;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
211 struct md5_ctx *ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
212 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
213 /* When we already have some bits in our internal buffer concatenate
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
214 both inputs first. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
215 if (ctx->buflen != 0)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
216 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
217 size_t left_over = ctx->buflen;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
218 size_t add = 128 - left_over > len ? len : 128 - left_over;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
219
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
220 memcpy (&ctx->buffer[left_over], buffer, add);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
221 ctx->buflen += add;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
222
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
223 if (left_over + add > 64)
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
224 {
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
225 md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
226 /* The regions in the following copy operation cannot overlap. */
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
227 memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
228 (left_over + add) & 63);
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
229 ctx->buflen = (left_over + add) & 63;
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
230 }
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
231
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
232 buffer = (const char *) buffer + add;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
233 len -= add;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
234 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
235
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
236 /* Process available complete blocks. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
237 if (len > 64)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
238 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
239 md5_process_block (buffer, len & ~63, ctx);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
240 buffer = (const char *) buffer + (len & ~63);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
241 len &= 63;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
242 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
243
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
244 /* Move remaining bytes in internal buffer. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
245 if (len > 0)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
246 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
247 memcpy (ctx->buffer, buffer, len);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
248 ctx->buflen = len;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
249 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
250 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
251
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
252
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
253 /* These are the four functions used in the four steps of the MD5 algorithm
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
254 and defined in the RFC 1321. The first function is a little bit optimized
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
255 (as found in Colin Plumbs public domain implementation). */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
256 /* #define FF(b, c, d) ((b & c) | (~b & d)) */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
257 #define FF(b, c, d) (d ^ (b & (c ^ d)))
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
258 #define FG(b, c, d) FF (d, b, c)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
259 #define FH(b, c, d) (b ^ c ^ d)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
260 #define FI(b, c, d) (c ^ (b | ~d))
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
261
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
262 /* Process LEN bytes of BUFFER, accumulating context into CTX.
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
263 It is assumed that LEN % 64 == 0. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
264
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
265 void
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
266 md5_process_block (buffer, len, ctx)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
267 const void *buffer;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
268 size_t len;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
269 struct md5_ctx *ctx;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
270 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
271 md5_uint32 correct_words[16];
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
272 const md5_uint32 *words = buffer;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
273 size_t nwords = len / sizeof (md5_uint32);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
274 const md5_uint32 *endp = words + nwords;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
275 md5_uint32 A = ctx->A;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
276 md5_uint32 B = ctx->B;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
277 md5_uint32 C = ctx->C;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
278 md5_uint32 D = ctx->D;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
279
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
280 /* First increment the byte count. RFC 1321 specifies the possible
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
281 length of the file up to 2^64 bits. Here we only compute the
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
282 number of bytes. Do a double word increment. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
283 ctx->total[0] += len;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
284 if (ctx->total[0] < len)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
285 ++ctx->total[1];
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
286
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
287 /* Process all bytes in the buffer with 64 bytes in each round of
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
288 the loop. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
289 while (words < endp)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
290 {
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
291 md5_uint32 *cwp = correct_words;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
292 md5_uint32 A_save = A;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
293 md5_uint32 B_save = B;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
294 md5_uint32 C_save = C;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
295 md5_uint32 D_save = D;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
296
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
297 /* First round: using the given function, the context and a constant
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
298 the next context is computed. Because the algorithms processing
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
299 unit is a 32-bit word and it is determined to work on words in
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
300 little endian byte order we perhaps have to change the byte order
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
301 before the computation. To reduce the work for the next steps
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
302 we store the swapped words in the array CORRECT_WORDS. */
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
303
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
304 #define OP(a, b, c, d, s, T) \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
305 do \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
306 { \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
307 a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
308 ++words; \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
309 a = rol (a, s); \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
310 a += b; \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
311 } \
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
312 while (0)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
313
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
314 /* Before we start, one word to the strange constants.
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
315 They are defined in RFC 1321 as
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
316
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
317 T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64, or
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
318 perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}'
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
319 */
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
320
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
321 /* Round 1. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
322 OP (A, B, C, D, 7, 0xd76aa478);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
323 OP (D, A, B, C, 12, 0xe8c7b756);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
324 OP (C, D, A, B, 17, 0x242070db);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
325 OP (B, C, D, A, 22, 0xc1bdceee);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
326 OP (A, B, C, D, 7, 0xf57c0faf);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
327 OP (D, A, B, C, 12, 0x4787c62a);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
328 OP (C, D, A, B, 17, 0xa8304613);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
329 OP (B, C, D, A, 22, 0xfd469501);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
330 OP (A, B, C, D, 7, 0x698098d8);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
331 OP (D, A, B, C, 12, 0x8b44f7af);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
332 OP (C, D, A, B, 17, 0xffff5bb1);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
333 OP (B, C, D, A, 22, 0x895cd7be);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
334 OP (A, B, C, D, 7, 0x6b901122);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
335 OP (D, A, B, C, 12, 0xfd987193);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
336 OP (C, D, A, B, 17, 0xa679438e);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
337 OP (B, C, D, A, 22, 0x49b40821);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
338
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
339 /* For the second to fourth round we have the possibly swapped words
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
340 in CORRECT_WORDS. Redefine the macro to take an additional first
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
341 argument specifying the function to use. */
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
342 #undef OP
24050
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
343 #define OP(f, a, b, c, d, k, s, T) \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
344 do \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
345 { \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
346 a += f (b, c, d) + correct_words[k] + T; \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
347 a = rol (a, s); \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
348 a += b; \
1542693b2a30 Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents: 20981
diff changeset
349 } \
15876
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
350 while (0)
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
351
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
352 /* Round 2. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
353 OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
354 OP (FG, D, A, B, C, 6, 9, 0xc040b340);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
355 OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
356 OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
357 OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
358 OP (FG, D, A, B, C, 10, 9, 0x02441453);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
359 OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
360 OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
361 OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
362 OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
363 OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
364 OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
365 OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
366 OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
367 OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
368 OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
369
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
370 /* Round 3. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
371 OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
372 OP (FH, D, A, B, C, 8, 11, 0x8771f681);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
373 OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
374 OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
375 OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
376 OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
377 OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
378 OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
379 OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
380 OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
381 OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
382 OP (FH, B, C, D, A, 6, 23, 0x04881d05);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
383 OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
384 OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
385 OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
386 OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
387
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
388 /* Round 4. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
389 OP (FI, A, B, C, D, 0, 6, 0xf4292244);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
390 OP (FI, D, A, B, C, 7, 10, 0x432aff97);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
391 OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
392 OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
393 OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
394 OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
395 OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
396 OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
397 OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
398 OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
399 OP (FI, C, D, A, B, 6, 15, 0xa3014314);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
400 OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
401 OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
402 OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
403 OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
404 OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
405
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
406 /* Add the starting values of the context. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
407 A += A_save;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
408 B += B_save;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
409 C += C_save;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
410 D += D_save;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
411 }
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
412
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
413 /* Put checksum in context given as argument. */
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
414 ctx->A = A;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
415 ctx->B = B;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
416 ctx->C = C;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
417 ctx->D = D;
15f4ed477c39 add missing files from libdvdread 0.9.4
henry
parents:
diff changeset
418 }