subsurface/core/sha1.h
Berthold Stoeger 93b151a75f core: C++-ify SHA1 interface
All callers of the SHA1 code are C++. Might just as well use
a C++ like interface.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2024-06-08 19:17:34 +02:00

36 lines
930 B
C++

/*
* SHA1 routine optimized to do word accesses rather than byte accesses,
* and to avoid unnecessary copies into the context array.
*
* This was initially based on the Mozilla SHA1 implementation, although
* none of the original Mozilla code remains.
*/
#ifndef SHA1_H
#define SHA1_H
#ifdef __cplusplus
#include <array>
#include <string>
struct SHA1
{
SHA1();
void update(const void *dataIn, unsigned long len);
void update(const std::string &s);
// Note: the hash() functions change state. Call only once.
std::array<unsigned char, 20> hash();
uint32_t hash_uint32(); // Return first 4 bytes of hash interpreted
// as little-endian unsigned integer.
private:
unsigned long long size;
unsigned int H[5];
unsigned int W[16];
};
/* Helper function that calculates an SHA1 has and returns the first 4 bytes as uint32_t */
uint32_t SHA1_uint32(const void *dataIn, unsigned long len);
#endif
#endif // SHA1_H