20 #ifndef _ANCH_CRYPTO_SHA1_H_ 21 #define _ANCH_CRYPTO_SHA1_H_ 23 #include "crypto/hash/hash.hpp" 29 template<
typename H> H
HMAC(
const std::string&,
const std::string&);
40 friend SHA1 anch::crypto::HMAC<SHA1>(
const std::string&,
const std::string&);
63 std::array<uint32_t,5> state;
69 std::array<uint8_t,64> buffer;
72 std::array<uint8_t,20>
digest;
85 state = { {0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476,0xC3D2E1F0} };
109 template<
class CharT,
class Traits,
class Allocator>
110 SHA1(
const std::basic_string<CharT,Traits,Allocator>& data) {
119 template<
class CharT,
class Traits>
120 SHA1(std::basic_istream<CharT,Traits>& stream) {
131 SHA1(
const uint8_t* data, std::size_t len) {
153 virtual const std::array<uint8_t,20>&
digest()
const override;
169 virtual void addData(
const uint8_t* data, std::size_t len)
override;
182 void transform(
const uint8_t* buffer);
190 static inline uint32_t rol32(uint32_t value,
unsigned int shift){
191 return ((value << shift) | value >> (32 - shift));
200 static inline uint32_t word(Chunk& chunk,
unsigned int position) {
201 return (chunk.words[position & 0xf] = rol32(chunk.words[(position + 13) & 0xf]
202 ^ chunk.words[(position + 8) & 0xf]
203 ^ chunk.words[(position + 2) & 0xf]
204 ^ chunk.words[(position) & 0xf],
219 static inline void round0(Chunk& chunk,
220 const unsigned int position,
226 z += ((( w & (x ^ y)) ^ y) + chunk.words[position] + 0x5A827999 + rol32(v, 5));
241 static inline void round1(Chunk& chunk,
242 const unsigned int position,
248 z += ((( w & (x ^ y)) ^ y) + word(chunk,position) + 0x5A827999 + rol32(v, 5));
263 static inline void round2(Chunk& chunk,
264 const unsigned int position,
270 z += (( w ^ x ^ y) + word(chunk, position) + 0x6ED9EBA1 + rol32(v, 5));
285 static inline void round3(Chunk& chunk,
286 const unsigned int position,
292 z += (((( w | x) & y) | (w & x)) + word(chunk, position) + 0x8F1BBCDC + rol32(v, 5));
307 static inline void round4(Chunk& chunk,
308 const unsigned int position,
314 z += ((w ^ x ^ y) + word(chunk, position) + 0xCA62C1D6 + rol32(v, 5));
321 extern template SHA1 HMAC<SHA1>(
const std::string&,
const std::string&);
326 #endif // _ANCH_CRYPTO_SHA1_H_ virtual const std::array< uint8_t, O > & digest() const =0
H HMAC(const std::string &, const std::string &)
Definition: hmac.hpp:38
virtual ~SHA1()
Definition: sha1.cpp:60
virtual void addData(const uint8_t *data, std::size_t len) override
Definition: sha1.cpp:197
SHA1()
Definition: sha1.cpp:51
AnCH framework base namespace.
Definition: base64.hpp:28
virtual const std::array< uint8_t, 20 > & digest() const override
Definition: sha1.cpp:72
SHA1(const std::basic_string< CharT, Traits, Allocator > &data)
Definition: sha1.hpp:110
Hash algorithm abstract class.
Definition: hash.hpp:41
virtual void reset() override
Definition: sha1.hpp:159
virtual void finalize() override
Definition: sha1.cpp:224
SHA1(std::basic_istream< CharT, Traits > &stream)
Definition: sha1.hpp:120
SHA1 hash algorithm implementation.
Definition: sha1.hpp:38