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:
parent
db12d1d733
commit
d1a84a2880
@ -120,9 +120,9 @@ lib-y += xrealloc_vector.o
|
|||||||
lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o
|
lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o
|
||||||
lib-$(CONFIG_LOSETUP) += loop.o
|
lib-$(CONFIG_LOSETUP) += loop.o
|
||||||
lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o
|
lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o
|
||||||
lib-$(CONFIG_PASSWD) += pw_encrypt.o crypt_make_salt.o update_passwd.o
|
lib-$(CONFIG_PASSWD) += pw_encrypt.o update_passwd.o
|
||||||
lib-$(CONFIG_CHPASSWD) += pw_encrypt.o crypt_make_salt.o update_passwd.o
|
lib-$(CONFIG_CHPASSWD) += pw_encrypt.o update_passwd.o
|
||||||
lib-$(CONFIG_CRYPTPW) += pw_encrypt.o crypt_make_salt.o
|
lib-$(CONFIG_CRYPTPW) += pw_encrypt.o
|
||||||
lib-$(CONFIG_SULOGIN) += pw_encrypt.o
|
lib-$(CONFIG_SULOGIN) += pw_encrypt.o
|
||||||
lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o
|
lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o
|
||||||
lib-$(CONFIG_VLOCK) += pw_encrypt.o correct_password.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: */
|
/* vi: set sw=4 ts=4: */
|
||||||
/*
|
/*
|
||||||
* Utility routine.
|
* Utility routines.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
|
* Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
|
||||||
*
|
*
|
||||||
@ -9,25 +9,62 @@
|
|||||||
|
|
||||||
#include "libbb.h"
|
#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
|
#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.
|
* DES and MD5 crypt implementations are taken from uclibc.
|
||||||
* They were modified to not use static buffers.
|
* 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_des.c"
|
||||||
#include "pw_encrypt_md5.c"
|
#include "pw_encrypt_md5.c"
|
||||||
#if ENABLE_USE_BB_CRYPT_SHA
|
#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
|
static void
|
||||||
to64_msb_first(char *s, unsigned v)
|
to64_msb_first(char *s, unsigned v)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
*s++ = ascii64[(v >> 18) & 0x3f]; /* bits 23..18 */
|
*s++ = ascii64[(v >> 18) & 0x3f]; /* bits 23..18 */
|
||||||
*s++ = ascii64[(v >> 12) & 0x3f]; /* bits 17..12 */
|
*s++ = ascii64[(v >> 12) & 0x3f]; /* bits 17..12 */
|
||||||
*s++ = ascii64[(v >> 6) & 0x3f]; /* bits 11..6 */
|
*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 *
|
static char *
|
||||||
|
Loading…
Reference in New Issue
Block a user