OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
Sha2.c
Go to the documentation of this file.
1
33#include "Sha2Internal.h"
34
35#define UNPACK64(x, str) \
36 do { \
37 *((str) + 7) = (UINT8) (x); \
38 *((str) + 6) = (UINT8) RShiftU64 ((x), 8); \
39 *((str) + 5) = (UINT8) RShiftU64 ((x), 16); \
40 *((str) + 4) = (UINT8) RShiftU64 ((x), 24); \
41 *((str) + 3) = (UINT8) RShiftU64 ((x), 32); \
42 *((str) + 2) = (UINT8) RShiftU64 ((x), 40); \
43 *((str) + 1) = (UINT8) RShiftU64 ((x), 48); \
44 *((str) + 0) = (UINT8) RShiftU64 ((x), 56); \
45 } while(0)
46
47#define PACK64(str, x) \
48 do { \
49 *(x) = ((UINT64) *((str) + 7)) \
50 | LShiftU64 (*((str) + 6), 8) \
51 | LShiftU64 (*((str) + 5), 16) \
52 | LShiftU64 (*((str) + 4), 24) \
53 | LShiftU64 (*((str) + 3), 32) \
54 | LShiftU64 (*((str) + 2), 40) \
55 | LShiftU64 (*((str) + 1), 48) \
56 | LShiftU64 (*((str) + 0), 56); \
57 } while (0)
58
59#define SHFR(a, b) (a >> b)
60#define ROTLEFT(a, b) ((a << b) | (a >> ((sizeof(a) << 3) - b)))
61#define ROTRIGHT(a, b) ((a >> b) | (a << ((sizeof(a) << 3) - b)))
62#define CH(x, y, z) (((x) & (y)) ^ (~(x) & (z)))
63#define MAJ(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
64
65//
66// Sha 256
67//
68#define SHA256_EP0(x) (ROTRIGHT(x, 2) ^ ROTRIGHT(x, 13) ^ ROTRIGHT(x, 22))
69#define SHA256_EP1(x) (ROTRIGHT(x, 6) ^ ROTRIGHT(x, 11) ^ ROTRIGHT(x, 25))
70#define SHA256_SIG0(x) (ROTRIGHT(x, 7) ^ ROTRIGHT(x, 18) ^ SHFR(x, 3))
71#define SHA256_SIG1(x) (ROTRIGHT(x, 17) ^ ROTRIGHT(x, 19) ^ SHFR(x, 10))
72
73//
74// Sha 512
75//
76#define SHA512_EP0(x) (ROTRIGHT(x, 28) ^ ROTRIGHT(x, 34) ^ ROTRIGHT(x, 39))
77#define SHA512_EP1(x) (ROTRIGHT(x, 14) ^ ROTRIGHT(x, 18) ^ ROTRIGHT(x, 41))
78#define SHA512_SIG0(x) (ROTRIGHT(x, 1) ^ ROTRIGHT(x, 8) ^ SHFR(x, 7))
79#define SHA512_SIG1(x) (ROTRIGHT(x, 19) ^ ROTRIGHT(x, 61) ^ SHFR(x, 6))
80
81#define SHA512_SCR(Index) \
82 do { \
83 W[Index] = SHA512_SIG1(W[Index - 2]) + W[Index - 7] \
84 + SHA512_SIG0(W[Index - 15]) + W[Index - 16]; \
85 } while(0)
86
87GLOBAL_REMOVE_IF_UNREFERENCED BOOLEAN mIsAccelEnabled;
88
89#ifdef OC_CRYPTO_SUPPORTS_SHA256
90STATIC CONST UINT32 SHA256_K[64] = {
91 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
92 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
93 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
94 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
95 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
96 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
97 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
98 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
99};
100#endif
101
102#if defined (OC_CRYPTO_SUPPORTS_SHA384) || defined (OC_CRYPTO_SUPPORTS_SHA512)
103CONST UINT64 SHA512_K[80] = {
104 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
105 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
106 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
107 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
108 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
109 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
110 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
111 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
112 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
113 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
114 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
115 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
116 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
117 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
118 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
119 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
120 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
121 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
122 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
123 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
124 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
125 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
126 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
127 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
128 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
129 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
130 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
131};
132#endif
133
134#ifdef OC_CRYPTO_SUPPORTS_SHA256
135//
136// Sha 256 Init State
137//
138STATIC CONST UINT32 SHA256_H0[8] = {
139 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
140 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
141};
142#endif
143
144#ifdef OC_CRYPTO_SUPPORTS_SHA384
145//
146// Sha 384 Init State
147//
148STATIC CONST UINT64 SHA384_H0[8] = {
149 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL,
150 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL,
151 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
152 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL
153};
154#endif
155
156#ifdef OC_CRYPTO_SUPPORTS_SHA512
157//
158// Sha 512 Init State
159//
160STATIC CONST UINT64 SHA512_H0[8] = {
161 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,
162 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
163 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
164 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL
165};
166#endif
167
168#ifdef OC_CRYPTO_SUPPORTS_SHA256
169//
170// Sha 256 functions
171//
172VOID
173Sha256Transform (
174 SHA256_CONTEXT *Context,
175 CONST UINT8 *Data
176 )
177{
178 UINT32 A, B, C, D, E, F, G, H, Index1, Index2, T1, T2;
179 UINT32 M[64];
180
181 for (Index1 = 0, Index2 = 0; Index1 < 16; Index1++, Index2 += 4) {
182 M[Index1] = ((UINT32)Data[Index2] << 24)
183 | ((UINT32)Data[Index2 + 1] << 16)
184 | ((UINT32)Data[Index2 + 2] << 8)
185 | ((UINT32)Data[Index2 + 3]);
186 }
187
188 for ( ; Index1 < 64; ++Index1) {
189 M[Index1] = SHA256_SIG1 (M[Index1 - 2]) + M[Index1 - 7]
190 + SHA256_SIG0 (M[Index1 - 15]) + M[Index1 - 16];
191 }
192
193 A = Context->State[0];
194 B = Context->State[1];
195 C = Context->State[2];
196 D = Context->State[3];
197 E = Context->State[4];
198 F = Context->State[5];
199 G = Context->State[6];
200 H = Context->State[7];
201
202 for (Index1 = 0; Index1 < 64; ++Index1) {
203 T1 = H + SHA256_EP1 (E) + CH (E, F, G) + SHA256_K[Index1] + M[Index1];
204 T2 = SHA256_EP0 (A) + MAJ (A, B, C);
205 H = G;
206 G = F;
207 F = E;
208 E = D + T1;
209 D = C;
210 C = B;
211 B = A;
212 A = T1 + T2;
213 }
214
215 Context->State[0] += A;
216 Context->State[1] += B;
217 Context->State[2] += C;
218 Context->State[3] += D;
219 Context->State[4] += E;
220 Context->State[5] += F;
221 Context->State[6] += G;
222 Context->State[7] += H;
223}
224
225VOID
227 SHA256_CONTEXT *Context
228 )
229{
230 UINTN Index;
231
232 for (Index = 0; Index < 8; ++Index) {
233 Context->State[Index] = SHA256_H0[Index];
234 }
235
236 Context->DataLen = 0;
237 Context->BitLen = 0;
238}
239
240VOID
242 SHA256_CONTEXT *Context,
243 CONST UINT8 *Data,
244 UINTN Len
245 )
246{
247 UINT32 Index;
248
249 for (Index = 0; Index < Len; ++Index) {
250 Context->Data[Context->DataLen] = Data[Index];
251 Context->DataLen++;
252 if (Context->DataLen == 64) {
253 Sha256Transform (Context, Context->Data);
254 Context->BitLen += 512;
255 Context->DataLen = 0;
256 }
257 }
258}
259
260VOID
262 SHA256_CONTEXT *Context,
263 UINT8 *HashDigest
264 )
265{
266 UINT32 Index = 0;
267
268 Index = Context->DataLen;
269
270 //
271 // Pad whatever data is left in the buffer.
272 //
273 if (Context->DataLen < 56) {
274 Context->Data[Index++] = 0x80;
275 ZeroMem (Context->Data + Index, 56-Index);
276 } else {
277 Context->Data[Index++] = 0x80;
278 ZeroMem (Context->Data + Index, 64-Index);
279 Sha256Transform (Context, Context->Data);
280 ZeroMem (Context->Data, 56);
281 }
282
283 //
284 // Append to the padding the total Message's length in bits and transform.
285 //
286 Context->BitLen += Context->DataLen * 8;
287 Context->Data[63] = (UINT8)Context->BitLen;
288 Context->Data[62] = (UINT8)(Context->BitLen >> 8);
289 Context->Data[61] = (UINT8)(Context->BitLen >> 16);
290 Context->Data[60] = (UINT8)(Context->BitLen >> 24);
291 Context->Data[59] = (UINT8)(Context->BitLen >> 32);
292 Context->Data[58] = (UINT8)(Context->BitLen >> 40);
293 Context->Data[57] = (UINT8)(Context->BitLen >> 48);
294 Context->Data[56] = (UINT8)(Context->BitLen >> 56);
295 Sha256Transform (Context, Context->Data);
296
297 //
298 // Since this implementation uses little endian byte ordering and SHA uses big endian,
299 // reverse all the bytes when copying the final State to the output hash.
300 //
301 for (Index = 0; Index < 4; ++Index) {
302 HashDigest[Index] = (UINT8)((Context->State[0] >> (24 - Index * 8)) & 0x000000FF);
303 HashDigest[Index + 4] = (UINT8)((Context->State[1] >> (24 - Index * 8)) & 0x000000FF);
304 HashDigest[Index + 8] = (UINT8)((Context->State[2] >> (24 - Index * 8)) & 0x000000FF);
305 HashDigest[Index + 12] = (UINT8)((Context->State[3] >> (24 - Index * 8)) & 0x000000FF);
306 HashDigest[Index + 16] = (UINT8)((Context->State[4] >> (24 - Index * 8)) & 0x000000FF);
307 HashDigest[Index + 20] = (UINT8)((Context->State[5] >> (24 - Index * 8)) & 0x000000FF);
308 HashDigest[Index + 24] = (UINT8)((Context->State[6] >> (24 - Index * 8)) & 0x000000FF);
309 HashDigest[Index + 28] = (UINT8)((Context->State[7] >> (24 - Index * 8)) & 0x000000FF);
310 }
311}
312
313VOID
314Sha256 (
315 UINT8 *Hash,
316 CONST UINT8 *Data,
317 UINTN Len
318 )
319{
320 SHA256_CONTEXT Ctx;
321
322 Sha256Init (&Ctx);
323 Sha256Update (&Ctx, Data, Len);
324 Sha256Final (&Ctx, Hash);
325 ZeroMem (&Ctx, sizeof (Ctx));
326}
327
328#endif
329
330#if defined (OC_CRYPTO_SUPPORTS_SHA384) || defined (OC_CRYPTO_SUPPORTS_SHA512)
331//
332// Sha 384 & 512 common functions
333//
334VOID
335Sha512Transform (
336 IN OUT UINT64 *State,
337 IN CONST UINT8 *Data,
338 IN UINTN BlockNb
339 )
340{
341 UINT64 W[80];
342 UINT64 Wv[8];
343 UINT64 T1;
344 UINT64 T2;
345 CONST UINT8 *SubBlock;
346 UINTN Index1;
347 UINTN Index2;
348
349 for (Index1 = 0; Index1 < BlockNb; ++Index1) {
350 SubBlock = Data + (Index1 << 7);
351
352 //
353 // Convert from big-endian byte order to host byte order
354 //
355 for (Index2 = 0; Index2 < 16; ++Index2) {
356 PACK64 (&SubBlock[Index2 << 3], &W[Index2]);
357 }
358
359 //
360 // Initialize the 8 working registers
361 //
362 for (Index2 = 0; Index2 < 8; ++Index2) {
363 Wv[Index2] = State[Index2];
364 }
365
366 for (Index2 = 0; Index2 < 80; ++Index2) {
367 //
368 // Prepare the message schedule
369 //
370 if (Index2 >= 16) {
371 SHA512_SCR (Index2);
372 }
373
374 //
375 // Calculate T1 and T2
376 //
377 T1 = Wv[7] + SHA512_EP1 (Wv[4])
378 + CH (Wv[4], Wv[5], Wv[6]) + SHA512_K[Index2]
379 + W[Index2];
380
381 T2 = SHA512_EP0 (Wv[0]) + MAJ (Wv[0], Wv[1], Wv[2]);
382
383 //
384 // Update the working registers
385 //
386 Wv[7] = Wv[6];
387 Wv[6] = Wv[5];
388 Wv[5] = Wv[4];
389 Wv[4] = Wv[3] + T1;
390 Wv[3] = Wv[2];
391 Wv[2] = Wv[1];
392 Wv[1] = Wv[0];
393 Wv[0] = T1 + T2;
394 }
395
396 //
397 // Update the hash value
398 //
399 for (Index2 = 0; Index2 < 8; ++Index2) {
400 State[Index2] += Wv[Index2];
401 }
402 }
403}
404
405#endif
406
407#ifdef OC_CRYPTO_SUPPORTS_SHA512
408//
409// Sha 512 functions
410//
411VOID
413 SHA512_CONTEXT *Context
414 )
415{
416 //
417 // Set initial hash value
418 //
419 CopyMem (Context->State, SHA512_H0, SHA512_DIGEST_SIZE);
420
421 //
422 // Number of bytes in the buffer
423 //
424 Context->Length = 0;
425
426 //
427 // Total length of the data
428 //
429 Context->TotalLength = 0;
430}
431
432VOID
434 SHA512_CONTEXT *Context,
435 CONST UINT8 *Data,
436 UINTN Len
437 )
438{
439 UINTN BlockNb;
440 UINTN NewLen;
441 UINTN RemLen;
442 UINTN TmpLen;
443 CONST UINT8 *ShiftedMsg;
444
445 TmpLen = SHA512_BLOCK_SIZE - Context->Length;
446 RemLen = Len < TmpLen ? Len : TmpLen;
447
448 CopyMem (&Context->Block[Context->Length], Data, RemLen);
449
450 if (Context->Length + Len < SHA512_BLOCK_SIZE) {
451 Context->Length += Len;
452 return;
453 }
454
455 NewLen = Len - RemLen;
456 BlockNb = NewLen / SHA512_BLOCK_SIZE;
457
458 ShiftedMsg = Data + RemLen;
459
460 if (mIsAccelEnabled) {
461 Sha512TransformAccel (Context->State, Context->Block, 1);
462 Sha512TransformAccel (Context->State, ShiftedMsg, BlockNb);
463 } else {
464 Sha512Transform (Context->State, Context->Block, 1);
465 Sha512Transform (Context->State, ShiftedMsg, BlockNb);
466 }
467
468 RemLen = NewLen % SHA512_BLOCK_SIZE;
469
470 CopyMem (Context->Block, &ShiftedMsg[BlockNb << 7], RemLen);
471
472 Context->Length = RemLen;
473 Context->TotalLength += (BlockNb + 1) << 7;
474}
475
476VOID
478 SHA512_CONTEXT *Context,
479 UINT8 *HashDigest
480 )
481{
482 UINTN BlockNb;
483 UINTN PmLen;
484 UINT64 LenB;
485 UINTN Index;
486
487 BlockNb = ((SHA512_BLOCK_SIZE - 17) < (Context->Length % SHA512_BLOCK_SIZE)) + 1;
488
489 LenB = (Context->TotalLength + Context->Length) << 3;
490 PmLen = BlockNb << 7;
491
492 ZeroMem (Context->Block + Context->Length, PmLen - Context->Length);
493 Context->Block[Context->Length] = 0x80;
494 UNPACK64 (LenB, Context->Block + PmLen - 8);
495
496 if (mIsAccelEnabled) {
497 Sha512TransformAccel (Context->State, Context->Block, BlockNb);
498 } else {
499 Sha512Transform (Context->State, Context->Block, BlockNb);
500 }
501
502 for (Index = 0; Index < 8; ++Index) {
503 UNPACK64 (Context->State[Index], &HashDigest[Index << 3]);
504 }
505}
506
507VOID
508Sha512 (
509 UINT8 *Hash,
510 CONST UINT8 *Data,
511 UINTN Len
512 )
513{
514 SHA512_CONTEXT Ctx;
515
516 Sha512Init (&Ctx);
517 Sha512Update (&Ctx, Data, Len);
518 Sha512Final (&Ctx, Hash);
519 ZeroMem (&Ctx, sizeof (Ctx));
520}
521
522#endif
523
524#ifdef OC_CRYPTO_SUPPORTS_SHA384
525//
526// Sha 384 functions
527//
528VOID
530 SHA384_CONTEXT *Context
531 )
532{
533 CopyMem (Context->State, SHA384_H0, SHA512_DIGEST_SIZE);
534
535 Context->Length = 0;
536 Context->TotalLength = 0;
537}
538
539VOID
541 SHA384_CONTEXT *Context,
542 CONST UINT8 *Data,
543 UINTN Len
544 )
545{
546 UINTN BlockNb;
547 UINTN NewLen;
548 UINTN RemLen;
549 UINTN TmpLen;
550 CONST UINT8 *ShiftedMsg;
551
552 TmpLen = SHA384_BLOCK_SIZE - Context->Length;
553 RemLen = Len < TmpLen ? Len : TmpLen;
554
555 CopyMem (&Context->Block[Context->Length], Data, RemLen);
556
557 if (Context->Length + Len < SHA384_BLOCK_SIZE) {
558 Context->Length += Len;
559 return;
560 }
561
562 NewLen = Len - RemLen;
563 BlockNb = NewLen / SHA384_BLOCK_SIZE;
564
565 ShiftedMsg = Data + RemLen;
566
567 if (mIsAccelEnabled) {
568 Sha512TransformAccel (Context->State, Context->Block, 1);
569 Sha512TransformAccel (Context->State, ShiftedMsg, BlockNb);
570 } else {
571 Sha512Transform (Context->State, Context->Block, 1);
572 Sha512Transform (Context->State, ShiftedMsg, BlockNb);
573 }
574
575 RemLen = NewLen % SHA384_BLOCK_SIZE;
576
577 CopyMem (Context->Block, &ShiftedMsg[BlockNb << 7], RemLen);
578
579 Context->Length = RemLen;
580 Context->TotalLength += (BlockNb + 1) << 7;
581}
582
583VOID
585 SHA384_CONTEXT *Context,
586 UINT8 *HashDigest
587 )
588{
589 UINTN BlockNb;
590 UINTN PmLen;
591 UINT64 LenB;
592 UINTN Index;
593
594 BlockNb = ((SHA384_BLOCK_SIZE - 17) < (Context->Length % SHA384_BLOCK_SIZE)) + 1;
595
596 LenB = (Context->TotalLength + Context->Length) << 3;
597 PmLen = BlockNb << 7;
598
599 ZeroMem (Context->Block + Context->Length, PmLen - Context->Length);
600
601 Context->Block[Context->Length] = 0x80;
602 UNPACK64 (LenB, Context->Block + PmLen - 8);
603
604 if (mIsAccelEnabled) {
605 Sha512TransformAccel (Context->State, Context->Block, BlockNb);
606 } else {
607 Sha512Transform (Context->State, Context->Block, BlockNb);
608 }
609
610 for (Index = 0; Index < 6; ++Index) {
611 UNPACK64 (Context->State[Index], &HashDigest[Index << 3]);
612 }
613}
614
615VOID
616Sha384 (
617 UINT8 *Hash,
618 CONST UINT8 *Data,
619 UINTN Len
620 )
621{
622 SHA384_CONTEXT Ctx;
623
624 Sha384Init (&Ctx);
625 Sha384Update (&Ctx, Data, Len);
626 Sha384Final (&Ctx, Hash);
627 SecureZeroMem (&Ctx, sizeof (Ctx));
628}
629
630#endif
#define H(X, Y, Z)
Definition Md5.c:36
#define G(X, Y, Z)
Definition Md5.c:35
VOID Sha384(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
VOID Sha256Init(SHA256_CONTEXT *Context)
VOID Sha512Update(SHA512_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
#define SHA384_BLOCK_SIZE
Definition OcCryptoLib.h:56
VOID Sha512Init(SHA512_CONTEXT *Context)
VOID Sha512Final(SHA512_CONTEXT *Context, UINT8 *HashDigest)
VOID Sha384Init(SHA384_CONTEXT *Context)
VOID Sha384Final(SHA384_CONTEXT *Context, UINT8 *HashDigest)
#define SHA512_DIGEST_SIZE
Definition OcCryptoLib.h:47
VOID Sha256Final(SHA256_CONTEXT *Context, UINT8 *HashDigest)
#define SHA512_BLOCK_SIZE
Definition OcCryptoLib.h:55
VOID Sha256(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
VOID Sha256Update(SHA256_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID Sha384Update(SHA384_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID * SecureZeroMem(OUT VOID *Buffer, IN UINTN Length)
Definition SecureMem.c:73
VOID Sha512(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
#define SHA512_EP1(x)
Definition Sha2.c:77
#define SHA256_EP0(x)
Definition Sha2.c:68
#define CH(x, y, z)
Definition Sha2.c:62
#define SHA512_EP0(x)
Definition Sha2.c:76
#define SHA256_EP1(x)
Definition Sha2.c:69
GLOBAL_REMOVE_IF_UNREFERENCED BOOLEAN mIsAccelEnabled
Definition Sha2.c:87
#define SHA256_SIG0(x)
Definition Sha2.c:70
#define SHA256_SIG1(x)
Definition Sha2.c:71
#define SHA512_SCR(Index)
Definition Sha2.c:81
#define UNPACK64(x, str)
Definition Sha2.c:35
#define PACK64(str, x)
Definition Sha2.c:47
#define MAJ(x, y, z)
Definition Sha2.c:63
VOID EFIAPI Sha512TransformAccel(IN OUT UINT64 *State, IN CONST UINT8 *Data, IN UINTN BlockNb)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define W
Definition crc32.c:85
#define Len
Definition deflate.h:82
#define F
Definition lzss.c:66
UINT32 State[8]
UINT8 Block[2 *SHA512_BLOCK_SIZE]
UINT64 State[8]