mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-22 02:35:25 +00:00
libnm: refactor loop in crypto_md5_hash()
Break the loop in the middle and avoid g_checksum_reset() call. In many cases, we only want one MD5 sum, not a longer digest.
This commit is contained in:
parent
30c66b6f79
commit
fedee13c37
|
@ -771,11 +771,10 @@ crypto_md5_hash (const char *salt,
|
|||
gsize buflen)
|
||||
{
|
||||
GChecksum *ctx;
|
||||
int nkey = buflen;
|
||||
gsize digest_len;
|
||||
int count = 0;
|
||||
char digest[16];
|
||||
char *p = buffer;
|
||||
gsize bufidx = 0;
|
||||
int i;
|
||||
|
||||
nm_assert (g_checksum_type_get_length (G_CHECKSUM_MD5) == sizeof (digest));
|
||||
|
||||
|
@ -791,12 +790,7 @@ crypto_md5_hash (const char *salt,
|
|||
if (password_len < 0)
|
||||
password_len = strlen (password);
|
||||
|
||||
while (nkey > 0) {
|
||||
int i = 0;
|
||||
|
||||
g_checksum_reset (ctx);
|
||||
if (count++)
|
||||
g_checksum_update (ctx, (const guchar *) digest, sizeof (digest));
|
||||
for (;;) {
|
||||
if (password_len > 0)
|
||||
g_checksum_update (ctx, (const guchar *) password, password_len);
|
||||
if (salt_len > 0)
|
||||
|
@ -806,12 +800,17 @@ crypto_md5_hash (const char *salt,
|
|||
g_checksum_get_digest (ctx, (guchar *) digest, &digest_len);
|
||||
nm_assert (digest_len == sizeof (digest));
|
||||
|
||||
while (nkey && (i < sizeof (digest))) {
|
||||
*(p++) = digest[i++];
|
||||
nkey--;
|
||||
for (i = 0; i < sizeof (digest); i++) {
|
||||
if (bufidx >= buflen)
|
||||
goto done;
|
||||
buffer[bufidx++] = digest[i];
|
||||
}
|
||||
|
||||
g_checksum_reset (ctx);
|
||||
g_checksum_update (ctx, (const guchar *) digest, sizeof (digest));
|
||||
}
|
||||
|
||||
done:
|
||||
memset (digest, 0, sizeof (digest));
|
||||
g_checksum_free (ctx);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue