3 #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) 7 #define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ 8 |(rol(block->l[i],8)&0x00FF00FF)) 9 #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ 10 ^block->l[(i+2)&15]^block->l[i&15],1)) 13 #define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); 14 #define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); 15 #define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); 16 #define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); 17 #define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); 20 #define S0(v,w,x,y,z,i) z+=((w&(x^y))^y)+0x5A827999+rol(v,5);w=rol(w,30); 21 #define S1(v,w,x,y,z,i) z+=((w&(x^y))^y)+0x5A827999+rol(v,5);w=rol(w,30); 22 #define S2(v,w,x,y,z,i) z+=(w^x^y)+0x6ED9EBA1+rol(v,5);w=rol(w,30); 23 #define S3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+0x8F1BBCDC+rol(v,5);w=rol(w,30); 24 #define S4(v,w,x,y,z,i) z+=(w^x^y)+0xCA62C1D6+rol(v,5);w=rol(w,30); 27 static inline int gg_login_sha1hash(
const unsigned char *password,
const size_t passlen,
const guint32 seed,
const guint32 *dig) {
28 #define SHA_STATE0 0x67452301 29 #define SHA_STATE1 0xEFCDAB89 30 #define SHA_STATE2 0x98BADCFE 31 #define SHA_STATE3 0x10325476 32 #define SHA_STATE4 0xC3D2E1F0 47 for (i = 0; i < passlen; i++)
48 buffer[i] =
digit[password[i]];
50 memcpy(&buffer[passlen], &seed, 4);
57 buffer[passlen+4] =
'\200';
58 for (i = passlen+5; i < 63-7; i++)
62 for (i = 63-7; i < 63; i++)
65 buffer[63] = (
unsigned char) (((passlen+4) << 3) & 0xff);
75 CHAR64LONG16* block = (CHAR64LONG16*) buffer;
80 R0(a,b,c,d,e, 0);
R0(e,a,b,c,d, 1);
R0(d,e,a,b,c, 2);
S0(c,d,e,a,b, 3);
81 S0(b,c,d,e,a, 4);
S0(a,b,c,d,e, 5);
S0(e,a,b,c,d, 6);
S0(d,e,a,b,c, 7);
82 S0(c,d,e,a,b, 8);
S0(b,c,d,e,a, 9);
S0(a,b,c,d,e,10);
S0(e,a,b,c,d,11);
83 S0(d,e,a,b,c,12);
S0(c,d,e,a,b,13);
S0(b,c,d,e,a,14);
R0(a,b,c,d,e,15);
85 R1(e,a,b,c,d,16);
R1(d,e,a,b,c,17);
R1(c,d,e,a,b,18);
R1(b,c,d,e,a,19);
87 R2(a,b,c,d,e,20);
R2(e,a,b,c,d,21);
R2(d,e,a,b,c,22);
R2(c,d,e,a,b,23);
88 R2(b,c,d,e,a,24);
R2(a,b,c,d,e,25);
R2(e,a,b,c,d,26);
R2(d,e,a,b,c,27);
89 R2(c,d,e,a,b,28);
R2(b,c,d,e,a,29);
R2(a,b,c,d,e,30);
R2(e,a,b,c,d,31);
90 R2(d,e,a,b,c,32);
R2(c,d,e,a,b,33);
R2(b,c,d,e,a,34);
R2(a,b,c,d,e,35);
91 R2(e,a,b,c,d,36);
R2(d,e,a,b,c,37);
R2(c,d,e,a,b,38);
R2(b,c,d,e,a,39);
93 R3(a,b,c,d,e,40);
R3(e,a,b,c,d,41);
R3(d,e,a,b,c,42);
R3(c,d,e,a,b,43);
94 R3(b,c,d,e,a,44);
R3(a,b,c,d,e,45);
R3(e,a,b,c,d,46);
R3(d,e,a,b,c,47);
95 R3(c,d,e,a,b,48);
R3(b,c,d,e,a,49);
R3(a,b,c,d,e,50);
R3(e,a,b,c,d,51);
96 R3(d,e,a,b,c,52);
R3(c,d,e,a,b,53);
R3(b,c,d,e,a,54);
R3(a,b,c,d,e,55);
97 R3(e,a,b,c,d,56);
R3(d,e,a,b,c,57);
R3(c,d,e,a,b,58);
R3(b,c,d,e,a,59);
99 R4(a,b,c,d,e,60);
R4(e,a,b,c,d,61);
R4(d,e,a,b,c,62);
R4(c,d,e,a,b,63);
100 R4(b,c,d,e,a,64);
R4(a,b,c,d,e,65);
R4(e,a,b,c,d,66);
R4(d,e,a,b,c,67);
101 R4(c,d,e,a,b,68);
R4(b,c,d,e,a,69);
R4(a,b,c,d,e,70);
R4(e,a,b,c,d,71);
102 R4(d,e,a,b,c,72);
R4(c,d,e,a,b,73);
R4(b,c,d,e,a,74);
R4(a,b,c,d,e,75);
103 R4(e,a,b,c,d,76);
R4(d,e,a,b,c,77);
R4(c,d,e,a,b,78);
R4(b,c,d,e,a,79);
107 printf(
"%s -> %.8x%.8x%.8x%.8x%.8x\n",
realpass, a, b, c, d, e);
111 if (dig[0] != a)
return 1;
112 if (dig[1] != b)
return 1;
113 if (dig[2] != c)
return 1;
114 if (dig[3] != d)
return 1;
115 if (dig[4] != e)
return 1;
#define R1(v, w, x, y, z, i)
Definition: gg-keygen-sha1.h:14
#define R2(v, w, x, y, z, i)
Definition: gg-keygen-sha1.h:15
static unsigned char realpass[15+1]
Definition: gg-keygen.c:100
static int gg_login_sha1hash(const unsigned char *password, const size_t passlen, const guint32 seed, const guint32 *dig)
Definition: gg-keygen-sha1.h:27
int i
Definition: ekg_hash_benchmark.c:110
#define S0(v, w, x, y, z, i)
Definition: gg-keygen-sha1.h:20
#define R3(v, w, x, y, z, i)
Definition: gg-keygen-sha1.h:16
#define R0(v, w, x, y, z, i)
Definition: gg-keygen-sha1.h:13
#define R4(v, w, x, y, z, i)
Definition: gg-keygen-sha1.h:17
static const char digit[]
Definition: gg-keygen.c:26