mirror of
git://git.musl-libc.org/musl
synced 2025-01-30 18:41:43 +00:00
in crypt_des change unnecessary union keybuf into unsigned char[]
original FreeSec code accessed keybuf as uint32* and uint8* as well (incorrectly), this got fixed with an union, but then it seems the uint32* access is no longer needed so the code can be simplified
This commit is contained in:
parent
30779ee1aa
commit
9724defdb7
@ -879,10 +879,7 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char
|
|||||||
const unsigned char *key = (const unsigned char *)_key;
|
const unsigned char *key = (const unsigned char *)_key;
|
||||||
const unsigned char *setting = (const unsigned char *)_setting;
|
const unsigned char *setting = (const unsigned char *)_setting;
|
||||||
struct expanded_key ekey;
|
struct expanded_key ekey;
|
||||||
union {
|
unsigned char keybuf[8];
|
||||||
unsigned char c[8];
|
|
||||||
uint32_t i[2];
|
|
||||||
} keybuf;
|
|
||||||
unsigned char *p, *q;
|
unsigned char *p, *q;
|
||||||
uint32_t count, salt, l, r0, r1;
|
uint32_t count, salt, l, r0, r1;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -891,13 +888,13 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char
|
|||||||
* Copy the key, shifting each character left by one bit and padding
|
* Copy the key, shifting each character left by one bit and padding
|
||||||
* with zeroes.
|
* with zeroes.
|
||||||
*/
|
*/
|
||||||
q = keybuf.c;
|
q = keybuf;
|
||||||
while (q <= &keybuf.c[sizeof(keybuf.c) - 1]) {
|
while (q <= &keybuf[sizeof(keybuf) - 1]) {
|
||||||
*q++ = *key << 1;
|
*q++ = *key << 1;
|
||||||
if (*key)
|
if (*key)
|
||||||
key++;
|
key++;
|
||||||
}
|
}
|
||||||
des_setkey(keybuf.c, &ekey);
|
des_setkey(keybuf, &ekey);
|
||||||
|
|
||||||
if (*setting == _PASSWORD_EFMT1) {
|
if (*setting == _PASSWORD_EFMT1) {
|
||||||
/*
|
/*
|
||||||
@ -925,14 +922,14 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char
|
|||||||
/*
|
/*
|
||||||
* Encrypt the key with itself.
|
* Encrypt the key with itself.
|
||||||
*/
|
*/
|
||||||
des_cipher(keybuf.c, keybuf.c, 1, 0, &ekey);
|
des_cipher(keybuf, keybuf, 1, 0, &ekey);
|
||||||
/*
|
/*
|
||||||
* And XOR with the next 8 characters of the key.
|
* And XOR with the next 8 characters of the key.
|
||||||
*/
|
*/
|
||||||
q = keybuf.c;
|
q = keybuf;
|
||||||
while (q <= &keybuf.c[sizeof(keybuf.c) - 1] && *key)
|
while (q <= &keybuf[sizeof(keybuf) - 1] && *key)
|
||||||
*q++ ^= *key++ << 1;
|
*q++ ^= *key++ << 1;
|
||||||
des_setkey(keybuf.c, &ekey);
|
des_setkey(keybuf, &ekey);
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(output, setting, 9);
|
memcpy(output, setting, 9);
|
||||||
|
Loading…
Reference in New Issue
Block a user