diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-05-08 23:23:35 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-05-08 23:23:35 +0000 |
| commit | a035e9f1a9028ad7fb4e9082cc7e383c3e4615cf (patch) | |
| tree | 089381ac1517da548d262ed60a7b12a742c9ee51 /libbb | |
| parent | a04561f5f7b6f1975c1bded6f11001f03190058c (diff) | |
| download | busybox-w32-a035e9f1a9028ad7fb4e9082cc7e383c3e4615cf.tar.gz busybox-w32-a035e9f1a9028ad7fb4e9082cc7e383c3e4615cf.tar.bz2 busybox-w32-a035e9f1a9028ad7fb4e9082cc7e383c3e4615cf.zip | |
cryptpw: forgot svn add... how typical of me :(
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/Kbuild | 7 | ||||
| -rw-r--r-- | libbb/crypt_make_salt.c | 48 |
2 files changed, 50 insertions, 5 deletions
diff --git a/libbb/Kbuild b/libbb/Kbuild index eeca7d536..5cc8d1428 100644 --- a/libbb/Kbuild +++ b/libbb/Kbuild | |||
| @@ -21,7 +21,6 @@ lib-y += copyfd.o | |||
| 21 | lib-y += crc32.o | 21 | lib-y += crc32.o |
| 22 | lib-y += create_icmp6_socket.o | 22 | lib-y += create_icmp6_socket.o |
| 23 | lib-y += create_icmp_socket.o | 23 | lib-y += create_icmp_socket.o |
| 24 | lib-y += crypt_make_salt.o | ||
| 25 | lib-y += default_error_retval.o | 24 | lib-y += default_error_retval.o |
| 26 | lib-y += device_open.o | 25 | lib-y += device_open.o |
| 27 | lib-y += dump.o | 26 | lib-y += dump.o |
| @@ -103,10 +102,8 @@ lib-y += xreadlink.o | |||
| 103 | lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o | 102 | lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o |
| 104 | lib-$(CONFIG_LOSETUP) += loop.o | 103 | lib-$(CONFIG_LOSETUP) += loop.o |
| 105 | lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o | 104 | lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o |
| 106 | lib-$(CONFIG_PASSWD) += pw_encrypt.o | 105 | lib-$(CONFIG_PASSWD) += pw_encrypt.o crypt_make_salt.o |
| 107 | lib-$(CONFIG_PASSWD) += crypt_make_salt.o | 106 | lib-$(CONFIG_CRYPTPW) += pw_encrypt.o crypt_make_salt.o |
| 108 | lib-$(CONFIG_CRYPTPW) += pw_encrypt.o | ||
| 109 | lib-$(CONFIG_CRYPTPW) += crypt_make_salt.o | ||
| 110 | lib-$(CONFIG_SULOGIN) += pw_encrypt.o | 107 | lib-$(CONFIG_SULOGIN) += pw_encrypt.o |
| 111 | lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o | 108 | lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o |
| 112 | lib-$(CONFIG_VLOCK) += correct_password.o | 109 | lib-$(CONFIG_VLOCK) += correct_password.o |
diff --git a/libbb/crypt_make_salt.c b/libbb/crypt_make_salt.c new file mode 100644 index 000000000..12e96328f --- /dev/null +++ b/libbb/crypt_make_salt.c | |||
| @@ -0,0 +1,48 @@ | |||
| 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 | |||
| 28 | void crypt_make_salt(char *p, int cnt) | ||
| 29 | { | ||
| 30 | unsigned x = x; /* it's pointless to initialize it anyway :) */ | ||
| 31 | |||
| 32 | x += getpid() + time(NULL) + clock(); | ||
| 33 | do { | ||
| 34 | /* x = (x*1664525 + 1013904223) % 2^32 generator is lame | ||
| 35 | * (low-order bit is not "random", etc...), | ||
| 36 | * but for our purposes it is good enough */ | ||
| 37 | x = x*1664525 + 1013904223; | ||
| 38 | /* BTW, Park and Miller's "minimal standard generator" is | ||
| 39 | * x = x*16807 % ((2^31)-1) | ||
| 40 | * It has no problem with visibly alternating lowest bit | ||
| 41 | * but is also weak in cryptographic sense + needs div, | ||
| 42 | * which needs more code (and slower) on many CPUs */ | ||
| 43 | *p++ = i64c(x >> 16); | ||
| 44 | *p++ = i64c(x >> 22); | ||
| 45 | } while (--cnt); | ||
| 46 | *p = '\0'; | ||
| 47 | } | ||
| 48 | |||
