add crc8
authorChristian Grothoff <christian@grothoff.org>
Sun, 17 Jan 2016 16:05:16 +0000 (16:05 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sun, 17 Jan 2016 16:05:16 +0000 (16:05 +0000)
src/include/gnunet_crypto_lib.h
src/util/crypto_crc.c

index 77b4d04524248e51342a8585a6556f4bb416307f..23caade1293f3f570cc800ec2b6404e6bfb40833 100644 (file)
@@ -402,6 +402,19 @@ void
 GNUNET_CRYPTO_seed_weak_random (int32_t seed);
 
 
+/**
+ * @ingroup hash
+ * Calculate the checksum of a buffer in one step.
+ *
+ * @param buf buffer to calculate CRC over
+ * @param len number of bytes in @a buf
+ * @return crc8 value
+ */
+uint8_t
+GNUNET_CRYPTO_crc8_n (const void *buf,
+                      size_t len);
+
+
 /**
  * Perform an incremental step in a CRC16 (for TCP/IP) calculation.
  *
@@ -439,6 +452,8 @@ GNUNET_CRYPTO_crc16_n (const void *buf,
                        size_t len);
 
 
+
+
 /**
  * @ingroup hash
  * Compute the CRC32 checksum for the first len
index ec2e8068308e7b920c1cce645219250f354ffce3..b5df01959a3a8f6d732e6a2a472056b27bdb0543 100644 (file)
@@ -165,5 +165,35 @@ GNUNET_CRYPTO_crc16_n (const void *buf, size_t len)
 }
 
 
+/**
+ * @ingroup hash
+ * Calculate the checksum of a buffer in one step.
+ *
+ * @param buf buffer to calculate CRC over
+ * @param len number of bytes in @a buf
+ * @return crc8 value
+ */
+uint8_t
+GNUNET_CRYPTO_crc8_n (const void *buf,
+                      size_t len)
+{
+  const uint8_t *data = buf;
+  unsigned int crc = 0;
+  int i;
+  int j;
+
+  for (j = len; 0 != j; j--)
+  {
+    crc ^= (*data++ << 8);
+    for (i = 8; 0 != i; i--)
+    {
+      if (0 != (crc & 0x8000))
+        crc ^= (0x1070 << 3);
+      crc <<= 1;
+    }
+  }
+  return (uint8_t) (crc >> 8);
+}
+
 
 /* end of crypto_crc.c */