X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fcrypto_crc.c;h=3d8e23e24db0cb8e53b769e06780deb104311b96;hb=a90f8587871a66a71c802c2c8823c7a44d0f6d2c;hp=386f161385d20b64c9a98bbc005b43f21029b8b5;hpb=6b671ee2e7473536db1c9a0215b47f460d0fce88;p=oweals%2Fgnunet.git diff --git a/src/util/crypto_crc.c b/src/util/crypto_crc.c index 386f16138..3d8e23e24 100644 --- a/src/util/crypto_crc.c +++ b/src/util/crypto_crc.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2006 Christian Grothoff (and other contributing authors) + Copyright (C) 2001, 2002, 2003, 2004, 2006 GNUnet e.V. - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + SPDX-License-Identifier: AGPL3.0-or-later For the actual CRC-32 code: Copyright abandoned; this code is in the public domain. @@ -28,9 +28,9 @@ * @author Christian Grothoff */ #include "platform.h" -#include "gnunet_util_lib.h" +#include "gnunet_crypto_lib.h" -#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) +#define LOG(kind,...) GNUNET_log_from (kind, "util-crypto-crc", __VA_ARGS__) /* Avoid wasting space on 8-byte longs. */ #if UINT_MAX >= 0xffffffff @@ -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 */