diff src/protocols/qq/crypt.c @ 14021:ef8490f9e823

[gaim-migrate @ 16618] Replaced all C++-style comments with C-style ones. Cleaned up some comments and implemented a more consistent formatting scheme. committer: Tailor Script <tailor@pidgin.im>
author Mark Huetsch <markhuetsch>
date Wed, 02 Aug 2006 15:35:36 +0000
parents 96947ec79828
children
line wrap: on
line diff
--- a/src/protocols/qq/crypt.c	Wed Aug 02 13:37:13 2006 +0000
+++ b/src/protocols/qq/crypt.c	Wed Aug 02 15:35:36 2006 +0000
@@ -26,8 +26,6 @@
  * Puzzlebird, Nov-Dec 2002
  */
 
-// START OF FILE
-/*****************************************************************************/
 /*Notes: (OICQ uses 0x10 iterations, and modified something...)
 
 IN : 64  bits of data in v[0] - v[1].
@@ -45,12 +43,13 @@
 #include <string.h>
 
 #include "crypt.h"
-#include "debug.h"              // gaim_debug
+#include "debug.h"
 
 /********************************************************************
  * encryption 
  *******************************************************************/
 
+/* TODO: convert these data types to proper glib ones */
 static void qq_encipher(unsigned long *const v, const unsigned long *const k, unsigned long *const w)
 {
 	register unsigned long y = ntohl(v[0]), 
@@ -73,15 +72,15 @@
 	w[1] = htonl(z);
 }
 
-static int rand(void) {	// it can be the real random seed function
+static int rand(void) {	/* it can be the real random seed function */
 	return 0xdead;
-}			// override with number, convenient for debug
+}			/* override with number, convenient for debug */
 
