4 _sha1block(uchar *p, ulong len, u32int *s)
6 u32int a, b, c, d, e, x;
11 /* at this point, we have a multiple of 64 bytes */
12 for(end = p+len; p < end;){
20 for(wp = w; wp < wend; wp += 5){
21 wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
22 e += ((a<<5) | (a>>27)) + wp[0];
23 e += 0x5a827999 + (((c^d)&b)^d);
26 wp[1] = (p[4]<<24) | (p[5]<<16) | (p[6]<<8) | p[7];
27 d += ((e<<5) | (e>>27)) + wp[1];
28 d += 0x5a827999 + (((b^c)&a)^c);
31 wp[2] = (p[8]<<24) | (p[9]<<16) | (p[10]<<8) | p[11];
32 c += ((d<<5) | (d>>27)) + wp[2];
33 c += 0x5a827999 + (((a^b)&e)^b);
36 wp[3] = (p[12]<<24) | (p[13]<<16) | (p[14]<<8) | p[15];
37 b += ((c<<5) | (c>>27)) + wp[3];
38 b += 0x5a827999 + (((e^a)&d)^a);
41 wp[4] = (p[16]<<24) | (p[17]<<16) | (p[18]<<8) | p[19];
42 a += ((b<<5) | (b>>27)) + wp[4];
43 a += 0x5a827999 + (((d^e)&c)^e);
49 wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
50 e += ((a<<5) | (a>>27)) + wp[0];
51 e += 0x5a827999 + (((c^d)&b)^d);
54 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
55 wp[1] = (x<<1) | (x>>31);
56 d += ((e<<5) | (e>>27)) + wp[1];
57 d += 0x5a827999 + (((b^c)&a)^c);
60 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
61 wp[2] = (x<<1) | (x>>31);
62 c += ((d<<5) | (d>>27)) + wp[2];
63 c += 0x5a827999 + (((a^b)&e)^b);
66 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
67 wp[3] = (x<<1) | (x>>31);
68 b += ((c<<5) | (c>>27)) + wp[3];
69 b += 0x5a827999 + (((e^a)&d)^a);
72 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
73 wp[4] = (x<<1) | (x>>31);
74 a += ((b<<5) | (b>>27)) + wp[4];
75 a += 0x5a827999 + (((d^e)&c)^e);
82 for(; wp < wend; wp += 5){
83 x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
84 wp[0] = (x<<1) | (x>>31);
85 e += ((a<<5) | (a>>27)) + wp[0];
86 e += 0x6ed9eba1 + (b^c^d);
89 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
90 wp[1] = (x<<1) | (x>>31);
91 d += ((e<<5) | (e>>27)) + wp[1];
92 d += 0x6ed9eba1 + (a^b^c);
95 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
96 wp[2] = (x<<1) | (x>>31);
97 c += ((d<<5) | (d>>27)) + wp[2];
98 c += 0x6ed9eba1 + (e^a^b);
101 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
102 wp[3] = (x<<1) | (x>>31);
103 b += ((c<<5) | (c>>27)) + wp[3];
104 b += 0x6ed9eba1 + (d^e^a);
107 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
108 wp[4] = (x<<1) | (x>>31);
109 a += ((b<<5) | (b>>27)) + wp[4];
110 a += 0x6ed9eba1 + (c^d^e);
115 for(; wp < wend; wp += 5){
116 x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
117 wp[0] = (x<<1) | (x>>31);
118 e += ((a<<5) | (a>>27)) + wp[0];
119 e += 0x8f1bbcdc + ((b&c)|((b|c)&d));
122 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
123 wp[1] = (x<<1) | (x>>31);
124 d += ((e<<5) | (e>>27)) + wp[1];
125 d += 0x8f1bbcdc + ((a&b)|((a|b)&c));
128 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
129 wp[2] = (x<<1) | (x>>31);
130 c += ((d<<5) | (d>>27)) + wp[2];
131 c += 0x8f1bbcdc + ((e&a)|((e|a)&b));
134 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
135 wp[3] = (x<<1) | (x>>31);
136 b += ((c<<5) | (c>>27)) + wp[3];
137 b += 0x8f1bbcdc + ((d&e)|((d|e)&a));
140 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
141 wp[4] = (x<<1) | (x>>31);
142 a += ((b<<5) | (b>>27)) + wp[4];
143 a += 0x8f1bbcdc + ((c&d)|((c|d)&e));
148 for(; wp < wend; wp += 5){
149 x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
150 wp[0] = (x<<1) | (x>>31);
151 e += ((a<<5) | (a>>27)) + wp[0];
152 e += 0xca62c1d6 + (b^c^d);
155 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
156 wp[1] = (x<<1) | (x>>31);
157 d += ((e<<5) | (e>>27)) + wp[1];
158 d += 0xca62c1d6 + (a^b^c);
161 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
162 wp[2] = (x<<1) | (x>>31);
163 c += ((d<<5) | (d>>27)) + wp[2];
164 c += 0xca62c1d6 + (e^a^b);
167 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
168 wp[3] = (x<<1) | (x>>31);
169 b += ((c<<5) | (c>>27)) + wp[3];
170 b += 0xca62c1d6 + (d^e^a);
173 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
174 wp[4] = (x<<1) | (x>>31);
175 a += ((b<<5) | (b>>27)) + wp[4];
176 a += 0xca62c1d6 + (c^d^e);