Contents of /tags/mkinitrd-6_1_9/busybox/libbb/crypt_make_salt.c
Parent Directory | Revision Log
Revision 919 -
(show annotations)
(download)
Wed Oct 28 00:26:51 2009 UTC (14 years, 11 months ago) by niro
File MIME type: text/plain
File size: 1044 byte(s)
Wed Oct 28 00:26:51 2009 UTC (14 years, 11 months ago) by niro
File MIME type: text/plain
File size: 1044 byte(s)
tagged 'mkinitrd-6_1_9'
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 | |
13 | static 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 | |
27 | int FAST_FUNC 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 | } |