pidgin/pidgin

aaa5e467901f
Merged in CMaiku/pidgin (pull request #194)

Port to GChecksum

Approved-by: Gary Kramlich
Approved-by: Eion Robb
--- a/doc/reference/libpurple/libpurple-docs.xml Sun Jun 04 18:11:37 2017 +0000
+++ b/doc/reference/libpurple/libpurple-docs.xml Sun Jun 04 18:13:19 2017 +0000
@@ -114,9 +114,6 @@
<xi:include href="xml/pbkdf2cipher.xml" />
<xi:include href="xml/rc4cipher.xml" />
<xi:include href="xml/md4hash.xml" />
- <xi:include href="xml/md5hash.xml" />
- <xi:include href="xml/sha1hash.xml" />
- <xi:include href="xml/sha256hash.xml" />
</chapter>
<chapter id="smiley">
--- a/libpurple/Makefile.am Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/Makefile.am Sun Jun 04 18:13:19 2017 +0000
@@ -45,11 +45,8 @@
ciphers/descipher.c \
ciphers/des3cipher.c \
ciphers/md4hash.c \
- ciphers/md5hash.c \
ciphers/pbkdf2cipher.c \
ciphers/rc4cipher.c \
- ciphers/sha1hash.c \
- ciphers/sha256hash.c \
cipher.c \
circularbuffer.c \
cmds.c \
@@ -245,11 +242,8 @@
descipher.h \
des3cipher.h \
md4hash.h \
- md5hash.h \
pbkdf2cipher.h \
- rc4cipher.h \
- sha1hash.h \
- sha256hash.h
+ rc4cipher.h
purple_builtheaders = purple.h version.h enums.h marshallers.h
--- a/libpurple/Makefile.mingw Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/Makefile.mingw Sun Jun 04 18:13:19 2017 +0000
@@ -72,11 +72,8 @@
ciphers/descipher.c \
ciphers/des3cipher.c \
ciphers/md4hash.c \
- ciphers/md5hash.c \
ciphers/pbkdf2cipher.c \
ciphers/rc4cipher.c \
- ciphers/sha1hash.c \
- ciphers/sha256hash.c \
cipher.c \
circularbuffer.c \
cmds.c \
--- a/libpurple/ciphers/md5hash.c Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- */
-#include "internal.h"
-#include "md5hash.h"
-
-/*******************************************************************************
- * Structs
- ******************************************************************************/
-#define PURPLE_MD5_HASH_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MD5_HASH, PurpleMD5HashPrivate))
-
-typedef struct {
- GChecksum *checksum;
-} PurpleMD5HashPrivate;
-
-/******************************************************************************
- * Globals
- *****************************************************************************/
-static GObjectClass *parent_class = NULL;
-
-/******************************************************************************
- * Hash Stuff
- *****************************************************************************/
-
-static void
-purple_md5_hash_reset(PurpleHash *hash)
-{
- PurpleMD5Hash *md5_hash = PURPLE_MD5_HASH(hash);
- PurpleMD5HashPrivate *priv = PURPLE_MD5_HASH_GET_PRIVATE(md5_hash);
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->checksum != NULL);
-
- g_checksum_reset(priv->checksum);
-}
-
-static void
-purple_md5_hash_append(PurpleHash *hash, const guchar *data,
- gsize len)
-{
- PurpleMD5Hash *md5_hash = PURPLE_MD5_HASH(hash);
- PurpleMD5HashPrivate *priv = PURPLE_MD5_HASH_GET_PRIVATE(md5_hash);
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->checksum != NULL);
-
- while (len >= G_MAXSSIZE) {
- g_checksum_update(priv->checksum, data, G_MAXSSIZE);
- len -= G_MAXSSIZE;
- data += G_MAXSSIZE;
- }
-
- if (len)
- g_checksum_update(priv->checksum, data, len);
-}
-
-static gboolean
-purple_md5_hash_digest(PurpleHash *hash, guchar *digest, size_t buff_len)
-{
- PurpleMD5Hash *md5_hash = PURPLE_MD5_HASH(hash);
- PurpleMD5HashPrivate *priv = PURPLE_MD5_HASH_GET_PRIVATE(md5_hash);
-
- const gssize required_len = g_checksum_type_get_length(G_CHECKSUM_MD5);
- gsize digest_len = buff_len;
-
- g_return_val_if_fail(priv != NULL, FALSE);
- g_return_val_if_fail(priv->checksum != NULL, FALSE);
-
- g_return_val_if_fail(required_len >= 0, FALSE);
- g_return_val_if_fail(buff_len >= (gsize)required_len, FALSE);
-
- g_checksum_get_digest(priv->checksum, digest, &digest_len);
-
- if (digest_len != (gsize)required_len)
- return FALSE;
-
- purple_md5_hash_reset(hash);
-
- return TRUE;
-}
-
-static size_t
-purple_md5_hash_get_block_size(PurpleHash *hash)
-{
- return 64;
-}
-
-static size_t
-purple_md5_hash_get_digest_size(PurpleHash *hash)
-{
- return g_checksum_type_get_length(G_CHECKSUM_MD5);
-}
-
-/******************************************************************************
- * Object Stuff
- *****************************************************************************/
-
-static void
-purple_md5_hash_finalize(GObject *obj)
-{
- PurpleMD5Hash *md5_hash = PURPLE_MD5_HASH(obj);
- PurpleMD5HashPrivate *priv = PURPLE_MD5_HASH_GET_PRIVATE(md5_hash);
-
- if (priv->checksum)
- g_checksum_free(priv->checksum);
-
- parent_class->finalize(obj);
-}
-
-static void
-purple_md5_hash_class_init(PurpleMD5HashClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- PurpleHashClass *hash_class = PURPLE_HASH_CLASS(klass);
-
- parent_class = g_type_class_peek_parent(klass);
-
- obj_class->finalize = purple_md5_hash_finalize;
-
- hash_class->reset = purple_md5_hash_reset;
- hash_class->reset_state = purple_md5_hash_reset;
- hash_class->append = purple_md5_hash_append;
- hash_class->digest = purple_md5_hash_digest;
- hash_class->get_digest_size = purple_md5_hash_get_digest_size;
- hash_class->get_block_size = purple_md5_hash_get_block_size;
-
- g_type_class_add_private(klass, sizeof(PurpleMD5HashPrivate));
-}
-
-static void
-purple_md5_hash_init(PurpleHash *hash)
-{
- PurpleMD5Hash *md5_hash = PURPLE_MD5_HASH(hash);
- PurpleMD5HashPrivate *priv = PURPLE_MD5_HASH_GET_PRIVATE(md5_hash);
-
- priv->checksum = g_checksum_new(G_CHECKSUM_MD5);
-
- purple_md5_hash_reset(hash);
-}
-
-/******************************************************************************
- * API
- *****************************************************************************/
-GType
-purple_md5_hash_get_type(void) {
- static GType type = 0;
-
- if(type == 0) {
- static const GTypeInfo info = {
- sizeof(PurpleMD5HashClass),
- NULL,
- NULL,
- (GClassInitFunc)purple_md5_hash_class_init,
- NULL,
- NULL,
- sizeof(PurpleMD5Hash),
- 0,
- (GInstanceInitFunc)purple_md5_hash_init,
- NULL,
- };
-
- type = g_type_register_static(PURPLE_TYPE_HASH,
- "PurpleMD5Hash",
- &info, 0);
- }
-
- return type;
-}
-
-PurpleHash *
-purple_md5_hash_new(void) {
- return g_object_new(PURPLE_TYPE_MD5_HASH, NULL);
-}
--- a/libpurple/ciphers/md5hash.h Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/* purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- */
-
-#ifndef PURPLE_MD5_HASH_H
-#define PURPLE_MD5_HASH_H
-/**
- * SECTION:md5hash
- * @section_id: libpurple-md5hash
- * @short_description: <filename>ciphers/md5hash.h</filename>
- * @title: MD5 Hash
- */
-
-#include "cipher.h"
-
-#define PURPLE_TYPE_MD5_HASH (purple_md5_hash_get_type())
-#define PURPLE_MD5_HASH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MD5_HASH, PurpleMD5Hash))
-#define PURPLE_MD5_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MD5_HASH, PurpleMD5HashClass))
-#define PURPLE_IS_MD5_HASH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MD5_HASH))
-#define PURPLE_IS_MD5_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), PURPLE_TYPE_MD5_HASH))
-#define PURPLE_MD5_HASH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MD5_HASH, PurpleMD5HashClass))
-
-typedef struct _PurpleMD5Hash PurpleMD5Hash;
-typedef struct _PurpleMD5HashClass PurpleMD5HashClass;
-
-struct _PurpleMD5Hash {
- PurpleHash gparent;
-};
-
-struct _PurpleMD5HashClass {
- PurpleHashClass gparent;
-
- /*< private >*/
- void (*_purple_reserved1)(void);
- void (*_purple_reserved2)(void);
- void (*_purple_reserved3)(void);
- void (*_purple_reserved4)(void);
-};
-
-G_BEGIN_DECLS
-
-GType purple_md5_hash_get_type(void);
-
-PurpleHash *purple_md5_hash_new(void);
-
-G_END_DECLS
-
-#endif /* PURPLE_MD5_HASH_H */
--- a/libpurple/ciphers/sha1hash.c Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- */
-#include "internal.h"
-#include "sha1hash.h"
-
-/*******************************************************************************
- * Structs
- ******************************************************************************/
-#define PURPLE_SHA1_HASH_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_SHA1_HASH, PurpleSHA1HashPrivate))
-
-typedef struct {
- GChecksum *checksum;
-} PurpleSHA1HashPrivate;
-
-/******************************************************************************
- * Globals
- *****************************************************************************/
-static GObjectClass *parent_class = NULL;
-
-/******************************************************************************
- * Hash Stuff
- *****************************************************************************/
-
-static void
-purple_sha1_hash_reset(PurpleHash *hash)
-{
- PurpleSHA1Hash *sha1_hash = PURPLE_SHA1_HASH(hash);
- PurpleSHA1HashPrivate *priv = PURPLE_SHA1_HASH_GET_PRIVATE(sha1_hash);
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->checksum != NULL);
-
- g_checksum_reset(priv->checksum);
-}
-
-static void
-purple_sha1_hash_append(PurpleHash *hash, const guchar *data,
- gsize len)
-{
- PurpleSHA1Hash *sha1_hash = PURPLE_SHA1_HASH(hash);
- PurpleSHA1HashPrivate *priv = PURPLE_SHA1_HASH_GET_PRIVATE(sha1_hash);
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->checksum != NULL);
-
- while (len >= G_MAXSSIZE) {
- g_checksum_update(priv->checksum, data, G_MAXSSIZE);
- len -= G_MAXSSIZE;
- data += G_MAXSSIZE;
- }
-
- if (len)
- g_checksum_update(priv->checksum, data, len);
-}
-
-static gboolean
-purple_sha1_hash_digest(PurpleHash *hash, guchar *digest, size_t buff_len)
-{
- PurpleSHA1Hash *sha1_hash = PURPLE_SHA1_HASH(hash);
- PurpleSHA1HashPrivate *priv = PURPLE_SHA1_HASH_GET_PRIVATE(sha1_hash);
-
- const gssize required_len = g_checksum_type_get_length(G_CHECKSUM_SHA1);
- gsize digest_len = buff_len;
-
- g_return_val_if_fail(priv != NULL, FALSE);
- g_return_val_if_fail(priv->checksum != NULL, FALSE);
-
- g_return_val_if_fail(required_len >= 0, FALSE);
- g_return_val_if_fail(buff_len >= (gsize)required_len, FALSE);
-
- g_checksum_get_digest(priv->checksum, digest, &digest_len);
-
- if (digest_len != (gsize)required_len)
- return FALSE;
-
- purple_sha1_hash_reset(hash);
-
- return TRUE;
-}
-
-static size_t
-purple_sha1_hash_get_block_size(PurpleHash *hash)
-{
- return 64;
-}
-
-static size_t
-purple_sha1_hash_get_digest_size(PurpleHash *hash)
-{
- return g_checksum_type_get_length(G_CHECKSUM_SHA1);
-}
-
-/******************************************************************************
- * Object Stuff
- *****************************************************************************/
-
-static void
-purple_sha1_hash_finalize(GObject *obj)
-{
- PurpleSHA1Hash *sha1_hash = PURPLE_SHA1_HASH(obj);
- PurpleSHA1HashPrivate *priv = PURPLE_SHA1_HASH_GET_PRIVATE(sha1_hash);
-
- if (priv->checksum)
- g_checksum_free(priv->checksum);
-
- parent_class->finalize(obj);
-}
-
-static void
-purple_sha1_hash_class_init(PurpleSHA1HashClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- PurpleHashClass *hash_class = PURPLE_HASH_CLASS(klass);
-
- parent_class = g_type_class_peek_parent(klass);
-
- obj_class->finalize = purple_sha1_hash_finalize;
-
- hash_class->reset = purple_sha1_hash_reset;
- hash_class->reset_state = purple_sha1_hash_reset;
- hash_class->append = purple_sha1_hash_append;
- hash_class->digest = purple_sha1_hash_digest;
- hash_class->get_digest_size = purple_sha1_hash_get_digest_size;
- hash_class->get_block_size = purple_sha1_hash_get_block_size;
-
- g_type_class_add_private(klass, sizeof(PurpleSHA1HashPrivate));
-}
-
-static void
-purple_sha1_hash_init(PurpleHash *hash)
-{
- PurpleSHA1Hash *sha1_hash = PURPLE_SHA1_HASH(hash);
- PurpleSHA1HashPrivate *priv = PURPLE_SHA1_HASH_GET_PRIVATE(sha1_hash);
-
- priv->checksum = g_checksum_new(G_CHECKSUM_SHA1);
-
- purple_sha1_hash_reset(hash);
-}
-
-/******************************************************************************
- * API
- *****************************************************************************/
-GType
-purple_sha1_hash_get_type(void) {
- static GType type = 0;
-
- if(type == 0) {
- static const GTypeInfo info = {
- sizeof(PurpleSHA1HashClass),
- NULL,
- NULL,
- (GClassInitFunc)purple_sha1_hash_class_init,
- NULL,
- NULL,
- sizeof(PurpleSHA1Hash),
- 0,
- (GInstanceInitFunc)purple_sha1_hash_init,
- NULL,
- };
-
- type = g_type_register_static(PURPLE_TYPE_HASH,
- "PurpleSHA1Hash",
- &info, 0);
- }
-
- return type;
-}
-
-PurpleHash *
-purple_sha1_hash_new(void) {
- return g_object_new(PURPLE_TYPE_SHA1_HASH, NULL);
-}
--- a/libpurple/ciphers/sha1hash.h Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/* purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- */
-
-#ifndef PURPLE_SHA1_HASH_H
-#define PURPLE_SHA1_HASH_H
-/**
- * SECTION:sha1hash
- * @section_id: libpurple-sha1hash
- * @short_description: <filename>ciphers/sha1hash.h</filename>
- * @title: SHA1 Hash
- */
-
-#include "cipher.h"
-
-#define PURPLE_TYPE_SHA1_HASH (purple_sha1_hash_get_type())
-#define PURPLE_SHA1_HASH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_SHA1_HASH, PurpleSHA1Hash))
-#define PURPLE_SHA1_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SHA1_HASH, PurpleSHA1HashClass))
-#define PURPLE_IS_SHA1_HASH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_SHA1_HASH))
-#define PURPLE_IS_SHA1_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), PURPLE_TYPE_SHA1_HASH))
-#define PURPLE_SHA1_HASH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SHA1_HASH, PurpleSHA1HashClass))
-
-typedef struct _PurpleSHA1Hash PurpleSHA1Hash;
-typedef struct _PurpleSHA1HashClass PurpleSHA1HashClass;
-
-struct _PurpleSHA1Hash {
- PurpleHash gparent;
-};
-
-struct _PurpleSHA1HashClass {
- PurpleHashClass gparent;
-
- /*< private >*/
- void (*_purple_reserved1)(void);
- void (*_purple_reserved2)(void);
- void (*_purple_reserved3)(void);
- void (*_purple_reserved4)(void);
-};
-
-G_BEGIN_DECLS
-
-GType purple_sha1_hash_get_type(void);
-
-PurpleHash *purple_sha1_hash_new(void);
-
-G_END_DECLS
-
-#endif /* PURPLE_SHA1_HASH_H */
--- a/libpurple/ciphers/sha256hash.c Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- */
-#include "internal.h"
-#include "sha256hash.h"
-
-/*******************************************************************************
- * Structs
- ******************************************************************************/
-#define PURPLE_SHA256_HASH_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_SHA256_HASH, PurpleSHA256HashPrivate))
-
-typedef struct {
- GChecksum *checksum;
-} PurpleSHA256HashPrivate;
-
-/******************************************************************************
- * Globals
- *****************************************************************************/
-static GObjectClass *parent_class = NULL;
-
-/******************************************************************************
- * Hash Stuff
- *****************************************************************************/
-
-static void
-purple_sha256_hash_reset(PurpleHash *hash)
-{
- PurpleSHA256Hash *sha256_hash = PURPLE_SHA256_HASH(hash);
- PurpleSHA256HashPrivate *priv = PURPLE_SHA256_HASH_GET_PRIVATE(sha256_hash);
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->checksum != NULL);
-
- g_checksum_reset(priv->checksum);
-}
-
-static void
-purple_sha256_hash_append(PurpleHash *hash, const guchar *data,
- gsize len)
-{
- PurpleSHA256Hash *sha256_hash = PURPLE_SHA256_HASH(hash);
- PurpleSHA256HashPrivate *priv = PURPLE_SHA256_HASH_GET_PRIVATE(sha256_hash);
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->checksum != NULL);
-
- while (len >= G_MAXSSIZE) {
- g_checksum_update(priv->checksum, data, G_MAXSSIZE);
- len -= G_MAXSSIZE;
- data += G_MAXSSIZE;
- }
-
- if (len)
- g_checksum_update(priv->checksum, data, len);
-}
-
-static gboolean
-purple_sha256_hash_digest(PurpleHash *hash, guchar *digest, size_t buff_len)
-{
- PurpleSHA256Hash *sha256_hash = PURPLE_SHA256_HASH(hash);
- PurpleSHA256HashPrivate *priv = PURPLE_SHA256_HASH_GET_PRIVATE(sha256_hash);
-
- const gssize required_len = g_checksum_type_get_length(G_CHECKSUM_SHA256);
- gsize digest_len = buff_len;
-
- g_return_val_if_fail(priv != NULL, FALSE);
- g_return_val_if_fail(priv->checksum != NULL, FALSE);
-
- g_return_val_if_fail(required_len >= 0, FALSE);
- g_return_val_if_fail(buff_len >= (gsize)required_len, FALSE);
-
- g_checksum_get_digest(priv->checksum, digest, &digest_len);
-
- if (digest_len != (gsize)required_len)
- return FALSE;
-
- purple_sha256_hash_reset(hash);
-
- return TRUE;
-}
-
-static size_t
-purple_sha256_hash_get_block_size(PurpleHash *hash)
-{
- return 64;
-}
-
-static size_t
-purple_sha256_hash_get_digest_size(PurpleHash *hash)
-{
- return g_checksum_type_get_length(G_CHECKSUM_SHA256);
-}
-
-/******************************************************************************
- * Object Stuff
- *****************************************************************************/
-
-static void
-purple_sha256_hash_finalize(GObject *obj)
-{
- PurpleSHA256Hash *sha256_hash = PURPLE_SHA256_HASH(obj);
- PurpleSHA256HashPrivate *priv = PURPLE_SHA256_HASH_GET_PRIVATE(sha256_hash);
-
- if (priv->checksum)
- g_checksum_free(priv->checksum);
-
- parent_class->finalize(obj);
-}
-
-static void
-purple_sha256_hash_class_init(PurpleSHA256HashClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- PurpleHashClass *hash_class = PURPLE_HASH_CLASS(klass);
-
- parent_class = g_type_class_peek_parent(klass);
-
- obj_class->finalize = purple_sha256_hash_finalize;
-
- hash_class->reset = purple_sha256_hash_reset;
- hash_class->reset_state = purple_sha256_hash_reset;
- hash_class->append = purple_sha256_hash_append;
- hash_class->digest = purple_sha256_hash_digest;
- hash_class->get_digest_size = purple_sha256_hash_get_digest_size;
- hash_class->get_block_size = purple_sha256_hash_get_block_size;
-
- g_type_class_add_private(klass, sizeof(PurpleSHA256HashPrivate));
-}
-
-static void
-purple_sha256_hash_init(PurpleHash *hash)
-{
- PurpleSHA256Hash *sha256_hash = PURPLE_SHA256_HASH(hash);
- PurpleSHA256HashPrivate *priv = PURPLE_SHA256_HASH_GET_PRIVATE(sha256_hash);
-
- priv->checksum = g_checksum_new(G_CHECKSUM_SHA256);
-
- purple_sha256_hash_reset(hash);
-}
-
-/******************************************************************************
- * API
- *****************************************************************************/
-GType
-purple_sha256_hash_get_type(void) {
- static GType type = 0;
-
- if(type == 0) {
- static const GTypeInfo info = {
- sizeof(PurpleSHA256HashClass),
- NULL,
- NULL,
- (GClassInitFunc)purple_sha256_hash_class_init,
- NULL,
- NULL,
- sizeof(PurpleSHA256Hash),
- 0,
- (GInstanceInitFunc)purple_sha256_hash_init,
- NULL,
- };
-
- type = g_type_register_static(PURPLE_TYPE_HASH,
- "PurpleSHA256Hash",
- &info, 0);
- }
-
- return type;
-}
-
-PurpleHash *
-purple_sha256_hash_new(void) {
- return g_object_new(PURPLE_TYPE_SHA256_HASH, NULL);
-}
--- a/libpurple/ciphers/sha256hash.h Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/* purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- */
-
-#ifndef PURPLE_SHA256_HASH_H
-#define PURPLE_SHA256_HASH_H
-/**
- * SECTION:sha256hash
- * @section_id: libpurple-sha256hash
- * @short_description: <filename>ciphers/sha256hash.h</filename>
- * @title: SHA256 Hash
- */
-
-#include "cipher.h"
-
-#define PURPLE_TYPE_SHA256_HASH (purple_sha256_hash_get_type())
-#define PURPLE_SHA256_HASH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_SHA256_HASH, PurpleSHA256Hash))
-#define PURPLE_SHA256_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SHA256_HASH, PurpleSHA256HashClass))
-#define PURPLE_IS_SHA256_HASH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_SHA256_HASH))
-#define PURPLE_IS_SHA256_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), PURPLE_TYPE_SHA256_HASH))
-#define PURPLE_SHA256_HASH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SHA256_HASH, PurpleSHA256HashClass))
-
-typedef struct _PurpleSHA256Hash PurpleSHA256Hash;
-typedef struct _PurpleSHA256HashClass PurpleSHA256HashClass;
-
-struct _PurpleSHA256Hash {
- PurpleHash gparent;
-};
-
-struct _PurpleSHA256HashClass {
- PurpleHashClass gparent;
-
- /*< private >*/
- void (*_purple_reserved1)(void);
- void (*_purple_reserved2)(void);
- void (*_purple_reserved3)(void);
- void (*_purple_reserved4)(void);
-};
-
-G_BEGIN_DECLS
-
-GType purple_sha256_hash_get_type(void);
-
-PurpleHash *purple_sha256_hash_new(void);
-
-G_END_DECLS
-
-#endif /* PURPLE_SHA256_HASH_H */
--- a/libpurple/protocols/bonjour/bonjour_ft.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/bonjour/bonjour_ft.c Sun Jun 04 18:13:19 2017 +0000
@@ -28,7 +28,6 @@
#include "buddy.h"
#include "bonjour.h"
#include "bonjour_ft.h"
-#include "ciphers/sha1hash.h"
static void
bonjour_bytestreams_init(PurpleXfer *xfer);
@@ -1014,11 +1013,12 @@
{
PurpleBuddy *pb;
PurpleAccount *account = NULL;
- PurpleHash *hash;
+ GChecksum *hash;
XepXfer *xf;
char dstaddr[41];
const gchar *name = NULL;
unsigned char hashval[20];
+ gsize digest_len = 20;
char *p;
int i;
@@ -1037,10 +1037,10 @@
p = g_strdup_printf("%s%s%s", xf->sid, name, bonjour_get_jid(account));
- hash = purple_sha1_hash_new();
- purple_hash_append(hash, (guchar *)p, strlen(p));
- purple_hash_digest(hash, hashval, sizeof(hashval));
- g_object_unref(G_OBJECT(hash));
+ hash = g_checksum_new(G_CHECKSUM_SHA1);
+ g_checksum_update(hash, (guchar *)p, -1);
+ g_checksum_get_digest(hash, hashval, &digest_len);
+ g_checksum_free(hash);
g_free(p);
--- a/libpurple/protocols/jabber/auth.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/auth.c Sun Jun 04 18:13:19 2017 +0000
@@ -263,7 +263,8 @@
x = purple_xmlnode_new_child(query, "digest");
s = g_strdup_printf("%s%s", js->stream_id, pw);
- hash = jabber_calculate_data_hash(s, strlen(s), "sha1");
+ hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1,
+ s, -1);
purple_xmlnode_insert_data(x, hash, -1);
g_free(hash);
g_free(s);
--- a/libpurple/protocols/jabber/auth_digest_md5.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/auth_digest_md5.c Sun Jun 04 18:13:19 2017 +0000
@@ -23,7 +23,6 @@
#include "internal.h"
#include "debug.h"
-#include "ciphers/md5hash.h"
#include "util.h"
#include "xmlnode.h"
@@ -106,9 +105,8 @@
generate_response_value(JabberID *jid, const char *passwd, const char *nonce,
const char *cnonce, const char *a2, const char *realm)
{
- PurpleHash *hash;
- guchar result[16];
- size_t a1len;
+ GChecksum *hash;
+ gsize digest_len = 16;
gchar *a1, *convnode=NULL, *convpasswd = NULL, *ha1, *ha2, *kd, *x, *z;
@@ -121,36 +119,22 @@
convpasswd = g_strdup(passwd);
}
- hash = purple_md5_hash_new();
+ hash = g_checksum_new(G_CHECKSUM_MD5);
x = g_strdup_printf("%s:%s:%s", convnode, realm, convpasswd ? convpasswd : "");
- purple_hash_append(hash, (const guchar *)x, strlen(x));
- purple_hash_digest(hash, result, sizeof(result));
+ g_checksum_update(hash, (const guchar *)x, -1);
a1 = g_strdup_printf("xxxxxxxxxxxxxxxx:%s:%s", nonce, cnonce);
- a1len = strlen(a1);
- g_memmove(a1, result, 16);
-
- purple_hash_reset(hash);
- purple_hash_append(hash, (const guchar *)a1, a1len);
- purple_hash_digest(hash, result, sizeof(result));
- ha1 = purple_base16_encode(result, 16);
+ g_checksum_get_digest(hash, (guint8 *)a1, &digest_len);
+ g_checksum_free(hash);
- purple_hash_reset(hash);
- purple_hash_append(hash, (const guchar *)a2, strlen(a2));
- purple_hash_digest(hash, result, sizeof(result));
-
- ha2 = purple_base16_encode(result, 16);
+ ha1 = g_compute_checksum_for_string(G_CHECKSUM_MD5, a1, -1);
+ ha2 = g_compute_checksum_for_string(G_CHECKSUM_MD5, a2, -1);
kd = g_strdup_printf("%s:%s:00000001:%s:auth:%s", ha1, nonce, cnonce, ha2);
- purple_hash_reset(hash);
- purple_hash_append(hash, (const guchar *)kd, strlen(kd));
- purple_hash_digest(hash, result, sizeof(result));
- g_object_unref(hash);
-
- z = purple_base16_encode(result, 16);
+ z = g_compute_checksum_for_string(G_CHECKSUM_MD5, kd, -1);
g_free(convnode);
g_free(convpasswd);
--- a/libpurple/protocols/jabber/buddy.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/buddy.c Sun Jun 04 18:13:19 2017 +0000
@@ -472,10 +472,10 @@
g_free(js->initial_avatar_hash);
image = purple_buddy_icons_find_account_icon(purple_connection_get_account(gc));
if (image != NULL) {
- js->initial_avatar_hash = jabber_calculate_data_hash(
+ js->initial_avatar_hash = g_compute_checksum_for_data(
+ G_CHECKSUM_SHA1,
purple_image_get_data(image),
- purple_image_get_data_size(image),
- "sha1"
+ purple_image_get_data_size(image)
);
g_object_unref(image);
} else {
@@ -530,8 +530,8 @@
binval = purple_xmlnode_new_child(photo, "BINVAL");
enc = purple_base64_encode(avatar_data, avatar_len);
- js->avatar_hash =
- jabber_calculate_data_hash(avatar_data, avatar_len, "sha1");
+ js->avatar_hash = g_compute_checksum_for_data(G_CHECKSUM_SHA1,
+ avatar_data, avatar_len);
purple_xmlnode_insert_data(binval, enc, -1);
g_free(enc);
@@ -961,7 +961,8 @@
g_free(bintext);
if (data) {
- vcard_hash = jabber_calculate_data_hash(data, size, "sha1");
+ vcard_hash = g_compute_checksum_for_data(
+ G_CHECKSUM_SHA1, data, size);
g_free(data);
}
}
@@ -1216,7 +1217,7 @@
purple_notify_user_info_add_pair_html(user_info, (photo ? _("Photo") : _("Logo")), img_text);
- hash = jabber_calculate_data_hash(data, size, "sha1");
+ hash = g_compute_checksum_for_data(G_CHECKSUM_SHA1, data, size);
purple_buddy_icons_set_for_user(account, bare_jid, data, size, hash);
g_free(hash);
g_free(img_text);
--- a/libpurple/protocols/jabber/caps.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/caps.c Sun Jun 04 18:13:19 2017 +0000
@@ -30,9 +30,6 @@
#include "util.h"
#include "xdata.h"
-#include "ciphers/md5hash.h"
-#include "ciphers/sha1hash.h"
-
#define JABBER_CAPS_FILENAME "xmpp-caps.xml"
typedef struct _JabberDataFormField {
@@ -457,19 +454,20 @@
/* Only validate if these are v1.5 capabilities */
if (userdata->hash) {
gchar *hash = NULL;
- PurpleHash *hasher = NULL;
- /*
- * TODO: If you add *any* hash here, make sure the checksum buffer
- * size in jabber_caps_calculate_hash is large enough. The cipher API
- * doesn't seem to offer a "Get the hash size" function(?).
- */
+ GChecksumType hash_type;
+ gboolean supported_hash = TRUE;
+
if (g_str_equal(userdata->hash, "sha-1")) {
- hasher = purple_sha1_hash_new();
+ hash_type = G_CHECKSUM_SHA1;
} else if (g_str_equal(userdata->hash, "md5")) {
- hasher = purple_md5_hash_new();
+ hash_type = G_CHECKSUM_MD5;
+ } else {
+ supported_hash = FALSE;
}
- hash = jabber_caps_calculate_hash(info, hasher);
- g_object_unref(hasher);
+
+ if (supported_hash) {
+ hash = jabber_caps_calculate_hash(info, hash_type);
+ }
if (!hash || !g_str_equal(hash, userdata->ver)) {
purple_debug_warning("jabber", "Could not validate caps info from "
@@ -818,27 +816,29 @@
}
static void
-append_escaped_string(PurpleHash *hash, const gchar *str)
+append_escaped_string(GChecksum *hash, const gchar *str)
{
g_return_if_fail(hash != NULL);
if (str && *str) {
char *tmp = g_markup_escape_text(str, -1);
- purple_hash_append(hash, (const guchar *)tmp, strlen(tmp));
+ g_checksum_update(hash, (const guchar *)tmp, -1);
g_free(tmp);
}
- purple_hash_append(hash, (const guchar *)"<", 1);
+ g_checksum_update(hash, (const guchar *)"<", -1);
}
-gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info, PurpleHash *hash)
+gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info,
+ GChecksumType hash_type)
{
+ GChecksum *hash;
GList *node;
- guint8 checksum[20];
- gsize checksum_size = 20;
- gboolean success;
+ guint8 *checksum;
+ gsize checksum_size;
+ gchar *ret;
- if (!info || !hash)
+ if (!info)
return NULL;
/* sort identities, features and x-data forms */
@@ -846,6 +846,12 @@
info->features = g_list_sort(info->features, (GCompareFunc)strcmp);
info->forms = g_list_sort(info->forms, jabber_xdata_compare);
+ hash = g_checksum_new(hash_type);
+
+ if (hash == NULL) {
+ return NULL;
+ }
+
/* Add identities to the hash data */
for (node = info->identities; node; node = node->next) {
JabberIdentity *id = (JabberIdentity*)node->data;
@@ -863,7 +869,7 @@
tmp = g_strconcat(category, "/", type, "/", lang ? lang : "",
"/", name ? name : "", "<", NULL);
- purple_hash_append(hash, (const guchar *)tmp, strlen(tmp));
+ g_checksum_update(hash, (const guchar *)tmp, -1);
g_free(tmp);
g_free(category);
@@ -912,16 +918,20 @@
}
}
+ checksum_size = g_checksum_type_get_length(hash_type);
+ checksum = g_new(guint8, checksum_size);
+
/* generate hash */
- success = purple_hash_digest(hash, checksum, checksum_size);
- checksum_size = purple_hash_get_digest_size(hash);
+ g_checksum_get_digest(hash, checksum, &checksum_size);
- return (success ? purple_base64_encode(checksum, checksum_size) : NULL);
+ ret = purple_base64_encode(checksum, checksum_size);
+ g_free(checksum);
+
+ return ret;
}
void jabber_caps_calculate_own_hash(JabberStream *js) {
JabberCapsClientInfo info;
- PurpleHash *hasher;
GList *iter = NULL;
GList *features = NULL;
@@ -952,9 +962,7 @@
info.forms = NULL;
g_free(js->caps_hash);
- hasher = purple_sha1_hash_new();
- js->caps_hash = jabber_caps_calculate_hash(&info, hasher);
- g_object_unref(hasher);
+ js->caps_hash = jabber_caps_calculate_hash(&info, G_CHECKSUM_SHA1);
g_list_free(info.identities);
g_list_free(info.features);
}
--- a/libpurple/protocols/jabber/caps.h Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/caps.h Sun Jun 04 18:13:19 2017 +0000
@@ -27,7 +27,6 @@
typedef struct _JabberCapsClientInfo JabberCapsClientInfo;
#include "jabber.h"
-#include "cipher.h"
/* Implementation of XEP-0115 - Entity Capabilities */
@@ -96,10 +95,11 @@
* XEP-0115 Version 1.5.
*
* @param info A JabberCapsClientInfo pointer.
- * @param hash Hash cipher to be used. Either sha-1 or md5.
+ * @param hash_type GChecksumType to be used. Either sha-1 or md5.
* @return The base64 encoded SHA-1 hash; must be freed by caller
*/
-gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info, PurpleHash *hash);
+gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info,
+ GChecksumType hash_type);
/**
* Calculate SHA1 hash for own featureset.
--- a/libpurple/protocols/jabber/data.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/data.c Sun Jun 04 18:13:19 2017 +0000
@@ -50,7 +50,7 @@
g_return_val_if_fail(type != NULL, NULL);
data = g_new0(JabberData, 1);
- checksum = jabber_calculate_data_hash(rawdata, size, "sha1");
+ checksum = g_compute_checksum_for_data(G_CHECKSUM_SHA1, rawdata, size);
g_snprintf(cid, sizeof(cid), "sha1+%s@bob.xmpp.org", checksum);
g_free(checksum);
@@ -238,11 +238,25 @@
if (num_sub_parts == 2) {
const gchar *hash_algo = sub_parts[0];
const gchar *hash_value = sub_parts[1];
- gchar *digest =
- jabber_calculate_data_hash(jabber_data_get_data(data),
- jabber_data_get_size(data), hash_algo);
+ GChecksumType hash_type;
+ gboolean valid_hash_type = TRUE;
- if (digest) {
+ if (purple_strequal(hash_algo, "sha1"))
+ hash_type = G_CHECKSUM_SHA1;
+ else if (purple_strequal(hash_algo, "sha256"))
+ hash_type = G_CHECKSUM_SHA256;
+ else if (purple_strequal(hash_algo, "sha512"))
+ hash_type = G_CHECKSUM_SHA512;
+ else if (purple_strequal(hash_algo, "md5"))
+ hash_type = G_CHECKSUM_MD5;
+ else
+ valid_hash_type = FALSE;
+
+ if (valid_hash_type) {
+ gchar *digest = g_compute_checksum_for_data(
+ hash_type, jabber_data_get_data(data),
+ jabber_data_get_size(data));
+
ret = purple_strequal(digest, hash_value);
if (!ret)
--- a/libpurple/protocols/jabber/jabber.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/jabber.c Sun Jun 04 18:13:19 2017 +0000
@@ -1135,10 +1135,10 @@
*/
image = purple_buddy_icons_find_account_icon(account);
if (image != NULL) {
- js->initial_avatar_hash = jabber_calculate_data_hash(
+ js->initial_avatar_hash = g_compute_checksum_for_data(
+ G_CHECKSUM_SHA1,
purple_image_get_data(image),
- purple_image_get_data_size(image),
- "sha1"
+ purple_image_get_data_size(image)
);
g_object_unref(image);
}
--- a/libpurple/protocols/jabber/jutil.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/jutil.c Sun Jun 04 18:13:19 2017 +0000
@@ -32,10 +32,6 @@
#include "presence.h"
#include "jutil.h"
-#include "ciphers/sha1hash.h"
-#include "ciphers/sha256hash.h"
-#include "ciphers/md5hash.h"
-
#ifdef USE_IDN
#include <idna.h>
#include <stringprep.h>
@@ -780,36 +776,3 @@
return NULL;
}
-char *
-jabber_calculate_data_hash(gconstpointer data, size_t len,
- const gchar *hash_algo)
-{
- PurpleHash *hash = NULL;
- static gchar digest[129]; /* 512 bits hex + \0 */
-
- if (g_str_equal(hash_algo, "sha1"))
- hash = purple_sha1_hash_new();
- else if (g_str_equal(hash_algo, "sha256"))
- hash = purple_sha256_hash_new();
- else if (g_str_equal(hash_algo, "md5"))
- hash = purple_md5_hash_new();
-
- if (hash == NULL)
- {
- purple_debug_error("jabber", "Unexpected hashing algorithm %s requested\n", hash_algo);
- g_return_val_if_reached(NULL);
- }
-
- /* Hash the data */
- purple_hash_append(hash, data, len);
- if (!purple_hash_digest_to_str(hash, digest, sizeof(digest)))
- {
- purple_debug_error("jabber", "Failed to get digest for %s cipher.\n",
- hash_algo);
- g_return_val_if_reached(NULL);
- }
- g_object_unref(G_OBJECT(hash));
-
- return g_strdup(digest);
-}
-
--- a/libpurple/protocols/jabber/jutil.h Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/jutil.h Sun Jun 04 18:13:19 2017 +0000
@@ -94,6 +94,4 @@
/* show attr (presence stanza) -> state */
JabberBuddyState jabber_buddy_show_get_state(const char *id);
-char *jabber_calculate_data_hash(gconstpointer data, size_t len,
- const gchar *hash_algo);
#endif /* PURPLE_JABBER_JUTIL_H_ */
--- a/libpurple/protocols/jabber/presence.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/presence.c Sun Jun 04 18:13:19 2017 +0000
@@ -462,7 +462,8 @@
g_free(text);
if (data)
- hash = jabber_calculate_data_hash(data, size, "sha1");
+ g_compute_checksum_for_data(
+ G_CHECKSUM_SHA1, data, size);
}
purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, data, size, hash);
--- a/libpurple/protocols/jabber/si.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/si.c Sun Jun 04 18:13:19 2017 +0000
@@ -301,7 +301,8 @@
jsx->js->user->node, jsx->js->user->domain, jsx->js->user->resource);
/* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */
- hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1");
+ hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1,
+ dstaddr, -1);
account = purple_connection_get_account(jsx->js->gc);
jsx->connect_data = purple_proxy_connect_socks5_account(NULL, account,
@@ -478,7 +479,7 @@
jsx->js->user->resource, purple_xfer_get_remote_user(xfer));
/* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */
- hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1");
+ hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, dstaddr, -1);
if(strncmp(hash, jsx->rxqueue + 5, 40) ||
jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) {
--- a/libpurple/protocols/jabber/tests/test_jabber_caps.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/tests/test_jabber_caps.c Sun Jun 04 18:13:19 2017 +0000
@@ -1,7 +1,6 @@
#include <glib.h>
#include "xmlnode.h"
-#include "ciphers/sha1hash.h"
#include "protocols/jabber/caps.h"
static void
@@ -24,13 +23,12 @@
}
static void
-_test_jabber_caps_match(PurpleHash *hash, const gchar *in, const gchar *expected) {
+_test_jabber_caps_match(GChecksumType hash_type, const gchar *in, const gchar *expected) {
PurpleXmlNode *query = purple_xmlnode_from_str(in, -1);
JabberCapsClientInfo *info = jabber_caps_parse_client_info(query);
gchar *got = NULL;
- got = jabber_caps_calculate_hash(info, hash);
- g_object_unref(G_OBJECT(hash));
+ got = jabber_caps_calculate_hash(info, hash_type);
g_assert_cmpstr(expected, ==, got);
g_free(got);
@@ -39,7 +37,7 @@
static void
test_jabber_caps_calculate_from_xmlnode(void) {
_test_jabber_caps_match(
- purple_sha1_hash_new(),
+ G_CHECKSUM_SHA1,
"<query xmlns='http://jabber.org/protocol/disco#info' node='http://tkabber.jabber.ru/#GNjxthSckUNvAIoCCJFttjl6VL8='><identity category='client' type='pc' name='Tkabber'/><x xmlns='jabber:x:data' type='result'><field var='FORM_TYPE' type='hidden'><value>urn:xmpp:dataforms:softwareinfo</value></field><field var='software'><value>Tkabber</value></field><field var='software_version'><value> ( 8.5.5 )</value></field><field var='os'><value>ATmega640-16AU</value></field><field var='os_version'><value/></field></x><feature var='games:board'/><feature var='google:mail:notify'/><feature var='http://jabber.org/protocol/activity'/><feature var='http://jabber.org/protocol/bytestreams'/><feature var='http://jabber.org/protocol/chatstates'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/disco#info'/><feature var='http://jabber.org/protocol/disco#items'/><feature var='http://jabber.org/protocol/feature-neg'/><feature var='http://jabber.org/protocol/geoloc'/><feature var='http://jabber.org/protocol/ibb'/><feature var='http://jabber.org/protocol/iqibb'/><feature var='http://jabber.org/protocol/mood'/><feature var='http://jabber.org/protocol/muc'/><feature var='http://jabber.org/protocol/mute#ancestor'/><feature var='http://jabber.org/protocol/mute#editor'/><feature var='http://jabber.org/protocol/rosterx'/><feature var='http://jabber.org/protocol/si'/><feature var='http://jabber.org/protocol/si/profile/file-transfer'/><feature var='http://jabber.org/protocol/tune'/><feature var='jabber:iq:avatar'/><feature var='jabber:iq:browse'/><feature var='jabber:iq:dtcp'/><feature var='jabber:iq:filexfer'/><feature var='jabber:iq:ibb'/><feature var='jabber:iq:inband'/><feature var='jabber:iq:jidlink'/><feature var='jabber:iq:last'/><feature var='jabber:iq:oob'/><feature var='jabber:iq:privacy'/><feature var='jabber:iq:time'/><feature var='jabber:iq:version'/><feature var='jabber:x:data'/><feature var='jabber:x:event'/><feature var='jabber:x:oob'/><feature var='urn:xmpp:ping'/><feature var='urn:xmpp:receipts'/><feature var='urn:xmpp:time'/></query>",
"GNjxthSckUNvAIoCCJFttjl6VL8="
);
--- a/libpurple/protocols/jabber/useravatar.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/jabber/useravatar.c Sun Jun 04 18:13:19 2017 +0000
@@ -154,9 +154,10 @@
char *lengthstring, *widthstring, *heightstring;
/* compute the sha1 hash */
- char *hash = jabber_calculate_data_hash(
+ char *hash = g_compute_checksum_for_data(
+ G_CHECKSUM_SHA1,
purple_image_get_data(img),
- purple_image_get_data_size(img), "sha1");
+ purple_image_get_data_size(img));
char *base64avatar = purple_base64_encode(
purple_image_get_data(img),
purple_image_get_data_size(img));
--- a/libpurple/protocols/oscar/family_auth.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/oscar/family_auth.c Sun Jun 04 18:13:19 2017 +0000
@@ -31,8 +31,6 @@
#include <ctype.h>
-#include "ciphers/md5hash.h"
-
/* #define USE_XOR_FOR_ICQ */
#ifdef USE_XOR_FOR_ICQ
@@ -75,14 +73,15 @@
static int
aim_encode_password_md5(const char *password, size_t password_len, const char *key, guint8 *digest)
{
- PurpleHash *hash;
+ GChecksum *hash;
+ gsize digest_len = 16;
- hash = purple_md5_hash_new();
- purple_hash_append(hash, (const guchar *)key, strlen(key));
- purple_hash_append(hash, (const guchar *)password, password_len);
- purple_hash_append(hash, (const guchar *)AIM_MD5_STRING, strlen(AIM_MD5_STRING));
- purple_hash_digest(hash, 16, digest, NULL);
- g_object_unref(hash);
+ hash = g_checksum_new(G_CHECKSUM_MD5);
+ g_checksum_update(hash, (const guchar *)key, -1);
+ g_checksum_update(hash, (const guchar *)password, password_len);
+ g_checksum_update(hash, (const guchar *)AIM_MD5_STRING, -1);
+ g_checksum_get_digest(hash, digest, &digest_len);
+ g_checksum_free(hash);
return 0;
}
@@ -90,19 +89,20 @@
static int
aim_encode_password_md5(const char *password, size_t password_len, const char *key, guint8 *digest)
{
- PurpleHash *hash;
+ GChecksum *hash;
guchar passdigest[16];
+ gsize digest_len = 16;
- hash = purple_md5_hash_new();
- purple_hash_append(hash, (const guchar *)password, password_len);
- purple_hash_digest(hash, passdigest, sizeof(passdigest));
- purple_hash_reset(hash);
+ hash = g_checksum_new(G_CHECKSUM_MD5);
+ g_checksum_update(hash, (const guchar *)password, password_len);
+ g_checksum_get_digest(hash, passdigest, &digest_len);
+ g_checksum_reset(hash);
- purple_hash_append(hash, (const guchar *)key, strlen(key));
- purple_hash_append(hash, passdigest, 16);
- purple_hash_append(hash, (const guchar *)AIM_MD5_STRING, strlen(AIM_MD5_STRING));
- purple_hash_digest(hash, digest, 16);
- g_object_unref(hash);
+ g_checksum_update(hash, (const guchar *)key, -1);
+ g_checksum_update(hash, passdigest, digest_len);
+ g_checksum_update(hash, (const guchar *)AIM_MD5_STRING, -1);
+ g_checksum_get_digest(hash, digest, &digest_len);
+ g_checksum_free(hash);
return 0;
}
--- a/libpurple/protocols/oscar/oscar.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/protocols/oscar/oscar.c Sun Jun 04 18:13:19 2017 +0000
@@ -33,7 +33,6 @@
#include "account.h"
#include "accountopt.h"
#include "buddyicon.h"
-#include "ciphers/md5hash.h"
#include "conversation.h"
#include "core.h"
#include "debug.h"
@@ -5238,15 +5237,16 @@
if (img == NULL) {
aim_ssi_delicon(od);
} else {
- PurpleHash *hash;
+ GChecksum *hash;
guchar md5[16];
+ gsize digest_len = 16;
gconstpointer data = purple_image_get_data(img);
size_t len = purple_image_get_data_size(img);
- hash = purple_md5_hash_new();
- purple_hash_append(hash, data, len);
- purple_hash_digest(hash, md5, sizeof(md5));
- g_object_unref(hash);
+ hash = g_checksum_new(G_CHECKSUM_MD5);
+ g_checksum_update(hash, data, len);
+ g_checksum_get_digest(hash, md5, &digest_len);
+ g_checksum_free(hash);
aim_ssi_seticon(od, md5, 16);
}
--- a/libpurple/proxy.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/proxy.c Sun Jun 04 18:13:19 2017 +0000
@@ -27,7 +27,6 @@
#define _PURPLE_PROXY_C_
#include "internal.h"
-#include "ciphers/md5hash.h"
#include "debug.h"
#include "http.h"
#include "notify.h"
--- a/libpurple/tests/Makefile.am Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/tests/Makefile.am Sun Jun 04 18:13:19 2017 +0000
@@ -10,9 +10,6 @@
test_des3 \
test_image \
test_md4 \
- test_md5 \
- test_sha1 \
- test_sha256 \
test_smiley \
test_trie \
test_util \
@@ -30,15 +27,6 @@
test_md4_SOURCES=test_md4.c
test_md4_LDADD=$(COMMON_LIBS)
-test_md5_SOURCES=test_md5.c
-test_md5_LDADD=$(COMMON_LIBS)
-
-test_sha1_SOURCES=test_sha1.c
-test_sha1_LDADD=$(COMMON_LIBS)
-
-test_sha256_SOURCES=test_sha256.c
-test_sha256_LDADD=$(COMMON_LIBS)
-
test_smiley_SOURCES=test_smiley.c
test_smiley_LDADD=$(COMMON_LIBS)
--- a/libpurple/tests/test_md5.c Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- *
- */
-#include <glib.h>
-
-#include <purple.h>
-
-#include "ciphers/md5hash.h"
-
-static void
-test_md5hash(gchar *data, gchar *digest) {
- PurpleHash *hash = NULL;
- gchar cdigest[33];
- gboolean ret = FALSE;
-
- hash = purple_md5_hash_new();
-
- purple_hash_append(hash, (guchar *)data, strlen(data));
-
- ret = purple_hash_digest_to_str(hash, cdigest, sizeof(cdigest));
-
- g_assert(ret);
- g_assert_cmpstr(digest, ==, cdigest);
-}
-
-static void
-test_md5hash_empty_string(void) {
- test_md5hash("",
- "d41d8cd98f00b204e9800998ecf8427e");
-}
-
-static void
-test_md5hash_a(void) {
- test_md5hash("a",
- "0cc175b9c0f1b6a831c399e269772661");
-}
-
-static void
-test_md5hash_abc(void) {
- test_md5hash("abc",
- "900150983cd24fb0d6963f7d28e17f72");
-}
-
-static void
-test_md5hash_message_digest(void) {
- test_md5hash("message digest",
- "f96b697d7cb7938d525a2f31aaf161d0");
-}
-
-static void
-test_md5hash_a_to_z(void) {
- test_md5hash("abcdefghijklmnopqrstuvwxyz",
- "c3fcd3d76192e4007dfb496cca67e13b");
-}
-
-static void
-test_md5hash_A_to_Z_a_to_z_0_to_9(void) {
- test_md5hash("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
- "d174ab98d277d9f5a5611c2c9f419d9f");
-}
-
-static void
-test_md5hash_1_to_0_eight_times(void) {
- test_md5hash("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
- "57edf4a22be3c955ac49da2e2107b67a");
-}
-
-gint
-main(gint argc, gchar **argv) {
- g_test_init(&argc, &argv, NULL);
-
- g_test_add_func("/hash/md5/empty-string",
- test_md5hash_empty_string);
- g_test_add_func("/hash/md5/a",
- test_md5hash_a);
- g_test_add_func("/hash/md5/abc",
- test_md5hash_abc);
- g_test_add_func("/hash/md5/message digest",
- test_md5hash_message_digest);
- g_test_add_func("/hash/md5/a to z",
- test_md5hash_a_to_z);
- g_test_add_func("/hash/md5/A to Z, a to z, 0 to 9" ,
- test_md5hash_A_to_Z_a_to_z_0_to_9);
- g_test_add_func("/hash/md5/1 to 0 eight times",
- test_md5hash_1_to_0_eight_times);
-
- return g_test_run();
-}
--- a/libpurple/tests/test_sha1.c Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- *
- */
-#include <glib.h>
-
-#include <purple.h>
-
-#include "ciphers/sha1hash.h"
-
-static void
-test_sha1hash(gchar *data, gchar *digest) {
- PurpleHash *hash = NULL;
- gchar cdigest[41];
- gboolean ret = FALSE;
-
- hash = purple_sha1_hash_new();
-
- if(data) {
- purple_hash_append(hash, (guchar *)data, strlen(data));
- } else {
- gint j;
- guchar buff[1000];
-
- memset(buff, 'a', 1000);
-
- for(j = 0; j < 1000; j++)
- purple_hash_append(hash, buff, 1000);
- }
-
- ret = purple_hash_digest_to_str(hash, cdigest, sizeof(cdigest));
-
- g_assert(ret);
- g_assert_cmpstr(digest, ==, cdigest);
-}
-
-static void
-test_sha1hash_empty_string(void) {
- test_sha1hash("",
- "da39a3ee5e6b4b0d3255bfef95601890afd80709");
-}
-
-static void
-test_sha1hash_a(void) {
- test_sha1hash("a",
- "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8");
-}
-
-static void
-test_sha1hash_abc(void) {
- test_sha1hash("abc",
- "a9993e364706816aba3e25717850c26c9cd0d89d");
-}
-
-static void
-test_sha1hash_abcd_gibberish(void) {
- test_sha1hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "84983e441c3bd26ebaae4aa1f95129e5e54670f1");
-}
-
-static void
-test_sha1hash_1000_as_1000_times(void) {
- test_sha1hash(NULL,
- "34aa973cd4c4daa4f61eeb2bdbad27316534016f");
-}
-
-gint
-main(gint argc, gchar **argv) {
- g_test_init(&argc, &argv, NULL);
-
- g_test_add_func("/hash/sha1/empty-string",
- test_sha1hash_empty_string);
- g_test_add_func("/hash/sha1/a",
- test_sha1hash_a);
- g_test_add_func("/hash/sha1/abc",
- test_sha1hash_abc);
- g_test_add_func("/hash/sha1/abcd_gibberish",
- test_sha1hash_abcd_gibberish);
- g_test_add_func("/hash/sha1/1000 a's 1000 times",
- test_sha1hash_1000_as_1000_times);
-
- return g_test_run();
-}
--- a/libpurple/tests/test_sha256.c Sun Jun 04 18:11:37 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
- *
- */
-#include <glib.h>
-
-#include <purple.h>
-
-#include "ciphers/sha256hash.h"
-
-static void
-test_sha256hash(gchar *data, gchar *digest) {
- PurpleHash *hash = NULL;
- gchar cdigest[65];
- gboolean ret = FALSE;
-
- hash = purple_sha256_hash_new();
-
- if(data) {
- purple_hash_append(hash, (guchar *)data, strlen(data));
- } else {
- gint j;
- guchar buff[1000];
-
- memset(buff, 'a', 1000);
-
- for(j = 0; j < 1000; j++)
- purple_hash_append(hash, buff, 1000);
- }
-
- ret = purple_hash_digest_to_str(hash, cdigest, sizeof(cdigest));
-
- g_assert(ret);
- g_assert_cmpstr(digest, ==, cdigest);
-}
-
-static void
-test_sha256hash_empty_string(void) {
- test_sha256hash("",
- "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
-}
-
-static void
-test_sha256hash_a(void) {
- test_sha256hash("a",
- "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb");
-}
-
-static void
-test_sha256hash_abc(void) {
- test_sha256hash("abc",
- "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");
-}
-
-static void
-test_sha256hash_abcd_gibberish(void) {
- test_sha256hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
-}
-
-static void
-test_sha256hash_1000_as_1000_times(void) {
- test_sha256hash(NULL,
- "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");
-}
-
-gint
-main(gint argc, gchar **argv) {
- g_test_init(&argc, &argv, NULL);
-
- g_test_add_func("/hash/sha256/empty-string",
- test_sha256hash_empty_string);
- g_test_add_func("/hash/sha256/a",
- test_sha256hash_a);
- g_test_add_func("/hash/sha256/abc",
- test_sha256hash_abc);
- g_test_add_func("/hash/sha256/abcd_gibberish",
- test_sha256hash_abcd_gibberish);
- g_test_add_func("/hash/sha256/1000 a's 1000 times",
- test_sha256hash_1000_as_1000_times);
-
- return g_test_run();
-}
--- a/libpurple/tls-certificate-info.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/tls-certificate-info.c Sun Jun 04 18:13:19 2017 +0000
@@ -23,7 +23,6 @@
#include "internal.h"
#include "tls-certificate-info.h"
-#include "ciphers/sha1hash.h"
#include "debug.h"
#include "util.h"
@@ -789,7 +788,7 @@
GByteArray *
purple_tls_certificate_get_fingerprint_sha1(GTlsCertificate *certificate)
{
- PurpleHash *hash;
+ GChecksum *hash;
GByteArray *der = NULL;
guint8 *data = NULL;
gsize buf_size = 0;
@@ -800,16 +799,16 @@
g_return_val_if_fail(der != NULL, NULL);
- hash = purple_sha1_hash_new();
+ hash = g_checksum_new(G_CHECKSUM_SHA1);
- buf_size = purple_hash_get_digest_size(hash);
+ buf_size = g_checksum_type_get_length(G_CHECKSUM_SHA1);
data = g_malloc(buf_size);
- purple_hash_append(hash, der->data, der->len);
+ g_checksum_update(hash, der->data, der->len);
g_byte_array_unref(der);
- purple_hash_digest(hash, data, buf_size);
- g_object_unref(hash);
+ g_checksum_get_digest(hash, data, &buf_size);
+ g_checksum_free(hash);
return g_byte_array_new_take(data, buf_size);
}
--- a/libpurple/util.c Sun Jun 04 18:11:37 2017 +0000
+++ b/libpurple/util.c Sun Jun 04 18:13:19 2017 +0000
@@ -18,7 +18,6 @@
*/
#include "internal.h"
-#include "ciphers/md5hash.h"
#include "conversation.h"
#include "core.h"
#include "debug.h"
@@ -4808,9 +4807,8 @@
const gchar *nonce,
const gchar *client_nonce)
{
- PurpleHash *hasher;
- gchar hash[33]; /* We only support MD5. */
- gboolean digest_ok;
+ GChecksum *hasher;
+ gchar *hash;
g_return_val_if_fail(username != NULL, NULL);
g_return_val_if_fail(realm != NULL, NULL);
@@ -4823,18 +4821,19 @@
g_ascii_strcasecmp(algorithm, "MD5") ||
g_ascii_strcasecmp(algorithm, "MD5-sess"), NULL);
- hasher = purple_md5_hash_new();
- g_return_val_if_fail(hash != NULL, NULL);
-
- purple_hash_append(hasher, (guchar *)username, strlen(username));
- purple_hash_append(hasher, (guchar *)":", 1);
- purple_hash_append(hasher, (guchar *)realm, strlen(realm));
- purple_hash_append(hasher, (guchar *)":", 1);
- purple_hash_append(hasher, (guchar *)password, strlen(password));
+ hasher = g_checksum_new(G_CHECKSUM_MD5);
+ g_return_val_if_fail(hasher != NULL, NULL);
+
+ g_checksum_update(hasher, (guchar *)username, -1);
+ g_checksum_update(hasher, (guchar *)":", -1);
+ g_checksum_update(hasher, (guchar *)realm, -1);
+ g_checksum_update(hasher, (guchar *)":", -1);
+ g_checksum_update(hasher, (guchar *)password, -1);
if (algorithm != NULL && !g_ascii_strcasecmp(algorithm, "MD5-sess"))
{
guchar digest[16];
+ gsize digest_len = 16;
if (client_nonce == NULL)
{
@@ -4843,22 +4842,20 @@
return NULL;
}
- purple_hash_digest(hasher, digest, sizeof(digest));
-
- purple_hash_reset(hasher);
- purple_hash_append(hasher, digest, sizeof(digest));
- purple_hash_append(hasher, (guchar *)":", 1);
- purple_hash_append(hasher, (guchar *)nonce, strlen(nonce));
- purple_hash_append(hasher, (guchar *)":", 1);
- purple_hash_append(hasher, (guchar *)client_nonce, strlen(client_nonce));
+ g_checksum_get_digest(hasher, digest, &digest_len);
+
+ g_checksum_reset(hasher);
+ g_checksum_update(hasher, digest, sizeof(digest));
+ g_checksum_update(hasher, (guchar *)":", -1);
+ g_checksum_update(hasher, (guchar *)nonce, -1);
+ g_checksum_update(hasher, (guchar *)":", -1);
+ g_checksum_update(hasher, (guchar *)client_nonce, -1);
}
- digest_ok = purple_hash_digest_to_str(hasher, hash, sizeof(hash));
- g_object_unref(hasher);
-
- g_return_val_if_fail(digest_ok, NULL);
-
- return g_strdup(hash);
+ hash = g_strdup(g_checksum_get_string(hasher));
+ g_checksum_free(hasher);
+
+ return hash;
}
gchar *purple_http_digest_calculate_response(
@@ -4872,9 +4869,8 @@
const gchar *client_nonce,
const gchar *session_key)
{
- PurpleHash *hash;
- static gchar hash2[33]; /* We only support MD5. */
- gboolean digest_ok;
+ GChecksum *hash;
+ gchar *hash2;
g_return_val_if_fail(method != NULL, NULL);
g_return_val_if_fail(digest_uri != NULL, NULL);
@@ -4893,85 +4889,83 @@
g_ascii_strcasecmp(qop, "auth") ||
g_ascii_strcasecmp(qop, "auth-int"), NULL);
- hash = purple_md5_hash_new();
+ hash = g_checksum_new(G_CHECKSUM_MD5);
g_return_val_if_fail(hash != NULL, NULL);
- purple_hash_append(hash, (guchar *)method, strlen(method));
- purple_hash_append(hash, (guchar *)":", 1);
- purple_hash_append(hash, (guchar *)digest_uri, strlen(digest_uri));
+ g_checksum_update(hash, (guchar *)method, -1);
+ g_checksum_update(hash, (guchar *)":", -1);
+ g_checksum_update(hash, (guchar *)digest_uri, -1);
if (qop != NULL && !g_ascii_strcasecmp(qop, "auth-int"))
{
- PurpleHash *hash2;
- gchar entity_hash[33];
+ gchar *entity_hash;
if (entity == NULL)
{
- g_object_unref(hash);
+ g_checksum_free(hash);
purple_debug_error("hash", "Required entity missing for auth-int digest calculation.\n");
return NULL;
}
- hash2 = purple_md5_hash_new();
- purple_hash_append(hash2, (guchar *)entity, strlen(entity));
- digest_ok = purple_hash_digest_to_str(hash2, entity_hash, sizeof(entity_hash));
- g_object_unref(hash2);
-
- if (!digest_ok) {
- g_object_unref(hash);
+ entity_hash = g_compute_checksum_for_string(G_CHECKSUM_MD5,
+ entity, -1);
+
+ if (entity_hash == NULL) {
+ g_checksum_free(hash);
g_return_val_if_reached(NULL);
}
- purple_hash_append(hash, (guchar *)":", 1);
- purple_hash_append(hash, (guchar *)entity_hash, strlen(entity_hash));
+ g_checksum_update(hash, (guchar *)":", -1);
+ g_checksum_update(hash, (guchar *)entity_hash, -1);
+ g_free(entity_hash);
}
- digest_ok = purple_hash_digest_to_str(hash, hash2, sizeof(hash2));
- purple_hash_reset(hash);
-
- if (!digest_ok) {
- g_object_unref(hash);
+ hash2 = g_strdup(g_checksum_get_string(hash));
+ g_checksum_reset(hash);
+
+ if (hash2 == NULL) {
+ g_checksum_free(hash);
g_return_val_if_reached(NULL);
}
- purple_hash_append(hash, (guchar *)session_key, strlen(session_key));
- purple_hash_append(hash, (guchar *)":", 1);
- purple_hash_append(hash, (guchar *)nonce, strlen(nonce));
- purple_hash_append(hash, (guchar *)":", 1);
+ g_checksum_update(hash, (guchar *)session_key, -1);
+ g_checksum_update(hash, (guchar *)":", -1);
+ g_checksum_update(hash, (guchar *)nonce, -1);
+ g_checksum_update(hash, (guchar *)":", -1);
if (qop != NULL && *qop != '\0')
{
if (nonce_count == NULL)
{
- g_object_unref(hash);
+ g_checksum_free(hash);
purple_debug_error("hash", "Required nonce_count missing for digest calculation.\n");
return NULL;
}
if (client_nonce == NULL)
{
- g_object_unref(hash);
+ g_checksum_free(hash);
purple_debug_error("hash", "Required client_nonce missing for digest calculation.\n");
return NULL;
}
- purple_hash_append(hash, (guchar *)nonce_count, strlen(nonce_count));
- purple_hash_append(hash, (guchar *)":", 1);
- purple_hash_append(hash, (guchar *)client_nonce, strlen(client_nonce));
- purple_hash_append(hash, (guchar *)":", 1);
-
- purple_hash_append(hash, (guchar *)qop, strlen(qop));
-
- purple_hash_append(hash, (guchar *)":", 1);
+ g_checksum_update(hash, (guchar *)nonce_count, -1);
+ g_checksum_update(hash, (guchar *)":", -1);
+ g_checksum_update(hash, (guchar *)client_nonce, -1);
+ g_checksum_update(hash, (guchar *)":", -1);
+
+ g_checksum_update(hash, (guchar *)qop, -1);
+
+ g_checksum_update(hash, (guchar *)":", -1);
}
- purple_hash_append(hash, (guchar *)hash2, strlen(hash2));
- digest_ok = purple_hash_digest_to_str(hash, hash2, sizeof(hash2));
- g_object_unref(hash);
-
- g_return_val_if_fail(digest_ok, NULL);
-
- return g_strdup(hash2);
+ g_checksum_update(hash, (guchar *)hash2, -1);
+ g_free(hash2);
+
+ hash2 = g_strdup(g_checksum_get_string(hash));
+ g_checksum_free(hash);
+
+ return hash2;
}
int