1 1.1 jkunz /* 2 1.1 jkunz * File: crc.h 3 1.1 jkunz * 4 1.1 jkunz * Copyright (c) Freescale Semiconductor, Inc. All rights reserved. 5 1.1 jkunz * See included license file for license details. 6 1.1 jkunz */ 7 1.1 jkunz #if !defined(_crc_h_) 8 1.1 jkunz #define CRYPTOPP_CRC32_H 9 1.1 jkunz 10 1.1 jkunz #include "stdafx.h" 11 1.1 jkunz 12 1.1 jkunz const uint32_t CRC32_NEGL = 0xffffffffL; 13 1.1 jkunz 14 1.1 jkunz #ifdef __LITTLE_ENDIAN__ 15 1.1 jkunz #define CRC32_INDEX(c) (c & 0xff) 16 1.1 jkunz #define CRC32_SHIFTED(c) (c >> 8) 17 1.1 jkunz #else 18 1.1 jkunz #define CRC32_INDEX(c) (c >> 24) 19 1.1 jkunz #define CRC32_SHIFTED(c) (c << 8) 20 1.1 jkunz #endif 21 1.1 jkunz 22 1.1 jkunz //! CRC Checksum Calculation 23 1.1 jkunz class CRC32 24 1.1 jkunz { 25 1.1 jkunz public: 26 1.1 jkunz enum 27 1.1 jkunz { 28 1.1 jkunz DIGESTSIZE = 4 29 1.1 jkunz }; 30 1.1 jkunz 31 1.1 jkunz CRC32(); 32 1.1 jkunz 33 1.1 jkunz void update(const uint8_t * input, unsigned length); 34 1.1 jkunz 35 1.1 jkunz void truncatedFinal(uint8_t * hash, unsigned size); 36 1.1 jkunz 37 1.1 jkunz void updateByte(uint8_t b) { m_crc = m_tab[CRC32_INDEX(m_crc) ^ b] ^ CRC32_SHIFTED(m_crc); } 38 1.1 jkunz uint8_t getCrcByte(unsigned i) const { return ((uint8_t *)&(m_crc))[i]; } 39 1.1 jkunz 40 1.1 jkunz private: 41 1.1 jkunz void reset() { m_crc = CRC32_NEGL; m_count = 0; } 42 1.1 jkunz 43 1.1 jkunz static const uint32_t m_tab[256]; 44 1.1 jkunz uint32_t m_crc; 45 1.1 jkunz unsigned m_count; 46 1.1 jkunz }; 47 1.1 jkunz 48 1.1 jkunz #endif // _crc_h_ 49