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:
Denis Vlasenko 2008-12-04 15:29:35 +00:00
parent 9c6d12993f
commit d324e1b808
2 changed files with 39 additions and 31 deletions

View File

@ -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 #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 * static char *
NOINLINE NOINLINE
des_crypt(struct des_ctx *ctx, char output[DES_OUT_BUFSIZE], des_crypt(struct des_ctx *ctx, char output[DES_OUT_BUFSIZE],
const unsigned char *key, const unsigned char *setting) const unsigned char *key, const unsigned char *setting)
{ {
uint32_t salt, l, r0, r1, keybuf[2]; uint32_t salt, r0, r1, keybuf[2];
uint8_t *p, *q; uint8_t *q;
/* /*
* Copy the key, shifting each character up by one bit * 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]; output[1] = setting[1] ? setting[1] : output[0];
p = (uint8_t *)output + 2;
setup_salt(ctx, salt); setup_salt(ctx, salt);
/* /* Do it. */
* Do it.
*/
do_des(ctx, /*0, 0,*/ &r0, &r1, 25 /* count */); do_des(ctx, /*0, 0,*/ &r0, &r1, 25 /* count */);
/* /* Now encode the result. */
* Now encode the result... #if 0
*/ {
l = (r0 >> 8); uint32_t l = (r0 >> 8);
*p++ = ascii64[(l >> 18) & 0x3f]; q = (uint8_t *)output + 2;
*p++ = ascii64[(l >> 12) & 0x3f]; *q++ = ascii64[(l >> 18) & 0x3f]; /* bits 31..26 of r0 */
*p++ = ascii64[(l >> 6) & 0x3f]; *q++ = ascii64[(l >> 12) & 0x3f]; /* bits 25..20 of r0 */
*p++ = ascii64[l & 0x3f]; *q++ = ascii64[(l >> 6) & 0x3f]; /* bits 19..14 of r0 */
*q++ = ascii64[l & 0x3f]; /* bits 13..8 of r0 */
l = ((r0 << 16) | (r1 >> 16)); l = ((r0 << 16) | (r1 >> 16));
*p++ = ascii64[(l >> 18) & 0x3f]; *q++ = ascii64[(l >> 18) & 0x3f]; /* bits 7..2 of r0 */
*p++ = ascii64[(l >> 12) & 0x3f]; *q++ = ascii64[(l >> 12) & 0x3f]; /* bits 1..2 of r0 and 31..28 of r1 */
*p++ = ascii64[(l >> 6) & 0x3f]; *q++ = ascii64[(l >> 6) & 0x3f]; /* bits 27..22 of r1 */
*p++ = ascii64[l & 0x3f]; *q++ = ascii64[l & 0x3f]; /* bits 21..16 of r1 */
l = r1 << 2; l = r1 << 2;
*p++ = ascii64[(l >> 12) & 0x3f]; *q++ = ascii64[(l >> 12) & 0x3f]; /* bits 15..10 of r1 */
*p++ = ascii64[(l >> 6) & 0x3f]; *q++ = ascii64[(l >> 6) & 0x3f]; /* bits 9..4 of r1 */
*p++ = ascii64[l & 0x3f]; *q++ = ascii64[l & 0x3f]; /* bits 3..0 of r1 + 00 */
*p = 0; *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; return output;
} }

View File

@ -65,10 +65,6 @@
* by Erik Andersen to remove reentrance stuff... * 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 * UNIX password
* *
@ -163,5 +159,3 @@ md5_crypt(char result[MD5_OUT_BUFSIZE], const unsigned char *pw, const unsigned
return result; return result;
} }
#undef MD5_MAGIC_STR
#undef MD5_MAGIC_LEN