コード例 #1
0
ファイル: crc32.c プロジェクト: LilyRobotics/libtomcrypt
void crc32_update(crc32_state *ctx, const unsigned char *input, unsigned long length)
{
   LTC_ARGCHKVD(ctx != NULL);
   LTC_ARGCHKVD(input != NULL);
   ulong32 crc = ctx->crc;

   while (length--)
      crc = crc32_m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc);

   ctx->crc = crc;
}
コード例 #2
0
ファイル: EbmlCrc32.cpp プロジェクト: Azpidatziak/mkvtoolnix
bool EbmlCrc32::CheckCRC(uint32 inputCRC, const binary *input, uint32 length)
{
	uint32 crc = CRC32_NEGL;

	for(; !IsAligned<uint32>(input) && length > 0; length--)
		crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc);

	while (length >= 4)
	{
		crc ^= *(const uint32 *)input;
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		length -= 4;
		input += 4;
	}

	while (length--)
		crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc);

	//Now we finalize the CRC32
	crc ^= CRC32_NEGL;
	
	if (crc == inputCRC)
		return true;
	
	return false;
};
コード例 #3
0
ファイル: crc.cpp プロジェクト: misoxxx/babiakAmbulancia
void CRC32C::Update(const byte *s, size_t n)
{
#if CRYPTOPP_BOOL_SSE4_INTRINSICS_AVAILABLE
	if (HasSSE4())
	{
		for(; !IsAligned<word32>(s) && n > 0; s++, n--)
			m_crc = _mm_crc32_u8(m_crc, *s);

		for(; n > 4; s+=4, n-=4)
			m_crc = _mm_crc32_u32(m_crc, *(const word32 *)(void*)s);

		for(; n > 0; s++, n--)
			m_crc = _mm_crc32_u8(m_crc, *s);

		return;
	}
#elif (CRYPTOPP_BOOL_ARM_CRC32_INTRINSICS_AVAILABLE)
	if (HasCRC32())
	{
		for(; !IsAligned<word32>(s) && n > 0; s++, n--)
			m_crc = __crc32cb(m_crc, *s);

		for(; n > 4; s+=4, n-=4)
			m_crc = __crc32cw(m_crc, *(const word32 *)(void*)s);

		for(; n > 0; s++, n--)
			m_crc = __crc32cb(m_crc, *s);

		return;
	}
#endif

	word32 crc = m_crc;

	for(; !IsAligned<word32>(s) && n > 0; n--)
		crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc);

	while (n >= 4)
	{
		crc ^= *(const word32 *)(void*)s;
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		n -= 4;
		s += 4;
	}

	while (n--)
		crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc);

	m_crc = crc;
}
コード例 #4
0
ファイル: crc32.cpp プロジェクト: stopiccot/InnoExtract
void crc32::update(const char * s, size_t n) {
	
	for(; (size_t(s) % 4 != 0) && n > 0; n--) {
		crc = table[CRC32_INDEX(crc) ^ uint8_t(*s++)] ^ CRC32_SHIFTED(crc);
	}
	
	while(n >= 4) {
		crc ^= *reinterpret_cast<const uint32_t *>(s);
		crc = table[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = table[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = table[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = table[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		n -= 4;
		s += 4;
	}
	
	while(n--) {
		crc = table[CRC32_INDEX(crc) ^ uint8_t(*s++)] ^ CRC32_SHIFTED(crc);
	}
}
コード例 #5
0
ファイル: EbmlCrc32.cpp プロジェクト: Azpidatziak/mkvtoolnix
void EbmlCrc32::Update(const binary *input, uint32 length)
{
	uint32 crc = m_crc;

	for(; !IsAligned<uint32>(input) && length > 0; length--)
		crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc);

	while (length >= 4)
	{
		crc ^= *(const uint32 *)input;
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		length -= 4;
		input += 4;
	}

	while (length--)
		crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc);

	m_crc = crc;
}
コード例 #6
0
ファイル: Crc.cpp プロジェクト: lcs2/carpg
void CRC32::Update(const byte *s, size_t n)
{
	uint crc = m_crc;

	for(; !IsAligned<uint>(s) && n > 0; n--)
		crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc);

	while (n >= 4)
	{
		crc ^= *(const uint*)s;
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc);
		n -= 4;
		s += 4;
	}

	while (n--)
		crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc);

	m_crc = crc;
}
コード例 #7
0
ファイル: EbmlCrc32.cpp プロジェクト: Azpidatziak/mkvtoolnix
void EbmlCrc32::UpdateByte(binary b)
{
    m_crc = m_tab[CRC32_INDEX(m_crc) ^ b] ^ CRC32_SHIFTED(m_crc);
}