diff options
author | pixel <pixel> | 2008-01-29 10:13:13 +0000 |
---|---|---|
committer | pixel <pixel> | 2008-01-29 10:13:13 +0000 |
commit | aeb420d9f20f0973d428b5de0bd19f83c684bf54 (patch) | |
tree | bf9119050b3510bb12fc77fcfc5ed59ab6ab900b /MPQCryptography.c | |
parent | 6d8020e380791e063a70b3802fed2b72de7dcdec (diff) |
Smoothing up win32 fixes.
Diffstat (limited to 'MPQCryptography.c')
-rw-r--r-- | MPQCryptography.c | 101 |
1 files changed, 4 insertions, 97 deletions
diff --git a/MPQCryptography.c b/MPQCryptography.c index 6c33e55..e18e279 100644 --- a/MPQCryptography.c +++ b/MPQCryptography.c @@ -9,48 +9,21 @@ /* * Ripped for mpqlib - all endinaness stuff has been killed. + * Also, all the unnecessary code has been ripped out. * Other than that, this is the exact same code. */ #include <assert.h> #include <string.h> -#include <zlib.h> - -#ifdef USE_SSL -#include <openssl/err.h> -#include <openssl/evp.h> -#include <openssl/md5.h> -#include <openssl/obj_mac.h> -#include <openssl/sha.h> -#endif #include "MPQCryptography.h" -#ifdef WIN32 -#include "stdint.h" -#else -#include "inttypes.h" -#endif - static int crypt_table_initialized = 0; static uint32_t crypt_table[0x500]; /****TODO****/ /* Re-implement various endianess fixes. */ -#ifdef USE_SSL -static void memrev(unsigned char *buf, size_t count) -{ - unsigned char *r; - - for (r = buf + count - 1; buf < r; buf++, r--) { - *buf ^= *r; - *r ^= *buf; - *buf ^= *r; - } -} -#endif - const uint32_t *__mpqlib_get_cryptography_table() { assert(crypt_table_initialized); @@ -82,18 +55,11 @@ void __mpqlib_init_cryptography() } } } - // Load up OpenSSL -#ifdef USE_SSL - OpenSSL_add_all_digests(); - OpenSSL_add_all_algorithms(); - OpenSSL_add_all_ciphers(); - ERR_load_crypto_strings(); -#endif } -void __mpqlib_encrypt(void *_data, uint32_t length, uint32_t key, bool disable_input_swapping) +void __mpqlib_encrypt(void *_data, uint32_t length, uint32_t key, char disable_input_swapping) { - char * data = (char *) _data; + char * data = (char *) _data; uint32_t *buffer32 = (uint32_t *) data; uint32_t seed = 0xEEEEEEEE; uint32_t ch; @@ -128,7 +94,7 @@ void __mpqlib_encrypt(void *_data, uint32_t length, uint32_t key, bool disable_i } } -void __mpqlib_decrypt(void *_data, uint32_t length, uint32_t key, bool disable_output_swapping) +void __mpqlib_decrypt(void *_data, uint32_t length, uint32_t key, char disable_output_swapping) { char * data = (char *) _data; uint32_t *buffer32 = (uint32_t *) data; @@ -211,62 +177,3 @@ uint32_t __mpqlib_hash_data(const char *data, uint32_t length, uint32_t type) return seed1; } - -void __mpqlib_crc32(const unsigned char *buffer, uint32_t length, uint32_t * crc, uint32_t flags) -{ - uint32_t local_crc = 0; - const uint32_t *crc_table = (uint32_t *) get_crc_table(); - const unsigned char *buffer_end = buffer + length; - - if (crc) - local_crc = *crc; - if (flags & __MPQLIB_CRC_INIT) - local_crc = 0xFFFFFFFF; - - if (flags & __MPQLIB_CRC_UPDATE) { - while (buffer < buffer_end) { - local_crc = ((local_crc >> 8) & 0x00FFFFFF) ^ crc_table[(local_crc ^ *buffer) & 0xFF]; - buffer++; - } - } - - if (flags & __MPQLIB_CRC_FINALIZE) - local_crc = local_crc ^ 0xFFFFFFFF; - if (crc) - *crc = local_crc; -} - -#ifdef USE_SSL -int __mpqlib_verify_weak_signature(RSA * public_key, const unsigned char *signature, const unsigned char *digest) -{ - unsigned char reversed_signature[__MPQLIB_WEAK_SIGNATURE_SIZE]; - - memcpy(reversed_signature, signature + 8, __MPQLIB_WEAK_SIGNATURE_SIZE); - memrev(reversed_signature, __MPQLIB_WEAK_SIGNATURE_SIZE); - - return RSA_verify(NID_md5, digest, MD5_DIGEST_LENGTH, reversed_signature, __MPQLIB_WEAK_SIGNATURE_SIZE, public_key); -} - -int __mpqlib_verify_strong_signature(RSA * public_key, const unsigned char *signature, const unsigned char *digest) -{ - unsigned char reversed_signature[__MPQLIB_STRONG_SIGNATURE_SIZE]; - - memcpy(reversed_signature, signature + 4, __MPQLIB_STRONG_SIGNATURE_SIZE); - memrev(reversed_signature, __MPQLIB_STRONG_SIGNATURE_SIZE); - - unsigned char real_digest[__MPQLIB_STRONG_SIGNATURE_SIZE]; - - memset(real_digest, 0xbb, sizeof(real_digest)); - real_digest[0] = 0x0b; - - uint32_t digest_offset = sizeof(real_digest) - SHA_DIGEST_LENGTH; - - memcpy(real_digest + digest_offset, digest, SHA_DIGEST_LENGTH); - memrev(real_digest + digest_offset, SHA_DIGEST_LENGTH); - - RSA_public_decrypt(__MPQLIB_STRONG_SIGNATURE_SIZE, reversed_signature, reversed_signature, public_key, RSA_NO_PADDING); - unsigned long error = ERR_get_error(); - - return (!error && memcmp(reversed_signature, real_digest, __MPQLIB_STRONG_SIGNATURE_SIZE) == 0); -} -#endif |