aboutsummaryrefslogtreecommitdiff
path: root/libbb/pw_encrypt.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-11-10 18:52:35 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-11-10 18:52:35 +0000
commit2211d5268cc6fc5575f758a9835070fae5ffc405 (patch)
tree46b23253b2be2c2c5bcdb6909a740e894a93ae07 /libbb/pw_encrypt.c
parent56dceb9b7722193ef53fb1afb981f1289eecb0b0 (diff)
downloadbusybox-w32-2211d5268cc6fc5575f758a9835070fae5ffc405.tar.gz
busybox-w32-2211d5268cc6fc5575f758a9835070fae5ffc405.tar.bz2
busybox-w32-2211d5268cc6fc5575f758a9835070fae5ffc405.zip
libbb: add optionl support for SHA256/512 encrypted passwords
function old new delta sha_crypt - 2423 +2423 cryptpw_main 128 183 +55 to64 - 29 +29 pw_encrypt 974 1000 +26 str_rounds - 11 +11 login_main 1532 1541 +9 packed_usage 25215 25200 -15 __md5_to64 29 - -29 ------------------------------------------------------------------------------ (add/remove: 3/1 grow/shrink: 3/1 up/down: 2553/-44) Total: 2509 bytes
Diffstat (limited to 'libbb/pw_encrypt.c')
-rw-r--r--libbb/pw_encrypt.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/libbb/pw_encrypt.c b/libbb/pw_encrypt.c
index 0b826f48d..572591ea9 100644
--- a/libbb/pw_encrypt.c
+++ b/libbb/pw_encrypt.c
@@ -15,16 +15,27 @@
15 * DES and MD5 crypt implementations are taken from uclibc. 15 * DES and MD5 crypt implementations are taken from uclibc.
16 * They were modified to not use static buffers. 16 * They were modified to not use static buffers.
17 */ 17 */
18/* Common for them */ 18
19/* Used by pw_encrypt_XXX.c */
19static const uint8_t ascii64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 20static const uint8_t ascii64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
21static char*
22to64(char *s, unsigned v, int n)
23{
24 while (--n >= 0) {
25 *s++ = ascii64[v & 0x3f];
26 v >>= 6;
27 }
28 return s;
29}
30
20#include "pw_encrypt_des.c" 31#include "pw_encrypt_des.c"
21#include "pw_encrypt_md5.c" 32#include "pw_encrypt_md5.c"
33#if ENABLE_USE_BB_CRYPT_SHA
34#include "pw_encrypt_sha.c"
35#endif
22 36
23/* Other advanced crypt ids: */ 37/* Other advanced crypt ids (TODO?): */
24/* $2$ or $2a$: Blowfish */ 38/* $2$ or $2a$: Blowfish */
25/* $5$: SHA-256 */
26/* $6$: SHA-512 */
27/* TODO: implement SHA - http://people.redhat.com/drepper/SHA-crypt.txt */
28 39
29static struct const_des_ctx *des_cctx; 40static struct const_des_ctx *des_cctx;
30static struct des_ctx *des_ctx; 41static struct des_ctx *des_ctx;
@@ -32,18 +43,20 @@ static struct des_ctx *des_ctx;
32/* my_crypt returns malloc'ed data */ 43/* my_crypt returns malloc'ed data */
33static char *my_crypt(const char *key, const char *salt) 44static char *my_crypt(const char *key, const char *salt)
34{ 45{
35 /* First, check if we are supposed to be using the MD5 replacement 46 /* MD5 or SHA? */
36 * instead of DES... */ 47 if (salt[0] == '$' && salt[1] && salt[2] == '$') {
37 if (salt[0] == '$' && salt[1] == '1' && salt[2] == '$') { 48 if (salt[1] == '1')
38 return md5_crypt(xzalloc(MD5_OUT_BUFSIZE), (unsigned char*)key, (unsigned char*)salt); 49 return md5_crypt(xzalloc(MD5_OUT_BUFSIZE), (unsigned char*)key, (unsigned char*)salt);
50#if ENABLE_USE_BB_CRYPT_SHA
51 if (salt[1] == '5' || salt[1] == '6')
52 return sha_crypt((char*)key, (char*)salt);
53#endif
39 } 54 }
40 55
41 { 56 if (!des_cctx)
42 if (!des_cctx) 57 des_cctx = const_des_init();
43 des_cctx = const_des_init(); 58 des_ctx = des_init(des_ctx, des_cctx);
44 des_ctx = des_init(des_ctx, des_cctx); 59 return des_crypt(des_ctx, xzalloc(DES_OUT_BUFSIZE), (unsigned char*)key, (unsigned char*)salt);
45 return des_crypt(des_ctx, xzalloc(DES_OUT_BUFSIZE), (unsigned char*)key, (unsigned char*)salt);
46 }
47} 60}
48 61
49/* So far nobody wants to have it public */ 62/* So far nobody wants to have it public */