annotate lib/sha.c @ 4739:04758f7475fd

Merge changes from glibc.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 26 Sep 2003 07:35:01 +0000
parents 7135d3d3d962
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* sha.c - Functions to compute the SHA1 hash (message-digest) of files
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
2 or blocks of memory. Complies to the NIST specification FIPS-180-1.
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
4 Copyright (C) 2000, 2001, 2003 Scott G. Miller
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 Credits:
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 Robert Klep <robert@ilse.nl> -- Expansion function fix
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 #ifdef HAVE_CONFIG_H
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 # include <config.h>
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 #endif
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
4675
7135d3d3d962 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4557
diff changeset
14 #include "sha.h"
7135d3d3d962 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4557
diff changeset
15
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 #include <sys/types.h>
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
4675
7135d3d3d962 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4557
diff changeset
18 #include <stdlib.h>
7135d3d3d962 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4557
diff changeset
19 #include <string.h>
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20
3618
72422d1e9181 Include unlocked-io.h.
Jim Meyering <jim@meyering.net>
parents: 2878
diff changeset
21 #include "unlocked-io.h"
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 /*
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 Not-swap is a macro that does an endian swap on architectures that are
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25 big-endian, as SHA needs some data in a little-endian format
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #ifdef WORDS_BIGENDIAN
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29 # define NOTSWAP(n) (n)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 # define SWAP(n) \
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31 (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 #else
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 # define NOTSWAP(n) \
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 # define SWAP(n) (n)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 #endif
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
38 #define BLOCKSIZE 4096
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
39 /* Ensure that BLOCKSIZE is a multiple of 64. */
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
40 #if BLOCKSIZE % 64 != 0
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
41 /* FIXME-someday (soon?): use #error instead of this kludge. */
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
42 "invalid BLOCKSIZE"
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
43 #endif
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
44
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 /* This array contains the bytes used to pad the buffer to the next
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 64-byte boundary. (RFC 1321, 3.1: Step 1) */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 /*
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 Takes a pointer to a 160 bit block of data (five 32 bit ints) and
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 intializes it to the start constants of the SHA1 algorithm. This
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 must be called before using hash in the call to sha_hash
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 void
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 sha_init_ctx (struct sha_ctx *ctx)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 ctx->A = 0x67452301;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 ctx->B = 0xefcdab89;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 ctx->C = 0x98badcfe;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 ctx->D = 0x10325476;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 ctx->E = 0xc3d2e1f0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 ctx->total[0] = ctx->total[1] = 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 ctx->buflen = 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68 /* Put result from CTX in first 20 bytes following RESBUF. The result
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69 must be in little endian byte order.
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71 IMPORTANT: On some systems it is required that RESBUF is correctly
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 aligned for a 32 bits value. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 void *
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 sha_read_ctx (const struct sha_ctx *ctx, void *resbuf)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 ((md5_uint32 *) resbuf)[0] = NOTSWAP (ctx->A);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 ((md5_uint32 *) resbuf)[1] = NOTSWAP (ctx->B);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78 ((md5_uint32 *) resbuf)[2] = NOTSWAP (ctx->C);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 ((md5_uint32 *) resbuf)[3] = NOTSWAP (ctx->D);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80 ((md5_uint32 *) resbuf)[4] = NOTSWAP (ctx->E);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 return resbuf;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85 /* Process the remaining bytes in the internal buffer and the usual
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 prolog according to the standard and write the result to RESBUF.
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 IMPORTANT: On some systems it is required that RESBUF is correctly
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 aligned for a 32 bits value. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90 void *
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 sha_finish_ctx (struct sha_ctx *ctx, void *resbuf)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93 /* Take yet unprocessed bytes into account. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 md5_uint32 bytes = ctx->buflen;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95 size_t pad;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97 /* Now count remaining bytes. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 ctx->total[0] += bytes;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
99 if (ctx->total[0] < bytes)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
100 ++ctx->total[1];
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102 pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103 memcpy (&ctx->buffer[bytes], fillbuf, pad);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
105 /* Put the 64-bit file length in *bits* at the end of the buffer. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
106 *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = NOTSWAP (ctx->total[0] << 3);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 *(md5_uint32 *) &ctx->buffer[bytes + pad] = NOTSWAP ((ctx->total[1] << 3) |
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
108 (ctx->total[0] >> 29));
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
109
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
110 /* Process last bytes. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
111 sha_process_block (ctx->buffer, bytes + pad + 8, ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
112
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
113 return sha_read_ctx (ctx, resbuf);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
114 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
115
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
116 /* Compute SHA1 message digest for bytes read from STREAM. The
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
117 resulting message digest number will be written into the 16 bytes
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
118 beginning at RESBLOCK. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
119 int
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
120 sha_stream (FILE *stream, void *resblock)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
121 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
122 struct sha_ctx ctx;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
123 char buffer[BLOCKSIZE + 72];
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
124 size_t sum;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
125
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
126 /* Initialize the computation context. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
127 sha_init_ctx (&ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
128
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
129 /* Iterate over full file contents. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
130 while (1)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
131 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
132 /* We read the file in blocks of BLOCKSIZE bytes. One call of the
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
133 computation function processes the whole buffer so that with the
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
134 next round of the loop another block can be read. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
135 size_t n;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
136 sum = 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
137
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
138 /* Read block. Take care for partial reads. */
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
139 while (1)
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
140 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
141 n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
142
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
143 sum += n;
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
144
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
145 if (sum == BLOCKSIZE)
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
146 break;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
147
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
148 if (n == 0)
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
149 {
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
150 /* Check for the error flag IFF N == 0, so that we don't
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
151 exit the loop after a partial read due to e.g., EAGAIN
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
152 or EWOULDBLOCK. */
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
153 if (ferror (stream))
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
154 return 1;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
155 goto process_partial_block;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
156 }
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
157
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
158 /* We've read at least one byte, so ignore errors. But always
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
159 check for EOF, since feof may be true even though N > 0.
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
160 Otherwise, we could end up calling fread after EOF. */
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
161 if (feof (stream))
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
162 goto process_partial_block;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
163 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
164
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
165 /* Process buffer with BLOCKSIZE bytes. Note that
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
166 BLOCKSIZE % 64 == 0
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
167 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
168 sha_process_block (buffer, BLOCKSIZE, &ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
169 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
170
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
171 process_partial_block:;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
172
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
173 /* Process any remaining bytes. */
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
174 if (sum > 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
175 sha_process_bytes (buffer, sum, &ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
176
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
177 /* Construct result in desired memory. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
178 sha_finish_ctx (&ctx, resblock);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
179 return 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
180 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
181
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
182 /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
183 result is always in little endian byte order, so that a byte-wise
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
184 output yields to the wanted ASCII representation of the message
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
185 digest. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
186 void *
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
187 sha_buffer (const char *buffer, size_t len, void *resblock)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
188 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
189 struct sha_ctx ctx;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
190
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
191 /* Initialize the computation context. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
192 sha_init_ctx (&ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
193
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
194 /* Process whole buffer but last len % 64 bytes. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
195 sha_process_bytes (buffer, len, &ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
196
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
197 /* Put result in desired memory area. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
198 return sha_finish_ctx (&ctx, resblock);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
199 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
200
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
201 void
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
202 sha_process_bytes (const void *buffer, size_t len, struct sha_ctx *ctx)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
203 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
204 /* When we already have some bits in our internal buffer concatenate
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
205 both inputs first. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
206 if (ctx->buflen != 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
207 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
208 size_t left_over = ctx->buflen;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
209 size_t add = 128 - left_over > len ? len : 128 - left_over;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
210
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
211 memcpy (&ctx->buffer[left_over], buffer, add);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
212 ctx->buflen += add;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
213
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
214 if (ctx->buflen > 64)
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
215 {
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
216 sha_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
217
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
218 ctx->buflen &= 63;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
219 /* The regions in the following copy operation cannot overlap. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
220 memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
221 ctx->buflen);
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
222 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
223
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
224 buffer = (const char *) buffer + add;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
225 len -= add;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
226 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
227
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
228 /* Process available complete blocks. */
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
229 if (len >= 64)
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
230 {
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
231 #if !_STRING_ARCH_unaligned
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
232 /* To check alignment gcc has an appropriate operator. Other
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
233 compilers don't. */
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
234 # if __GNUC__ >= 2
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
235 # define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0)
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
236 # else
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
237 # define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0)
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
238 # endif
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
239 if (UNALIGNED_P (buffer))
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
240 while (len > 64)
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
241 {
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
242 sha_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
243 buffer = (const char *) buffer + 64;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
244 len -= 64;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
245 }
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
246 else
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
247 #endif
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
248 {
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
249 sha_process_block (buffer, len & ~63, ctx);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
250 buffer = (const char *) buffer + (len & ~63);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
251 len &= 63;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
252 }
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
253 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
254
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
255 /* Move remaining bytes in internal buffer. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
256 if (len > 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
257 {
4557
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
258 size_t left_over = ctx->buflen;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
259
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
260 memcpy (&ctx->buffer[left_over], buffer, len);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
261 left_over += len;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
262 if (left_over >= 64)
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
263 {
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
264 sha_process_block (ctx->buffer, 64, ctx);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
265 left_over -= 64;
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
266 memcpy (ctx->buffer, &ctx->buffer[64], left_over);
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
267 }
97296d401912 Merge frem coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 3618
diff changeset
268 ctx->buflen = left_over;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
269 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
270 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
271
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
272 /* --- Code below is the primary difference between md5.c and sha.c --- */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
273
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
274 /* SHA1 round constants */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
275 #define K1 0x5a827999L
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
276 #define K2 0x6ed9eba1L
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
277 #define K3 0x8f1bbcdcL
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
278 #define K4 0xca62c1d6L
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
279
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
280 /* Round functions. Note that F2 is the same as F4. */
2864
26d60ac2d2ee moving to gnupg's version of sha1.c
Jim Meyering <jim@meyering.net>
parents: 2863
diff changeset
281 #define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) )
26d60ac2d2ee moving to gnupg's version of sha1.c
Jim Meyering <jim@meyering.net>
parents: 2863
diff changeset
282 #define F2(B,C,D) (B ^ C ^ D)
26d60ac2d2ee moving to gnupg's version of sha1.c
Jim Meyering <jim@meyering.net>
parents: 2863
diff changeset
283 #define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) )
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
284 #define F4(B,C,D) (B ^ C ^ D)
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
285
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
286 /* Process LEN bytes of BUFFER, accumulating context into CTX.
2878
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
287 It is assumed that LEN % 64 == 0.
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
288 Most of this code comes from GnuPG's cipher/sha1.c. */
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
289
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
290 void
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
291 sha_process_block (const void *buffer, size_t len, struct sha_ctx *ctx)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
292 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
293 const md5_uint32 *words = buffer;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
294 size_t nwords = len / sizeof (md5_uint32);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
295 const md5_uint32 *endp = words + nwords;
2869
2a75d54dda8b shrink tmp array length from 80 to 16.
Jim Meyering <jim@meyering.net>
parents: 2868
diff changeset
296 md5_uint32 x[16];
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
297 md5_uint32 a = ctx->A;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
298 md5_uint32 b = ctx->B;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
299 md5_uint32 c = ctx->C;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
300 md5_uint32 d = ctx->D;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
301 md5_uint32 e = ctx->E;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
302
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
303 /* First increment the byte count. RFC 1321 specifies the possible
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
304 length of the file up to 2^64 bits. Here we only compute the
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
305 number of bytes. Do a double word increment. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
306 ctx->total[0] += len;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
307 if (ctx->total[0] < len)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
308 ++ctx->total[1];
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
309
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
310 #define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
311 ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \
2878
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
312 , (x[I&0x0f] = rol(tm, 1)) )
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
313
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
314 #define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
315 + F( B, C, D ) \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
316 + K \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
317 + M; \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
318 B = rol( B, 30 ); \
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
319 } while(0)
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
320
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
321 while (words < endp)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
322 {
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
323 md5_uint32 tm;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
324 int t;
2878
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
325 /* FIXME: see sha1.c for a better implementation. */
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
326 for (t = 0; t < 16; t++)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
327 {
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
328 x[t] = NOTSWAP (*words);
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
329 words++;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
330 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
331
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
332 R( a, b, c, d, e, F1, K1, x[ 0] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
333 R( e, a, b, c, d, F1, K1, x[ 1] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
334 R( d, e, a, b, c, F1, K1, x[ 2] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
335 R( c, d, e, a, b, F1, K1, x[ 3] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
336 R( b, c, d, e, a, F1, K1, x[ 4] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
337 R( a, b, c, d, e, F1, K1, x[ 5] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
338 R( e, a, b, c, d, F1, K1, x[ 6] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
339 R( d, e, a, b, c, F1, K1, x[ 7] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
340 R( c, d, e, a, b, F1, K1, x[ 8] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
341 R( b, c, d, e, a, F1, K1, x[ 9] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
342 R( a, b, c, d, e, F1, K1, x[10] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
343 R( e, a, b, c, d, F1, K1, x[11] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
344 R( d, e, a, b, c, F1, K1, x[12] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
345 R( c, d, e, a, b, F1, K1, x[13] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
346 R( b, c, d, e, a, F1, K1, x[14] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
347 R( a, b, c, d, e, F1, K1, x[15] );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
348 R( e, a, b, c, d, F1, K1, M(16) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
349 R( d, e, a, b, c, F1, K1, M(17) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
350 R( c, d, e, a, b, F1, K1, M(18) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
351 R( b, c, d, e, a, F1, K1, M(19) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
352 R( a, b, c, d, e, F2, K2, M(20) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
353 R( e, a, b, c, d, F2, K2, M(21) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
354 R( d, e, a, b, c, F2, K2, M(22) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
355 R( c, d, e, a, b, F2, K2, M(23) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
356 R( b, c, d, e, a, F2, K2, M(24) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
357 R( a, b, c, d, e, F2, K2, M(25) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
358 R( e, a, b, c, d, F2, K2, M(26) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
359 R( d, e, a, b, c, F2, K2, M(27) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
360 R( c, d, e, a, b, F2, K2, M(28) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
361 R( b, c, d, e, a, F2, K2, M(29) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
362 R( a, b, c, d, e, F2, K2, M(30) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
363 R( e, a, b, c, d, F2, K2, M(31) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
364 R( d, e, a, b, c, F2, K2, M(32) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
365 R( c, d, e, a, b, F2, K2, M(33) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
366 R( b, c, d, e, a, F2, K2, M(34) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
367 R( a, b, c, d, e, F2, K2, M(35) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
368 R( e, a, b, c, d, F2, K2, M(36) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
369 R( d, e, a, b, c, F2, K2, M(37) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
370 R( c, d, e, a, b, F2, K2, M(38) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
371 R( b, c, d, e, a, F2, K2, M(39) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
372 R( a, b, c, d, e, F3, K3, M(40) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
373 R( e, a, b, c, d, F3, K3, M(41) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
374 R( d, e, a, b, c, F3, K3, M(42) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
375 R( c, d, e, a, b, F3, K3, M(43) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
376 R( b, c, d, e, a, F3, K3, M(44) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
377 R( a, b, c, d, e, F3, K3, M(45) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
378 R( e, a, b, c, d, F3, K3, M(46) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
379 R( d, e, a, b, c, F3, K3, M(47) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
380 R( c, d, e, a, b, F3, K3, M(48) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
381 R( b, c, d, e, a, F3, K3, M(49) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
382 R( a, b, c, d, e, F3, K3, M(50) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
383 R( e, a, b, c, d, F3, K3, M(51) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
384 R( d, e, a, b, c, F3, K3, M(52) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
385 R( c, d, e, a, b, F3, K3, M(53) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
386 R( b, c, d, e, a, F3, K3, M(54) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
387 R( a, b, c, d, e, F3, K3, M(55) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
388 R( e, a, b, c, d, F3, K3, M(56) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
389 R( d, e, a, b, c, F3, K3, M(57) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
390 R( c, d, e, a, b, F3, K3, M(58) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
391 R( b, c, d, e, a, F3, K3, M(59) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
392 R( a, b, c, d, e, F4, K4, M(60) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
393 R( e, a, b, c, d, F4, K4, M(61) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
394 R( d, e, a, b, c, F4, K4, M(62) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
395 R( c, d, e, a, b, F4, K4, M(63) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
396 R( b, c, d, e, a, F4, K4, M(64) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
397 R( a, b, c, d, e, F4, K4, M(65) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
398 R( e, a, b, c, d, F4, K4, M(66) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
399 R( d, e, a, b, c, F4, K4, M(67) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
400 R( c, d, e, a, b, F4, K4, M(68) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
401 R( b, c, d, e, a, F4, K4, M(69) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
402 R( a, b, c, d, e, F4, K4, M(70) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
403 R( e, a, b, c, d, F4, K4, M(71) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
404 R( d, e, a, b, c, F4, K4, M(72) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
405 R( c, d, e, a, b, F4, K4, M(73) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
406 R( b, c, d, e, a, F4, K4, M(74) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
407 R( a, b, c, d, e, F4, K4, M(75) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
408 R( e, a, b, c, d, F4, K4, M(76) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
409 R( d, e, a, b, c, F4, K4, M(77) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
410 R( c, d, e, a, b, F4, K4, M(78) );
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
411 R( b, c, d, e, a, F4, K4, M(79) );
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
412
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
413 a = ctx->A += a;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
414 b = ctx->B += b;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
415 c = ctx->C += c;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
416 d = ctx->D += d;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
417 e = ctx->E += e;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
418 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
419 }