libbb: move crypt_make_salt() to pw_encrypt.c, reuse
bin-to-ascii64 conversion which does not require an array. function old new delta to64 29 33 +4 to64_msb_first 63 62 -1 ascii64 65 - -65
This commit is contained in:
		| @@ -120,9 +120,9 @@ lib-y += xrealloc_vector.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 crypt_make_salt.o update_passwd.o | ||||
| lib-$(CONFIG_CHPASSWD) += pw_encrypt.o crypt_make_salt.o update_passwd.o | ||||
| lib-$(CONFIG_CRYPTPW) += pw_encrypt.o crypt_make_salt.o | ||||
| lib-$(CONFIG_PASSWD) += pw_encrypt.o update_passwd.o | ||||
| lib-$(CONFIG_CHPASSWD) += pw_encrypt.o update_passwd.o | ||||
| lib-$(CONFIG_CRYPTPW) += pw_encrypt.o | ||||
| lib-$(CONFIG_SULOGIN) += pw_encrypt.o | ||||
| lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o | ||||
| lib-$(CONFIG_VLOCK) += pw_encrypt.o correct_password.o | ||||
|   | ||||
| @@ -1,46 +0,0 @@ | ||||
| /* 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> | ||||
|  * | ||||
|  * Licensed under GPLv2, see file LICENSE in this tarball for details. | ||||
|  */ | ||||
|  | ||||
| #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); | ||||
| } | ||||
|  | ||||
| int FAST_FUNC crypt_make_salt(char *p, int cnt, int x) | ||||
| { | ||||
| 	x += getpid() + time(NULL); | ||||
| 	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'; | ||||
| 	return x; | ||||
| } | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* vi: set sw=4 ts=4: */ | ||||
| /* | ||||
|  * Utility routine. | ||||
|  * Utility routines. | ||||
|  * | ||||
|  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> | ||||
|  * | ||||
| @@ -9,25 +9,62 @@ | ||||
|  | ||||
| #include "libbb.h" | ||||
|  | ||||
| /* static const uint8_t ascii64[] = | ||||
|  * "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; | ||||
|  */ | ||||
|  | ||||
| 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); | ||||
| } | ||||
|  | ||||
| int FAST_FUNC crypt_make_salt(char *p, int cnt, int x) | ||||
| { | ||||
| 	x += getpid() + time(NULL); | ||||
| 	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'; | ||||
| 	return x; | ||||
| } | ||||
|  | ||||
| #if ENABLE_USE_BB_CRYPT | ||||
|  | ||||
| static char* | ||||
| to64(char *s, unsigned v, int n) | ||||
| { | ||||
| 	while (--n >= 0) { | ||||
| 		/* *s++ = ascii64[v & 0x3f]; */ | ||||
| 		*s++ = i64c(v); | ||||
| 		v >>= 6; | ||||
| 	} | ||||
| 	return s; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * DES and MD5 crypt implementations are taken from uclibc. | ||||
|  * They were modified to not use static buffers. | ||||
|  */ | ||||
|  | ||||
| /* Used by pw_encrypt_XXX.c */ | ||||
| static const uint8_t ascii64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; | ||||
| static char* | ||||
| to64(char *s, unsigned v, int n) | ||||
| { | ||||
| 	while (--n >= 0) { | ||||
| 		*s++ = ascii64[v & 0x3f]; | ||||
| 		v >>= 6; | ||||
| 	} | ||||
| 	return s; | ||||
| } | ||||
|  | ||||
| #include "pw_encrypt_des.c" | ||||
| #include "pw_encrypt_md5.c" | ||||
| #if ENABLE_USE_BB_CRYPT_SHA | ||||
|   | ||||
| @@ -699,10 +699,16 @@ do_des(struct des_ctx *ctx, /*uint32_t l_in, uint32_t r_in,*/ uint32_t *l_out, u | ||||
| static void | ||||
| to64_msb_first(char *s, unsigned v) | ||||
| { | ||||
| #if 0 | ||||
| 	*s++ = ascii64[(v >> 18) & 0x3f]; /* bits 23..18 */ | ||||
| 	*s++ = ascii64[(v >> 12) & 0x3f]; /* bits 17..12 */ | ||||
| 	*s++ = ascii64[(v >> 6) & 0x3f]; /* bits 11..6 */ | ||||
| 	*s = ascii64[v & 0x3f]; /* bits 5..0 */ | ||||
| 	*s   = ascii64[v & 0x3f]; /* bits 5..0 */ | ||||
| #endif | ||||
| 	*s++ = i64c(v >> 18); /* bits 23..18 */ | ||||
| 	*s++ = i64c(v >> 12); /* bits 17..12 */ | ||||
| 	*s++ = i64c(v >> 6); /* bits 11..6 */ | ||||
| 	*s   = i64c(v); /* bits 5..0 */ | ||||
| } | ||||
|  | ||||
| static char * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user