2013-02-15 17:03:42 -08:00
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
2014-02-11 19:14:46 +01:00
|
|
|
#ifndef SHA1_H
|
|
|
|
#define SHA1_H
|
2013-02-15 17:03:42 -08:00
|
|
|
|
2024-02-27 23:22:49 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
2024-04-23 21:30:40 +08:00
|
|
|
#include <array>
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
struct SHA1
|
2014-02-27 20:09:57 -08:00
|
|
|
{
|
2024-04-23 21:30:40 +08:00
|
|
|
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:
|
2013-02-15 17:03:42 -08:00
|
|
|
unsigned long long size;
|
|
|
|
unsigned int H[5];
|
|
|
|
unsigned int W[16];
|
2024-04-23 21:30:40 +08:00
|
|
|
};
|
2013-02-15 17:03:42 -08:00
|
|
|
|
2024-04-23 15:28:11 +08:00
|
|
|
/* 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);
|
2014-02-11 19:14:46 +01:00
|
|
|
|
2024-02-27 23:22:49 +01:00
|
|
|
#endif
|
|
|
|
|
2014-02-11 19:14:46 +01:00
|
|
|
#endif // SHA1_H
|