Diff for /libelwix/src/crc.c between versions 1.5 and 1.6.36.1

version 1.5, 2017/12/08 00:07:48 version 1.6.36.1, 2024/10/10 23:53:00
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2015Copyright 2004 - 2024
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 46  SUCH DAMAGE. Line 46  SUCH DAMAGE.
 #include "global.h"  #include "global.h"
   
   
   /* CRC16 poly */
   const u_short crc_16poly = 0x1021;
   
 /* Adler module */  /* Adler module */
 const u_int crc_modAdler = 0xFFF1L;  const u_int crc_modAdler = 0xFFF1L;
   
Line 64  const crcPoly_t crc_Poly[] = { Line 67  const crcPoly_t crc_Poly[] = {
         { 16, (u_int) 0x8005, "CRC-16-IBM" },           { 16, (u_int) 0x8005, "CRC-16-IBM" }, 
         { 24, (u_int) 0x864CFB, "CRC-24-Radix64" },           { 24, (u_int) 0x864CFB, "CRC-24-Radix64" }, 
         { 30, (u_int) 0x2030B9C7, "CRC-30-CDMA" },           { 30, (u_int) 0x2030B9C7, "CRC-30-CDMA" }, 
        { 32, (u_int) 0x04C11DB7, "CRC-32-802.3" }        { 32, (u_int) 0x04C11DB7, "CRC-32-802.3" },
         { 16, (u_int) 0x1021, "CRC-16-CCITT" },
         { 16, (u_int) 0x8408, "CRC-16-XMODEM" }
 };  };
   
   
