/*
* This routine writes each crc_table entry exactly once,
- * with the ccorrect final value. Thus, it is safe to call
+ * with the correct final value. Thus, it is safe to call
* even on a table that someone else is using concurrently.
*/
static void
}
-
/**
* Perform an incremental step in a CRC16 (for TCP/IP) calculation.
*
* @param sum current sum, initially 0
- * @param hdr buffer to calculate CRC over (must be 16-bit aligned)
+ * @param buf buffer to calculate CRC over (must be 16-bit aligned)
* @param len number of bytes in hdr, must be multiple of 2
* @return updated crc sum (must be subjected to GNUNET_CRYPTO_crc16_finish to get actual crc16)
*/
uint32_t
-GNUNET_CRYPTO_crc16_step (uint32_t sum, uint16_t * hdr, size_t len)
+GNUNET_CRYPTO_crc16_step (uint32_t sum, const void *buf, size_t len)
{
- GNUNET_assert (0 == (len & 1));
+ const uint16_t *hdr = buf;
for (; len >= 2; len -= 2)
sum += *(hdr++);
if (len == 1)
- sum += *((unsigned char *) hdr);
+ sum += (*hdr) & ntohs(0xFF00);
return sum;
}
+
/**
* Convert results from GNUNET_CRYPTO_crc16_step to final crc16.
*
/**
* Calculate the checksum of a buffer in one step.
*
- * @param hdr buffer to calculate CRC over (must be 16-bit aligned)
+ * @param buf buffer to calculate CRC over (must be 16-bit aligned)
* @param len number of bytes in hdr, must be multiple of 2
* @return crc16 value
*/
uint16_t
-GNUNET_CRYPTO_crc16_n (uint16_t *hdr, size_t len)
+GNUNET_CRYPTO_crc16_n (const void *buf, size_t len)
{
+ const uint16_t *hdr = buf;
uint32_t sum = GNUNET_CRYPTO_crc16_step (0, hdr, len);
return GNUNET_CRYPTO_crc16_finish (sum);