32#define ROTLEFT(a, b) ((a << b) | (a >> (32 - b)))
34#ifdef OC_CRYPTO_SUPPORTS_SHA1
42 UINT32 A, B, C, D, E, Index1, Index2, T, M[80];
44 for (Index1 = 0, Index2 = 0; Index1 < 16; ++Index1, Index2 += 4) {
45 M[Index1] = (Data[Index2] << 24) + (Data[Index2 + 1] << 16)
46 + (Data[Index2 + 2] << 8) + (Data[Index2 + 3]);
49 for ( ; Index1 < 80; ++Index1) {
50 M[Index1] = (M[Index1 - 3] ^ M[Index1 - 8] ^ M[Index1 - 14] ^ M[Index1 - 16]);
51 M[Index1] = (M[Index1] << 1) | (M[Index1] >> 31);
60 for (Index1 = 0; Index1 < 20; ++Index1) {
61 T =
ROTLEFT (A, 5) + ((B & C) ^ (~B & D)) + E + Ctx->
K[0] + M[Index1];
69 for ( ; Index1 < 40; ++Index1) {
70 T =
ROTLEFT (A, 5) + (B ^ C ^ D) + E + Ctx->
K[1] + M[Index1];
78 for ( ; Index1 < 60; ++Index1) {
79 T =
ROTLEFT (A, 5) + ((B & C) ^ (B & D) ^ (C & D)) + E + Ctx->
K[2] + M[Index1];
87 for ( ; Index1 < 80; ++Index1) {
88 T =
ROTLEFT (A, 5) + (B ^ C ^ D) + E + Ctx->
K[3] + M[Index1];
110 Ctx->
State[0] = 0x67452301;
111 Ctx->
State[1] = 0xEFCDAB89;
112 Ctx->
State[2] = 0x98BADCFE;
113 Ctx->
State[3] = 0x10325476;
114 Ctx->
State[4] = 0xC3D2E1F0;
115 Ctx->
K[0] = 0x5A827999;
116 Ctx->
K[1] = 0x6ED9EBA1;
117 Ctx->
K[2] = 0x8F1BBCDC;
118 Ctx->
K[3] = 0xCA62C1D6;
130 for (Index = 0; Index <
Len; ++Index) {
134 Sha1Transform (Ctx, Ctx->
Data);
153 Ctx->
Data[Index++] = 0x80;
156 Ctx->
Data[Index++] = 0x80;
158 Sha1Transform (Ctx, Ctx->
Data);
174 Sha1Transform (Ctx, Ctx->
Data);
180 for (Index = 0; Index < 4; ++Index) {
181 Hash[Index] = (UINT8)((Ctx->
State[0] >> (24 - Index * 8)) & 0x000000FF);
182 Hash[Index + 4] = (UINT8)((Ctx->
State[1] >> (24 - Index * 8)) & 0x000000FF);
183 Hash[Index + 8] = (UINT8)((Ctx->
State[2] >> (24 - Index * 8)) & 0x000000FF);
184 Hash[Index + 12] = (UINT8)((Ctx->
State[3] >> (24 - Index * 8)) & 0x000000FF);
185 Hash[Index + 16] = (UINT8)((Ctx->
State[4] >> (24 - Index * 8)) & 0x000000FF);
VOID Sha1Update(SHA1_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID Sha1Init(SHA1_CONTEXT *Context)
VOID Sha1Final(SHA1_CONTEXT *Context, UINT8 *Hash)
VOID Sha1(UINT8 *Hash, UINT8 *Data, UINTN Len)
VOID * SecureZeroMem(OUT VOID *Buffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)