Line 73  const crcPoly_t crc_Poly[] = { Line 78  const crcPoly_t crc_Poly[] = {
  *   *
  * @crcNum = Number for reflection   * @crcNum = Number for reflection
  * @crcBits = Number width bits    * @crcBits = Number width bits 
 * return: -1 error, !=-1 reflecting number * return: reflecting number
  */   */
 u_int  u_int
 crcReflect(u_int crcNum, u_char crcBits)  crcReflect(u_int crcNum, u_char crcBits)
Line 95  crcReflect(u_int crcNum, u_char crcBits) Line 100  crcReflect(u_int crcNum, u_char crcBits)
  * @RevOpts = Options for computation (REVOPTS_REVERTBYTE, REVOPTS_REVERTCRC)   * @RevOpts = Options for computation (REVOPTS_REVERTBYTE, REVOPTS_REVERTCRC)
  * @initCRC = Initial CRC value   * @initCRC = Initial CRC value
  * @xorCRC = Last xor CRC value   * @xorCRC = Last xor CRC value
 * return: -1 error, !=-1 CRC checksum * return: CRC checksum
  */   */
 u_int  u_int
 crcCalc(u_char * __restrict psBuf, u_int bufLen, u_char crcBits, u_char RevOpts, u_int initCRC, u_int xorCRC)  crcCalc(u_char * __restrict psBuf, u_int bufLen, u_char crcBits, u_char RevOpts, u_int initCRC, u_int xorCRC)
 {  {
        const u_int bits = sizeof(int) * 8 - crcBits;        u_int bits = sizeof(int) * 8;
         u_int poly, crchibit, crc;          u_int poly, crchibit, crc;
         register u_int i, j, b, ch;          register u_int i, j, b, ch;
   
Line 109  crcCalc(u_char * __restrict psBuf, u_int bufLen, u_cha Line 114  crcCalc(u_char * __restrict psBuf, u_int bufLen, u_cha
         switch (crcBits) {          switch (crcBits) {
                 case 1:                  case 1:
                         poly = crc_Poly[0].poly_num;                          poly = crc_Poly[0].poly_num;
                           bits -= crc_Poly[0].poly_bits;
                         break;                          break;
                 case 4:                  case 4:
                         poly = crc_Poly[1].poly_num;                          poly = crc_Poly[1].poly_num;
                           bits -= crc_Poly[1].poly_bits;
                         break;                          break;
                 case 5:                  case 5:
                         poly = crc_Poly[2].poly_num;                          poly = crc_Poly[2].poly_num;
                           bits -= crc_Poly[2].poly_bits;
                         break;                          break;
                 case 6:                  case 6:
                         poly = crc_Poly[3].poly_num;                          poly = crc_Poly[3].poly_num;
                           bits -= crc_Poly[3].poly_bits;
                         break;                          break;
                 case 7:                  case 7:
                         poly = crc_Poly[4].poly_num;                          poly = crc_Poly[4].poly_num;
                           bits -= crc_Poly[4].poly_bits;
                         break;                          break;
                 case 8:                  case 8:
                         poly = crc_Poly[5].poly_num;                          poly = crc_Poly[5].poly_num;
                           bits -= crc_Poly[5].poly_bits;
                         break;                          break;
                 case 10:                  case 10:
                         poly = crc_Poly[6].poly_num;                          poly = crc_Poly[6].poly_num;
                           bits -= crc_Poly[6].poly_bits;
                         break;                          break;
                 case 11:                  case 11:
                         poly = crc_Poly[7].poly_num;                          poly = crc_Poly[7].poly_num;
                           bits -= crc_Poly[7].poly_bits;
                         break;                          break;
                 case 12:                  case 12:
                         poly = crc_Poly[8].poly_num;                          poly = crc_Poly[8].poly_num;
                           bits -= crc_Poly[8].poly_bits;
                         break;                          break;
                 case 15:                  case 15:
                         poly = crc_Poly[9].poly_num;                          poly = crc_Poly[9].poly_num;
                           bits -= crc_Poly[9].poly_bits;
                         break;                          break;
                 case 16:                  case 16:
                         poly = crc_Poly[10].poly_num;                          poly = crc_Poly[10].poly_num;
                           bits -= crc_Poly[10].poly_bits;
                         break;                          break;
                 case 24:                  case 24:
                         poly = crc_Poly[11].poly_num;                          poly = crc_Poly[11].poly_num;
                           bits -= crc_Poly[11].poly_bits;
                         break;                          break;
                 case 30:                  case 30:
                         poly = crc_Poly[12].poly_num;                          poly = crc_Poly[12].poly_num;
                           bits -= crc_Poly[12].poly_bits;
                         break;                          break;
                 case 32:                  case 32:
                         poly = crc_Poly[13].poly_num;                          poly = crc_Poly[13].poly_num;
                           bits -= crc_Poly[13].poly_bits;
                         break;                          break;
                   case 161:
                           poly = crc_Poly[14].poly_num;
                           bits -= crc_Poly[14].poly_bits;
                           crcBits = crc_Poly[14].poly_bits;
                           break;
                   case 162:
                           poly = crc_Poly[15].poly_num;
                           bits -= crc_Poly[15].poly_bits;
                           crcBits = crc_Poly[15].poly_bits;
                           break;
                 default:                  default:
                         elwix_SetErr(EINVAL, "crcCalc(): Unsupported CRC method!!!");                          elwix_SetErr(EINVAL, "crcCalc(): Unsupported CRC method!!!");
                         return -1;                          return -1;
Line 187  crcCalc(u_char * __restrict psBuf, u_int bufLen, u_cha Line 216  crcCalc(u_char * __restrict psBuf, u_int bufLen, u_cha
   
   
 /*  /*
    * crc16_xy() - Checksum calculation in X/Y modem communication
    *
    * @buf = Data for calculation
    * @bufLen = Length of data
    * return: Checksum
    */
   u_short
   crc16_xy(u_char * __restrict buf, int bufLen)
   {
           u_short crc, x;
           register u_short i;
   
           assert(buf);
   
           for (crc = 0; bufLen > 0; bufLen--, buf++)
                   for (i = 0x80; i; i >>= 1) {
                           x = crc >> 15;
                           crc <<= 1;
   
                           if (*buf & i)
                                   crc++;
                           if (x)
                                   crc ^= crc_16poly;
                   }
   
           for (i = 0; i < 16; i++) {
                   x = crc >> 15;
                   crc <<= 1;
   
                   if (x)
                           crc ^= crc_16poly;
           }
   
           return crc;
   }
   
   /*
    * crc16_ccitt() - Checksum calculation
    *
    * @buf = Data for calculation
    * @bufLen = Length of data
    * return: Checksum
    */
   u_short
   crc16_ccitt(u_char * __restrict buf, int bufLen)
   {
           u_short crc;
           register u_char i;
   
           for (crc = 0; bufLen > 0; bufLen--, buf++) {
                   crc ^= (u_short) *buf << 8;
                   for (i = 0x80; i; i >>= 1)
                           if (crc & 0x8000)
                                   crc = crc << 1 ^ crc_16poly;
                           else
                                   crc <<= 1;
           }
   
           return crc;
   }
   
   /*
  * crcIP() - Checksum in IP communication   * crcIP() - Checksum in IP communication
  *   *
  * @buf = Data for calculation   * @buf = Data for calculation
  * @bufLen = Length of data   * @bufLen = Length of data
 * return: -1 error, !=-1 Checksum * return: Checksum
  */   */
 u_short  u_short
 crcIP(u_char * __restrict buf, int bufLen)  crcIP(u_char * __restrict buf, int bufLen)
Line 220  crcIP(u_char * __restrict buf, int bufLen) Line 311  crcIP(u_char * __restrict buf, int bufLen)
  * @buf = Data for calculation   * @buf = Data for calculation
  * @bufLen = Length of data   * @bufLen = Length of data
  * @th = TCP header   * @th = TCP header
 * return: -1 error, !=-1 Checksum * return: Checksum
  */   */
 u_short  u_short
 crcTCP(struct in_addr src, struct in_addr dst, u_char * __restrict th)  crcTCP(struct in_addr src, struct in_addr dst, u_char * __restrict th)
Line 250  crcTCP(struct in_addr src, struct in_addr dst, u_char  Line 341  crcTCP(struct in_addr src, struct in_addr dst, u_char 
  * @buf = Data for calculation   * @buf = Data for calculation
  * @bufLen = Length of data   * @bufLen = Length of data
  * @uh = UDP header   * @uh = UDP header
 * return: -1 error, !=-1 Checksum * return: Checksum
  */   */
 u_short  u_short
 crcUDP(struct in_addr src, struct in_addr dst, u_char * __restrict uh)  crcUDP(struct in_addr src, struct in_addr dst, u_char * __restrict uh)
Line 280  crcUDP(struct in_addr src, struct in_addr dst, u_char  Line 371  crcUDP(struct in_addr src, struct in_addr dst, u_char 
  *   *
  * @nBuf = Data for calculation   * @nBuf = Data for calculation
  * @bufLen = Length of data   * @bufLen = Length of data
 * return: -1 error, !=-1 Checksum * return: Checksum
  */   */
 u_short  u_short
 crcFletcher16(u_short * __restrict nBuf, int bufLen)  crcFletcher16(u_short * __restrict nBuf, int bufLen)
Line 312  crcFletcher16(u_short * __restrict nBuf, int bufLen) Line 403  crcFletcher16(u_short * __restrict nBuf, int bufLen)
  *   *
  * @nBuf = Data for calculation   * @nBuf = Data for calculation
  * @bufLen = Length of data   * @bufLen = Length of data
 * return: -1 error, !=-1 Checksum * return: Checksum
  */   */
 u_int  u_int
 crcFletcher(u_short * __restrict nBuf, int bufLen)  crcFletcher(u_short * __restrict nBuf, int bufLen)
Line 343  crcFletcher(u_short * __restrict nBuf, int bufLen) Line 434  crcFletcher(u_short * __restrict nBuf, int bufLen)
  *   *
  * @psBuf = Data for calculation   * @psBuf = Data for calculation
  * @bufLen = Length of data   * @bufLen = Length of data
 * return: -1 error, !=-1 Checksum * return: Checksum
  */   */
 u_int  u_int
 crcAdler(u_char * __restrict psBuf, int bufLen)  crcAdler(u_char * __restrict psBuf, int bufLen)

Removed from v.1.5  
changed lines
  Added in v.1.6.36.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>