10 _sha1block(uchar *p, ulong len, u32int *s)
12 u32int a, b, c, d, e, x;
22 /* at this point, we have a multiple of 64 bytes */
23 for(end = p+len; p < end;){
31 for(wp = w; wp < wend; wp += 5){
32 wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
33 e += ((a<<5) | (a>>27)) + wp[0];
34 e += 0x5a827999 + (((c^d)&b)^d);
37 wp[1] = (p[4]<<24) | (p[5]<<16) | (p[6]<<8) | p[7];
38 d += ((e<<5) | (e>>27)) + wp[1];
39 d += 0x5a827999 + (((b^c)&a)^c);
42 wp[2] = (p[8]<<24) | (p[9]<<16) | (p[10]<<8) | p[11];
43 c += ((d<<5) | (d>>27)) + wp[2];
44 c += 0x5a827999 + (((a^b)&e)^b);
47 wp[3] = (p[12]<<24) | (p[13]<<16) | (p[14]<<8) | p[15];
48 b += ((c<<5) | (c>>27)) + wp[3];
49 b += 0x5a827999 + (((e^a)&d)^a);
52 wp[4] = (p[16]<<24) | (p[17]<<16) | (p[18]<<8) | p[19];
53 a += ((b<<5) | (b>>27)) + wp[4];
54 a += 0x5a827999 + (((d^e)&c)^e);
60 wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
61 e += ((a<<5) | (a>>27)) + wp[0];
62 e += 0x5a827999 + (((c^d)&b)^d);
65 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
66 wp[1] = (x<<1) | (x>>31);
67 d += ((e<<5) | (e>>27)) + wp[1];
68 d += 0x5a827999 + (((b^c)&a)^c);
71 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
72 wp[2] = (x<<1) | (x>>31);
73 c += ((d<<5) | (d>>27)) + wp[2];
74 c += 0x5a827999 + (((a^b)&e)^b);
77 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
78 wp[3] = (x<<1) | (x>>31);
79 b += ((c<<5) | (c>>27)) + wp[3];
80 b += 0x5a827999 + (((e^a)&d)^a);
83 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
84 wp[4] = (x<<1) | (x>>31);
85 a += ((b<<5) | (b>>27)) + wp[4];
86 a += 0x5a827999 + (((d^e)&c)^e);
93 for(; wp < wend; wp += 5){
94 x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
95 wp[0] = (x<<1) | (x>>31);
96 e += ((a<<5) | (a>>27)) + wp[0];
97 e += 0x6ed9eba1 + (b^c^d);
100 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
101 wp[1] = (x<<1) | (x>>31);
102 d += ((e<<5) | (e>>27)) + wp[1];
103 d += 0x6ed9eba1 + (a^b^c);
106 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
107 wp[2] = (x<<1) | (x>>31);
108 c += ((d<<5) | (d>>27)) + wp[2];
109 c += 0x6ed9eba1 + (e^a^b);
112 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
113 wp[3] = (x<<1) | (x>>31);
114 b += ((c<<5) | (c>>27)) + wp[3];
115 b += 0x6ed9eba1 + (d^e^a);
118 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
119 wp[4] = (x<<1) | (x>>31);
120 a += ((b<<5) | (b>>27)) + wp[4];
121 a += 0x6ed9eba1 + (c^d^e);
126 for(; wp < wend; wp += 5){
127 x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
128 wp[0] = (x<<1) | (x>>31);
129 e += ((a<<5) | (a>>27)) + wp[0];
130 e += 0x8f1bbcdc + ((b&c)|((b|c)&d));
133 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
134 wp[1] = (x<<1) | (x>>31);
135 d += ((e<<5) | (e>>27)) + wp[1];
136 d += 0x8f1bbcdc + ((a&b)|((a|b)&c));
139 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
140 wp[2] = (x<<1) | (x>>31);
141 c += ((d<<5) | (d>>27)) + wp[2];
142 c += 0x8f1bbcdc + ((e&a)|((e|a)&b));
145 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
146 wp[3] = (x<<1) | (x>>31);
147 b += ((c<<5) | (c>>27)) + wp[3];
148 b += 0x8f1bbcdc + ((d&e)|((d|e)&a));
151 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
152 wp[4] = (x<<1) | (x>>31);
153 a += ((b<<5) | (b>>27)) + wp[4];
154 a += 0x8f1bbcdc + ((c&d)|((c|d)&e));
159 for(; wp < wend; wp += 5){
160 x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
161 wp[0] = (x<<1) | (x>>31);
162 e += ((a<<5) | (a>>27)) + wp[0];
163 e += 0xca62c1d6 + (b^c^d);
166 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
167 wp[1] = (x<<1) | (x>>31);
168 d += ((e<<5) | (e>>27)) + wp[1];
169 d += 0xca62c1d6 + (a^b^c);
172 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
173 wp[2] = (x<<1) | (x>>31);
174 c += ((d<<5) | (d>>27)) + wp[2];
175 c += 0xca62c1d6 + (e^a^b);
178 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
179 wp[3] = (x<<1) | (x>>31);
180 b += ((c<<5) | (c>>27)) + wp[3];
181 b += 0xca62c1d6 + (d^e^a);
184 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
185 wp[4] = (x<<1) | (x>>31);
186 a += ((b<<5) | (b>>27)) + wp[4];
187 a += 0xca62c1d6 + (c^d^e);