MCPcopy Create free account
hub / github.com/diasurgical/devilution / SHA1ProcessMessageBlock

Function SHA1ProcessMessageBlock

Source/sha.cpp:74–136  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72}
73
74void SHA1ProcessMessageBlock(SHA1Context *context)
75{
76 DWORD i, temp;
77 DWORD W[80];
78 DWORD A, B, C, D, E;
79
80 DWORD *buf = (DWORD *)context->buffer;
81 for (i = 0; i < 16; i++)
82 W[i] = SwapLE32(buf[i]);
83
84
85 for (i = 16; i < 80; i++) {
86 W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3];
87 }
88
89 A = context->state[0];
90 B = context->state[1];
91 C = context->state[2];
92 D = context->state[3];
93 E = context->state[4];
94
95 for (i = 0; i < 20; i++) {
96 temp = SHA1CircularShift(5, A) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5A827999;
97 E = D;
98 D = C;
99 C = SHA1CircularShift(30, B);
100 B = A;
101 A = temp;
102 }
103
104 for (i = 20; i < 40; i++) {
105 temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1;
106 E = D;
107 D = C;
108 C = SHA1CircularShift(30, B);
109 B = A;
110 A = temp;
111 }
112
113 for (i = 40; i < 60; i++) {
114 temp = SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC;
115 E = D;
116 D = C;
117 C = SHA1CircularShift(30, B);
118 B = A;
119 A = temp;
120 }
121
122 for (i = 60; i < 80; i++) {
123 temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6;
124 E = D;
125 D = C;
126 C = SHA1CircularShift(30, B);
127 B = A;
128 A = temp;
129 }
130
131 context->state[0] += A;

Callers 1

SHA1InputFunction · 0.85

Calls 1

SHA1CircularShiftFunction · 0.85

Tested by

no test coverage detected