msn: Port to use GChecksum instead of PurpleHash

Wed, 28 Sep 2016 15:46:07 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Wed, 28 Sep 2016 15:46:07 -0500
changeset 38328
722f62a4b0c2
parent 38327
c842a56b9967
child 38329
c55d7f3c3ddb

msn: Port to use GChecksum instead of PurpleHash

libpurple/protocols/msn/directconn.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/msnutils.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/nexus.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/notification.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/object.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/msn/directconn.c	Thu Sep 29 20:09:55 2016 -0500
+++ b/libpurple/protocols/msn/directconn.c	Wed Sep 28 15:46:07 2016 -0500
@@ -23,7 +23,6 @@
  */
 
 #include "internal.h"
-#include "ciphers/sha1hash.h"
 #include "debug.h"
 
 #include "msn.h"
@@ -44,10 +43,11 @@
 	guchar digest[20];
 
 	if (type == DC_NONCE_SHA1) {
-		PurpleHash *hash = purple_sha1_hash_new();
-		purple_hash_append(hash, nonce, nonce_len);
-		purple_hash_digest(hash, digest, sizeof(digest));
-		g_object_unref(hash);
+		GChecksum *hash = g_checksum_new(G_CHECKSUM_SHA1);
+		gsize digest_len = 20;
+		g_checksum_update(hash, nonce, nonce_len);
+		g_checksum_get_digest(hash, digest, &digest_len);
+		g_checksum_free(hash);
 	} else if (type == DC_NONCE_PLAIN) {
 		memcpy(digest, nonce, nonce_len);
 	} else {
--- a/libpurple/protocols/msn/msnutils.c	Thu Sep 29 20:09:55 2016 -0500
+++ b/libpurple/protocols/msn/msnutils.c	Wed Sep 28 15:46:07 2016 -0500
@@ -27,8 +27,6 @@
 #include "msn.h"
 #include "msnutils.h"
 
-#include "ciphers/md5hash.h"
-
 /**************************************************************************
  * Util
  **************************************************************************/
@@ -542,12 +540,13 @@
 void
 msn_handle_chl(char *input, char *output)
 {
-	PurpleHash *hash;
+	GChecksum *hash;
 	const guchar productKey[] = MSNP15_WLM_PRODUCT_KEY;
 	const guchar productID[]  = MSNP15_WLM_PRODUCT_ID;
 	const char hexChars[]     = "0123456789abcdef";
 	char buf[BUFSIZE];
 	guint32 md5Parts[4];
+	gsize digest_len = sizeof(md5Parts);
 	unsigned char *newHash;
 	guint32 chlStringParts[BUFSIZE / sizeof(guint32)];
 	unsigned int newHashParts[5];
@@ -557,13 +556,13 @@
 	int len;
 	int i;
 
-	/* Create the MD5 hash by using Purple MD5 algorithm */
-	hash = purple_md5_hash_new();
+	/* Create the MD5 hash by using GLib's MD5 algorithm */
+	hash = g_checksum_new(G_CHECKSUM_MD5);
 
-	purple_hash_append(hash, (guchar *)input, strlen(input));
-	purple_hash_append(hash, productKey, sizeof(productKey) - 1);
-	purple_hash_digest(hash, (guchar *)md5Parts, sizeof(md5Parts));
-	g_object_unref(hash);
+	g_checksum_update(hash, (guchar *)input, -1);
+	g_checksum_update(hash, productKey, sizeof(productKey) - 1);
+	g_checksum_get_digest(hash, (guchar *)md5Parts, &digest_len);
+	g_checksum_free(hash);
 
 	/* Split it into four integers */
 	for (i = 0; i < 4; i++) {
--- a/libpurple/protocols/msn/nexus.c	Thu Sep 29 20:09:55 2016 -0500
+++ b/libpurple/protocols/msn/nexus.c	Wed Sep 28 15:46:07 2016 -0500
@@ -31,7 +31,6 @@
 #include "notification.h"
 
 #include "ciphers/des3cipher.h"
-#include "ciphers/sha1hash.h"
 
 /**************************************************************************
  * Valid Ticket Tokens
@@ -510,7 +509,7 @@
 	MsnSession *session = nexus->session;
 	MsnNexusUpdateData *ud;
 	MsnNexusUpdateCallback *update;
-	PurpleHash *sha1;
+	GChecksum *sha1;
 	GHmac *hmac;
 
 	char *key;
@@ -562,7 +561,7 @@
 	ud->nexus = nexus;
 	ud->id = id;
 
-	sha1 = purple_sha1_hash_new();
+	sha1 = g_checksum_new(G_CHECKSUM_SHA1);
 
 	domain = g_strdup_printf(MSN_SSO_RST_TEMPLATE,
 	                         id,
@@ -570,8 +569,8 @@
 	                         ticket_domains[id][SSO_VALID_TICKET_POLICY] != NULL ?
 	                             ticket_domains[id][SSO_VALID_TICKET_POLICY] :
 	                             nexus->policy);
-	purple_hash_append(sha1, (guchar *)domain, strlen(domain));
-	purple_hash_digest(sha1, digest, 20);
+	g_checksum_update(sha1, (guchar *)domain, -1);
+	g_checksum_get_digest(sha1, digest, &digest_len);
 	domain_b64 = purple_base64_encode(digest, 20);
 
 	now = time(NULL);
@@ -582,13 +581,13 @@
 	timestamp = g_strdup_printf(MSN_SSO_TIMESTAMP_TEMPLATE,
 	                            now_str,
 	                            purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", tm));
-	purple_hash_reset(sha1);
-	purple_hash_append(sha1, (guchar *)timestamp, strlen(timestamp));
-	purple_hash_digest(sha1, digest, 20);
+	g_checksum_reset(sha1);
+	g_checksum_update(sha1, (guchar *)timestamp, -1);
+	g_checksum_get_digest(sha1, digest, &digest_len);
 	timestamp_b64 = purple_base64_encode(digest, 20);
 	g_free(now_str);
 
-	g_object_unref(sha1);
+	g_checksum_free(sha1);
 
 	signedinfo = g_strdup_printf(MSN_SSO_SIGNEDINFO_TEMPLATE,
 	                             id,
--- a/libpurple/protocols/msn/notification.c	Thu Sep 29 20:09:55 2016 -0500
+++ b/libpurple/protocols/msn/notification.c	Wed Sep 28 15:46:07 2016 -0500
@@ -23,7 +23,6 @@
  */
 
 #include "internal.h"
-#include "ciphers/md5hash.h"
 #include "core.h"
 #include "debug.h"
 
@@ -1408,10 +1407,8 @@
 	PurpleAccount *account;
 	const char *rru;
 	const char *url;
-	PurpleHash *hash;
-	gchar creds[33];
+	gchar *creds;
 	char *buf;
-	gboolean digest_ok;
 
 	gulong tmp_timestamp;
 
@@ -1430,13 +1427,10 @@
 	                      tmp_timestamp,
 	                      purple_connection_get_password(gc));
 
-	hash = purple_md5_hash_new();
-	purple_hash_append(hash, (const guchar *)buf, strlen(buf));
-	digest_ok = purple_hash_digest_to_str(hash, creds, sizeof(creds));
-	g_object_unref(hash);
+	creds = g_compute_checksum_for_string(G_CHECKSUM_MD5, buf, -1);
 	g_free(buf);
 
-	g_return_if_fail(digest_ok);
+	g_return_if_fail(creds != NULL);
 
 	g_free(session->passport_info.mail_url);
 	session->passport_info.mail_url =
@@ -1449,6 +1443,8 @@
 		                session->passport_info.sid,
 		                rru);
 
+	g_free(creds);
+
 	/* The user wants to check his or her email */
 	if (cmd->trans && cmd->trans->data)
 		purple_notify_uri(purple_account_get_connection(account), session->passport_info.mail_url);
--- a/libpurple/protocols/msn/object.c	Thu Sep 29 20:09:55 2016 -0500
+++ b/libpurple/protocols/msn/object.c	Wed Sep 28 15:46:07 2016 -0500
@@ -25,8 +25,6 @@
 #include "msn.h"
 #include "object.h"
 #include "debug.h"
-/* Sha1 stuff */
-#include "ciphers/sha1hash.h"
 /* Base64 stuff */
 #include "util.h"
 
@@ -129,12 +127,13 @@
 {
 	MsnObject *msnobj;
 
-	PurpleHash *hash;
+	GChecksum *hash;
 	char *buf;
 	gconstpointer data;
 	size_t size;
 	char *base64;
 	unsigned char digest[20];
+	gsize digest_len = 20;
 
 	msnobj = NULL;
 
@@ -156,11 +155,11 @@
 	/* Compute the SHA1D field. */
 	memset(digest, 0, sizeof(digest));
 
-	hash = purple_sha1_hash_new();
-	purple_hash_append(hash, data, size);
-	purple_hash_digest(hash, digest, sizeof(digest));
+	hash = g_checksum_new(G_CHECKSUM_SHA1);
+	g_checksum_update(hash, data, size);
+	g_checksum_get_digest(hash, digest, &digest_len);
 
-	base64 = purple_base64_encode(digest, sizeof(digest));
+	base64 = purple_base64_encode(digest, digest_len);
 	msn_object_set_sha1d(msnobj, base64);
 	g_free(base64);
 
@@ -178,10 +177,10 @@
 
 	memset(digest, 0, sizeof(digest));
 
-	purple_hash_reset(hash);
-	purple_hash_append(hash, (const guchar *)buf, strlen(buf));
-	purple_hash_digest(hash, digest, sizeof(digest));
-	g_object_unref(hash);
+	g_checksum_reset(hash);
+	g_checksum_update(hash, (const guchar *)buf, -1);
+	g_checksum_get_digest(hash, digest, &digest_len);
+	g_checksum_free(hash);
 	g_free(buf);
 
 	base64 = purple_base64_encode(digest, sizeof(digest));

mercurial