-// we encrypt every eight byte chunk
+/* we encrypt every eight byte block */
 static void encrypt_every_8_byte(unsigned char *plain, unsigned char *plain_pre_8, unsigned char **crypted, 
 		unsigned char **crypted_pre_8, unsigned char *key, int *count, int *pos_in_byte, int *is_header) 
 {
-	// prepare plain text
+	/* prepare plain text */
 	for (*pos_in_byte = 0; *pos_in_byte < 8; (*pos_in_byte)++) {
 		if (*is_header) {
 			plain[*pos_in_byte] ^= plain_pre_8[*pos_in_byte];
@@ -89,34 +88,36 @@
 			plain[*pos_in_byte] ^= (*crypted_pre_8)[*pos_in_byte];
 		}
 	}
-	qq_encipher((unsigned long *) plain, (unsigned long *) key, (unsigned long *) *crypted);	// encrypt it
+	/* encrypt it */
+	qq_encipher((unsigned long *) plain, (unsigned long *) key, (unsigned long *) *crypted);
 
 	for (*pos_in_byte = 0; *pos_in_byte < 8; (*pos_in_byte)++) {
 		(*crypted)[*pos_in_byte] ^= plain_pre_8[*pos_in_byte];
 	}
-	memcpy(plain_pre_8, plain, 8);	// prepare next
+	memcpy(plain_pre_8, plain, 8);	/* prepare next */
 
-	*crypted_pre_8 = *crypted;	// store position of previous 8 byte
-	*crypted += 8;			// prepare next output
-	*count += 8;			// outstrlen increase by 8
-	*pos_in_byte = 0;		// back to start
-	*is_header = 0;			// and exit header
-}					// encrypt_every_8_byte
+	*crypted_pre_8 = *crypted;	/* store position of previous 8 byte */
+	*crypted += 8;			/* prepare next output */
+	*count += 8;			/* outstrlen increase by 8 */
+	*pos_in_byte = 0;		/* back to start */
+	*is_header = 0;			/* and exit header */
+}					/* encrypt_every_8_byte */
 
 
-static void qq_encrypt(unsigned char *instr, int instrlen, unsigned char *key, unsigned char *outstr, int *outstrlen_prt)
+static void qq_encrypt(unsigned char *instr, int instrlen, unsigned char *key, 
+		unsigned char *outstr, int *outstrlen_prt)
 {
-	unsigned char plain[8],		// plain text buffer
-		plain_pre_8[8],		// plain text buffer, previous 8 bytes
-		*crypted,		// crypted text
-		*crypted_pre_8,		// crypted test, previous 8 bytes
-		*inp;			// current position in instr
-	int pos_in_byte = 1,		// loop in the byte 
-		is_header = 1,		// header is one byte
-		count = 0,		// number of bytes being crypted
-		padding = 0;		// number of padding stuff
+	unsigned char plain[8],		/* plain text buffer */
+		plain_pre_8[8],		/* plain text buffer, previous 8 bytes */
+		*crypted,		/* crypted text */
+		*crypted_pre_8,		/* crypted test, previous 8 bytes */
+		*inp;			/* current position in instr */
+	int pos_in_byte = 1,		/* loop in the byte */
+		is_header = 1,		/* header is one byte */
+		count = 0,		/* number of bytes being crypted */
+		padding = 0;		/* number of padding stuff */
 
-	pos_in_byte = (instrlen + 0x0a) % 8;	// header padding decided by instrlen
+	pos_in_byte = (instrlen + 0x0a) % 8;	/* header padding decided by instrlen */
 	if (pos_in_byte) {
 		pos_in_byte = 8 - pos_in_byte;
 	}
@@ -127,8 +128,8 @@
 
 	crypted = crypted_pre_8 = outstr;
 
-	padding = 1;		// pad some stuff in header
-	while (padding <= 2) {	// at most two bytes
+	padding = 1;		/* pad some stuff in header */
+	while (padding <= 2) {	/* at most two bytes */
 		if (pos_in_byte < 8) {
 			plain[pos_in_byte++] = rand() & 0xff;
 			padding++;
@@ -149,8 +150,8 @@
 		}
 	}
 
-	padding = 1;		// pad some stuff in tail
-	while (padding <= 7) {	// at most seven bytes
+	padding = 1;		/* pad some stuff in tail */
+	while (padding <= 7) {	/* at most seven bytes */
 		if (pos_in_byte < 8) {
 			plain[pos_in_byte++] = 0x00;
 			padding++;
@@ -177,7 +178,7 @@
 		c = ntohl(k[2]), 
 		d = ntohl(k[3]), 
 		n = 0x10, 
-		sum = 0xE3779B90,	// why this ? must be related with n value
+		sum = 0xE3779B90,	/* why this ? must be related with n value */
 		delta = 0x9E3779B9;
 
 	/* sum = delta<<5, in general sum = delta * n */
@@ -208,23 +209,24 @@
 	return 1;
 }
 
-// return 0 if failed, 1 otherwise
-static int qq_decrypt(unsigned char *instr, int instrlen, unsigned char *key, unsigned char *outstr, int *outstrlen_ptr)
+/* return 0 if failed, 1 otherwise */
+static int qq_decrypt(unsigned char *instr, int instrlen, unsigned char *key, 
+		unsigned char *outstr, int *outstrlen_ptr)
 {
 	unsigned char decrypted[8], m[8], *crypt_buff, *crypt_buff_pre_8, *outp;
 	int count, context_start, pos_in_byte, padding;
 
-	// at least 16 bytes and %8 == 0
+	/* at least 16 bytes and %8 == 0 */
 	if ((instrlen % 8) || (instrlen < 16)) { 
 		gaim_debug(GAIM_DEBUG_ERROR, "QQ", 
 			"Packet len is either too short or not a multiple of 8 bytes, read %d bytes\n", instrlen);
 		return 0;
 	}
-	// get information from header
+	/* get information from header */
 	qq_decipher((unsigned long *) instr, (unsigned long *) key, (unsigned long *) decrypted);
 	pos_in_byte = decrypted[0] & 0x7;
-	count = instrlen - pos_in_byte - 10;	// this is the plaintext length
-	// return if outstr buffer is not large enough or error plaintext length
+	count = instrlen - pos_in_byte - 10;	/* this is the plaintext length */
+	/* return if outstr buffer is not large enough or error plaintext length */
 	if (*outstrlen_ptr < count || count < 0) {
 		gaim_debug(GAIM_DEBUG_ERROR, "QQ", "Buffer len %d is less than real len %d", *outstrlen_ptr, count);
 		return 0;
@@ -232,15 +234,15 @@
 
 	memset(m, 0, 8);
 	crypt_buff_pre_8 = m;
-	*outstrlen_ptr = count;	// everything is ok! set return string length
+	*outstrlen_ptr = count;	/* everything is ok! set return string length */
 
-	crypt_buff = instr + 8;	// address of real data start 
-	context_start = 8;	// context is at the second chunk of 8 bytes
-	pos_in_byte++;		// start of paddng stuff
+	crypt_buff = instr + 8;	/* address of real data start */
+	context_start = 8;	/* context is at the second block of 8 bytes */
+	pos_in_byte++;		/* start of paddng stuff */
 
-	padding = 1;		// at least one in header
-	while (padding <= 2) {	// there are 2 byte padding stuff in header
-		if (pos_in_byte < 8) {	// bypass the padding stuff, it's nonsense data
+	padding = 1;		/* at least one in header */
+	while (padding <= 2) {	/* there are 2 byte padding stuff in header */
+		if (pos_in_byte < 8) {	/* bypass the padding stuff, it's nonsense data */
 			pos_in_byte++;
 			padding++;
 		}
@@ -287,9 +289,8 @@
 	return 1;
 }
 
-/*****************************************************************************/
 /* This is the Public Function */
-// return 1 is succeed, otherwise return 0
+/* return 1 is succeed, otherwise return 0 */
 int qq_crypt(unsigned char flag,
 	     unsigned char *instr, int instrlen, unsigned char *key, unsigned char *outstr, int *outstrlen_ptr)
 {
@@ -297,9 +298,8 @@
 		return qq_decrypt(instr, instrlen, key, outstr, outstrlen_ptr);
 	else if (flag == ENCRYPT)
 		qq_encrypt(instr, instrlen, key, outstr, outstrlen_ptr);
+	else 
+		return 0;
 
-	return 1;		// flag must be DECRYPT or ENCRYPT
+	return 1;
 }
-
-/*****************************************************************************/
-// END OF FILE