Home | History | Annotate | Line # | Download | only in common
      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