+2000-10-25 Jochen Hoenicke <jochen@gnu.org>
+
+ * stage2/builtins.c (md5crypt_func): Use all bits of currticks ()
+ to generate the salt. The old code would often produce the same
+ one character salt.
+
2000-10-25 OKUJI Yoshinori <okuji@gnu.org>
* stage2/apm.S (get_apm_info): Fix a serious typo: prot_to_real
{
char crypted[36];
char key[32];
- int saltlen;
+ int seed;
int i;
const char *const seedchars =
"./0123456789ABCDEFGHIJKLMNOPQRST"
grub_memmove (crypted, "$1$", 3);
/* Create the length of a salt. */
- saltlen = currticks ();
- saltlen &= 7;
- saltlen++;
+ seed = currticks ();
/* Generate a salt. */
- for (i = 0; i < saltlen; i++)
+ for (i = 0; i < 8 && seed; i++)
{
/* FIXME: This should be more random. */
- crypted[3 + i] = seedchars[(currticks () >> i) & 0x3f];
+ crypted[3 + i] = seedchars[seed & 0x3f];
+ seed >>= 6;
}
/* A salt must be terminated with `$', if it is less than 8 chars. */
- if (saltlen != 8)
- crypted[3 + i] = '$';
+ crypted[3 + i] = '$';
#ifdef DEBUG_MD5CRYPT
grub_printf ("salt = %s\n", crypted);