summaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko2007-05-08 23:23:35 +0000
committerDenis Vlasenko2007-05-08 23:23:35 +0000
commita035e9f1a9028ad7fb4e9082cc7e383c3e4615cf (patch)
tree089381ac1517da548d262ed60a7b12a742c9ee51 /libbb
parenta04561f5f7b6f1975c1bded6f11001f03190058c (diff)
downloadbusybox-a035e9f1a9028ad7fb4e9082cc7e383c3e4615cf.zip
busybox-a035e9f1a9028ad7fb4e9082cc7e383c3e4615cf.tar.gz
cryptpw: forgot svn add... how typical of me :(
Diffstat (limited to 'libbb')
-rw-r--r--libbb/Kbuild7
-rw-r--r--libbb/crypt_make_salt.c48
2 files changed, 50 insertions, 5 deletions
diff --git a/libbb/Kbuild b/libbb/Kbuild
index eeca7d5..5cc8d14 100644
--- a/libbb/Kbuild
+++ b/libbb/Kbuild
@@ -21,7 +21,6 @@ lib-y += copyfd.o
lib-y += crc32.o
lib-y += create_icmp6_socket.o
lib-y += create_icmp_socket.o
-lib-y += crypt_make_salt.o
lib-y += default_error_retval.o
lib-y += device_open.o
lib-y += dump.o
@@ -103,10 +102,8 @@ lib-y += xreadlink.o
lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o
lib-$(CONFIG_LOSETUP) += loop.o
lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o
-lib-$(CONFIG_PASSWD) += pw_encrypt.o
-lib-$(CONFIG_PASSWD) += crypt_make_salt.o
-lib-$(CONFIG_CRYPTPW) += pw_encrypt.o
-lib-$(CONFIG_CRYPTPW) += crypt_make_salt.o
+lib-$(CONFIG_PASSWD) += pw_encrypt.o crypt_make_salt.o
+lib-$(CONFIG_CRYPTPW) += pw_encrypt.o crypt_make_salt.o
lib-$(CONFIG_SULOGIN) += pw_encrypt.o
lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o
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 0000000..12e9632
--- /dev/null
+++ b/libbb/crypt_make_salt.c
@@ -0,0 +1,48 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * crypt_make_salt
+ *
+ * i64c was also put here, this is the only function that uses it.
+ *
+ * Lifted from loginutils/passwd.c by Thomas Lundquist <thomasez@zelow.no>
+ *
+ */
+
+#include "libbb.h"
+
+static int i64c(int i)
+{
+ i &= 0x3f;
+ if (i == 0)
+ return '.';
+ if (i == 1)
+ return '/';
+ if (i < 12)
+ return ('0' - 2 + i);
+ if (i < 38)
+ return ('A' - 12 + i);
+ return ('a' - 38 + i);
+}
+
+
+void crypt_make_salt(char *p, int cnt)
+{
+ unsigned x = x; /* it's pointless to initialize it anyway :) */
+
+ x += getpid() + time(NULL) + clock();
+ do {
+ /* x = (x*1664525 + 1013904223) % 2^32 generator is lame
+ * (low-order bit is not "random", etc...),
+ * but for our purposes it is good enough */
+ x = x*1664525 + 1013904223;
+ /* BTW, Park and Miller's "minimal standard generator" is
+ * x = x*16807 % ((2^31)-1)
+ * It has no problem with visibly alternating lowest bit
+ * but is also weak in cryptographic sense + needs div,
+ * which needs more code (and slower) on many CPUs */
+ *p++ = i64c(x >> 16);
+ *p++ = i64c(x >> 22);
+ } while (--cnt);
+ *p = '\0';
+}
+