Wed, 28 Sep 2016 15:46:07 -0500
msn: Port to use GChecksum instead of PurpleHash
--- 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));