package crc

const crc16X25Poly = 0x8408

var crc16X25Table [256]uint16

func init() {
	for i := range crc16X25Table {
		crc := uint16(i)
		for j := 0; j < 8; j++ {
			if crc&1 != 0 {
				crc = (crc >> 1) ^ crc16X25Poly
			} else {
				crc >>= 1
			}
		}
		crc16X25Table[i] = crc
	}
}

func CRC16X25(data []byte) uint16 {
	crc := uint16(0xFFFF)
	for _, b := range data {
		crc = (crc >> 8) ^ crc16X25Table[byte(crc)^b]
	}
	return ^crc
}

func CRC16X25Bytes(data []byte) (hi, lo byte) {
	c := CRC16X25(data)
	return byte(c >> 8), byte(c & 0xFF)
}
