mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2025-01-24 12:48:04 +03:00
c071f53f2c
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
87 lines
2.4 KiB
C
87 lines
2.4 KiB
C
// 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
|
|
|
|
#if !defined __HASHING_H__
|
|
#define __HASHING_H__
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdint.h>
|
|
|
|
#if defined(__FreeBSD__) || defined(__OpenBSD__)
|
|
#include <sys/endian.h>
|
|
#define __BYTE_ORDER BYTE_ORDER
|
|
#define __LITTLE_ENDIAN LITTLE_ENDIAN
|
|
#define __BIG_ENDIAN BIG_ENDIAN
|
|
#elif defined(LINUX) || defined(EMSCRIPTEN)
|
|
#include <endian.h>
|
|
#elif defined(__APPLE__)
|
|
#include <sys/types.h>
|
|
#define __BYTE_ORDER BYTE_ORDER
|
|
#endif
|
|
|
|
#if !defined(BIG_ENDIAN)
|
|
#define BIG_ENDIAN 4321
|
|
#endif
|
|
|
|
#if !defined(LITTLE_ENDIAN)
|
|
#define LITTLE_ENDIAN 1234
|
|
#endif
|
|
|
|
/**
|
|
* Gets hashers included.
|
|
*/
|
|
#include "hashers/crc32.h"
|
|
#include "hashers/md5.h"
|
|
#include "hashers/sha1.h"
|
|
#include "hashers/sha256.h"
|
|
#include "hashers/sha3.h"
|
|
#include "hashers/keccak.h"
|
|
|
|
/**
|
|
* HashType constants.
|
|
* To be used on hashFile() and hashString()
|
|
*/
|
|
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
|
|
};
|
|
|
|
/**
|
|
* Hashes a file content (bytes)
|
|
* @note Returns NULL if "fileName" does not represent a file name
|
|
* @note Returns NULL if file could not be opened
|
|
* @note Returns NULL if invalid "Type" is specified
|
|
*/
|
|
const char* hashFile(const char* fileName, HashType Type);
|
|
|
|
/**
|
|
* Hashes a string
|
|
* @note Returns NULL if "String" does not represent a string
|
|
* @note Returns NULL if the string has no bytes to hash
|
|
* @note Returns NULL if invalid "Type" is specified
|
|
*/
|
|
const char* hashString(const char* String, size_t stringLen, HashType Type);
|
|
|
|
#endif // __HASHING_H__
|