mirror of
https://github.com/zeek/zeek.git
synced 2025-10-05 08:08:19 +00:00
Introduce calculate_digest convenience function
This function just calculates the chosen digest and returns the result in either the passed buffer, or in a static buffer. Basically a superset to the surprisingly popular internal_md5.
This commit is contained in:
parent
5e7915ae7a
commit
d34532f847
2 changed files with 20 additions and 2 deletions
|
@ -63,12 +63,18 @@ void hash_final(EVP_MD_CTX* c, u_char* md)
|
||||||
|
|
||||||
unsigned char* internal_md5(const unsigned char* data, unsigned long len, unsigned char* out)
|
unsigned char* internal_md5(const unsigned char* data, unsigned long len, unsigned char* out)
|
||||||
{
|
{
|
||||||
static unsigned char static_out[MD5_DIGEST_LENGTH];
|
return calculate_digest(Hash_MD5, data, len, out);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char* calculate_digest(HashAlgorithm Alg, const unsigned char* data, uint64_t len, unsigned char* out)
|
||||||
|
{
|
||||||
|
// maximum possible length for supported hashes
|
||||||
|
static unsigned char static_out[SHA512_DIGEST_LENGTH];
|
||||||
|
|
||||||
if ( ! out )
|
if ( ! out )
|
||||||
out = static_out; // use static array for return, see OpenSSL man page
|
out = static_out; // use static array for return, see OpenSSL man page
|
||||||
|
|
||||||
EVP_MD_CTX* c = hash_init(Hash_MD5);
|
EVP_MD_CTX* c = hash_init(Alg);
|
||||||
hash_update(c, data, len);
|
hash_update(c, data, len);
|
||||||
hash_final(c, out);
|
hash_final(c, out);
|
||||||
return out;
|
return out;
|
||||||
|
|
12
src/digest.h
12
src/digest.h
|
@ -22,6 +22,8 @@ inline void* EVP_MD_CTX_md_data(const EVP_MD_CTX* ctx)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// if you add something here, note that you might have to make sure that the
|
||||||
|
// static_out member in calculate_digest is still long enough.
|
||||||
enum HashAlgorithm { Hash_MD5, Hash_SHA1, Hash_SHA224, Hash_SHA256, Hash_SHA384, Hash_SHA512 };
|
enum HashAlgorithm { Hash_MD5, Hash_SHA1, Hash_SHA224, Hash_SHA256, Hash_SHA384, Hash_SHA512 };
|
||||||
|
|
||||||
inline const char* digest_print(const u_char* digest, size_t n)
|
inline const char* digest_print(const u_char* digest, size_t n)
|
||||||
|
@ -54,3 +56,13 @@ void hash_update(EVP_MD_CTX* c, const void* data, unsigned long len);
|
||||||
void hash_final(EVP_MD_CTX* c, u_char* md);
|
void hash_final(EVP_MD_CTX* c, u_char* md);
|
||||||
|
|
||||||
unsigned char* internal_md5(const unsigned char* data, unsigned long len, unsigned char* out);
|
unsigned char* internal_md5(const unsigned char* data, unsigned long len, unsigned char* out);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the selected digest.
|
||||||
|
* @param Alg Digest algorithm to use.
|
||||||
|
* @param data Data to hash.
|
||||||
|
* @param len Length of data to hash.
|
||||||
|
* @param out Buffer to write data to. If set to nullptr, a static buffer will be used
|
||||||
|
* @return Buffer that the hash was written to. Length is deoendent on the chosen hash function.
|
||||||
|
*/
|
||||||
|
unsigned char* calculate_digest(HashAlgorithm Alg, const unsigned char* data, uint64_t len, unsigned char* out);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue