diff options
author | jsing <> | 2023-07-07 15:03:55 +0000 |
---|---|---|
committer | jsing <> | 2023-07-07 15:03:55 +0000 |
commit | 663b156eda8cd8200146681abd67be699d667ac3 (patch) | |
tree | 7455d9e25fbe4938a0fd828191e21189655a49ba /src | |
parent | 994c2e1775fd686e8410b6120b4dcf0631903134 (diff) | |
download | openbsd-663b156eda8cd8200146681abd67be699d667ac3.tar.gz openbsd-663b156eda8cd8200146681abd67be699d667ac3.tar.bz2 openbsd-663b156eda8cd8200146681abd67be699d667ac3.zip |
Clean up SHA-256 input handling and round macros.
Avoid reach around and initialisation outside of the macro, cleaning up
the call sites to remove the initialisation.
ok beck@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/sha/sha256.c | 130 |
1 files changed, 58 insertions, 72 deletions
diff --git a/src/lib/libcrypto/sha/sha256.c b/src/lib/libcrypto/sha/sha256.c index a8c8aa3e26..eaa9364998 100644 --- a/src/lib/libcrypto/sha/sha256.c +++ b/src/lib/libcrypto/sha/sha256.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sha256.c,v 1.24 2023/07/07 14:32:41 jsing Exp $ */ | 1 | /* $OpenBSD: sha256.c,v 1.25 2023/07/07 15:03:55 jsing Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -120,16 +120,16 @@ static const SHA_LONG K256[64] = { | |||
120 | #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) | 120 | #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) |
121 | #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) | 121 | #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) |
122 | 122 | ||
123 | #define ROUND_00_15(i, a, b, c, d, e, f, g, h) do { \ | 123 | #define ROUND_00_15(x, i, a, b, c, d, e, f, g, h) do { \ |
124 | T1 += h + Sigma1(e) + Ch(e, f, g) + K256[i]; \ | 124 | T1 = x + h + Sigma1(e) + Ch(e, f, g) + K256[i]; \ |
125 | h = Sigma0(a) + Maj(a, b, c); \ | 125 | h = Sigma0(a) + Maj(a, b, c); \ |
126 | d += T1; h += T1; } while (0) | 126 | d += T1; h += T1; } while (0) |
127 | 127 | ||
128 | #define ROUND_16_63(i, a, b, c, d, e, f, g, h, X) do { \ | 128 | #define ROUND_16_63(i, a, b, c, d, e, f, g, h, X) do { \ |
129 | s0 = X[(i+1)&0x0f]; s0 = sigma0(s0); \ | 129 | s0 = X[(i+1)&0x0f]; s0 = sigma0(s0); \ |
130 | s1 = X[(i+14)&0x0f]; s1 = sigma1(s1); \ | 130 | s1 = X[(i+14)&0x0f]; s1 = sigma1(s1); \ |
131 | T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f]; \ | 131 | T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f]; \ |
132 | ROUND_00_15(i, a, b, c, d, e, f, g, h); } while (0) | 132 | ROUND_00_15(T1, i, a, b, c, d, e, f, g, h); } while (0) |
133 | 133 | ||
134 | static void | 134 | static void |
135 | sha256_block_data_order(SHA256_CTX *ctx, const void *in, size_t num) | 135 | sha256_block_data_order(SHA256_CTX *ctx, const void *in, size_t num) |
@@ -154,93 +154,79 @@ sha256_block_data_order(SHA256_CTX *ctx, const void *in, size_t num) | |||
154 | sizeof(SHA_LONG) == 4 && ((size_t)in % 4) == 0) { | 154 | sizeof(SHA_LONG) == 4 && ((size_t)in % 4) == 0) { |
155 | const SHA_LONG *W = (const SHA_LONG *)data; | 155 | const SHA_LONG *W = (const SHA_LONG *)data; |
156 | 156 | ||
157 | T1 = X[0] = W[0]; | 157 | X[0] = W[0]; |
158 | ROUND_00_15(0, a, b, c, d, e, f, g, h); | 158 | X[1] = W[1]; |
159 | T1 = X[1] = W[1]; | 159 | X[2] = W[2]; |
160 | ROUND_00_15(1, h, a, b, c, d, e, f, g); | 160 | X[3] = W[3]; |
161 | T1 = X[2] = W[2]; | 161 | X[4] = W[4]; |
162 | ROUND_00_15(2, g, h, a, b, c, d, e, f); | 162 | X[5] = W[5]; |
163 | T1 = X[3] = W[3]; | 163 | X[6] = W[6]; |
164 | ROUND_00_15(3, f, g, h, a, b, c, d, e); | 164 | X[7] = W[7]; |
165 | T1 = X[4] = W[4]; | 165 | X[8] = W[8]; |
166 | ROUND_00_15(4, e, f, g, h, a, b, c, d); | 166 | X[9] = W[9]; |
167 | T1 = X[5] = W[5]; | 167 | X[10] = W[10]; |
168 | ROUND_00_15(5, d, e, f, g, h, a, b, c); | 168 | X[11] = W[11]; |
169 | T1 = X[6] = W[6]; | 169 | X[12] = W[12]; |
170 | ROUND_00_15(6, c, d, e, f, g, h, a, b); | 170 | X[13] = W[13]; |
171 | T1 = X[7] = W[7]; | 171 | X[14] = W[14]; |
172 | ROUND_00_15(7, b, c, d, e, f, g, h, a); | 172 | X[15] = W[15]; |
173 | T1 = X[8] = W[8]; | ||
174 | ROUND_00_15(8, a, b, c, d, e, f, g, h); | ||
175 | T1 = X[9] = W[9]; | ||
176 | ROUND_00_15(9, h, a, b, c, d, e, f, g); | ||
177 | T1 = X[10] = W[10]; | ||
178 | ROUND_00_15(10, g, h, a, b, c, d, e, f); | ||
179 | T1 = X[11] = W[11]; | ||
180 | ROUND_00_15(11, f, g, h, a, b, c, d, e); | ||
181 | T1 = X[12] = W[12]; | ||
182 | ROUND_00_15(12, e, f, g, h, a, b, c, d); | ||
183 | T1 = X[13] = W[13]; | ||
184 | ROUND_00_15(13, d, e, f, g, h, a, b, c); | ||
185 | T1 = X[14] = W[14]; | ||
186 | ROUND_00_15(14, c, d, e, f, g, h, a, b); | ||
187 | T1 = X[15] = W[15]; | ||
188 | ROUND_00_15(15, b, c, d, e, f, g, h, a); | ||
189 | 173 | ||
190 | data += SHA256_CBLOCK; | 174 | data += SHA256_CBLOCK; |
191 | } else { | 175 | } else { |
192 | SHA_LONG l; | 176 | SHA_LONG l; |
193 | 177 | ||
194 | HOST_c2l(data, l); | 178 | HOST_c2l(data, l); |
195 | T1 = X[0] = l; | 179 | X[0] = l; |
196 | ROUND_00_15(0, a, b, c, d, e, f, g, h); | ||
197 | HOST_c2l(data, l); | 180 | HOST_c2l(data, l); |
198 | T1 = X[1] = l; | 181 | X[1] = l; |
199 | ROUND_00_15(1, h, a, b, c, d, e, f, g); | ||
200 | HOST_c2l(data, l); | 182 | HOST_c2l(data, l); |
201 | T1 = X[2] = l; | 183 | X[2] = l; |
202 | ROUND_00_15(2, g, h, a, b, c, d, e, f); | ||
203 | HOST_c2l(data, l); | 184 | HOST_c2l(data, l); |
204 | T1 = X[3] = l; | 185 | X[3] = l; |
205 | ROUND_00_15(3, f, g, h, a, b, c, d, e); | ||
206 | HOST_c2l(data, l); | 186 | HOST_c2l(data, l); |
207 | T1 = X[4] = l; | 187 | X[4] = l; |
208 | ROUND_00_15(4, e, f, g, h, a, b, c, d); | ||
209 | HOST_c2l(data, l); | 188 | HOST_c2l(data, l); |
210 | T1 = X[5] = l; | 189 | X[5] = l; |
211 | ROUND_00_15(5, d, e, f, g, h, a, b, c); | ||
212 | HOST_c2l(data, l); | 190 | HOST_c2l(data, l); |
213 | T1 = X[6] = l; | 191 | X[6] = l; |
214 | ROUND_00_15(6, c, d, e, f, g, h, a, b); | ||
215 | HOST_c2l(data, l); | 192 | HOST_c2l(data, l); |
216 | T1 = X[7] = l; | 193 | X[7] = l; |
217 | ROUND_00_15(7, b, c, d, e, f, g, h, a); | ||
218 | HOST_c2l(data, l); | 194 | HOST_c2l(data, l); |
219 | T1 = X[8] = l; | 195 | X[8] = l; |
220 | ROUND_00_15(8, a, b, c, d, e, f, g, h); | ||
221 | HOST_c2l(data, l); | 196 | HOST_c2l(data, l); |
222 | T1 = X[9] = l; | 197 | X[9] = l; |
223 | ROUND_00_15(9, h, a, b, c, d, e, f, g); | ||
224 | HOST_c2l(data, l); | 198 | HOST_c2l(data, l); |
225 | T1 = X[10] = l; | 199 | X[10] = l; |
226 | ROUND_00_15(10, g, h, a, b, c, d, e, f); | ||
227 | HOST_c2l(data, l); | 200 | HOST_c2l(data, l); |
228 | T1 = X[11] = l; | 201 | X[11] = l; |
229 | ROUND_00_15(11, f, g, h, a, b, c, d, e); | ||
230 | HOST_c2l(data, l); | 202 | HOST_c2l(data, l); |
231 | T1 = X[12] = l; | 203 | X[12] = l; |
232 | ROUND_00_15(12, e, f, g, h, a, b, c, d); | ||
233 | HOST_c2l(data, l); | 204 | HOST_c2l(data, l); |
234 | T1 = X[13] = l; | 205 | X[13] = l; |
235 | ROUND_00_15(13, d, e, f, g, h, a, b, c); | ||
236 | HOST_c2l(data, l); | 206 | HOST_c2l(data, l); |
237 | T1 = X[14] = l; | 207 | X[14] = l; |
238 | ROUND_00_15(14, c, d, e, f, g, h, a, b); | ||
239 | HOST_c2l(data, l); | 208 | HOST_c2l(data, l); |
240 | T1 = X[15] = l; | 209 | X[15] = l; |
241 | ROUND_00_15(15, b, c, d, e, f, g, h, a); | ||
242 | } | 210 | } |
243 | 211 | ||
212 | ROUND_00_15(X[0], 0, a, b, c, d, e, f, g, h); | ||
213 | ROUND_00_15(X[1], 1, h, a, b, c, d, e, f, g); | ||
214 | ROUND_00_15(X[2], 2, g, h, a, b, c, d, e, f); | ||
215 | ROUND_00_15(X[3], 3, f, g, h, a, b, c, d, e); | ||
216 | ROUND_00_15(X[4], 4, e, f, g, h, a, b, c, d); | ||
217 | ROUND_00_15(X[5], 5, d, e, f, g, h, a, b, c); | ||
218 | ROUND_00_15(X[6], 6, c, d, e, f, g, h, a, b); | ||
219 | ROUND_00_15(X[7], 7, b, c, d, e, f, g, h, a); | ||
220 | |||
221 | ROUND_00_15(X[8], 8, a, b, c, d, e, f, g, h); | ||
222 | ROUND_00_15(X[9], 9, h, a, b, c, d, e, f, g); | ||
223 | ROUND_00_15(X[10], 10, g, h, a, b, c, d, e, f); | ||
224 | ROUND_00_15(X[11], 11, f, g, h, a, b, c, d, e); | ||
225 | ROUND_00_15(X[12], 12, e, f, g, h, a, b, c, d); | ||
226 | ROUND_00_15(X[13], 13, d, e, f, g, h, a, b, c); | ||
227 | ROUND_00_15(X[14], 14, c, d, e, f, g, h, a, b); | ||
228 | ROUND_00_15(X[15], 15, b, c, d, e, f, g, h, a); | ||
229 | |||
244 | for (i = 16; i < 64; i += 8) { | 230 | for (i = 16; i < 64; i += 8) { |
245 | ROUND_16_63(i + 0, a, b, c, d, e, f, g, h, X); | 231 | ROUND_16_63(i + 0, a, b, c, d, e, f, g, h, X); |
246 | ROUND_16_63(i + 1, h, a, b, c, d, e, f, g, X); | 232 | ROUND_16_63(i + 1, h, a, b, c, d, e, f, g, X); |