Crypto++

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

crc.h

    00001 #ifndef CRYPTOPP_CRC32_H
    00002 #define CRYPTOPP_CRC32_H
    00003
    00004 #include "cryptlib.h"
    00005
    00006 NAMESPACE_BEGIN(CryptoPP)
    00007
    00008 const word32 CRC32_NEGL = 0xffffffffL;
    00009
    00010 #ifdef IS_LITTLE_ENDIAN
    00011 #define CRC32_INDEX(c) (c & 0xff)
    00012 #define CRC32_SHIFTED(c) (c >> 8)
    00013 #else
    00014 #define CRC32_INDEX(c) (c >> 24)
    00015 #define CRC32_SHIFTED(c) (c << 8)
    00016 #endif
    00017
    00018 //! CRC Checksum Calculation
    00019 class CRC32 : public HashTransformation
    00020 {
    00021 public:
    00022     CRYPTOPP_CONSTANT(DIGESTSIZE = 4)
    00023     CRC32();
    00024     void Update(const byte *input, size_t length);
    00025     void TruncatedFinal(byte *hash, size_t size);
    00026     unsigned int DigestSize() const {return DIGESTSIZE;}
    00027     static const char * StaticAlgorithmName() {return "CRC32";}
    00028     std::string AlgorithmName() const {return StaticAlgorithmName();}
    00029
    00030     void UpdateByte(byte b) {m_crc = m_tab[CRC32_INDEX(m_crc) ^ b] ^ CRC32_SHIFTED(m_crc);}
    00031     byte GetCrcByte(size_t i) const {return ((byte *)&(m_crc))[i];}
    00032
    00033 private:
    00034     void Reset() {m_crc = CRC32_NEGL;}
    00035
    00036     static const word32 m_tab[256];
    00037     word32 m_crc;
    00038 };
    00039
    00040 NAMESPACE_END
    00041
    00042 #endif