source: MondoRescue/branches/2.2.5/mindi-busybox/libbb/crypt_make_salt.c @ 1765

Last change on this file since 1765 was 1765, checked in by Bruno Cornec, 12 years ago

Update to busybox 1.7.2

  • Property svn:eol-style set to native
File size: 1.0 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * crypt_make_salt
4 *
5 * i64c was also put here, this is the only function that uses it.
6 *
7 * Lifted from loginutils/passwd.c by Thomas Lundquist <thomasez@zelow.no>
8 *
9 */
10
11#include "libbb.h"
12
13static int i64c(int i)
14{
15    i &= 0x3f;
16    if (i == 0)
17        return '.';
18    if (i == 1)
19        return '/';
20    if (i < 12)
21        return ('0' - 2 + i);
22    if (i < 38)
23        return ('A' - 12 + i);
24    return ('a' - 38 + i);
25}
26
27int crypt_make_salt(char *p, int cnt, int x)
28{
29    x += getpid() + time(NULL);
30    do {
31        /* x = (x*1664525 + 1013904223) % 2^32 generator is lame
32         * (low-order bit is not "random", etc...),
33         * but for our purposes it is good enough */
34        x = x*1664525 + 1013904223;
35        /* BTW, Park and Miller's "minimal standard generator" is
36         * x = x*16807 % ((2^31)-1)
37         * It has no problem with visibly alternating lowest bit
38         * but is also weak in cryptographic sense + needs div,
39         * which needs more code (and slower) on many CPUs */
40        *p++ = i64c(x >> 16);
41        *p++ = i64c(x >> 22);
42    } while (--cnt);
43    *p = '\0';
44    return x;
45}
Note: See TracBrowser for help on using the repository browser.