#include "os.h" #define ROTL(x,n) (((x)<<n)|((x)>>(32-n))) #define F0(x,y,z) (0x5a827999 + ((z) ^ ((x) & ((y) ^ (z)))))#define F1(x,y,z) (0x6ed9eba1 + ((x) ^ (y) ^ (z)))#define F2(x,y,z) (0x8f1bbcdc + (((x) & (y)) | (((x) | (y)) & (z))))#define F3(x,y,z) (0xca62c1d6 + ((x) ^ (y) ^ (z))) void_sha1block(uchar *p, ulong len, u32int *s){ u32int w[16], a, b, c, d, e; uchar *end; /* at this point, we have a multiple of 64 bytes */ for(end = p+len; p < end;){ a = s[0]; b = s[1]; c = s[2]; d = s[3]; e = s[4]; #define STEP(a,b,c,d,e,f,i) \ if(i < 16) {\ w[i] = p[0]<<24 | p[1]<<16 | p[2]<<8 | p[3]; \ p += 4; \ } else { \ u32int x = w[(i-3)&15] ^ w[(i-8)&15] ^ w[(i-14)&15] ^ w[(i-16)&15]; \ w[i&15] = ROTL(x, 1); \ } \ e += ROTL(a, 5) + w[i&15] + f(b,c,d); \ b = ROTL(b, 30); STEP(a,b,c,d,e,F0,0); STEP(e,a,b,c,d,F0,1); STEP(d,e,a,b,c,F0,2); STEP(c,d,e,a,b,F0,3); STEP(b,c,d,e,a,F0,4); STEP(a,b,c,d,e,F0,5); STEP(e,a,b,c,d,F0,6); STEP(d,e,a,b,c,F0,7); STEP(c,d,e,a,b,F0,8); STEP(b,c,d,e,a,F0,9); STEP(a,b,c,d,e,F0,10); STEP(e,a,b,c,d,F0,11); STEP(d,e,a,b,c,F0,12); STEP(c,d,e,a,b,F0,13); STEP(b,c,d,e,a,F0,14); STEP(a,b,c,d,e,F0,15); STEP(e,a,b,c,d,F0,16); STEP(d,e,a,b,c,F0,17); STEP(c,d,e,a,b,F0,18); STEP(b,c,d,e,a,F0,19); STEP(a,b,c,d,e,F1,20); STEP(e,a,b,c,d,F1,21); STEP(d,e,a,b,c,F1,22); STEP(c,d,e,a,b,F1,23); STEP(b,c,d,e,a,F1,24); STEP(a,b,c,d,e,F1,25); STEP(e,a,b,c,d,F1,26); STEP(d,e,a,b,c,F1,27); STEP(c,d,e,a,b,F1,28); STEP(b,c,d,e,a,F1,29); STEP(a,b,c,d,e,F1,30); STEP(e,a,b,c,d,F1,31); STEP(d,e,a,b,c,F1,32); STEP(c,d,e,a,b,F1,33); STEP(b,c,d,e,a,F1,34); STEP(a,b,c,d,e,F1,35); STEP(e,a,b,c,d,F1,36); STEP(d,e,a,b,c,F1,37); STEP(c,d,e,a,b,F1,38); STEP(b,c,d,e,a,F1,39); STEP(a,b,c,d,e,F2,40); STEP(e,a,b,c,d,F2,41); STEP(d,e,a,b,c,F2,42); STEP(c,d,e,a,b,F2,43); STEP(b,c,d,e,a,F2,44); STEP(a,b,c,d,e,F2,45); STEP(e,a,b,c,d,F2,46); STEP(d,e,a,b,c,F2,47); STEP(c,d,e,a,b,F2,48); STEP(b,c,d,e,a,F2,49); STEP(a,b,c,d,e,F2,50); STEP(e,a,b,c,d,F2,51); STEP(d,e,a,b,c,F2,52); STEP(c,d,e,a,b,F2,53); STEP(b,c,d,e,a,F2,54); STEP(a,b,c,d,e,F2,55); STEP(e,a,b,c,d,F2,56); STEP(d,e,a,b,c,F2,57); STEP(c,d,e,a,b,F2,58); STEP(b,c,d,e,a,F2,59); STEP(a,b,c,d,e,F3,60); STEP(e,a,b,c,d,F3,61); STEP(d,e,a,b,c,F3,62); STEP(c,d,e,a,b,F3,63); STEP(b,c,d,e,a,F3,64); STEP(a,b,c,d,e,F3,65); STEP(e,a,b,c,d,F3,66); STEP(d,e,a,b,c,F3,67); STEP(c,d,e,a,b,F3,68); STEP(b,c,d,e,a,F3,69); STEP(a,b,c,d,e,F3,70); STEP(e,a,b,c,d,F3,71); STEP(d,e,a,b,c,F3,72); STEP(c,d,e,a,b,F3,73); STEP(b,c,d,e,a,F3,74); STEP(a,b,c,d,e,F3,75); STEP(e,a,b,c,d,F3,76); STEP(d,e,a,b,c,F3,77); STEP(c,d,e,a,b,F3,78); STEP(b,c,d,e,a,F3,79); s[0] += a; s[1] += b; s[2] += c; s[3] += d; s[4] += e; }}
#include "os.h"
#define ROTL(x,n) (((x)<<n)|((x)>>(32-n)))
#define F0(x,y,z) (0x5a827999 + ((z) ^ ((x) & ((y) ^ (z)))))
#define F1(x,y,z) (0x6ed9eba1 + ((x) ^ (y) ^ (z)))
#define F2(x,y,z) (0x8f1bbcdc + (((x) & (y)) | (((x) | (y)) & (z))))
#define F3(x,y,z) (0xca62c1d6 + ((x) ^ (y) ^ (z)))
void
_sha1block(uchar *p, ulong len, u32int *s)
{
u32int w[16], a, b, c, d, e;
uchar *end;
/* at this point, we have a multiple of 64 bytes */
for(end = p+len; p < end;){
a = s[0];
b = s[1];
c = s[2];
d = s[3];
e = s[4];
#define STEP(a,b,c,d,e,f,i) \
if(i < 16) {\
w[i] = p[0]<<24 | p[1]<<16 | p[2]<<8 | p[3]; \
p += 4; \
} else { \
u32int x = w[(i-3)&15] ^ w[(i-8)&15] ^ w[(i-14)&15] ^ w[(i-16)&15]; \
w[i&15] = ROTL(x, 1); \
} \
e += ROTL(a, 5) + w[i&15] + f(b,c,d); \
b = ROTL(b, 30);
STEP(a,b,c,d,e,F0,0);
STEP(e,a,b,c,d,F0,1);
STEP(d,e,a,b,c,F0,2);
STEP(c,d,e,a,b,F0,3);
STEP(b,c,d,e,a,F0,4);
STEP(a,b,c,d,e,F0,5);
STEP(e,a,b,c,d,F0,6);
STEP(d,e,a,b,c,F0,7);
STEP(c,d,e,a,b,F0,8);
STEP(b,c,d,e,a,F0,9);
STEP(a,b,c,d,e,F0,10);
STEP(e,a,b,c,d,F0,11);
STEP(d,e,a,b,c,F0,12);
STEP(c,d,e,a,b,F0,13);
STEP(b,c,d,e,a,F0,14);
STEP(a,b,c,d,e,F0,15);
STEP(e,a,b,c,d,F0,16);
STEP(d,e,a,b,c,F0,17);
STEP(c,d,e,a,b,F0,18);
STEP(b,c,d,e,a,F0,19);
STEP(a,b,c,d,e,F1,20);
STEP(e,a,b,c,d,F1,21);
STEP(d,e,a,b,c,F1,22);
STEP(c,d,e,a,b,F1,23);
STEP(b,c,d,e,a,F1,24);
STEP(a,b,c,d,e,F1,25);
STEP(e,a,b,c,d,F1,26);
STEP(d,e,a,b,c,F1,27);
STEP(c,d,e,a,b,F1,28);
STEP(b,c,d,e,a,F1,29);
STEP(a,b,c,d,e,F1,30);
STEP(e,a,b,c,d,F1,31);
STEP(d,e,a,b,c,F1,32);
STEP(c,d,e,a,b,F1,33);
STEP(b,c,d,e,a,F1,34);
STEP(a,b,c,d,e,F1,35);
STEP(e,a,b,c,d,F1,36);
STEP(d,e,a,b,c,F1,37);
STEP(c,d,e,a,b,F1,38);
STEP(b,c,d,e,a,F1,39);
STEP(a,b,c,d,e,F2,40);
STEP(e,a,b,c,d,F2,41);
STEP(d,e,a,b,c,F2,42);
STEP(c,d,e,a,b,F2,43);
STEP(b,c,d,e,a,F2,44);
STEP(a,b,c,d,e,F2,45);
STEP(e,a,b,c,d,F2,46);
STEP(d,e,a,b,c,F2,47);
STEP(c,d,e,a,b,F2,48);
STEP(b,c,d,e,a,F2,49);
STEP(a,b,c,d,e,F2,50);
STEP(e,a,b,c,d,F2,51);
STEP(d,e,a,b,c,F2,52);
STEP(c,d,e,a,b,F2,53);
STEP(b,c,d,e,a,F2,54);
STEP(a,b,c,d,e,F2,55);
STEP(e,a,b,c,d,F2,56);
STEP(d,e,a,b,c,F2,57);
STEP(c,d,e,a,b,F2,58);
STEP(b,c,d,e,a,F2,59);
STEP(a,b,c,d,e,F3,60);
STEP(e,a,b,c,d,F3,61);
STEP(d,e,a,b,c,F3,62);
STEP(c,d,e,a,b,F3,63);
STEP(b,c,d,e,a,F3,64);
STEP(a,b,c,d,e,F3,65);
STEP(e,a,b,c,d,F3,66);
STEP(d,e,a,b,c,F3,67);
STEP(c,d,e,a,b,F3,68);
STEP(b,c,d,e,a,F3,69);
STEP(a,b,c,d,e,F3,70);
STEP(e,a,b,c,d,F3,71);
STEP(d,e,a,b,c,F3,72);
STEP(c,d,e,a,b,F3,73);
STEP(b,c,d,e,a,F3,74);
STEP(a,b,c,d,e,F3,75);
STEP(e,a,b,c,d,F3,76);
STEP(d,e,a,b,c,F3,77);
STEP(c,d,e,a,b,F3,78);
STEP(b,c,d,e,a,F3,79);
s[0] += a;
s[1] += b;
s[2] += c;
s[3] += d;
s[4] += e;
}
}