Apache2-AuthenNTLM

 view release on metacpan or  search on metacpan

smb/smbval/smbdes.c  view on Meta::CPAN

		for (j=0;j<32;j++)
			l[j] = r[j];

		for (j=0;j<32;j++)
			r[j] = r2[j];
	}

	concat(rl, r, l, 32, 32);

	permute(out, rl, perm6, 64);
}

static void str_to_key(unsigned char *str,unsigned char *key)
{
	int i;

	key[0] = str[0]>>1;
	key[1] = ((str[0]&0x01)<<6) | (str[1]>>2);
	key[2] = ((str[1]&0x03)<<5) | (str[2]>>3);
	key[3] = ((str[2]&0x07)<<4) | (str[3]>>4);
	key[4] = ((str[3]&0x0F)<<3) | (str[4]>>5);
	key[5] = ((str[4]&0x1F)<<2) | (str[5]>>6);
	key[6] = ((str[5]&0x3F)<<1) | (str[6]>>7);
	key[7] = str[6]&0x7F;
	for (i=0;i<8;i++) {
		key[i] = (key[i]<<1);
	}
}


static void smbhash(unsigned char *out, unsigned char *in, unsigned char *key)
{
	int i;
	char outb[64];
	char inb[64];
	char keyb[64];
	unsigned char key2[8];

	str_to_key(key, key2);

	for (i=0;i<64;i++) {
		inb[i] = (in[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
		keyb[i] = (key2[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
		outb[i] = 0;
	}

	dohash(outb, inb, keyb);

	for (i=0;i<8;i++) {
		out[i] = 0;
	}

	for (i=0;i<64;i++) {
		if (outb[i])
			out[i/8] |= (1<<(7-(i%8)));
	}
}

void E_P16(unsigned char *p14,unsigned char *p16)
{
	unsigned char sp8[8] = {0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25};
	smbhash(p16, sp8, p14);
	smbhash(p16+8, sp8, p14+7);
}

void E_P24(unsigned char *p21, unsigned char *c8, unsigned char *p24)
{
	smbhash(p24, c8, p21);
	smbhash(p24+8, c8, p21+7);
	smbhash(p24+16, c8, p21+14);
}

void cred_hash1(unsigned char *out,unsigned char *in,unsigned char *key)
{
	unsigned char buf[8];

	smbhash(buf, in, key);
	smbhash(out, buf, key+9);
}

void cred_hash2(unsigned char *out,unsigned char *in,unsigned char *key)
{
	unsigned char buf[8];
	static unsigned char key2[8];

	smbhash(buf, in, key);
	key2[0] = key[7];
	smbhash(out, buf, key2);
}



( run in 2.086 seconds using v1.01-cache-2.11-cpan-98e64b0badf )