trivial crypt shrinkage

function                                             old     new   delta
__md5_to64                                            27      29      +2
pw_encrypt                                          3631    3608     -23
1_11_stable
Denis Vlasenko 2008-06-13 15:13:41 +00:00
parent aa9cd89c67
commit 76f812803b
2 changed files with 8 additions and 9 deletions

View File

@ -673,8 +673,6 @@ des_crypt(struct des_ctx *ctx, char output[21], const unsigned char *key, const
return output; return output;
} }
// des_setkey never fails
#undef C #undef C
#undef init_perm #undef init_perm
#undef final_perm #undef final_perm

View File

@ -501,13 +501,14 @@ static void __md5_Transform(uint32_t state[4], const unsigned char block[64])
} }
static void static char*
__md5_to64(char *s, unsigned long v, int n) __md5_to64(char *s, unsigned v, int n)
{ {
while (--n >= 0) { while (--n >= 0) {
*s++ = ascii64[v & 0x3f]; *s++ = ascii64[v & 0x3f];
v >>= 6; v >>= 6;
} }
return s;
} }
/* /*
@ -515,7 +516,7 @@ __md5_to64(char *s, unsigned long v, int n)
* *
* Use MD5 for what it is best at... * Use MD5 for what it is best at...
*/ */
#define MD5_OUT_BUFSIZE 120 #define MD5_OUT_BUFSIZE 36
static char * static char *
md5_crypt(char passwd[120], const unsigned char *pw, const unsigned char *salt) md5_crypt(char passwd[120], const unsigned char *pw, const unsigned char *salt)
@ -578,7 +579,6 @@ md5_crypt(char passwd[120], const unsigned char *pw, const unsigned char *salt)
passwd[2] = '$'; passwd[2] = '$';
strncpy(passwd + 3, (char*)sp, sl); strncpy(passwd + 3, (char*)sp, sl);
passwd[sl + 3] = '$'; passwd[sl + 3] = '$';
passwd[sl + 4] = '\0';
__md5_Final(final, &ctx); __md5_Final(final, &ctx);
@ -607,15 +607,16 @@ md5_crypt(char passwd[120], const unsigned char *pw, const unsigned char *salt)
__md5_Final(final, &ctx1); __md5_Final(final, &ctx1);
} }
p = passwd + sl + 4; /*strlen(passwd);*/ p = passwd + sl + 4; /* 12 bytes max (sl is up to 8 bytes) */
/* Add 5*4+2 = 22 bytes of hash, + NUL byte. */
final[16] = final[5]; final[16] = final[5];
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
l = (final[i] << 16) | (final[i+6] << 8) | final[i+12]; l = (final[i] << 16) | (final[i+6] << 8) | final[i+12];
__md5_to64(p, l, 4); p += 4; p = __md5_to64(p, l, 4);
} }
l = final[11]; l = final[11];
__md5_to64(p, l, 2); p += 2; p = __md5_to64(p, l, 2);
*p = '\0'; *p = '\0';
/* Don't leave anything around in vm they could use. */ /* Don't leave anything around in vm they could use. */