Subversion Repositories pentevo

Rev

Rev 908 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. #include <stdint.h>
  2.  
  3. #include "crc.h"
  4.  
  5. uint16_t calc_crc(uint8_t * buffer, int32_t length)
  6. {
  7.         static int crc_table_initialized = 0;
  8.  
  9.         static uint16_t crc_table[256];
  10.  
  11.  
  12.         uint16_t crc;
  13.  
  14.  
  15.         // initialize crc table, if needed
  16.         if( !crc_table_initialized )
  17.         {
  18.                 for(int i=0;i<256;i++)
  19.                 {
  20.                         crc = i<<8;
  21.  
  22.                         for(int j=0;j<8;j++)
  23.                                 crc = (crc<<1) ^ ((crc & 0x8000) ? CRC_POLY : 0);
  24.  
  25.                         crc_table[i] = crc;
  26.                 }
  27.  
  28.                 crc_table_initialized = 1;
  29.         }
  30.  
  31.  
  32.         // IV
  33.         crc = 0xFFFF;
  34.  
  35.         // byte loop
  36.         for(int32_t i=0;i<length;i++)
  37.         {
  38.                 crc = crc_table[ (crc>>8) ^ buffer[i] ] ^ (crc<<8);
  39.         }
  40.  
  41.         return crc;
  42. }
  43.