From: Szabolcs Nagy Date: Sun, 13 Jan 2013 22:54:48 +0000 (+0100) Subject: in crypt_des change unnecessary union keybuf into unsigned char[] X-Git-Tag: v0.9.9~13 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=9724defdb72fdb2ae4e8a60e928d40d84fe04800;p=oweals%2Fmusl.git 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 --- diff --git a/src/crypt/crypt_des.c b/src/crypt/crypt_des.c index 4454a130..dc95dcaa 100644 --- a/src/crypt/crypt_des.c +++ b/src/crypt/crypt_des.c @@ -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 *setting = (const unsigned char *)_setting; struct expanded_key ekey; - union { - unsigned char c[8]; - uint32_t i[2]; - } keybuf; + unsigned char keybuf[8]; unsigned char *p, *q; uint32_t count, salt, l, r0, r1; 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 * with zeroes. */ - q = keybuf.c; - while (q <= &keybuf.c[sizeof(keybuf.c) - 1]) { + q = keybuf; + while (q <= &keybuf[sizeof(keybuf) - 1]) { *q++ = *key << 1; if (*key) key++; } - des_setkey(keybuf.c, &ekey); + des_setkey(keybuf, &ekey); 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. */ - 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. */ - q = keybuf.c; - while (q <= &keybuf.c[sizeof(keybuf.c) - 1] && *key) + q = keybuf; + while (q <= &keybuf[sizeof(keybuf) - 1] && *key) *q++ ^= *key++ << 1; - des_setkey(keybuf.c, &ekey); + des_setkey(keybuf, &ekey); } memcpy(output, setting, 9);