Add new hashers and new natives

Replace the only hasher called MD5 with the ones listed below.

(+) CRC32, MD5, SHA1, SHA256, SHA3 224 BIT, SHA3 256 BIT, SHA3 384 BIT,
SHA3 512 BIT, Keccak 224 BIT, Keccak 256 BIT, Keccak 384 BIT and Keccak
512 BIT.

Add the natives listed below.

(+) hash_string(const string[], hashType:type, output[], const
outputSize)
(+) hash_file(const fileName, hashType:type, output[], const outputSize)
(+) is_arkshine_a_doctor() :  Hidden native, but a sign of recompense
for him being very active since 1.8.3 version of AMX Mod X
(+) get_system_endianness() :  Checks if the system is currently Big
Endian or Little Endian.

Add the following Enum.

(+) hashType {}
(+) sysEndianness {}

Deprecate the following natives.

(-) amx_md5()
(-) amx_md5_file()

It has been tested on Windows and Linux. The sanity checks seems to be
properly working, so no worries about them.

These are useful if people are using Sockets, cURLs or MySQLs in order
to compare hashes of different files On-line for further investigation.
You are not able to check if the files are older or newer, but you can
see if the content is different (Hash Checksum mismatch).

I'm glad I did this. Thanks to
This commit is contained in:
HttrckCldHKS
2015-02-15 08:44:33 +02:00
parent 5a7752a22e
commit c071f53f2c
28 changed files with 2941 additions and 621 deletions

View File

@ -450,3 +450,25 @@ enum AdminProp
AdminProp_Access,
AdminProp_Flags
};
/**
* HashType constants
* To be used on hash_file() and hash_string()
*/
enum HashType
{
Hash_Crc32 = 0, // Provides CRC32 hashing
Hash_Md5, // Provides MD5 hashing
Hash_Sha1, // Provides SHA1 hashing
Hash_Sha256, // Provides SHA256 hashing
Hash_Sha3_224, // Provides SHA3 224 bit hashing
Hash_Sha3_256, // Provides SHA3 256 bit hashing
Hash_Sha3_384, // Provides SHA3 384 bit hashing
Hash_Sha3_512, // Provides SHA3 512 bit hashing
Hash_Keccak_224, // Provides Keccak 224 bit hashing
Hash_Keccak_256, // Provides Keccak 256 bit hashing
Hash_Keccak_384, // Provides Keccak 384 bit hashing
Hash_Keccak_512 // Provides Keccak 512 bit hashing
};

View File

@ -2310,6 +2310,7 @@ native force_unmodified(force_type, const mins[3], const maxs[3], const filename
*
* @return Number of cells written to the buffer (always 32)
*/
#pragma deprecated Use now hash_string() function. Also, see Hash_* constants.
native md5(const szString[], md5buffer[34]);
/**
@ -2321,8 +2322,34 @@ native md5(const szString[], md5buffer[34]);
* @return Number of cells written to the buffer (always 32)
* @error If the file can not be opened, and error is thrown.
*/
#pragma deprecated Use now hash_file() function. Also, see Hash_* constants.
native md5_file(const file[], md5buffer[34]);
/**
* Hashes a string.
*
* @param string String to hash.
* @param type Type of hash. See Hash_* constants in amxconst.inc file.
* @param output Output string to store hash in.
* @param outputSize The maximum size of the output string to store hash in.
*
* @return Number of written bytes.
*/
native hash_string(const string[], const HashType:type, output[], const outputSize);
/**
* Hashes a file's content (bytes).
*
* @param fileName File to hash.
* @param type Type of hash. See Hash_* constants in amxconst.inc file.
* @param output Output string to store hash in.
* @param outputSize The maximum size of the output string to store hash in.
*
* @return Number of written bytes.
* @error If the file couldn't be opened, an error is thrown.
*/
native hash_file(const fileName[], const HashType:type, output[], const outputSize);
/**
* Returns the internal flags set on the plugin's state.
*
@ -3076,6 +3103,5 @@ native admins_flush();
*/
native bool:has_map_ent_class(const classname[]);
// Always keep this at the bottom of this file
#include <message_stocks>

View File

@ -0,0 +1,47 @@
// vim: set ts=4 sw=4 tw=99 noet:
//
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team.
//
// This software is licensed under the GNU General Public License, version 3 or higher.
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
// https://alliedmods.net/amxmodx-license
#include <amxmodx>
public plugin_init()
{
register_plugin("Hashing Test", "1.0", "Hattrick (Claudiu HKS)");
}
public client_command(Id)
{
new Command[64], StringOrFile[8], Data[64], HashTypeStr[4], Output[256], HashType:Type;
if (is_user_connected(Id) && !is_user_bot(Id) && !is_user_hltv(Id))
{
read_argv(0, Command, charsmax(Command));
read_argv(1, StringOrFile, charsmax(StringOrFile));
read_argv(2, Data, charsmax(Data));
read_argv(3, HashTypeStr, charsmax(HashTypeStr));
if (equali(Command, "Hash"))
{
if (equali(StringOrFile, "File"))
{
Type = HashType:str_to_num(HashTypeStr);
hash_file(Data, Type, Output, charsmax(Output));
log_amx("Original: %s Hashed: %s", Data, Output);
}
else if (equali(StringOrFile, "String"))
{
Type = HashType:str_to_num(HashTypeStr);
hash_string(Data, Type, Output, charsmax(Output));
log_amx("Original: %s Hashed: %s", Data, Output);
}
}
}
}