Import of GameData MD5 hashing app.
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402298
This commit is contained in:
parent
e0a69507a0
commit
2fc7a017e1
74
tools/gamedata md5/Makefile
Normal file
74
tools/gamedata md5/Makefile
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# (C)2004-2008 SourceMod Development Team
|
||||||
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
|
#####################################
|
||||||
|
|
||||||
|
OBJECTS = main.cpp TextParsers.cpp sm_memtable.cpp md5.cpp
|
||||||
|
|
||||||
|
##############################################
|
||||||
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
|
##############################################
|
||||||
|
|
||||||
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
|
CPP = gcc-4.1
|
||||||
|
|
||||||
|
BINARY = gamedatamd5
|
||||||
|
|
||||||
|
INCLUDE += -I. -I../../public -I../../public/sourcepawn
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror \
|
||||||
|
-Wno-uninitialized -mfpmath=sse -msse -DHAVE_STDINT_H -DSM_DEFAULT_THREADER -m32
|
||||||
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
|
################################################
|
||||||
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
|
################################################
|
||||||
|
|
||||||
|
ifeq "$(DEBUG)" "true"
|
||||||
|
BIN_DIR = Debug
|
||||||
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
|
else
|
||||||
|
BIN_DIR = Release
|
||||||
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
OBJ_LINUX := $(OBJECTS:%vm_engine.cpp=$(BIN_DIR)/%vm_engine.o)
|
||||||
|
OBJ_LINUX := $(OBJ_LINUX:%.cpp=$(BIN_DIR)/%.o)
|
||||||
|
OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o)
|
||||||
|
|
||||||
|
$(BIN_DIR)/%vm_engine.o: %vm_engine.cpp
|
||||||
|
$(CPP) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
$(BIN_DIR)/%.o: %.c
|
||||||
|
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
all:
|
||||||
|
mkdir -p $(BIN_DIR)
|
||||||
|
$(MAKE) -f Makefile sourcemod
|
||||||
|
|
||||||
|
sourcemod: $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -lstdc++ -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
debug:
|
||||||
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BIN_DIR)/$(BINARY)
|
1082
tools/gamedata md5/TextParsers.cpp
Normal file
1082
tools/gamedata md5/TextParsers.cpp
Normal file
File diff suppressed because it is too large
Load Diff
87
tools/gamedata md5/TextParsers.h
Normal file
87
tools/gamedata md5/TextParsers.h
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_TEXTPARSERS_H_
|
||||||
|
|
||||||
|
#include "ITextParsers.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
using namespace SourceMod;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param void * IN: Stream pointer
|
||||||
|
* @param char * IN/OUT: Stream buffer
|
||||||
|
* @param size_t IN: Maximum size of buffer
|
||||||
|
* @param unsigned int * OUT: Number of bytes read (0 = end of stream)
|
||||||
|
* @return True on success, false on failure
|
||||||
|
*/
|
||||||
|
typedef bool (*STREAMREADER)(void *, char *, size_t, unsigned int *);
|
||||||
|
|
||||||
|
class TextParsers : public ITextParsers
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TextParsers();
|
||||||
|
public:
|
||||||
|
bool ParseFile_INI(const char *file,
|
||||||
|
ITextListener_INI *ini_listener,
|
||||||
|
unsigned int *line,
|
||||||
|
unsigned int *col);
|
||||||
|
|
||||||
|
SMCError ParseFile_SMC(const char *file,
|
||||||
|
ITextListener_SMC *smc_listener,
|
||||||
|
SMCStates *states);
|
||||||
|
|
||||||
|
SMCError ParseSMCFile(const char *file,
|
||||||
|
ITextListener_SMC *smc_listener,
|
||||||
|
SMCStates *states,
|
||||||
|
char *buffer,
|
||||||
|
size_t maxsize);
|
||||||
|
|
||||||
|
unsigned int GetUTF8CharBytes(const char *stream);
|
||||||
|
|
||||||
|
const char *GetSMCErrorString(SMCError err);
|
||||||
|
bool IsWhitespace(const char *stream);
|
||||||
|
private:
|
||||||
|
SMCError ParseString_SMC(const char *stream,
|
||||||
|
ITextListener_SMC *smc,
|
||||||
|
SMCStates *states);
|
||||||
|
SMCError ParseStream_SMC(void *stream,
|
||||||
|
STREAMREADER srdr,
|
||||||
|
ITextListener_SMC *smc,
|
||||||
|
SMCStates *states);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
extern TextParsers g_TextParser;
|
||||||
|
|
||||||
|
#endif //_INCLUDE_SOURCEMOD_TEXTPARSERS_H_
|
||||||
|
|
45
tools/gamedata md5/main.cpp
Normal file
45
tools/gamedata md5/main.cpp
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#include "main.h"
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
BuildMD5ableBuffer g_MD5Builder;
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
SMCStates states;
|
||||||
|
SMCError error;
|
||||||
|
|
||||||
|
if (argc < 2)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Usage: <file>\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = g_TextParser.ParseFile_SMC(argv[1], &g_MD5Builder, &states);
|
||||||
|
|
||||||
|
if (error == SMCError_Okay)
|
||||||
|
{
|
||||||
|
printf("MD5: %s\n", g_MD5Builder.GetMD5String());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "Failed to parse file, Error %i at line %i and col %i\n", error, states.line, states.col);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
size_t len = vsnprintf(buffer, maxlength, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
if (len >= maxlength)
|
||||||
|
{
|
||||||
|
buffer[maxlength - 1] = '\0';
|
||||||
|
return (maxlength - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
}
|
88
tools/gamedata md5/main.h
Normal file
88
tools/gamedata md5/main.h
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#ifndef _INCLUDE_GAMEDATAMD5_MAIN_H_
|
||||||
|
#define _INCLUDE_GAMEDATAMD5_MAIN_H_
|
||||||
|
|
||||||
|
#include "TextParsers.h"
|
||||||
|
#include "sm_memtable.h"
|
||||||
|
#include "md5.h"
|
||||||
|
|
||||||
|
using namespace SourceMod;
|
||||||
|
|
||||||
|
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...);
|
||||||
|
|
||||||
|
class BuildMD5ableBuffer : public ITextListener_SMC
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
BuildMD5ableBuffer()
|
||||||
|
{
|
||||||
|
stringTable = new BaseStringTable(2048);
|
||||||
|
md5[0] = 0;
|
||||||
|
md5String[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
~BuildMD5ableBuffer()
|
||||||
|
{
|
||||||
|
delete stringTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReadSMC_ParseStart()
|
||||||
|
{
|
||||||
|
checksum = MD5();
|
||||||
|
}
|
||||||
|
|
||||||
|
SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
|
||||||
|
{
|
||||||
|
stringTable->AddString(key);
|
||||||
|
stringTable->AddString(value);
|
||||||
|
|
||||||
|
return SMCResult_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name)
|
||||||
|
{
|
||||||
|
stringTable->AddString(name);
|
||||||
|
|
||||||
|
return SMCResult_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReadSMC_ParseEnd(bool halted, bool failed)
|
||||||
|
{
|
||||||
|
if (halted || failed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *data = stringTable->GetMemTable()->GetAddress(0);
|
||||||
|
|
||||||
|
if (data != NULL)
|
||||||
|
{
|
||||||
|
checksum.update((unsigned char *)data, stringTable->GetMemTable()->GetActualMemUsed());
|
||||||
|
}
|
||||||
|
|
||||||
|
checksum.finalize();
|
||||||
|
|
||||||
|
checksum.hex_digest(md5String);
|
||||||
|
checksum.raw_digest(md5);
|
||||||
|
|
||||||
|
stringTable->Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char * GetMD5()
|
||||||
|
{
|
||||||
|
return md5;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char * GetMD5String()
|
||||||
|
{
|
||||||
|
return (unsigned char *)&md5String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MD5 checksum;
|
||||||
|
unsigned char md5[16];
|
||||||
|
char md5String[33];
|
||||||
|
BaseStringTable *stringTable;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _INCLUDE_GAMEDATAMD5_MAIN_H_
|
485
tools/gamedata md5/md5.cpp
Normal file
485
tools/gamedata md5/md5.cpp
Normal file
@ -0,0 +1,485 @@
|
|||||||
|
// MD5.CC - source code for the C++/object oriented translation and
|
||||||
|
// modification of MD5.
|
||||||
|
|
||||||
|
// Translation and modification (c) 1995 by Mordechai T. Abzug
|
||||||
|
|
||||||
|
// This translation/ modification is provided "as is," without express or
|
||||||
|
// implied warranty of any kind.
|
||||||
|
|
||||||
|
// The translator/ modifier does not claim (1) that MD5 will do what you think
|
||||||
|
// it does; (2) that this translation/ modification is accurate; or (3) that
|
||||||
|
// this software is "merchantible." (Language for this disclaimer partially
|
||||||
|
// copied from the disclaimer below).
|
||||||
|
|
||||||
|
/* based on:
|
||||||
|
|
||||||
|
MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
|
||||||
|
MDDRIVER.C - test driver for MD2, MD4 and MD5
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||||
|
rights reserved.
|
||||||
|
|
||||||
|
License to copy and use this software is granted provided that it
|
||||||
|
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||||
|
Algorithm" in all material mentioning or referencing this software
|
||||||
|
or this function.
|
||||||
|
|
||||||
|
License is also granted to make and use derivative works provided
|
||||||
|
that such works are identified as "derived from the RSA Data
|
||||||
|
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||||
|
mentioning or referencing the derived work.
|
||||||
|
|
||||||
|
RSA Data Security, Inc. makes no representations concerning either
|
||||||
|
the merchantability of this software or the suitability of this
|
||||||
|
software for any particular purpose. It is provided "as is"
|
||||||
|
without express or implied warranty of any kind.
|
||||||
|
|
||||||
|
These notices must be retained in any copies of any part of this
|
||||||
|
documentation and/or software.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "md5.h"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
// MD5 simple initialization method
|
||||||
|
|
||||||
|
MD5::MD5(){
|
||||||
|
|
||||||
|
init();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MD5 block update operation. Continues an MD5 message-digest
|
||||||
|
// operation, processing another message block, and updating the
|
||||||
|
// context.
|
||||||
|
|
||||||
|
void MD5::update (uint1 *input, uint4 input_length) {
|
||||||
|
|
||||||
|
uint4 input_index, buffer_index;
|
||||||
|
uint4 buffer_space; // how much space is left in buffer
|
||||||
|
|
||||||
|
if (finalized){ // so we can't update!
|
||||||
|
/*cerr << "MD5::update: Can't update a finalized digest!" << endl;*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute number of bytes mod 64
|
||||||
|
buffer_index = (unsigned int)((count[0] >> 3) & 0x3F);
|
||||||
|
|
||||||
|
// Update number of bits
|
||||||
|
if ( (count[0] += ((uint4) input_length << 3))<((uint4) input_length << 3) )
|
||||||
|
count[1]++;
|
||||||
|
|
||||||
|
count[1] += ((uint4)input_length >> 29);
|
||||||
|
|
||||||
|
|
||||||
|
buffer_space = 64 - buffer_index; // how much space is left in buffer
|
||||||
|
|
||||||
|
// Transform as many times as possible.
|
||||||
|
if (input_length >= buffer_space) { // ie. we have enough to fill the buffer
|
||||||
|
// fill the rest of the buffer and transform
|
||||||
|
memcpy (buffer + buffer_index, input, buffer_space);
|
||||||
|
transform (buffer);
|
||||||
|
|
||||||
|
// now, transform each 64-byte piece of the input, bypassing the buffer
|
||||||
|
for (input_index = buffer_space; input_index + 63 < input_length;
|
||||||
|
input_index += 64)
|
||||||
|
transform (input+input_index);
|
||||||
|
|
||||||
|
buffer_index = 0; // so we can buffer remaining
|
||||||
|
}
|
||||||
|
else
|
||||||
|
input_index=0; // so we can buffer the whole input
|
||||||
|
|
||||||
|
|
||||||
|
// and here we do the buffering:
|
||||||
|
memcpy(buffer+buffer_index, input+input_index, input_length-input_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// MD5 update for files.
|
||||||
|
// Like above, except that it works on files (and uses above as a primitive.)
|
||||||
|
|
||||||
|
void MD5::update(FILE *file){
|
||||||
|
|
||||||
|
unsigned char buffer[1024];
|
||||||
|
int len;
|
||||||
|
|
||||||
|
while ((len=fread(buffer, 1, 1024, file)))
|
||||||
|
update(buffer, len);
|
||||||
|
|
||||||
|
fclose (file);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MD5 finalization. Ends an MD5 message-digest operation, writing the
|
||||||
|
// the message digest and zeroizing the context.
|
||||||
|
|
||||||
|
|
||||||
|
void MD5::finalize (){
|
||||||
|
|
||||||
|
unsigned char bits[8];
|
||||||
|
unsigned int index, padLen;
|
||||||
|
static uint1 PADDING[64]={
|
||||||
|
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
if (finalized){
|
||||||
|
/* cerr << "MD5::finalize: Already finalized this digest!" << endl;*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save number of bits
|
||||||
|
encode (bits, count, 8);
|
||||||
|
|
||||||
|
// Pad out to 56 mod 64.
|
||||||
|
index = (uint4) ((count[0] >> 3) & 0x3f);
|
||||||
|
padLen = (index < 56) ? (56 - index) : (120 - index);
|
||||||
|
update (PADDING, padLen);
|
||||||
|
|
||||||
|
// Append length (before padding)
|
||||||
|
update (bits, 8);
|
||||||
|
|
||||||
|
// Store state in digest
|
||||||
|
encode (digest, state, 16);
|
||||||
|
|
||||||
|
// Zeroize sensitive information
|
||||||
|
memset (buffer, 0, sizeof(*buffer));
|
||||||
|
|
||||||
|
finalized=1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MD5::MD5(FILE *file){
|
||||||
|
|
||||||
|
init(); // must be called be all constructors
|
||||||
|
update(file);
|
||||||
|
finalize ();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *MD5::raw_digest(){
|
||||||
|
|
||||||
|
uint1 *s = new uint1[16];
|
||||||
|
|
||||||
|
if (!finalized){
|
||||||
|
/* cerr << "MD5::raw_digest: Can't get digest if you haven't "<<
|
||||||
|
"finalized the digest!" <<endl;*/
|
||||||
|
return ( (unsigned char*) "");
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(s, digest, 16);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *MD5::raw_digest(unsigned char buffer[16])
|
||||||
|
{
|
||||||
|
if (!finalized)
|
||||||
|
{
|
||||||
|
return ( (unsigned char*) "");
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buffer, digest, 16);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
char *MD5::hex_digest(){
|
||||||
|
|
||||||
|
int i;
|
||||||
|
char *s= new char[33];
|
||||||
|
|
||||||
|
if (!finalized){
|
||||||
|
/* cerr << "MD5::hex_digest: Can't get digest if you haven't "<<
|
||||||
|
"finalized the digest!" <<endl;*/
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<16; i++)
|
||||||
|
sprintf(s+i*2, "%02x", digest[i]);
|
||||||
|
|
||||||
|
s[32]='\0';
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *MD5::hex_digest(char buffer[33]){
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!finalized)
|
||||||
|
{
|
||||||
|
/* cerr << "MD5::hex_digest: Can't get digest if you haven't "<<
|
||||||
|
"finalized the digest!" <<endl;*/
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<16; i++)
|
||||||
|
sprintf(buffer+i*2, "%02x", digest[i]);
|
||||||
|
|
||||||
|
buffer[32]='\0';
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// PRIVATE METHODS:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void MD5::init(){
|
||||||
|
finalized=0; // we just started!
|
||||||
|
|
||||||
|
// Nothing counted, so count=0
|
||||||
|
count[0] = 0;
|
||||||
|
count[1] = 0;
|
||||||
|
|
||||||
|
// Load magic initialization constants.
|
||||||
|
state[0] = 0x67452301;
|
||||||
|
state[1] = 0xefcdab89;
|
||||||
|
state[2] = 0x98badcfe;
|
||||||
|
state[3] = 0x10325476;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Constants for MD5Transform routine.
|
||||||
|
// Although we could use C++ style constants, defines are actually better,
|
||||||
|
// since they let us easily evade scope clashes.
|
||||||
|
|
||||||
|
#define S11 7
|
||||||
|
#define S12 12
|
||||||
|
#define S13 17
|
||||||
|
#define S14 22
|
||||||
|
#define S21 5
|
||||||
|
#define S22 9
|
||||||
|
#define S23 14
|
||||||
|
#define S24 20
|
||||||
|
#define S31 4
|
||||||
|
#define S32 11
|
||||||
|
#define S33 16
|
||||||
|
#define S34 23
|
||||||
|
#define S41 6
|
||||||
|
#define S42 10
|
||||||
|
#define S43 15
|
||||||
|
#define S44 21
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// MD5 basic transformation. Transforms state based on block.
|
||||||
|
void MD5::transform (uint1 block[64]){
|
||||||
|
|
||||||
|
uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
|
||||||
|
|
||||||
|
decode (x, block, 64);
|
||||||
|
|
||||||
|
assert(!finalized); // not just a user error, since the method is private
|
||||||
|
|
||||||
|
/* Round 1 */
|
||||||
|
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
|
||||||
|
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
|
||||||
|
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
|
||||||
|
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
|
||||||
|
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
|
||||||
|
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
|
||||||
|
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
|
||||||
|
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
|
||||||
|
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
|
||||||
|
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
|
||||||
|
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
|
||||||
|
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
|
||||||
|
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
|
||||||
|
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
|
||||||
|
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
|
||||||
|
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
|
||||||
|
|
||||||
|
/* Round 2 */
|
||||||
|
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
|
||||||
|
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
|
||||||
|
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
|
||||||
|
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
|
||||||
|
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
|
||||||
|
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
|
||||||
|
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
|
||||||
|
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
|
||||||
|
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
|
||||||
|
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
|
||||||
|
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
|
||||||
|
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
|
||||||
|
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
|
||||||
|
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
|
||||||
|
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
|
||||||
|
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
|
||||||
|
|
||||||
|
/* Round 3 */
|
||||||
|
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
|
||||||
|
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
|
||||||
|
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
|
||||||
|
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
|
||||||
|
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
|
||||||
|
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
|
||||||
|
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
|
||||||
|
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
|
||||||
|
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
|
||||||
|
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
|
||||||
|
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
|
||||||
|
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
|
||||||
|
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
|
||||||
|
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
|
||||||
|
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
|
||||||
|
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
|
||||||
|
|
||||||
|
/* Round 4 */
|
||||||
|
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
|
||||||
|
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
|
||||||
|
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
|
||||||
|
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
|
||||||
|
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
|
||||||
|
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
|
||||||
|
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
|
||||||
|
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
|
||||||
|
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
|
||||||
|
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
|
||||||
|
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
|
||||||
|
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
|
||||||
|
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
|
||||||
|
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
|
||||||
|
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
|
||||||
|
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
|
||||||
|
|
||||||
|
state[0] += a;
|
||||||
|
state[1] += b;
|
||||||
|
state[2] += c;
|
||||||
|
state[3] += d;
|
||||||
|
|
||||||
|
// Zeroize sensitive information.
|
||||||
|
memset ( (uint1 *) x, 0, sizeof(x));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Encodes input (UINT4) into output (unsigned char). Assumes len is
|
||||||
|
// a multiple of 4.
|
||||||
|
void MD5::encode (uint1 *output, uint4 *input, uint4 len) {
|
||||||
|
|
||||||
|
unsigned int i, j;
|
||||||
|
|
||||||
|
for (i = 0, j = 0; j < len; i++, j += 4) {
|
||||||
|
output[j] = (uint1) (input[i] & 0xff);
|
||||||
|
output[j+1] = (uint1) ((input[i] >> 8) & 0xff);
|
||||||
|
output[j+2] = (uint1) ((input[i] >> 16) & 0xff);
|
||||||
|
output[j+3] = (uint1) ((input[i] >> 24) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Decodes input (unsigned char) into output (UINT4). Assumes len is
|
||||||
|
// a multiple of 4.
|
||||||
|
void MD5::decode (uint4 *output, uint1 *input, uint4 len){
|
||||||
|
|
||||||
|
unsigned int i, j;
|
||||||
|
|
||||||
|
for (i = 0, j = 0; j < len; i++, j += 4)
|
||||||
|
output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) |
|
||||||
|
(((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Note: Replace "for loop" with standard memcpy if possible.
|
||||||
|
void MD5::memcpy (uint1 *output, uint1 *input, uint4 len){
|
||||||
|
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
output[i] = input[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Note: Replace "for loop" with standard memset if possible.
|
||||||
|
void MD5::memset (uint1 *output, uint1 value, uint4 len){
|
||||||
|
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
output[i] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ROTATE_LEFT rotates x left n bits.
|
||||||
|
|
||||||
|
inline unsigned int MD5::rotate_left (uint4 x, uint4 n){
|
||||||
|
return (x << n) | (x >> (32-n)) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// F, G, H and I are basic MD5 functions.
|
||||||
|
|
||||||
|
inline unsigned int MD5::F (uint4 x, uint4 y, uint4 z){
|
||||||
|
return (x & y) | (~x & z);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline unsigned int MD5::G (uint4 x, uint4 y, uint4 z){
|
||||||
|
return (x & z) | (y & ~z);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline unsigned int MD5::H (uint4 x, uint4 y, uint4 z){
|
||||||
|
return x ^ y ^ z;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline unsigned int MD5::I (uint4 x, uint4 y, uint4 z){
|
||||||
|
return y ^ (x | ~z);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
|
||||||
|
// Rotation is separate from addition to prevent recomputation.
|
||||||
|
|
||||||
|
|
||||||
|
inline void MD5::FF(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac){
|
||||||
|
a += F(b, c, d) + x + ac;
|
||||||
|
a = rotate_left (a, s) +b;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void MD5::GG(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac){
|
||||||
|
a += G(b, c, d) + x + ac;
|
||||||
|
a = rotate_left (a, s) +b;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void MD5::HH(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac){
|
||||||
|
a += H(b, c, d) + x + ac;
|
||||||
|
a = rotate_left (a, s) +b;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void MD5::II(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac){
|
||||||
|
a += I(b, c, d) + x + ac;
|
||||||
|
a = rotate_left (a, s) +b;
|
||||||
|
}
|
106
tools/gamedata md5/md5.h
Normal file
106
tools/gamedata md5/md5.h
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
// MD5.CC - source code for the C++/object oriented translation and
|
||||||
|
// modification of MD5.
|
||||||
|
|
||||||
|
// Translation and modification (c) 1995 by Mordechai T. Abzug
|
||||||
|
|
||||||
|
// This translation/ modification is provided "as is," without express or
|
||||||
|
// implied warranty of any kind.
|
||||||
|
|
||||||
|
// The translator/ modifier does not claim (1) that MD5 will do what you think
|
||||||
|
// it does; (2) that this translation/ modification is accurate; or (3) that
|
||||||
|
// this software is "merchantible." (Language for this disclaimer partially
|
||||||
|
// copied from the disclaimer below).
|
||||||
|
|
||||||
|
/* based on:
|
||||||
|
|
||||||
|
MD5.H - header file for MD5C.C
|
||||||
|
MDDRIVER.C - test driver for MD2, MD4 and MD5
|
||||||
|
|
||||||
|
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||||
|
rights reserved.
|
||||||
|
|
||||||
|
License to copy and use this software is granted provided that it
|
||||||
|
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||||
|
Algorithm" in all material mentioning or referencing this software
|
||||||
|
or this function.
|
||||||
|
|
||||||
|
License is also granted to make and use derivative works provided
|
||||||
|
that such works are identified as "derived from the RSA Data
|
||||||
|
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||||
|
mentioning or referencing the derived work.
|
||||||
|
|
||||||
|
RSA Data Security, Inc. makes no representations concerning either
|
||||||
|
the merchantability of this software or the suitability of this
|
||||||
|
software for any particular purpose. It is provided "as is"
|
||||||
|
without express or implied warranty of any kind.
|
||||||
|
|
||||||
|
These notices must be retained in any copies of any part of this
|
||||||
|
documentation and/or software.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
//#include <fstream.h>
|
||||||
|
//#include <iostream.h>
|
||||||
|
|
||||||
|
class MD5 {
|
||||||
|
|
||||||
|
public:
|
||||||
|
// methods for controlled operation:
|
||||||
|
MD5 (); // simple initializer
|
||||||
|
void update (unsigned char *input, unsigned int input_length);
|
||||||
|
void update (FILE *file);
|
||||||
|
void finalize ();
|
||||||
|
|
||||||
|
// constructors for special circumstances. All these constructors finalize
|
||||||
|
// the MD5 context.
|
||||||
|
MD5 (unsigned char *string); // digest string, finalize
|
||||||
|
MD5 (FILE *file); // digest file, close, finalize
|
||||||
|
|
||||||
|
// methods to acquire finalized result
|
||||||
|
unsigned char *raw_digest (); // digest as a 16-byte binary array
|
||||||
|
unsigned char *raw_digest(unsigned char buffer[16]);
|
||||||
|
char * hex_digest (); // digest as a 33-byte ascii-hex string
|
||||||
|
char * hex_digest (char buffer[33]); //same as above, passing buffer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// first, some types:
|
||||||
|
typedef unsigned int uint4; // assumes integer is 4 words long
|
||||||
|
typedef unsigned short int uint2; // assumes short integer is 2 words long
|
||||||
|
typedef unsigned char uint1; // assumes char is 1 word long
|
||||||
|
|
||||||
|
// next, the private data:
|
||||||
|
uint4 state[4];
|
||||||
|
uint4 count[2]; // number of *bits*, mod 2^64
|
||||||
|
uint1 buffer[64]; // input buffer
|
||||||
|
uint1 digest[16];
|
||||||
|
uint1 finalized;
|
||||||
|
|
||||||
|
// last, the private methods, mostly static:
|
||||||
|
void init (); // called by all constructors
|
||||||
|
void transform (uint1 *buffer); // does the real update work. Note
|
||||||
|
// that length is implied to be 64.
|
||||||
|
|
||||||
|
static void encode (uint1 *dest, uint4 *src, uint4 length);
|
||||||
|
static void decode (uint4 *dest, uint1 *src, uint4 length);
|
||||||
|
static void memcpy (uint1 *dest, uint1 *src, uint4 length);
|
||||||
|
static void memset (uint1 *start, uint1 val, uint4 length);
|
||||||
|
|
||||||
|
static inline uint4 rotate_left (uint4 x, uint4 n);
|
||||||
|
static inline uint4 F (uint4 x, uint4 y, uint4 z);
|
||||||
|
static inline uint4 G (uint4 x, uint4 y, uint4 z);
|
||||||
|
static inline uint4 H (uint4 x, uint4 y, uint4 z);
|
||||||
|
static inline uint4 I (uint4 x, uint4 y, uint4 z);
|
||||||
|
static inline void FF (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac);
|
||||||
|
static inline void GG (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac);
|
||||||
|
static inline void HH (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac);
|
||||||
|
static inline void II (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||||
|
uint4 s, uint4 ac);
|
||||||
|
|
||||||
|
};
|
20
tools/gamedata md5/msvc9/gamedatamd5.sln
Normal file
20
tools/gamedata md5/msvc9/gamedatamd5.sln
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||||
|
# Visual Studio 2008
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gamedatamd5", "gamedatamd5.vcproj", "{E1C96598-E1AC-4928-8930-F8B6CD245B12}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
219
tools/gamedata md5/msvc9/gamedatamd5.vcproj
Normal file
219
tools/gamedata md5/msvc9/gamedatamd5.vcproj
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9.00"
|
||||||
|
Name="gamedatamd5"
|
||||||
|
ProjectGUID="{E1C96598-E1AC-4928-8930-F8B6CD245B12}"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
TargetFrameworkVersion="0"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="Debug"
|
||||||
|
IntermediateDirectory="Debug"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="../../../public;../../../public/sourcepawn"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="Release"
|
||||||
|
IntermediateDirectory="Release"
|
||||||
|
ConfigurationType="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories="../../../public;../../../public/sourcepawn"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\main.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\md5.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sm_memtable.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\TextParsers.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\main.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\md5.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sm_memtable.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\TextParsers.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
112
tools/gamedata md5/sm_memtable.cpp
Normal file
112
tools/gamedata md5/sm_memtable.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include "sm_memtable.h"
|
||||||
|
|
||||||
|
BaseMemTable::BaseMemTable(unsigned int init_size)
|
||||||
|
{
|
||||||
|
membase = (unsigned char *)malloc(init_size);
|
||||||
|
size = init_size;
|
||||||
|
tail = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseMemTable::~BaseMemTable()
|
||||||
|
{
|
||||||
|
free(membase);
|
||||||
|
membase = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int BaseMemTable::CreateMem(unsigned int addsize, void **addr)
|
||||||
|
{
|
||||||
|
int idx = (int)tail;
|
||||||
|
|
||||||
|
while (tail + addsize >= size)
|
||||||
|
{
|
||||||
|
size *= 2;
|
||||||
|
membase = (unsigned char *)realloc(membase, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
tail += addsize;
|
||||||
|
|
||||||
|
if (addr)
|
||||||
|
{
|
||||||
|
*addr = (void *)&membase[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *BaseMemTable::GetAddress(int index)
|
||||||
|
{
|
||||||
|
if (index < 0 || (unsigned int)index >= tail)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return &membase[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseMemTable::Reset()
|
||||||
|
{
|
||||||
|
tail = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseStringTable::BaseStringTable(unsigned int init_size) : m_table(init_size)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseStringTable::~BaseStringTable()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int BaseStringTable::AddString(const char *string)
|
||||||
|
{
|
||||||
|
size_t len = strlen(string) + 1;
|
||||||
|
int idx;
|
||||||
|
char *addr;
|
||||||
|
|
||||||
|
idx = m_table.CreateMem(len, (void **)&addr);
|
||||||
|
strcpy(addr, string);
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*const char *BaseStringTable::GetString(int str)
|
||||||
|
{
|
||||||
|
return (const char *)m_table.GetAddress(str);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
void BaseStringTable::Reset()
|
||||||
|
{
|
||||||
|
m_table.Reset();
|
||||||
|
}
|
114
tools/gamedata md5/sm_memtable.h
Normal file
114
tools/gamedata md5/sm_memtable.h
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
||||||
|
|
||||||
|
class BaseMemTable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BaseMemTable(unsigned int init_size);
|
||||||
|
~BaseMemTable();
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Allocates 'size' bytes of memory.
|
||||||
|
* Optionally outputs the address through 'addr'.
|
||||||
|
* Returns an index >= 0 on success, < 0 on failure.
|
||||||
|
*/
|
||||||
|
int CreateMem(unsigned int size, void **addr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given an index into the memory table, returns its address.
|
||||||
|
* Returns NULL if invalid.
|
||||||
|
*/
|
||||||
|
void *GetAddress(int index);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scraps the memory table. For caching purposes, the memory
|
||||||
|
* is not freed, however subsequent calls to CreateMem() will
|
||||||
|
* begin at the first index again.
|
||||||
|
*/
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
inline unsigned int GetMemUsage()
|
||||||
|
{
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline unsigned int GetActualMemUsed()
|
||||||
|
{
|
||||||
|
return tail;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned char *membase;
|
||||||
|
unsigned int size;
|
||||||
|
unsigned int tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BaseStringTable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BaseStringTable(unsigned int init_size);
|
||||||
|
~BaseStringTable();
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Adds a string to the string table and returns its index.
|
||||||
|
*/
|
||||||
|
int AddString(const char *string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given an index into the string table, returns the associated string.
|
||||||
|
*/
|
||||||
|
inline const char *GetString(int str)
|
||||||
|
{
|
||||||
|
return (const char *)m_table.GetAddress(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scraps the string table. For caching purposes, the memory
|
||||||
|
* is not freed, however subsequent calls to AddString() will
|
||||||
|
* begin at the first index again.
|
||||||
|
*/
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the parent BaseMemTable that this string table uses.
|
||||||
|
*/
|
||||||
|
inline BaseMemTable *GetMemTable()
|
||||||
|
{
|
||||||
|
return &m_table;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
BaseMemTable m_table;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
Loading…
Reference in New Issue
Block a user