Difference between revisions of "Cryptography"

From GTAMods Wiki
Jump to navigation Jump to search
(Legal Issues)
(External links)
Line 82: Line 82:
 
* [[Wikipedia:CRC32|CRC32]]
 
* [[Wikipedia:CRC32|CRC32]]
 
* [[Wikipedia:Hash_table#Choosing_a_good_hash_function|Jenkins One-at-a-time Hash]]
 
* [[Wikipedia:Hash_table#Choosing_a_good_hash_function|Jenkins One-at-a-time Hash]]
* [[Wikipedia:Advanced_Encryption_Standard|AES Encryption]]
 
  
 
{{GTA4-navi}}
 
{{GTA4-navi}}

Revision as of 00:05, 17 February 2011

This article explains the cryptography present in GTA IV.

Hashing Algorithms

GTA IV relies on many different hash algorithms work its operation, each for a different purpose. GTA IV's new usage of hashing has allowed it to explore a more binary focused way of hiding data in files, and strings away from plain site.

SHA1

The SHA1 hashing algorithm is used when comparing the files in versions 1.0 and 1.0.1. This check was later removed in 1.0.2.

This section is incomplete. You can help by fixing and expanding it.

CRC32

The Cyclic Redundancy Check 32 bit hashing algorithm is used in the GXT file to match text codes with their counterparts. A C++ implementation of GTA IV's CRC32 hashing algorithm can be displayed as follows:

unsigned int CRC32(char* text)
{
	size_t textLen = strlen(text);
	int i = 0;
	unsigned int retHash = 0;
	if(text[0] == '"')
		i = 1;
	for(i;i<textLen;i++)
	{
		char ctext = text[i];
		if(ctext == '"')
			break;
		if(ctext - 65 > 25)
		{
			if(ctext == '\\')
				ctext = '/';
		}
		else ctext += 32;
		retHash = (1025 * (retHash + ctext) >> 6) ^ 1025 * (retHash + ctext);
	}
	return 32769 * (9 * retHash ^ (9 * retHash >> 11));
}

As you can see it differs from most common hashing algorithms in the way it handles text (by not including " or \ characters). Also usually entry name strings in GXT text archives are stored in upper case, so it may be useful to convert them before creating the hash.

One At A Time Hash

The One At A Time hashing function was originally created by Bob Jenkins. A C++ implementation can be found here and at Wikipedia.

unsigned int oneAtATimeHash(char* inpStr)
{
	unsigned int value = 0,temp = 0;
	for(size_t i=0;i<strlen(inpStr);i++)
	{
		char ctext = tolower(inpStr[i]);
		temp = hashchr;
		temp += value;
		value = temp << 10;
		temp += value;
		value = temp >> 6;
		value ^= temp;
	}
	temp = value << 3;
	temp += value;
	unsigned int temp2 = temp >> 11;
	temp = temp2 ^ temp;
	temp2 = temp << 15;
	value = temp2 + temp;
	if(value < 2) value += 2;
	return value;
}

Encryption Algorithms

Legal Issues

[1] Since the United States complying with WIPO treaties, they created the Digital Millenium Copyright Act in order to bring their copyright laws up to date in the emerging digital world. A key point in this act is the Anti-cirumvention clauses which tell us that it is against the law to break copyright protection mechanisms (even if it is for legal purposes). The MPAA have used this power in the past to sue the makers of De-CSS (The copy protection scheme used in early DVD's). This doesn't only apply to people in the United States though, plenty of other countries have made their own legislation to the same effect, and many others have signed Free Trade Agreements with the United States that shoehorn the necessary DMCA provisions into the countries own legislation. Countries that have taken part in Free Trade Agreements include Australia, South Korea and The United Kingdom.

Although other laws contradict this. For example in most countries reverse engineering for the purpose of interoperability (what most people who use the key try to achieve) transcends the anti-circumvention measures proposed by the DMCA. Although the legal issue still remains unclear most modders and site owners choose to be on the side of caution.

External links

Links to detailed explanations of the several hash and encryption algorithms on wikipedia: