libbb/crypt: code shrink
function old new delta to64_msb_first - 63 +63 des_crypt 1509 1338 -171 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 63/-171) Total: -108 bytes
This commit is contained in:
		@@ -696,13 +696,22 @@ do_des(struct des_ctx *ctx, /*uint32_t l_in, uint32_t r_in,*/ uint32_t *l_out, u
 | 
			
		||||
 | 
			
		||||
#define DES_OUT_BUFSIZE 21
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
to64_msb_first(char *s, unsigned v)
 | 
			
		||||
{
 | 
			
		||||
	*s++ = ascii64[(v >> 18) & 0x3f]; /* bits 23..18 */
 | 
			
		||||
	*s++ = ascii64[(v >> 12) & 0x3f]; /* bits 17..12 */
 | 
			
		||||
	*s++ = ascii64[(v >> 6) & 0x3f]; /* bits 11..6 */
 | 
			
		||||
	*s = ascii64[v & 0x3f]; /* bits 5..0 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *
 | 
			
		||||
NOINLINE
 | 
			
		||||
des_crypt(struct des_ctx *ctx, char output[DES_OUT_BUFSIZE],
 | 
			
		||||
		const unsigned char *key, const unsigned char *setting)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t salt, l, r0, r1, keybuf[2];
 | 
			
		||||
	uint8_t *p, *q;
 | 
			
		||||
	uint32_t salt, r0, r1, keybuf[2];
 | 
			
		||||
	uint8_t *q;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Copy the key, shifting each character up by one bit
 | 
			
		||||
@@ -733,34 +742,39 @@ des_crypt(struct des_ctx *ctx, char output[DES_OUT_BUFSIZE],
 | 
			
		||||
	 */
 | 
			
		||||
	output[1] = setting[1] ? setting[1] : output[0];
 | 
			
		||||
 | 
			
		||||
	p = (uint8_t *)output + 2;
 | 
			
		||||
 | 
			
		||||
	setup_salt(ctx, salt);
 | 
			
		||||
	/*
 | 
			
		||||
	 * Do it.
 | 
			
		||||
	 */
 | 
			
		||||
	/* Do it. */
 | 
			
		||||
	do_des(ctx, /*0, 0,*/ &r0, &r1, 25 /* count */);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Now encode the result...
 | 
			
		||||
	 */
 | 
			
		||||
	l = (r0 >> 8);
 | 
			
		||||
	*p++ = ascii64[(l >> 18) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[(l >> 12) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[(l >> 6) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[l & 0x3f];
 | 
			
		||||
 | 
			
		||||
	/* Now encode the result. */
 | 
			
		||||
#if 0
 | 
			
		||||
{
 | 
			
		||||
	uint32_t l = (r0 >> 8);
 | 
			
		||||
	q = (uint8_t *)output + 2;
 | 
			
		||||
	*q++ = ascii64[(l >> 18) & 0x3f]; /* bits 31..26 of r0 */
 | 
			
		||||
	*q++ = ascii64[(l >> 12) & 0x3f]; /* bits 25..20 of r0 */
 | 
			
		||||
	*q++ = ascii64[(l >> 6) & 0x3f]; /* bits 19..14 of r0 */
 | 
			
		||||
	*q++ = ascii64[l & 0x3f]; /* bits 13..8 of r0 */
 | 
			
		||||
	l = ((r0 << 16) | (r1 >> 16));
 | 
			
		||||
	*p++ = ascii64[(l >> 18) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[(l >> 12) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[(l >> 6) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[l & 0x3f];
 | 
			
		||||
 | 
			
		||||
	*q++ = ascii64[(l >> 18) & 0x3f]; /* bits 7..2 of r0 */
 | 
			
		||||
	*q++ = ascii64[(l >> 12) & 0x3f]; /* bits 1..2 of r0 and 31..28 of r1 */
 | 
			
		||||
	*q++ = ascii64[(l >> 6) & 0x3f]; /* bits 27..22 of r1 */
 | 
			
		||||
	*q++ = ascii64[l & 0x3f]; /* bits 21..16 of r1 */
 | 
			
		||||
	l = r1 << 2;
 | 
			
		||||
	*p++ = ascii64[(l >> 12) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[(l >> 6) & 0x3f];
 | 
			
		||||
	*p++ = ascii64[l & 0x3f];
 | 
			
		||||
	*p = 0;
 | 
			
		||||
	*q++ = ascii64[(l >> 12) & 0x3f]; /* bits 15..10 of r1 */
 | 
			
		||||
	*q++ = ascii64[(l >> 6) & 0x3f]; /* bits 9..4 of r1 */
 | 
			
		||||
	*q++ = ascii64[l & 0x3f]; /* bits 3..0 of r1 + 00 */
 | 
			
		||||
	*q = 0;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
	/* Each call takes low-order 24 bits and stores 4 chars */
 | 
			
		||||
	/* bits 31..8 of r0 */
 | 
			
		||||
	to64_msb_first(output + 2, (r0 >> 8));
 | 
			
		||||
	/* bits 7..0 of r0 and 31..16 of r1 */
 | 
			
		||||
	to64_msb_first(output + 6, (r0 << 16) | (r1 >> 16));
 | 
			
		||||
	/* (bits 15..0 of r1 + 00) and NUL byte */
 | 
			
		||||
	to64_msb_first(output + 10, (r1 << 8));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return output;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -65,10 +65,6 @@
 | 
			
		||||
 * by Erik Andersen to remove reentrance stuff...
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define MD5_MAGIC_STR "$1$"
 | 
			
		||||
#define MD5_MAGIC_LEN (sizeof(MD5_MAGIC_STR) - 1)
 | 
			
		||||
static const unsigned char __md5__magic[] = MD5_MAGIC_STR;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * UNIX password
 | 
			
		||||
 *
 | 
			
		||||
@@ -163,5 +159,3 @@ md5_crypt(char result[MD5_OUT_BUFSIZE], const unsigned char *pw, const unsigned
 | 
			
		||||
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
#undef MD5_MAGIC_STR
 | 
			
		||||
#undef MD5_MAGIC_LEN
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user