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:
@ -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
|
||||
};
|
||||
|
@ -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>
|
||||
|
47
plugins/testsuite/hashing_test.sma
Normal file
47
plugins/testsuite/hashing_test.sma
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user