diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-06-14 22:11:29 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-06-14 22:11:29 +0000 |
| commit | e235285c3a36c0e4efe21ec336e7015cd3cf3c62 (patch) | |
| tree | 3ea4c906634a6a3c5e30ba691b82a56a57d2510d /libbb | |
| parent | 7a762f9dbf80b406fd1ec21966a9de3c3057fd25 (diff) | |
| download | busybox-w32-e235285c3a36c0e4efe21ec336e7015cd3cf3c62.tar.gz busybox-w32-e235285c3a36c0e4efe21ec336e7015cd3cf3c62.tar.bz2 busybox-w32-e235285c3a36c0e4efe21ec336e7015cd3cf3c62.zip | |
crypt: code shrink
function old new delta
des_crypt - 1682 +1682
md5_crypt - 627 +627
pw_encrypt 3608 1036 -2572
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/1 up/down: 2309/-2572) Total: -263 bytes
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/pw_encrypt_des.c | 15 | ||||
| -rw-r--r-- | libbb/pw_encrypt_md5.c | 17 |
2 files changed, 11 insertions, 21 deletions
diff --git a/libbb/pw_encrypt_des.c b/libbb/pw_encrypt_des.c index ab217d8e9..66e607955 100644 --- a/libbb/pw_encrypt_des.c +++ b/libbb/pw_encrypt_des.c | |||
| @@ -400,7 +400,6 @@ des_init(struct des_ctx *ctx, const struct const_des_ctx *cctx) | |||
| 400 | static void | 400 | static void |
| 401 | setup_salt(struct des_ctx *ctx, uint32_t salt) | 401 | setup_salt(struct des_ctx *ctx, uint32_t salt) |
| 402 | { | 402 | { |
| 403 | // const struct const_des_ctx *cctx = const_ctx; | ||
| 404 | uint32_t obit, saltbit; | 403 | uint32_t obit, saltbit; |
| 405 | int i; | 404 | int i; |
| 406 | 405 | ||
| @@ -422,7 +421,6 @@ setup_salt(struct des_ctx *ctx, uint32_t salt) | |||
| 422 | static void | 421 | static void |
| 423 | des_setkey(struct des_ctx *ctx, const char *key) | 422 | des_setkey(struct des_ctx *ctx, const char *key) |
| 424 | { | 423 | { |
| 425 | // const struct const_des_ctx *cctx = const_ctx; | ||
| 426 | uint32_t k0, k1, rawkey0, rawkey1; | 424 | uint32_t k0, k1, rawkey0, rawkey1; |
| 427 | int shifts, round; | 425 | int shifts, round; |
| 428 | 426 | ||
| @@ -498,7 +496,7 @@ des_setkey(struct des_ctx *ctx, const char *key) | |||
| 498 | } | 496 | } |
| 499 | 497 | ||
| 500 | 498 | ||
| 501 | static int | 499 | static void |
| 502 | do_des(struct des_ctx *ctx, uint32_t l_in, uint32_t r_in, uint32_t *l_out, uint32_t *r_out, int count) | 500 | do_des(struct des_ctx *ctx, uint32_t l_in, uint32_t r_in, uint32_t *l_out, uint32_t *r_out, int count) |
| 503 | { | 501 | { |
| 504 | const struct const_des_ctx *cctx = const_ctx; | 502 | const struct const_des_ctx *cctx = const_ctx; |
| @@ -602,12 +600,12 @@ do_des(struct des_ctx *ctx, uint32_t l_in, uint32_t r_in, uint32_t *l_out, uint3 | |||
| 602 | | fp_maskr[5][(r >> 16) & 0xff] | 600 | | fp_maskr[5][(r >> 16) & 0xff] |
| 603 | | fp_maskr[6][(r >> 8) & 0xff] | 601 | | fp_maskr[6][(r >> 8) & 0xff] |
| 604 | | fp_maskr[7][r & 0xff]; | 602 | | fp_maskr[7][r & 0xff]; |
| 605 | return 0; | ||
| 606 | } | 603 | } |
| 607 | 604 | ||
| 608 | #define DES_OUT_BUFSIZE 21 | 605 | #define DES_OUT_BUFSIZE 21 |
| 609 | 606 | ||
| 610 | static char * | 607 | static char * |
| 608 | NOINLINE | ||
| 611 | des_crypt(struct des_ctx *ctx, char output[21], const unsigned char *key, const unsigned char *setting) | 609 | des_crypt(struct des_ctx *ctx, char output[21], const unsigned char *key, const unsigned char *setting) |
| 612 | { | 610 | { |
| 613 | uint32_t salt, l, r0, r1, keybuf[2]; | 611 | uint32_t salt, l, r0, r1, keybuf[2]; |
| @@ -618,10 +616,11 @@ des_crypt(struct des_ctx *ctx, char output[21], const unsigned char *key, const | |||
| 618 | * and padding with zeros. | 616 | * and padding with zeros. |
| 619 | */ | 617 | */ |
| 620 | q = (uint8_t *)keybuf; | 618 | q = (uint8_t *)keybuf; |
| 621 | while (q - (uint8_t *)keybuf - 8) { | 619 | while (q - (uint8_t *)keybuf != 8) { |
| 622 | *q++ = *key << 1; | 620 | *q = *key << 1; |
| 623 | if (*(q - 1)) | 621 | if (*q) |
| 624 | key++; | 622 | key++; |
| 623 | q++; | ||
| 625 | } | 624 | } |
| 626 | des_setkey(ctx, (char *)keybuf); | 625 | des_setkey(ctx, (char *)keybuf); |
| 627 | 626 | ||
| @@ -658,7 +657,7 @@ des_crypt(struct des_ctx *ctx, char output[21], const unsigned char *key, const | |||
| 658 | *p++ = ascii64[(l >> 6) & 0x3f]; | 657 | *p++ = ascii64[(l >> 6) & 0x3f]; |
| 659 | *p++ = ascii64[l & 0x3f]; | 658 | *p++ = ascii64[l & 0x3f]; |
| 660 | 659 | ||
| 661 | l = (r0 << 16) | ((r1 >> 16) & 0xffff); | 660 | l = ((r0 << 16) | (r1 >> 16)); |
| 662 | *p++ = ascii64[(l >> 18) & 0x3f]; | 661 | *p++ = ascii64[(l >> 18) & 0x3f]; |
| 663 | *p++ = ascii64[(l >> 12) & 0x3f]; | 662 | *p++ = ascii64[(l >> 12) & 0x3f]; |
| 664 | *p++ = ascii64[(l >> 6) & 0x3f]; | 663 | *p++ = ascii64[(l >> 6) & 0x3f]; |
diff --git a/libbb/pw_encrypt_md5.c b/libbb/pw_encrypt_md5.c index 6c94d2d29..8d0a516cf 100644 --- a/libbb/pw_encrypt_md5.c +++ b/libbb/pw_encrypt_md5.c | |||
| @@ -101,7 +101,6 @@ static const unsigned char __md5__magic[] = MD5_MAGIC_STR; | |||
| 101 | * __md5_Encodes input (uint32_t) into output (unsigned char). Assumes len is | 101 | * __md5_Encodes input (uint32_t) into output (unsigned char). Assumes len is |
| 102 | * a multiple of 4. | 102 | * a multiple of 4. |
| 103 | */ | 103 | */ |
| 104 | |||
| 105 | static void | 104 | static void |
| 106 | __md5_Encode(unsigned char *output, uint32_t *input, unsigned int len) | 105 | __md5_Encode(unsigned char *output, uint32_t *input, unsigned int len) |
| 107 | { | 106 | { |
| @@ -119,7 +118,6 @@ __md5_Encode(unsigned char *output, uint32_t *input, unsigned int len) | |||
| 119 | * __md5_Decodes input (unsigned char) into output (uint32_t). Assumes len is | 118 | * __md5_Decodes input (unsigned char) into output (uint32_t). Assumes len is |
| 120 | * a multiple of 4. | 119 | * a multiple of 4. |
| 121 | */ | 120 | */ |
| 122 | |||
| 123 | static void | 121 | static void |
| 124 | __md5_Decode(uint32_t *output, const unsigned char *input, unsigned int len) | 122 | __md5_Decode(uint32_t *output, const unsigned char *input, unsigned int len) |
| 125 | { | 123 | { |
| @@ -166,7 +164,6 @@ __md5_Decode(uint32_t *output, const unsigned char *input, unsigned int len) | |||
| 166 | } | 164 | } |
| 167 | 165 | ||
| 168 | /* MD5 initialization. Begins an MD5 operation, writing a new context. */ | 166 | /* MD5 initialization. Begins an MD5 operation, writing a new context. */ |
| 169 | |||
| 170 | static void __md5_Init(struct MD5Context *context) | 167 | static void __md5_Init(struct MD5Context *context) |
| 171 | { | 168 | { |
| 172 | context->count[0] = context->count[1] = 0; | 169 | context->count[0] = context->count[1] = 0; |
| @@ -183,7 +180,6 @@ static void __md5_Init(struct MD5Context *context) | |||
| 183 | * operation, processing another message block, and updating the | 180 | * operation, processing another message block, and updating the |
| 184 | * context. | 181 | * context. |
| 185 | */ | 182 | */ |
| 186 | |||
| 187 | static void __md5_Update(struct MD5Context *context, const unsigned char *input, unsigned int inputLen) | 183 | static void __md5_Update(struct MD5Context *context, const unsigned char *input, unsigned int inputLen) |
| 188 | { | 184 | { |
| 189 | unsigned int i, idx, partLen; | 185 | unsigned int i, idx, partLen; |
| @@ -218,7 +214,6 @@ static void __md5_Update(struct MD5Context *context, const unsigned char *input, | |||
| 218 | /* | 214 | /* |
| 219 | * MD5 padding. Adds padding followed by original length. | 215 | * MD5 padding. Adds padding followed by original length. |
| 220 | */ | 216 | */ |
| 221 | |||
| 222 | static void __md5_Pad(struct MD5Context *context) | 217 | static void __md5_Pad(struct MD5Context *context) |
| 223 | { | 218 | { |
| 224 | unsigned char bits[8]; | 219 | unsigned char bits[8]; |
| @@ -244,7 +239,6 @@ static void __md5_Pad(struct MD5Context *context) | |||
| 244 | * MD5 finalization. Ends an MD5 message-digest operation, writing the | 239 | * MD5 finalization. Ends an MD5 message-digest operation, writing the |
| 245 | * the message digest and zeroizing the context. | 240 | * the message digest and zeroizing the context. |
| 246 | */ | 241 | */ |
| 247 | |||
| 248 | static void __md5_Final(unsigned char digest[16], struct MD5Context *context) | 242 | static void __md5_Final(unsigned char digest[16], struct MD5Context *context) |
| 249 | { | 243 | { |
| 250 | /* Do padding. */ | 244 | /* Do padding. */ |
| @@ -258,7 +252,6 @@ static void __md5_Final(unsigned char digest[16], struct MD5Context *context) | |||
| 258 | } | 252 | } |
| 259 | 253 | ||
| 260 | /* MD5 basic transformation. Transforms state based on block. */ | 254 | /* MD5 basic transformation. Transforms state based on block. */ |
| 261 | |||
| 262 | static void __md5_Transform(uint32_t state[4], const unsigned char block[64]) | 255 | static void __md5_Transform(uint32_t state[4], const unsigned char block[64]) |
| 263 | { | 256 | { |
| 264 | uint32_t a, b, c, d, x[16]; | 257 | uint32_t a, b, c, d, x[16]; |
| @@ -517,16 +510,15 @@ __md5_to64(char *s, unsigned v, int n) | |||
| 517 | * Use MD5 for what it is best at... | 510 | * Use MD5 for what it is best at... |
| 518 | */ | 511 | */ |
| 519 | #define MD5_OUT_BUFSIZE 36 | 512 | #define MD5_OUT_BUFSIZE 36 |
| 520 | |||
| 521 | static char * | 513 | static char * |
| 522 | md5_crypt(char passwd[120], const unsigned char *pw, const unsigned char *salt) | 514 | NOINLINE |
| 515 | md5_crypt(char passwd[MD5_OUT_BUFSIZE], const unsigned char *pw, const unsigned char *salt) | ||
| 523 | { | 516 | { |
| 524 | const unsigned char *sp, *ep; | 517 | const unsigned char *sp, *ep; |
| 525 | char *p; | 518 | char *p; |
| 526 | unsigned char final[17]; /* final[16] exists only to aid in looping */ | 519 | unsigned char final[17]; /* final[16] exists only to aid in looping */ |
| 527 | int sl, pl, i, pw_len; | 520 | int sl, pl, i, pw_len; |
| 528 | struct MD5Context ctx, ctx1; | 521 | struct MD5Context ctx, ctx1; |
| 529 | unsigned long l; | ||
| 530 | 522 | ||
| 531 | /* Refine the Salt first */ | 523 | /* Refine the Salt first */ |
| 532 | sp = salt; | 524 | sp = salt; |
| @@ -612,11 +604,10 @@ md5_crypt(char passwd[120], const unsigned char *pw, const unsigned char *salt) | |||
| 612 | /* Add 5*4+2 = 22 bytes of hash, + NUL byte. */ | 604 | /* Add 5*4+2 = 22 bytes of hash, + NUL byte. */ |
| 613 | final[16] = final[5]; | 605 | final[16] = final[5]; |
| 614 | for (i = 0; i < 5; i++) { | 606 | for (i = 0; i < 5; i++) { |
| 615 | l = (final[i] << 16) | (final[i+6] << 8) | final[i+12]; | 607 | unsigned l = (final[i] << 16) | (final[i+6] << 8) | final[i+12]; |
| 616 | p = __md5_to64(p, l, 4); | 608 | p = __md5_to64(p, l, 4); |
| 617 | } | 609 | } |
| 618 | l = final[11]; | 610 | p = __md5_to64(p, final[11], 2); |
| 619 | p = __md5_to64(p, l, 2); | ||
| 620 | *p = '\0'; | 611 | *p = '\0'; |
| 621 | 612 | ||
| 622 | /* Don't leave anything around in vm they could use. */ | 613 | /* Don't leave anything around in vm they could use. */ |
