mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-23 18:52:09 +01:00
ghmac: Split off wrapper functions into ghmac-utils.c
Prep for adding a GnuTLS HMAC implementation; these are just utility functions that call the "core" API.
This commit is contained in:
parent
0e1647c0cb
commit
79c6d81cad
145
glib/ghmac-utils.c
Normal file
145
glib/ghmac-utils.c
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
/* ghmac.h - data hashing functions
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Collabora Ltd.
|
||||||
|
* Copyright (C) 2019 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "ghmac.h"
|
||||||
|
|
||||||
|
#include "glib/galloca.h"
|
||||||
|
#include "gatomic.h"
|
||||||
|
#include "gslice.h"
|
||||||
|
#include "gmem.h"
|
||||||
|
#include "gstrfuncs.h"
|
||||||
|
#include "gtestutils.h"
|
||||||
|
#include "gtypes.h"
|
||||||
|
#include "glibintl.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_compute_hmac_for_data:
|
||||||
|
* @digest_type: a #GChecksumType to use for the HMAC
|
||||||
|
* @key: (array length=key_len): the key to use in the HMAC
|
||||||
|
* @key_len: the length of the key
|
||||||
|
* @data: (array length=length): binary blob to compute the HMAC of
|
||||||
|
* @length: length of @data
|
||||||
|
*
|
||||||
|
* Computes the HMAC for a binary @data of @length. This is a
|
||||||
|
* convenience wrapper for g_hmac_new(), g_hmac_get_string()
|
||||||
|
* and g_hmac_unref().
|
||||||
|
*
|
||||||
|
* The hexadecimal string returned will be in lower case.
|
||||||
|
*
|
||||||
|
* Returns: the HMAC of the binary data as a string in hexadecimal.
|
||||||
|
* The returned string should be freed with g_free() when done using it.
|
||||||
|
*
|
||||||
|
* Since: 2.30
|
||||||
|
*/
|
||||||
|
gchar *
|
||||||
|
g_compute_hmac_for_data (GChecksumType digest_type,
|
||||||
|
const guchar *key,
|
||||||
|
gsize key_len,
|
||||||
|
const guchar *data,
|
||||||
|
gsize length)
|
||||||
|
{
|
||||||
|
GHmac *hmac;
|
||||||
|
gchar *retval;
|
||||||
|
|
||||||
|
g_return_val_if_fail (length == 0 || data != NULL, NULL);
|
||||||
|
|
||||||
|
hmac = g_hmac_new (digest_type, key, key_len);
|
||||||
|
if (!hmac)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
g_hmac_update (hmac, data, length);
|
||||||
|
retval = g_strdup (g_hmac_get_string (hmac));
|
||||||
|
g_hmac_unref (hmac);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_compute_hmac_for_bytes:
|
||||||
|
* @digest_type: a #GChecksumType to use for the HMAC
|
||||||
|
* @key: the key to use in the HMAC
|
||||||
|
* @data: binary blob to compute the HMAC of
|
||||||
|
*
|
||||||
|
* Computes the HMAC for a binary @data. This is a
|
||||||
|
* convenience wrapper for g_hmac_new(), g_hmac_get_string()
|
||||||
|
* and g_hmac_unref().
|
||||||
|
*
|
||||||
|
* The hexadecimal string returned will be in lower case.
|
||||||
|
*
|
||||||
|
* Returns: the HMAC of the binary data as a string in hexadecimal.
|
||||||
|
* The returned string should be freed with g_free() when done using it.
|
||||||
|
*
|
||||||
|
* Since: 2.50
|
||||||
|
*/
|
||||||
|
gchar *
|
||||||
|
g_compute_hmac_for_bytes (GChecksumType digest_type,
|
||||||
|
GBytes *key,
|
||||||
|
GBytes *data)
|
||||||
|
{
|
||||||
|
gconstpointer byte_data;
|
||||||
|
gsize length;
|
||||||
|
gconstpointer key_data;
|
||||||
|
gsize key_len;
|
||||||
|
|
||||||
|
g_return_val_if_fail (data != NULL, NULL);
|
||||||
|
g_return_val_if_fail (key != NULL, NULL);
|
||||||
|
|
||||||
|
byte_data = g_bytes_get_data (data, &length);
|
||||||
|
key_data = g_bytes_get_data (key, &key_len);
|
||||||
|
return g_compute_hmac_for_data (digest_type, key_data, key_len, byte_data, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_compute_hmac_for_string:
|
||||||
|
* @digest_type: a #GChecksumType to use for the HMAC
|
||||||
|
* @key: (array length=key_len): the key to use in the HMAC
|
||||||
|
* @key_len: the length of the key
|
||||||
|
* @str: the string to compute the HMAC for
|
||||||
|
* @length: the length of the string, or -1 if the string is nul-terminated
|
||||||
|
*
|
||||||
|
* Computes the HMAC for a string.
|
||||||
|
*
|
||||||
|
* The hexadecimal string returned will be in lower case.
|
||||||
|
*
|
||||||
|
* Returns: the HMAC as a hexadecimal string.
|
||||||
|
* The returned string should be freed with g_free()
|
||||||
|
* when done using it.
|
||||||
|
*
|
||||||
|
* Since: 2.30
|
||||||
|
*/
|
||||||
|
gchar *
|
||||||
|
g_compute_hmac_for_string (GChecksumType digest_type,
|
||||||
|
const guchar *key,
|
||||||
|
gsize key_len,
|
||||||
|
const gchar *str,
|
||||||
|
gssize length)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (length == 0 || str != NULL, NULL);
|
||||||
|
|
||||||
|
if (length < 0)
|
||||||
|
length = strlen (str);
|
||||||
|
|
||||||
|
return g_compute_hmac_for_data (digest_type, key, key_len,
|
||||||
|
(const guchar *) str, length);
|
||||||
|
}
|
112
glib/ghmac.c
112
glib/ghmac.c
@ -356,115 +356,3 @@ g_hmac_get_digest (GHmac *hmac,
|
|||||||
g_checksum_update (hmac->digesto, buffer, len_signed);
|
g_checksum_update (hmac->digesto, buffer, len_signed);
|
||||||
g_checksum_get_digest (hmac->digesto, buffer, digest_len);
|
g_checksum_get_digest (hmac->digesto, buffer, digest_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* g_compute_hmac_for_data:
|
|
||||||
* @digest_type: a #GChecksumType to use for the HMAC
|
|
||||||
* @key: (array length=key_len): the key to use in the HMAC
|
|
||||||
* @key_len: the length of the key
|
|
||||||
* @data: (array length=length): binary blob to compute the HMAC of
|
|
||||||
* @length: length of @data
|
|
||||||
*
|
|
||||||
* Computes the HMAC for a binary @data of @length. This is a
|
|
||||||
* convenience wrapper for g_hmac_new(), g_hmac_get_string()
|
|
||||||
* and g_hmac_unref().
|
|
||||||
*
|
|
||||||
* The hexadecimal string returned will be in lower case.
|
|
||||||
*
|
|
||||||
* Returns: the HMAC of the binary data as a string in hexadecimal.
|
|
||||||
* The returned string should be freed with g_free() when done using it.
|
|
||||||
*
|
|
||||||
* Since: 2.30
|
|
||||||
*/
|
|
||||||
gchar *
|
|
||||||
g_compute_hmac_for_data (GChecksumType digest_type,
|
|
||||||
const guchar *key,
|
|
||||||
gsize key_len,
|
|
||||||
const guchar *data,
|
|
||||||
gsize length)
|
|
||||||
{
|
|
||||||
GHmac *hmac;
|
|
||||||
gchar *retval;
|
|
||||||
|
|
||||||
g_return_val_if_fail (length == 0 || data != NULL, NULL);
|
|
||||||
|
|
||||||
hmac = g_hmac_new (digest_type, key, key_len);
|
|
||||||
if (!hmac)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
g_hmac_update (hmac, data, length);
|
|
||||||
retval = g_strdup (g_hmac_get_string (hmac));
|
|
||||||
g_hmac_unref (hmac);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* g_compute_hmac_for_bytes:
|
|
||||||
* @digest_type: a #GChecksumType to use for the HMAC
|
|
||||||
* @key: the key to use in the HMAC
|
|
||||||
* @data: binary blob to compute the HMAC of
|
|
||||||
*
|
|
||||||
* Computes the HMAC for a binary @data. This is a
|
|
||||||
* convenience wrapper for g_hmac_new(), g_hmac_get_string()
|
|
||||||
* and g_hmac_unref().
|
|
||||||
*
|
|
||||||
* The hexadecimal string returned will be in lower case.
|
|
||||||
*
|
|
||||||
* Returns: the HMAC of the binary data as a string in hexadecimal.
|
|
||||||
* The returned string should be freed with g_free() when done using it.
|
|
||||||
*
|
|
||||||
* Since: 2.50
|
|
||||||
*/
|
|
||||||
gchar *
|
|
||||||
g_compute_hmac_for_bytes (GChecksumType digest_type,
|
|
||||||
GBytes *key,
|
|
||||||
GBytes *data)
|
|
||||||
{
|
|
||||||
gconstpointer byte_data;
|
|
||||||
gsize length;
|
|
||||||
gconstpointer key_data;
|
|
||||||
gsize key_len;
|
|
||||||
|
|
||||||
g_return_val_if_fail (data != NULL, NULL);
|
|
||||||
g_return_val_if_fail (key != NULL, NULL);
|
|
||||||
|
|
||||||
byte_data = g_bytes_get_data (data, &length);
|
|
||||||
key_data = g_bytes_get_data (key, &key_len);
|
|
||||||
return g_compute_hmac_for_data (digest_type, key_data, key_len, byte_data, length);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* g_compute_hmac_for_string:
|
|
||||||
* @digest_type: a #GChecksumType to use for the HMAC
|
|
||||||
* @key: (array length=key_len): the key to use in the HMAC
|
|
||||||
* @key_len: the length of the key
|
|
||||||
* @str: the string to compute the HMAC for
|
|
||||||
* @length: the length of the string, or -1 if the string is nul-terminated
|
|
||||||
*
|
|
||||||
* Computes the HMAC for a string.
|
|
||||||
*
|
|
||||||
* The hexadecimal string returned will be in lower case.
|
|
||||||
*
|
|
||||||
* Returns: the HMAC as a hexadecimal string.
|
|
||||||
* The returned string should be freed with g_free()
|
|
||||||
* when done using it.
|
|
||||||
*
|
|
||||||
* Since: 2.30
|
|
||||||
*/
|
|
||||||
gchar *
|
|
||||||
g_compute_hmac_for_string (GChecksumType digest_type,
|
|
||||||
const guchar *key,
|
|
||||||
gsize key_len,
|
|
||||||
const gchar *str,
|
|
||||||
gssize length)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (length == 0 || str != NULL, NULL);
|
|
||||||
|
|
||||||
if (length < 0)
|
|
||||||
length = strlen (str);
|
|
||||||
|
|
||||||
return g_compute_hmac_for_data (digest_type, key, key_len,
|
|
||||||
(const guchar *) str, length);
|
|
||||||
}
|
|
||||||
|
@ -289,6 +289,7 @@ glib_sources += files(
|
|||||||
'ggettext.c',
|
'ggettext.c',
|
||||||
'ghash.c',
|
'ghash.c',
|
||||||
'ghmac.c',
|
'ghmac.c',
|
||||||
|
'ghmac-utils.c',
|
||||||
'ghook.c',
|
'ghook.c',
|
||||||
'ghostutils.c',
|
'ghostutils.c',
|
||||||
'giochannel.c',
|
'giochannel.c',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user