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