Path: blob/master/Utilities/cmlibrhash/librhash/algorithms.h
3150 views
/* algorithms.h - rhash library algorithms */1#ifndef RHASH_ALGORITHMS_H2#define RHASH_ALGORITHMS_H34#include "rhash.h"5#include "byte_order.h"6#include <stddef.h>78#ifdef __cplusplus9extern "C" {10#endif1112#ifndef RHASH_API13/* modifier for RHash library functions */14# define RHASH_API15#endif1617/**18* Bit flag: default hash output format is base32.19*/20#define RHASH_INFO_BASE32 12122/**23* Information about a hash function.24*/25typedef struct rhash_info26{27/**28* Hash function indentifier.29*/30unsigned hash_id;31/**32* Flags bit-mask, including RHASH_INFO_BASE32 bit.33*/34unsigned flags;35/**36The size of of the raw message digest in bytes.37*/38size_t digest_size;39/**40* The hash function name.41*/42const char* name;43/**44* The corresponding paramenter name in a magnet link.45*/46const char* magnet_name;47} rhash_info;4849typedef void (*pinit_t)(void* ctx);50typedef void (*pupdate_t)(void* ctx, const void* msg, size_t size);51typedef void (*pfinal_t)(void* ctx, unsigned char* result);52typedef void (*pcleanup_t)(void* ctx);5354/**55* Information about a hash function56*/57typedef struct rhash_hash_info58{59rhash_info* info;60size_t context_size;61ptrdiff_t digest_diff;62pinit_t init;63pupdate_t update;64pfinal_t final;65pcleanup_t cleanup;66} rhash_hash_info;6768/**69* Information on a hash function and its context70*/71typedef struct rhash_vector_item72{73struct rhash_hash_info* hash_info;74void* context;75} rhash_vector_item;7677/**78* The rhash context containing contexts for several hash functions79*/80typedef struct rhash_context_ext81{82struct rhash_context rc;83unsigned hash_vector_size; /* number of contained hash sums */84unsigned flags;85volatile unsigned state;86rhash_callback_t callback;87void* callback_data;88void* bt_ctx;89rhash_vector_item vector[]; /* contexts of contained hash sums */90} rhash_context_ext;9192extern rhash_hash_info rhash_hash_info_default[RHASH_HASH_COUNT];93extern rhash_hash_info* rhash_info_table;94extern int rhash_info_size;95extern unsigned rhash_uninitialized_algorithms;9697extern rhash_info info_crc32;98extern rhash_info info_crc32c;99extern rhash_info info_md4;100extern rhash_info info_md5;101extern rhash_info info_sha1;102extern rhash_info info_tiger;103extern rhash_info info_tth ;104extern rhash_info info_btih;105extern rhash_info info_ed2k;106extern rhash_info info_aich;107extern rhash_info info_whirlpool;108extern rhash_info info_rmd160;109extern rhash_info info_gost;110extern rhash_info info_gostpro;111extern rhash_info info_has160;112extern rhash_info info_snf128;113extern rhash_info info_snf256;114extern rhash_info info_sha224;115extern rhash_info info_sha256;116extern rhash_info info_sha384;117extern rhash_info info_sha512;118extern rhash_info info_sha3_224;119extern rhash_info info_sha3_256;120extern rhash_info info_sha3_384;121extern rhash_info info_sha3_512;122extern rhash_info info_edr256;123extern rhash_info info_edr512;124125/* rhash_info flags */126#define F_BS32 1 /* default output in base32 */127#define F_SWAP32 2 /* big endian flag */128#define F_SWAP64 4129#define F_SPCEXP 8 /* needs special import/export logic */130131/* define endianness flags */132#if IS_LITTLE_ENDIAN133#define F_LE32 0134#define F_LE64 0135#define F_BE32 F_SWAP32136#define F_BE64 F_SWAP64137#else138#define F_LE32 F_SWAP32139#define F_LE64 F_SWAP64140#define F_BE32 0141#define F_BE64 0142#endif143144void rhash_init_algorithms(unsigned mask);145const rhash_info* rhash_info_by_id(unsigned hash_id); /* get hash sum info by hash id */146147#if !defined(NO_IMPORT_EXPORT)148size_t rhash_export_alg(unsigned hash_id, const void* ctx, void* out, size_t size);149size_t rhash_import_alg(unsigned hash_id, void* ctx, const void* in, size_t size);150#endif /* !defined(NO_IMPORT_EXPORT) */151152#if defined(OPENSSL_RUNTIME) && !defined(USE_OPENSSL)153# define USE_OPENSSL154#endif155156#ifdef USE_OPENSSL157typedef struct rhash_hashing_methods158{159pinit_t init;160pupdate_t update;161pfinal_t final;162} rhash_hashing_methods;163164enum rhash_methods_type165{166METHODS_RHASH,167METHODS_OPENSSL,168METHODS_SELECTED,169};170171void rhash_load_sha1_methods(rhash_hashing_methods* methods, int methods_type);172173#define ARE_OPENSSL_METHODS(methods) ((methods).init != (void (*)(void*))&rhash_sha1_init)174#endif175176#ifdef __cplusplus177} /* extern "C" */178#endif /* __cplusplus */179180#endif /* RHASH_ALGORITHMS_H */181182183