Lines Matching +full:1 +full:- +full:7

1 /* SHA-256 and SHA-512 implementation based on code by Oliver Gay
2 * <olivier.gay@a3.epfl.ch> under a BSD-style license. See below.
6 * FIPS 180-2 SHA-224/256/384/512 implementation
16 * 1. Redistributions of source code must retain the above copyright
43 ctx->crypto_ctx.algo = CRYPTO_SHA256; in avb_sha256_init()
44 ctx->crypto_ctx.length = ctx->tot_len; in avb_sha256_init()
45 memset(ctx->buf, 0, sizeof(ctx->buf)); in avb_sha256_init()
47 ctx->crypto_dev = crypto_get_device(ctx->crypto_ctx.algo); in avb_sha256_init()
48 if (!ctx->crypto_dev) in avb_sha256_init()
51 crypto_sha_init(ctx->crypto_dev, &ctx->crypto_ctx); in avb_sha256_init()
55 if (ctx->crypto_dev) in avb_sha256_update()
56 crypto_sha_update(ctx->crypto_dev, (u32 *)data, len); in avb_sha256_update()
60 if (ctx->crypto_dev) in avb_sha256_final()
61 crypto_sha_final(ctx->crypto_dev, &ctx->crypto_ctx, ctx->buf); in avb_sha256_final()
63 return ctx->buf; in avb_sha256_final()
67 #define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n)))
68 #define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n)))
74 #define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3))
81 *((str) + 1) = (uint8_t)((x) >> 16); \
87 *((str) + 7) = (uint8_t)x; \
93 *((str) + 1) = (uint8_t)((uint64_t)x >> 48); \
100 ((uint32_t) * ((str) + 1) << 16) | \
107 { w[i] = SHA256_F4(w[i - 2]) + w[i - 7] + SHA256_F3(w[i - 15]) + w[i - 16]; }
140 /* SHA-256 implementation */
145 ctx->h[i] = sha256_h0[i]; in avb_sha256_init()
148 ctx->h[0] = sha256_h0[0]; in avb_sha256_init()
149 ctx->h[1] = sha256_h0[1]; in avb_sha256_init()
150 ctx->h[2] = sha256_h0[2]; in avb_sha256_init()
151 ctx->h[3] = sha256_h0[3]; in avb_sha256_init()
152 ctx->h[4] = sha256_h0[4]; in avb_sha256_init()
153 ctx->h[5] = sha256_h0[5]; in avb_sha256_init()
154 ctx->h[6] = sha256_h0[6]; in avb_sha256_init()
155 ctx->h[7] = sha256_h0[7]; in avb_sha256_init()
158 ctx->len = 0; in avb_sha256_init()
159 ctx->tot_len = 0; in avb_sha256_init()
188 wv[j] = ctx->h[j]; in SHA256_transform()
192 t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6]) + sha256_k[j] + in SHA256_transform()
194 t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]); in SHA256_transform()
195 wv[7] = wv[6]; in SHA256_transform()
200 wv[2] = wv[1]; in SHA256_transform()
201 wv[1] = wv[0]; in SHA256_transform()
206 ctx->h[j] += wv[j]; in SHA256_transform()
210 PACK32(&sub_block[4], &w[1]); in SHA256_transform()
216 PACK32(&sub_block[28], &w[7]); in SHA256_transform()
275 wv[0] = ctx->h[0]; in SHA256_transform()
276 wv[1] = ctx->h[1]; in SHA256_transform()
277 wv[2] = ctx->h[2]; in SHA256_transform()
278 wv[3] = ctx->h[3]; in SHA256_transform()
279 wv[4] = ctx->h[4]; in SHA256_transform()
280 wv[5] = ctx->h[5]; in SHA256_transform()
281 wv[6] = ctx->h[6]; in SHA256_transform()
282 wv[7] = ctx->h[7]; in SHA256_transform()
284 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 0); in SHA256_transform()
285 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 1); in SHA256_transform()
286 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 2); in SHA256_transform()
287 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 3); in SHA256_transform()
288 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 4); in SHA256_transform()
289 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 5); in SHA256_transform()
290 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 6); in SHA256_transform()
291 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 7); in SHA256_transform()
292 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 8); in SHA256_transform()
293 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 9); in SHA256_transform()
294 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 10); in SHA256_transform()
295 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 11); in SHA256_transform()
296 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 12); in SHA256_transform()
297 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 13); in SHA256_transform()
298 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 14); in SHA256_transform()
299 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 15); in SHA256_transform()
300 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 16); in SHA256_transform()
301 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 17); in SHA256_transform()
302 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 18); in SHA256_transform()
303 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 19); in SHA256_transform()
304 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 20); in SHA256_transform()
305 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 21); in SHA256_transform()
306 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 22); in SHA256_transform()
307 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 23); in SHA256_transform()
308 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 24); in SHA256_transform()
309 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 25); in SHA256_transform()
310 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 26); in SHA256_transform()
311 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 27); in SHA256_transform()
312 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 28); in SHA256_transform()
313 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 29); in SHA256_transform()
314 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 30); in SHA256_transform()
315 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 31); in SHA256_transform()
316 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 32); in SHA256_transform()
317 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 33); in SHA256_transform()
318 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 34); in SHA256_transform()
319 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 35); in SHA256_transform()
320 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 36); in SHA256_transform()
321 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 37); in SHA256_transform()
322 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 38); in SHA256_transform()
323 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 39); in SHA256_transform()
324 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 40); in SHA256_transform()
325 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 41); in SHA256_transform()
326 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 42); in SHA256_transform()
327 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 43); in SHA256_transform()
328 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 44); in SHA256_transform()
329 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 45); in SHA256_transform()
330 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 46); in SHA256_transform()
331 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 47); in SHA256_transform()
332 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 48); in SHA256_transform()
333 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 49); in SHA256_transform()
334 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 50); in SHA256_transform()
335 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 51); in SHA256_transform()
336 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 52); in SHA256_transform()
337 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 53); in SHA256_transform()
338 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 54); in SHA256_transform()
339 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 55); in SHA256_transform()
340 SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 56); in SHA256_transform()
341 SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 57); in SHA256_transform()
342 SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 58); in SHA256_transform()
343 SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 59); in SHA256_transform()
344 SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 60); in SHA256_transform()
345 SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 61); in SHA256_transform()
346 SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 62); in SHA256_transform()
347 SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 63); in SHA256_transform()
349 ctx->h[0] += wv[0]; in SHA256_transform()
350 ctx->h[1] += wv[1]; in SHA256_transform()
351 ctx->h[2] += wv[2]; in SHA256_transform()
352 ctx->h[3] += wv[3]; in SHA256_transform()
353 ctx->h[4] += wv[4]; in SHA256_transform()
354 ctx->h[5] += wv[5]; in SHA256_transform()
355 ctx->h[6] += wv[6]; in SHA256_transform()
356 ctx->h[7] += wv[7]; in SHA256_transform()
366 tmp_len = AVB_SHA256_BLOCK_SIZE - ctx->len; in avb_sha256_update()
369 avb_memcpy(&ctx->block[ctx->len], data, rem_len); in avb_sha256_update()
371 if (ctx->len + len < AVB_SHA256_BLOCK_SIZE) { in avb_sha256_update()
372 ctx->len += len; in avb_sha256_update()
376 new_len = len - rem_len; in avb_sha256_update()
381 SHA256_transform(ctx, ctx->block, 1); in avb_sha256_update()
386 avb_memcpy(ctx->block, &shifted_data[block_nb << 6], rem_len); in avb_sha256_update()
388 ctx->len = rem_len; in avb_sha256_update()
389 ctx->tot_len += (block_nb + 1) << 6; in avb_sha256_update()
401 (1 + ((AVB_SHA256_BLOCK_SIZE - 9) < (ctx->len % AVB_SHA256_BLOCK_SIZE))); in avb_sha256_final()
403 len_b = (ctx->tot_len + ctx->len) << 3; in avb_sha256_final()
406 avb_memset(ctx->block + ctx->len, 0, pm_len - ctx->len); in avb_sha256_final()
407 ctx->block[ctx->len] = 0x80; in avb_sha256_final()
408 UNPACK64(len_b, ctx->block + pm_len - 8); in avb_sha256_final()
410 SHA256_transform(ctx, ctx->block, block_nb); in avb_sha256_final()
414 UNPACK32(ctx->h[i], &ctx->buf[i << 2]); in avb_sha256_final()
417 UNPACK32(ctx->h[0], &ctx->buf[0]); in avb_sha256_final()
418 UNPACK32(ctx->h[1], &ctx->buf[4]); in avb_sha256_final()
419 UNPACK32(ctx->h[2], &ctx->buf[8]); in avb_sha256_final()
420 UNPACK32(ctx->h[3], &ctx->buf[12]); in avb_sha256_final()
421 UNPACK32(ctx->h[4], &ctx->buf[16]); in avb_sha256_final()
422 UNPACK32(ctx->h[5], &ctx->buf[20]); in avb_sha256_final()
423 UNPACK32(ctx->h[6], &ctx->buf[24]); in avb_sha256_final()
424 UNPACK32(ctx->h[7], &ctx->buf[28]); in avb_sha256_final()
427 return ctx->buf; in avb_sha256_final()