]>
git.zerfleddert.de Git - proxmark3-svn/blob - common/crc16.c
d48df3b2c9f650720c1a4c39810010ce4f8ded44
1 //-----------------------------------------------------------------------------
2 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 // at your option, any later version. See the LICENSE.txt file for the text of
5 //-----------------------------------------------------------------------------
7 //-----------------------------------------------------------------------------
12 unsigned short update_crc16( unsigned short crc
, unsigned char c
)
14 unsigned short i
, v
, tcrc
= 0;
17 for (i
= 0; i
< 8; i
++) {
18 tcrc
= ( (tcrc
^ v
) & 1 ) ? ( tcrc
>> 1 ) ^ 0x8408 : tcrc
>> 1;
22 return ((crc
>> 8) ^ tcrc
)&0xffff;
25 uint16_t crc16(uint8_t const *message
, int length
, uint16_t remainder
, uint16_t polynomial
) {
27 if (length
== 0) return (~remainder
);
29 for (int byte
= 0; byte
< length
; ++byte
) {
30 remainder
^= (message
[byte
] << 8);
31 for (uint8_t bit
= 8; bit
> 0; --bit
) {
32 if (remainder
& 0x8000) {
33 remainder
= (remainder
<< 1) ^ polynomial
;
35 remainder
= (remainder
<< 1);
42 uint16_t crc16_ccitt(uint8_t const *message
, int length
) {
43 return crc16(message
, length
, 0xffff, 0x1021);
46 uint16_t crc16_ccitt_kermit(uint8_t const *message
, int length
) {
47 if (length
== 0) return 0;
48 uint32_t crc
= 0, q
= 0;
51 for (int i
= 0; i
< length
; i
++){
54 crc
= (crc
>> 4) ^ (q
* 0x1081);
55 q
= (crc
^ (c
>> 4)) & 0xF;
56 crc
= (crc
>> 4) ^ (q
* 0x1081);