libpurple/ciphers/gchecksum.c

changeset 33909
773899cbd05a
parent 33908
78b42fd69e02
child 33910
5749f2724b12
--- a/libpurple/ciphers/gchecksum.c	Sun May 05 13:15:07 2013 +0200
+++ b/libpurple/ciphers/gchecksum.c	Sun May 05 14:59:11 2013 +0200
@@ -53,23 +53,24 @@
 
 static gboolean
 purple_g_checksum_digest(PurpleCipherContext *context, GChecksumType type,
-                         gsize len, guchar *digest, gsize *out_len)
+                         guchar *digest, size_t buff_len)
 {
     GChecksum *checksum;
-    const gssize required_length = g_checksum_type_get_length(type);
+    const gssize required_len = g_checksum_type_get_length(type);
+    gsize digest_len = buff_len;
 
     checksum = purple_cipher_context_get_data(context);
 
-    g_return_val_if_fail(len >= required_length, FALSE);
+    g_return_val_if_fail(buff_len >= required_len, FALSE);
     g_return_val_if_fail(checksum != NULL, FALSE);
 
-    g_checksum_get_digest(checksum, digest, &len);
+    g_checksum_get_digest(checksum, digest, &digest_len);
+
+    if (digest_len != required_len)
+        return FALSE;
 
     purple_cipher_context_reset(context, NULL);
 
-    if (out_len)
-        *out_len = len;
-
     return TRUE;
 }
 
@@ -93,11 +94,16 @@
 	} \
 	\
 	static gboolean \
-	lower##_digest(PurpleCipherContext *context, gsize in_len, \
-	                 guchar digest[], size_t *out_len) \
+	lower##_digest(PurpleCipherContext *context, guchar digest[], \
+		size_t len) \
 	{ \
-		return purple_g_checksum_digest(context, (type), in_len, digest, \
-		                                out_len); \
+		return purple_g_checksum_digest(context, (type), digest, len); \
+	} \
+	\
+	static size_t \
+	lower##_get_digest_size(PurpleCipherContext *context) \
+	{ \
+		return g_checksum_type_get_length((type)); \
 	} \
 	\
 	static PurpleCipherOps camel##Ops = { \
@@ -109,6 +115,7 @@
 		NULL,                     /* set iv */           \
 		purple_g_checksum_append, /* append */           \
 		lower##_digest,           /* digest */           \
+		lower##_get_digest_size,  /* get digest size */  \
 		NULL,                     /* encrypt */          \
 		NULL,                     /* decrypt */          \
 		NULL,                     /* set salt */         \

mercurial