libnm,glib-aux: move nm_crypto_md5_hash() to "libnm-glib-aux"

This only uses glib's md5 code and has no dependency on our
crypto libraries (gnutls, nss).

Move it to "libnm-glib-aux" so it can be freely used.

Maybe it deserves a better name, but "nm-shared-utils.h" is a heap of
various utility functions, it's hard to name them well.
This commit is contained in:
Thomas Haller 2021-05-02 15:32:35 +02:00
parent 73cfc4097a
commit c5985db7cf
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
4 changed files with 51 additions and 47 deletions

View file

@ -914,46 +914,6 @@ nm_crypto_verify_private_key(const char *filename,
error);
}
void
nm_crypto_md5_hash(const guint8 *salt,
gsize salt_len,
const guint8 *password,
gsize password_len,
guint8 * buffer,
gsize buflen)
{
nm_auto_free_checksum GChecksum * ctx = NULL;
nm_auto_clear_static_secret_ptr const NMSecretPtr digest =
NM_SECRET_PTR_STATIC(NM_UTILS_CHECKSUM_LENGTH_MD5);
gsize bufidx = 0;
int i;
g_return_if_fail(password_len == 0 || password);
g_return_if_fail(buffer);
g_return_if_fail(buflen > 0);
g_return_if_fail(salt_len == 0 || salt);
ctx = g_checksum_new(G_CHECKSUM_MD5);
for (;;) {
if (password_len > 0)
g_checksum_update(ctx, (const guchar *) password, password_len);
if (salt_len > 0)
g_checksum_update(ctx, (const guchar *) salt, salt_len);
nm_utils_checksum_get_digest_len(ctx, digest.bin, NM_UTILS_CHECKSUM_LENGTH_MD5);
for (i = 0; i < NM_UTILS_CHECKSUM_LENGTH_MD5; i++) {
if (bufidx >= buflen)
return;
buffer[bufidx++] = digest.bin[i];
}
g_checksum_reset(ctx);
g_checksum_update(ctx, digest.ptr, NM_UTILS_CHECKSUM_LENGTH_MD5);
}
}
gboolean
nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error)
{

View file

@ -63,13 +63,6 @@ NMCryptoFileFormat nm_crypto_verify_private_key(const char *file,
gboolean * out_is_encrypted,
GError ** error);
void nm_crypto_md5_hash(const guint8 *salt,
gsize salt_len,
const guint8 *password,
gsize password_len,
guint8 * buffer,
gsize buflen);
gboolean nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error);
/*****************************************************************************/

View file

@ -6199,3 +6199,45 @@ NM_ASSERT_VALID_PATH_COMPONENT(const char *name)
NM_PRINT_FMT_QUOTED(name, "\"", name, "\"", "(null)"));
g_assert_not_reached();
}
/*****************************************************************************/
void
nm_crypto_md5_hash(const guint8 *salt,
gsize salt_len,
const guint8 *password,
gsize password_len,
guint8 * buffer,
gsize buflen)
{
nm_auto_free_checksum GChecksum * ctx = NULL;
nm_auto_clear_static_secret_ptr const NMSecretPtr digest =
NM_SECRET_PTR_STATIC(NM_UTILS_CHECKSUM_LENGTH_MD5);
gsize bufidx = 0;
int i;
g_return_if_fail(password_len == 0 || password);
g_return_if_fail(buffer);
g_return_if_fail(buflen > 0);
g_return_if_fail(salt_len == 0 || salt);
ctx = g_checksum_new(G_CHECKSUM_MD5);
for (;;) {
if (password_len > 0)
g_checksum_update(ctx, (const guchar *) password, password_len);
if (salt_len > 0)
g_checksum_update(ctx, (const guchar *) salt, salt_len);
nm_utils_checksum_get_digest_len(ctx, digest.bin, NM_UTILS_CHECKSUM_LENGTH_MD5);
for (i = 0; i < NM_UTILS_CHECKSUM_LENGTH_MD5; i++) {
if (bufidx >= buflen)
return;
buffer[bufidx++] = digest.bin[i];
}
g_checksum_reset(ctx);
g_checksum_update(ctx, digest.ptr, NM_UTILS_CHECKSUM_LENGTH_MD5);
}
}

View file

@ -2786,4 +2786,13 @@ gboolean nm_utils_sysctl_ip_conf_is_path(int addr_family,
const char *ifname,
const char *property);
/*****************************************************************************/
void nm_crypto_md5_hash(const guint8 *salt,
gsize salt_len,
const guint8 *password,
gsize password_len,
guint8 * buffer,
gsize buflen);
#endif /* __NM_SHARED_UTILS_H__ */