~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to iterhash.h

  • Committer: weidai
  • Date: 2004-09-03 10:57:31 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:193
changes related to the next FIPS validation

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
public:
24
24
        typedef T HashWordType;
25
25
 
26
 
        IteratedHashBase() : m_countLo(0), m_countHi(0) {}
27
 
        unsigned int BlockSize() const {return (unsigned int)m_data.size() * sizeof(T);}
 
26
        IteratedHashBase() : m_countHi(0), m_countLo(0) {}
 
27
        unsigned int BlockSize() const {return m_data.size() * sizeof(T);}
28
28
        unsigned int OptimalBlockSize() const {return BlockSize();}
29
29
        unsigned int OptimalDataAlignment() const {return sizeof(T);}
30
 
        void Update(const byte *input, size_t length);
31
 
        byte * CreateUpdateSpace(size_t &size);
 
30
        void Update(const byte *input, unsigned int length);
 
31
        byte * CreateUpdateSpace(unsigned int &size);
32
32
        void Restart();
33
 
        void TruncatedFinal(byte *digest, size_t size);
 
33
        void TruncatedFinal(byte *digest, unsigned int size);
34
34
 
35
35
protected:
36
36
        void SetBlockSize(unsigned int blockSize) {m_data.resize(blockSize / sizeof(HashWordType));}
44
44
 
45
45
        virtual ByteOrder GetByteOrder() const =0;
46
46
        virtual void HashEndianCorrectedBlock(const HashWordType *data) =0;
47
 
        virtual size_t HashMultipleBlocks(const T *input, size_t length);
 
47
        virtual unsigned int HashMultipleBlocks(const T *input, unsigned int length);
48
48
        void HashBlock(const HashWordType *input) {HashMultipleBlocks(input, BlockSize());}
49
49
 
50
50
        SecBlock<T> m_data;                     // Data buffer
54
54
        T m_countLo, m_countHi;
55
55
};
56
56
 
 
57
#ifdef WORD64_AVAILABLE
 
58
CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
 
59
CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word64, MessageAuthenticationCode>;
 
60
#endif
 
61
 
 
62
CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
 
63
CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word32, MessageAuthenticationCode>;
 
64
 
57
65
//! _
58
66
template <class T_HashWordType, class T_Endianness, unsigned int T_BlockSize, class T_Base = HashTransformation>
59
67
class CRYPTOPP_NO_VTABLE IteratedHash : public IteratedHashBase<T_HashWordType, T_Base>
67
75
 
68
76
        ByteOrder GetByteOrder() const {return T_Endianness::ToEnum();}
69
77
 
70
 
        inline static void CorrectEndianess(HashWordType *out, const HashWordType *in, size_t byteCount)
 
78
        inline static void CorrectEndianess(HashWordType *out, const HashWordType *in, unsigned int byteCount)
71
79
        {
72
80
                ConditionalByteReverse(T_Endianness::ToEnum(), out, in, byteCount);
73
81
        }
97
105
 
98
106
NAMESPACE_END
99
107
 
100
 
#ifdef CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES
101
 
#include "iterhash.cpp"
102
 
#endif
103
 
 
104
 
NAMESPACE_BEGIN(CryptoPP)
105
 
 
106
 
#ifdef WORD64_AVAILABLE
107
 
CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
108
 
CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word64, MessageAuthenticationCode>;
109
 
#endif
110
 
 
111
 
CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
112
 
CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word32, MessageAuthenticationCode>;
113
 
 
114
 
NAMESPACE_END
115
 
 
116
108
#endif