annotate lib/sha.c @ 4554:5a1e7c84e9cd

Use three spaces, rather than tab, after '#' in shell-script copyright notices. Suggested by Bruno Haible.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 15 Aug 2003 18:04:34 +0000
parents 72422d1e9181
children 97296d401912
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
3618
72422d1e9181 Include unlocked-io.h.
Jim Meyering <jim@meyering.net>
parents: 2878
diff changeset
4 Copyright (C) 2000, 2001 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
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 #include <sys/types.h>
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 #if STDC_HEADERS || defined _LIBC
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17 # include <stdlib.h>
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18 # include <string.h>
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19 #else
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 # ifndef HAVE_MEMCPY
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 # define memcpy(d, s, n) bcopy ((s), (d), (n))
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 # endif
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 #endif
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25 #include "md5.h"
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 #include "sha.h"
3618
72422d1e9181 Include unlocked-io.h.
Jim Meyering <jim@meyering.net>
parents: 2878
diff changeset
27 #include "unlocked-io.h"
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29 /*
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 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
31 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
32 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 #ifdef WORDS_BIGENDIAN
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 # define NOTSWAP(n) (n)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 # define SWAP(n) \
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 #else
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 # define NOTSWAP(n) \
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40 (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 # define SWAP(n) (n)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 #endif
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 /* 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
45 64-byte boundary. (RFC 1321, 3.1: Step 1) */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47
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 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
51 intializes it to the start constants of the SHA1 algorithm. This
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 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
53 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 void
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 sha_init_ctx (struct sha_ctx *ctx)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 ctx->A = 0x67452301;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 ctx->B = 0xefcdab89;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 ctx->C = 0x98badcfe;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 ctx->D = 0x10325476;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 ctx->E = 0xc3d2e1f0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 ctx->total[0] = ctx->total[1] = 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 ctx->buflen = 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 }
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 /* 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
68 must be in little endian byte order.
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 IMPORTANT: On some systems it is required that RESBUF is correctly
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71 aligned for a 32 bits value. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 void *
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 sha_read_ctx (const struct sha_ctx *ctx, void *resbuf)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 ((md5_uint32 *) resbuf)[0] = NOTSWAP (ctx->A);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 ((md5_uint32 *) resbuf)[1] = NOTSWAP (ctx->B);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 ((md5_uint32 *) resbuf)[2] = NOTSWAP (ctx->C);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78 ((md5_uint32 *) resbuf)[3] = NOTSWAP (ctx->D);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 ((md5_uint32 *) resbuf)[4] = NOTSWAP (ctx->E);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81 return resbuf;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 }
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 /* Process the remaining bytes in the internal buffer and the usual
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85 prolog according to the standard and write the result to RESBUF.
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 IMPORTANT: On some systems it is required that RESBUF is correctly
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 aligned for a 32 bits value. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 void *
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90 sha_finish_ctx (struct sha_ctx *ctx, void *resbuf)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 /* Take yet unprocessed bytes into account. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93 md5_uint32 bytes = ctx->buflen;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 size_t pad;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96 /* Now count remaining bytes. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97 ctx->total[0] += bytes;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 if (ctx->total[0] < bytes)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
99 ++ctx->total[1];
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
100
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101 pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102 memcpy (&ctx->buffer[bytes], fillbuf, pad);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104 /* 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
105 *(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
106 *(md5_uint32 *) &ctx->buffer[bytes + pad] = NOTSWAP ((ctx->total[1] << 3) |
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 (ctx->total[0] >> 29));
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
108
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
109 /* Process last bytes. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
110 sha_process_block (ctx->buffer, bytes + pad + 8, ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
111
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
112 return sha_read_ctx (ctx, resbuf);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
113 }
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 /* Compute SHA1 message digest for bytes read from STREAM. The
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
116 resulting message digest number will be written into the 16 bytes
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
117 beginning at RESBLOCK. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
118 int
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
119 sha_stream (FILE *stream, void *resblock)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
120 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
121 /* Important: BLOCKSIZE must be a multiple of 64. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
122 #define BLOCKSIZE 4096
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
123 struct sha_ctx ctx;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
124 char buffer[BLOCKSIZE + 72];
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
125 size_t sum;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
126
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
127 /* Initialize the computation context. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
128 sha_init_ctx (&ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
129
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
130 /* Iterate over full file contents. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
131 while (1)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
132 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
133 /* 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
134 computation function processes the whole buffer so that with the
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
135 next round of the loop another block can be read. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
136 size_t n;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
137 sum = 0;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
138
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
139 /* Read block. Take care for partial reads. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
140 do
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
141 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
142 n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
143
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
144 sum += n;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
145 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
146 while (sum < BLOCKSIZE && n != 0);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
147 if (n == 0 && ferror (stream))
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
148 return 1;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
149
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
150 /* If end of file is reached, end the loop. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
151 if (n == 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
152 break;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
153
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
154 /* Process buffer with BLOCKSIZE bytes. Note that
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
155 BLOCKSIZE % 64 == 0
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
156 */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
157 sha_process_block (buffer, BLOCKSIZE, &ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
158 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
159
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
160 /* Add the last bytes if necessary. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
161 if (sum > 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
162 sha_process_bytes (buffer, sum, &ctx);
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 /* Construct result in desired memory. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
165 sha_finish_ctx (&ctx, resblock);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
166 return 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
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
169 /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
170 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
171 output yields to the wanted ASCII representation of the message
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
172 digest. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
173 void *
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
174 sha_buffer (const char *buffer, size_t len, void *resblock)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
175 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
176 struct sha_ctx ctx;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
177
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
178 /* Initialize the computation context. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
179 sha_init_ctx (&ctx);
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 /* Process whole buffer but last len % 64 bytes. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
182 sha_process_bytes (buffer, len, &ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
183
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
184 /* Put result in desired memory area. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
185 return sha_finish_ctx (&ctx, resblock);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
186 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
187
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
188 void
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
189 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
190 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
191 /* When we already have some bits in our internal buffer concatenate
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
192 both inputs first. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
193 if (ctx->buflen != 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
194 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
195 size_t left_over = ctx->buflen;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
196 size_t add = 128 - left_over > len ? len : 128 - left_over;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
197
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
198 memcpy (&ctx->buffer[left_over], buffer, add);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
199 ctx->buflen += add;
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 if (left_over + add > 64)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
202 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
203 sha_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
204 /* The regions in the following copy operation cannot overlap. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
205 memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
206 (left_over + add) & 63);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
207 ctx->buflen = (left_over + add) & 63;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
208 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
209
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
210 buffer = (const char *) buffer + add;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
211 len -= add;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
212 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
213
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
214 /* Process available complete blocks. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
215 if (len > 64)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
216 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
217 sha_process_block (buffer, len & ~63, ctx);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
218 buffer = (const char *) buffer + (len & ~63);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
219 len &= 63;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
220 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
221
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
222 /* Move remaining bytes in internal buffer. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
223 if (len > 0)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
224 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
225 memcpy (ctx->buffer, buffer, len);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
226 ctx->buflen = len;
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 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
229
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
230 /* --- 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
231
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
232 /* SHA1 round constants */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
233 #define K1 0x5a827999L
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
234 #define K2 0x6ed9eba1L
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
235 #define K3 0x8f1bbcdcL
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
236 #define K4 0xca62c1d6L
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
237
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
238 /* 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
239 #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
240 #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
241 #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
242 #define F4(B,C,D) (B ^ C ^ D)
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
243
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
244 /* 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
245 It is assumed that LEN % 64 == 0.
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
246 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
247
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
248 void
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
249 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
250 {
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
251 const md5_uint32 *words = buffer;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
252 size_t nwords = len / sizeof (md5_uint32);
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
253 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
254 md5_uint32 x[16];
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
255 md5_uint32 a = ctx->A;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
256 md5_uint32 b = ctx->B;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
257 md5_uint32 c = ctx->C;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
258 md5_uint32 d = ctx->D;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
259 md5_uint32 e = ctx->E;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
260
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
261 /* First increment the byte count. RFC 1321 specifies the possible
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
262 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
263 number of bytes. Do a double word increment. */
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
264 ctx->total[0] += len;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
265 if (ctx->total[0] < len)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
266 ++ctx->total[1];
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
267
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
268 #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
269 ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \
2878
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
270 , (x[I&0x0f] = rol(tm, 1)) )
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
271
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
272 #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
273 + F( B, C, D ) \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
274 + K \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
275 + M; \
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
276 B = rol( B, 30 ); \
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
277 } while(0)
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
278
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
279 while (words < endp)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
280 {
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
281 md5_uint32 tm;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
282 int t;
2878
53969d50efee Give credit (GnuPG) where due.
Jim Meyering <jim@meyering.net>
parents: 2869
diff changeset
283 /* FIXME: see sha1.c for a better implementation. */
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
284 for (t = 0; t < 16; t++)
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
285 {
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
286 x[t] = NOTSWAP (*words);
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
287 words++;
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
288 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
289
2868
665842f23067 use gnupg R/M macros
Jim Meyering <jim@meyering.net>
parents: 2867
diff changeset
290 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
291 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
292 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
293 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
294 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
295 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
296 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
297 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
298 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
299 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
300 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
301 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
302 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
303 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
304 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
305 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
306 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
307 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
308 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
309 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
310 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
311 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
312 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
313 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
314 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
315 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
316 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
317 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
318 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
319 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
320 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
321 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
322 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
323 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
324 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
325 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
326 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
327 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
328 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
329 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
330 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
331 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
332 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
333 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
334 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
335 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
336 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
337 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
338 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
339 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
340 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
341 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
342 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
343 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
344 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
345 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
346 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
347 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
348 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
349 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
350 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
351 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
352 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
353 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
354 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
355 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
356 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
357 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
358 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
359 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
360 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
361 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
362 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
363 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
364 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
365 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
366 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
367 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
368 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
369 R( b, c, d, e, a, F4, K4, M(79) );
2867
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
370
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
371 a = ctx->A += a;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
372 b = ctx->B += b;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
373 c = ctx->C += c;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
374 d = ctx->D += d;
6d88857e7e6c checkpoint
Jim Meyering <jim@meyering.net>
parents: 2866
diff changeset
375 e = ctx->E += e;
2863
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
376 }
a449e5769e22 snapshot of massaged original
Jim Meyering <jim@meyering.net>
parents:
diff changeset
377 }