( solved) Checksum experts ,  free german beer  - Page 1
Forum section: electronics / projects

author: Gazello
author_rank: Contributor
timestamp: April 10, 2018, 09:38:38 pm
content: Hello,I am trying to figure out the checksum of a welder machine remote control . To work on any other welder it needs to send two identify bytes + a new checksum .I already tried everything i know including XOR SUM .-256.. CRC8 ( CRC reveng) but no luck to figure out the checksum algorithum . I collected all the potentiometer value from 0 to 255 I can simply replay these values and they work , but I still need the checksum for the identify.Data is simply the 10 bit ADC of the PIC spread to 2 bytes . One byte ist the overflow ( 0-255 ) the other byte is +92 for every ADC ( 1024) value.Anyone a real expert in CRC or checksum ?Attached the open office calc with 255 datasets in decimal and hex . It goes along with xor but not the identical result , except 0.Please see also interesting datasets below the 255 datasets + the identifyI did Open office cal, excel , it is easier to sort the data by checksum or pot value or XOR result.Thanks and no the manufacture gives no further help at all.To make it a little more interesting, free beer from germany ( any brand you wish ) for the magician who can solve this puzzle.RegardsMarkus

author: hamster_nz
author_rank: Super Contributor
timestamp: April 10, 2018, 09:48:36 pm
content: A text file would help... (I've no open office here, and it is machine readable for analysis)

author: Nominal Animal
author_rank: Super Contributor
timestamp: April 10, 2018, 10:07:26 pm
content: Attached is the same dataset in CSV format (comma separator, LF newlines, non-decimal values quoted).Each message is eight bytes long, and the checksum is a single byte. The same dataset, in hexadecimal only:Code:0x31 0x05 0x01 0x01 0x5F 0x5A 0x00 0x32 : 0x000x31 0x05 0x01 0x01 0xA0 0xA5 0x00 0x32 : 0x000x31 0x05 0x01 0x01 0x4B 0x6B 0x01 0x32 : 0x010x31 0x05 0x01 0x01 0x1B 0xAC 0x05 0x32 : 0x050x31 0x05 0x01 0x01 0x12 0xCB 0x06 0x32 : 0x060x31 0x05 0x01 0x01 0xED 0x34 0x06 0x32 : 0x060x31 0x05 0x01 0x01 0xEC 0x10 0x07 0x32 : 0x070x31 0x05 0x01 0x01 0x18 0x6D 0x09 0x32 : 0x090x31 0x05 0x01 0x01 0x22 0x57 0x09 0x32 : 0x090x31 0x05 0x01 0x01 0xE7 0x92 0x09 0x32 : 0x090x31 0x05 0x01 0x01 0x6A 0x71 0x0A 0x32 : 0x0A0x31 0x05 0x01 0x01 0xF7 0x30 0x0C 0x32 : 0x0C0x31 0x05 0x01 0x01 0xF7 0x30 0x0C 0x32 : 0x0C0x31 0x05 0x01 0x01 0x45 0xC9 0x0E 0x32 : 0x0E0x31 0x05 0x01 0x01 0xBA 0x36 0x0E 0x32 : 0x0E0x31 0x05 0x01 0x01 0x24 0x8D 0x0F 0x32 : 0x0F0x31 0x05 0x01 0x01 0x07 0xC6 0x13 0x32 : 0x130x31 0x05 0x01 0x01 0x4C 0x74 0x14 0x32 : 0x140x31 0x05 0x01 0x01 0x7D 0x45 0x14 0x32 : 0x140x31 0x05 0x01 0x01 0xB3 0x8B 0x14 0x32 : 0x140x31 0x05 0x01 0x01 0xDE 0xC3 0x15 0x32 : 0x150x31 0x05 0x01 0x01 0x52 0x04 0x17 0x32 : 0x170x31 0x05 0x01 0x01 0x83 0xD5 0x17 0x32 : 0x170x31 0x05 0x01 0x01 0xAD 0xFB 0x17 0x32 : 0x170x31 0x05 0x01 0x01 0x09 0xF3 0x18 0x32 : 0x180x31 0x05 0x01 0x01 0xF6 0x0C 0x18 0x32 : 0x180x31 0x05 0x01 0x01 0x47 0xF6 0x1A 0x32 : 0x1A0x31 0x05 0x01 0x01 0x0C 0x44 0x1D 0x32 : 0x1D0x31 0x05 0x01 0x01 0x56 0x70 0x1E 0x32 : 0x1E0x31 0x05 0x01 0x01 0x60 0x63 0x1F 0x32 : 0x1F0x31 0x05 0x01 0x01 0x9F 0x9C 0x1F 0x32 : 0x1F0x31 0x05 0x01 0x01 0x0A 0x05 0x21 0x32 : 0x210x31 0x05 0x01 0x01 0xC0 0xCF 0x21 0x32 : 0x210x31 0x05 0x01 0x01 0xF5 0xFA 0x21 0x32 : 0x210x31 0x05 0x01 0x01 0x2B 0x4A 0x22 0x32 : 0x220x31 0x05 0x01 0x01 0xA1 0xC0 0x22 0x32 : 0x220x31 0x05 0x01 0x01 0x52 0x16 0x23 0x32 : 0x230x31 0x05 0x01 0x01 0xA6 0x3E 0x25 0x32 : 0x250x31 0x05 0x01 0x01 0x3B 0xCD 0x26 0x32 : 0x260x31 0x05 0x01 0x01 0x2C 0x53 0x28 0x32 : 0x280x31 0x05 0x01 0x01 0xF1 0x8E 0x28 0x32 : 0x280x31 0x05 0x01 0x01 0x6B 0x7A 0x2B 0x32 : 0x2B0x31 0x05 0x01 0x01 0x94 0x85 0x2B 0x32 : 0x2B0x31 0x05 0x01 0x01 0x09 0xE1 0x2C 0x32 : 0x2C0x31 0x05 0x01 0x01 0x6B 0x83 0x2C 0x32 : 0x2C0x31 0x05 0x01 0x01 0x94 0x7C 0x2C 0x32 : 0x2C0x31 0x05 0x01 0x01 0xF6 0x1E 0x2C 0x32 : 0x2C0x31 0x05 0x01 0x01 0x33 0xFE 0x2D 0x32 : 0x2D0x31 0x05 0x01 0x01 0x3C 0xF1 0x2D 0x32 : 0x2D0x31 0x05 0x01 0x01 0xC3 0x0E 0x2D 0x32 : 0x2D0x31 0x05 0x01 0x01 0x1A 0x9A 0x30 0x32 : 0x300x31 0x05 0x01 0x01 0x6F 0xEF 0x30 0x32 : 0x300x31 0x05 0x01 0x01 0xA0 0xB7 0x34 0x32 : 0x340x31 0x05 0x01 0x01 0xAB 0xBC 0x34 0x32 : 0x340x31 0x05 0x01 0x01 0x72 0x2E 0x36 0x32 : 0x360x31 0x05 0x01 0x01 0x8D 0xD1 0x36 0x32 : 0x360x31 0x05 0x01 0x01 0x36 0x4F 0x37 0x32 : 0x370x31 0x05 0x01 0x01 0x57 0x82 0x38 0x32 : 0x380x31 0x05 0x01 0x01 0xA8 0x7D 0x38 0x32 : 0x380x31 0x05 0x01 0x01 0xB2 0x67 0x38 0x32 : 0x380x31 0x05 0x01 0x01 0x22 0x60 0x3C 0x32 : 0x3C0x31 0x05 0x01 0x01 0x00 0x09 0x3E 0x32 : 0x3E0x31 0x05 0x01 0x01 0xEA 0xE3 0x3E 0x32 : 0x3E0x31 0x05 0x01 0x01 0x0D 0x56 0x40 0x32 : 0x400x31 0x05 0x01 0x01 0x74 0x64 0x42 0x32 : 0x420x31 0x05 0x01 0x01 0x1C 0xD0 0x44 0x32 : 0x440x31 0x05 0x01 0x01 0x50 0xD7 0x46 0x32 : 0x460x31 0x05 0x01 0x01 0x85 0x02 0x46 0x32 : 0x460x31 0x05 0x01 0x01 0x1C 0xBE 0x47 0x32 : 0x470x31 0x05 0x01 0x01 0x9B 0x39 0x47 0x32 : 0x470x31 0x05 0x01 0x01 0x5F 0x51 0x48 0x32 : 0x480x31 0x05 0x01 0x01 0xA0 0xAE 0x48 0x32 : 0x480x31 0x05 0x01 0x01 0xC1 0xEA 0x49 0x32 : 0x490x31 0x05 0x01 0x01 0xF4 0xDF 0x49 0x32 : 0x490x31 0x05 0x01 0x01 0x72 0x37 0x4A 0x32 : 0x4A0x31 0x05 0x01 0x01 0x64 0xD8 0x4D 0x32 : 0x4D0x31 0x05 0x01 0x01 0x9B 0x27 0x4D 0x32 : 0x4D0x31 0x05 0x01 0x01 0x3C 0xE8 0x51 0x32 : 0x510x31 0x05 0x01 0x01 0x25 0x9F 0x52 0x32 : 0x520x31 0x05 0x01 0x01 0x91 0x2B 0x52 0x32 : 0x520x31 0x05 0x01 0x01 0x2D 0x6E 0x55 0x32 : 0x550x31 0x05 0x01 0x01 0xF9 0x5D 0x58 0x32 : 0x580x31 0x05 0x01 0x01 0x3A 0xBB 0x59 0x32 : 0x590x31 0x05 0x01 0x01 0xB1 0x5E 0x5A 0x32 : 0x5A0x31 0x05 0x01 0x01 0x6D 0xA7 0x5B 0x32 : 0x5B0x31 0x05 0x01 0x01 0x73 0x40 0x5C 0x32 : 0x5C0x31 0x05 0x01 0x01 0x80 0x96 0x5D 0x32 : 0x5D0x31 0x05 0x01 0x01 0xC8 0x95 0x5F 0x32 : 0x5F0x31 0x05 0x01 0x01 0xB5 0xC1 0x60 0x32 : 0x600x31 0x05 0x01 0x01 0x0E 0x5F 0x61 0x32 : 0x610x31 0x05 0x01 0x01 0xF1 0xA0 0x61 0x32 : 0x610x31 0x05 0x01 0x01 0x4A 0x50 0x63 0x32 : 0x630x31 0x05 0x01 0x01 0xB5 0xAF 0x63 0x32 : 0x630x31 0x05 0x01 0x01 0x1E 0xFD 0x64 0x32 : 0x640x31 0x05 0x01 0x01 0xC3 0x20 0x64 0x32 : 0x640x31 0x05 0x01 0x01 0x11 0xB9 0x66 0x32 : 0x660x31 0x05 0x01 0x01 0x87 0x2F 0x66 0x32 : 0x660x31 0x05 0x01 0x01 0x2B 0x41 0x6A 0x32 : 0x6A0x31 0x05 0x01 0x01 0x49 0x23 0x6A 0x32 : 0x6A0x31 0x05 0x01 0x01 0xB6 0xDC 0x6A 0x32 : 0x6A0x31 0x05 0x01 0x01 0x4E 0xB3 0x6E 0x32 : 0x6E0x31 0x05 0x01 0x01 0xB1 0x4C 0x6E 0x32 : 0x6E0x31 0x05 0x01 0x01 0x28 0xF0 0x6F 0x32 : 0x6F0x31 0x05 0x01 0x01 0xD7 0x0F 0x6F 0x32 : 0x6F0x31 0x05 0x01 0x01 0x62 0x99 0x71 0x32 : 0x710x31 0x05 0x01 0x01 0x9D 0x66 0x71 0x32 : 0x710x31 0x05 0x01 0x01 0x05 0x90 0x72 0x32 : 0x720x31 0x05 0x01 0x01 0xFA 0x6F 0x72 0x32 : 0x720x31 0x05 0x01 0x01 0x40 0x42 0x76 0x32 : 0x760x31 0x05 0x01 0x01 0x6A 0x68 0x76 0x32 : 0x760x31 0x05 0x01 0x01 0x95 0x97 0x76 0x32 : 0x760x31 0x05 0x01 0x01 0xBF 0xBD 0x76 0x32 : 0x760x31 0x05 0x01 0x01 0x1A 0x91 0x78 0x32 : 0x780x31 0x05 0x01 0x01 0x2F 0xA4 0x78 0x32 : 0x780x31 0x05 0x01 0x01 0xD1 0x7F 0x79 0x32 : 0x790x31 0x05 0x01 0x01 0x27 0xE7 0x7A 0x32 : 0x7A0x31 0x05 0x01 0x01 0x62 0xA2 0x7A 0x32 : 0x7A0x31 0x05 0x01 0x01 0xD9 0x3C 0x7B 0x32 : 0x7B0x31 0x05 0x01 0x01 0x8D 0xDA 0x7E 0x32 : 0x7E0x31 0x05 0x01 0x01 0xE8 0xBF 0x7E 0x32 : 0x7E0x31 0x05 0x01 0x01 0x51 0xE9 0x80 0x32 : 0x800x31 0x05 0x01 0x01 0x46 0xDB 0x81 0x32 : 0x810x31 0x05 0x01 0x01 0xB9 0x24 0x81 0x32 : 0x810x31 0x05 0x01 0x01 0xB0 0x43 0x82 0x32 : 0x820x31 0x05 0x01 0x01 0xBB 0x48 0x82 0x32 : 0x820x31 0x05 0x01 0x01 0x56 0x79 0x84 0x32 : 0x840x31 0x05 0x01 0x01 0x74 0x5B 0x84 0x32 : 0x840x31 0x05 0x01 0x01 0xA9 0x86 0x84 0x32 : 0x840x31 0x05 0x01 0x01 0x8A 0x80 0x85 0x32 : 0x850x31 0x05 0x01 0x01 0x97 0xD6 0x87 0x32 : 0x870x31 0x05 0x01 0x01 0x0F 0x8C 0x8B 0x32 : 0x8B0x31 0x05 0x01 0x01 0x52 0x0D 0x8D 0x32 : 0x8D0x31 0x05 0x01 0x01 0xAD 0xF2 0x8D 0x32 : 0x8D0x31 0x05 0x01 0x01 0xA9 0x98 0x8E 0x32 : 0x8E0x31 0x05 0x01 0x01 0x40 0x54 0x8F 0x32 : 0x8F0x31 0x05 0x01 0x01 0xBF 0xAB 0x8F 0x32 : 0x8F0x31 0x05 0x01 0x01 0x4B 0x59 0x90 0x32 : 0x900x31 0x05 0x01 0x01 0x0C 0x3B 0x91 0x32 : 0x910x31 0x05 0x01 0x01 0xF3 0xC4 0x91 0x32 : 0x910x31 0x05 0x01 0x01 0xB6 0xCA 0x93 0x32 : 0x930x31 0x05 0x01 0x01 0xE7 0x9B 0x93 0x32 : 0x930x31 0x05 0x01 0x01 0x71 0x13 0x99 0x32 : 0x990x31 0x05 0x01 0x01 0xAC 0xCE 0x99 0x32 : 0x990x31 0x05 0x01 0x01 0x2A 0x26 0x9A 0x32 : 0x9A0x31 0x05 0x01 0x01 0x60 0x6C 0x9A 0x32 : 0x9A0x31 0x05 0x01 0x01 0xD5 0xD9 0x9A 0x32 : 0x9A0x31 0x05 0x01 0x01 0x4B 0x62 0x9B 0x32 : 0x9B0x31 0x05 0x01 0x01 0x81 0xA8 0x9B 0x32 : 0x9B0x31 0x05 0x01 0x01 0xB4 0x9D 0x9B 0x32 : 0x9B0x31 0x05 0x01 0x01 0x12 0xC2 0x9C 0x32 : 0x9C0x31 0x05 0x01 0x01 0x86 0x1D 0x9E 0x32 : 0x9E0x31 0x05 0x01 0x01 0xA4 0x1A 0x9F 0x32 : 0x9F0x31 0x05 0x01 0x01 0xA4 0x1A 0x9F 0x32 : 0x9F0x31 0x05 0x01 0x01 0x45 0xD2 0xA0 0x32 : 0xA00x31 0x05 0x01 0x01 0x6F 0xDD 0xA1 0x32 : 0xA10x31 0x05 0x01 0x01 0x90 0x22 0xA1 0x32 : 0xA10x31 0x05 0x01 0x01 0x27 0xDE 0xA3 0x32 : 0xA30x31 0x05 0x01 0x01 0x93 0x6A 0xA3 0x32 : 0xA30x31 0x05 0x01 0x01 0xD8 0x21 0xA3 0x32 : 0xA30x31 0x05 0x01 0x01 0x00 0x00 0xA4 0x32 : 0xA40x31 0x05 0x01 0x01 0x55 0x55 0xA4 0x32 : 0xA40x31 0x05 0x01 0x01 0xAA 0xAA 0xA4 0x32 : 0xA40x31 0x05 0x01 0x01 0xFF 0xFF 0xA4 0x32 : 0xA40x31 0x05 0x01 0x01 0x22 0x69 0xA6 0x32 : 0xA60x31 0x05 0x01 0x01 0x36 0x58 0xA7 0x32 : 0xA70x31 0x05 0x01 0x01 0x54 0x3A 0xA7 0x32 : 0xA70x31 0x05 0x01 0x01 0xAB 0xC5 0xA7 0x32 : 0xA70x31 0x05 0x01 0x01 0x4D 0x8F 0xA8 0x32 : 0xA80x31 0x05 0x01 0x01 0x77 0xB5 0xA8 0x32 : 0xA80x31 0x05 0x01 0x01 0x6F 0xE6 0xAA 0x32 : 0xAA0x31 0x05 0x01 0x01 0x90 0x19 0xAA 0x32 : 0xAA0x31 0x05 0x01 0x01 0xA5 0x2C 0xAA 0x32 : 0xAA0x31 0x05 0x01 0x01 0x91 0x3D 0xAB 0x32 : 0xAB0x31 0x05 0x01 0x01 0xA4 0x08 0xAB 0x32 : 0xAB0x31 0x05 0x01 0x01 0x2C 0x5C 0xAD 0x32 : 0xAD0x31 0x05 0x01 0x01 0x36 0x46 0xAD 0x32 : 0xAD0x31 0x05 0x01 0x01 0x5D 0x2D 0xAD 0x32 : 0xAD0x31 0x05 0x01 0x01 0x67 0x17 0xAD 0x32 : 0xAD0x31 0x05 0x01 0x01 0xD3 0xA3 0xAD 0x32 : 0xAD0x31 0x05 0x01 0x01 0x14 0x0A 0xAE 0x32 : 0xAE0x31 0x05 0x01 0x01 0x02 0x3F 0xB0 0x32 : 0xB00x31 0x05 0x01 0x01 0x9A 0x15 0xB5 0x32 : 0xB50x31 0x05 0x01 0x01 0xFB 0x93 0xB8 0x32 : 0xB80x31 0x05 0x01 0x01 0xEA 0xEC 0xBB 0x32 : 0xBB0x31 0x05 0x01 0x01 0x1D 0xE2 0xBC 0x32 : 0xBC0x31 0x05 0x01 0x01 0x7A 0xEB 0xBF 0x32 : 0xBF0x31 0x05 0x01 0x01 0x85 0x14 0xBF 0x32 : 0xBF0x31 0x05 0x01 0x01 0x9E 0x78 0xC0 0x32 : 0xC00x31 0x05 0x01 0x01 0x42 0x81 0xC1 0x32 : 0xC10x31 0x05 0x01 0x01 0x57 0x94 0xC1 0x32 : 0xC10x31 0x05 0x01 0x01 0xC5 0x4D 0xC3 0x32 : 0xC30x31 0x05 0x01 0x01 0x73 0x49 0xC6 0x32 : 0xC60x31 0x05 0x01 0x01 0xCB 0xD4 0xC7 0x32 : 0xC70x31 0x05 0x01 0x01 0x07 0xB4 0xC8 0x32 : 0xC80x31 0x05 0x01 0x01 0x30 0xC8 0xCA 0x32 : 0xCA0x31 0x05 0x01 0x01 0x6D 0xB0 0xCB 0x32 : 0xCB0x31 0x05 0x01 0x01 0x96 0xB2 0xCC 0x32 : 0xCC0x31 0x05 0x01 0x01 0x19 0x76 0xCE 0x32 : 0xCE0x31 0x05 0x01 0x01 0x21 0x4E 0xCE 0x32 : 0xCE0x31 0x05 0x01 0x01 0xE6 0x89 0xCE 0x32 : 0xCE0x31 0x05 0x01 0x01 0x53 0x1F 0xD0 0x32 : 0xD00x31 0x05 0x01 0x01 0xAC 0xE0 0xD0 0x32 : 0xD00x31 0x05 0x01 0x01 0x0B 0x29 0xD3 0x32 : 0xD30x31 0x05 0x01 0x01 0x29 0x0B 0xD3 0x32 : 0xD30x31 0x05 0x01 0x01 0xD6 0xF4 0xD3 0x32 : 0xD30x31 0x05 0x01 0x01 0x58 0xA6 0xD5 0x32 : 0xD50x31 0x05 0x01 0x01 0x76 0x88 0xD5 0x32 : 0xD50x31 0x05 0x01 0x01 0x89 0x77 0xD5 0x32 : 0xD50x31 0x05 0x01 0x01 0x39 0xA9 0xD6 0x32 : 0xD60x31 0x05 0x01 0x01 0xA5 0x35 0xD6 0x32 : 0xD60x31 0x05 0x01 0x01 0x5B 0xEE 0xD7 0x32 : 0xD70x31 0x05 0x01 0x01 0xA4 0x11 0xD7 0x32 : 0xD70x31 0x05 0x01 0x01 0xB7 0xE5 0xDA 0x32 : 0xDA0x31 0x05 0x01 0x01 0x10 0x9E 0xDC 0x32 : 0xDC0x31 0x05 0x01 0x01 0x46 0xED 0xDD 0x32 : 0xDD0x31 0x05 0x01 0x01 0xB9 0x12 0xDD 0x32 : 0xDD0x31 0x05 0x01 0x01 0x93 0x73 0xDF 0x32 : 0xDF0x31 0x05 0x01 0x01 0x14 0xF8 0xE1 0x32 : 0xE10x31 0x05 0x01 0x01 0x89 0x65 0xE1 0x32 : 0xE10x31 0x05 0x01 0x01 0xEB 0x07 0xE1 0x32 : 0xE10x31 0x05 0x01 0x01 0x05 0x87 0xE2 0x32 : 0xE20x31 0x05 0x01 0x01 0x2F 0xAD 0xE2 0x32 : 0xE20x31 0x05 0x01 0x01 0xD0 0x52 0xE2 0x32 : 0xE20x31 0x05 0x01 0x01 0xE8 0xB6 0xE4 0x32 : 0xE40x31 0x05 0x01 0x01 0x05 0x7E 0xE5 0x32 : 0xE50x31 0x05 0x01 0x01 0x53 0x28 0xE5 0x32 : 0xE50x31 0x05 0x01 0x01 0x8E 0xF5 0xE5 0x32 : 0xE50x31 0x05 0x01 0x01 0x14 0x01 0xE6 0x32 : 0xE60x31 0x05 0x01 0x01 0x60 0x75 0xE6 0x32 : 0xE60x31 0x05 0x01 0x01 0x9F 0x8A 0xE6 0x32 : 0xE60x31 0x05 0x01 0x01 0x15 0x25 0xE7 0x32 : 0xE70x31 0x05 0x01 0x01 0x81 0xB1 0xE7 0x32 : 0xE70x31 0x05 0x01 0x01 0x26 0xBA 0xE8 0x32 : 0xE80x31 0x05 0x01 0x01 0x9C 0x4B 0xEA 0x32 : 0xEA0x31 0x05 0x01 0x01 0x93 0x61 0xEB 0x32 : 0xEB0x31 0x05 0x01 0x01 0xD8 0x2A 0xEB 0x32 : 0xEB0x31 0x05 0x01 0x01 0xAA 0xA1 0xEC 0x32 : 0xEC0x31 0x05 0x01 0x01 0xB7 0xF7 0xEE 0x32 : 0xEE0x31 0x05 0x01 0x01 0xB6 0xD3 0xEF 0x32 : 0xEF0x31 0x05 0x01 0x01 0x7B 0x18 0xF0 0x32 : 0xF00x31 0x05 0x01 0x01 0xA2 0xE4 0xF1 0x32 : 0xF10x31 0x05 0x01 0x01 0x4A 0x47 0xF3 0x32 : 0xF30x31 0x05 0x01 0x01 0x7F 0x72 0xF3 0x32 : 0xF30x31 0x05 0x01 0x01 0xB5 0xB8 0xF3 0x32 : 0xF30x31 0x05 0x01 0x01 0x28 0xF9 0xF5 0x32 : 0xF50x31 0x05 0x01 0x01 0xCD 0x1C 0xF5 0x32 : 0xF50x31 0x05 0x01 0x01 0x78 0xC7 0xF6 0x32 : 0xF60x31 0x05 0x01 0x01 0x66 0xFC 0xF7 0x32 : 0xF70x31 0x05 0x01 0x01 0x99 0x03 0xF7 0x32 : 0xF70x31 0x05 0x01 0x01 0x20 0x33 0xF9 0x32 : 0xF90x31 0x05 0x01 0x01 0x20 0x33 0xF9 0x32 : 0xF90x31 0x05 0x01 0x01 0x2B 0x38 0xF9 0x32 : 0xF90x31 0x05 0x01 0x01 0xDF 0xCC 0xF9 0x32 : 0xF90x31 0x05 0x01 0x01 0x7B 0x06 0xFA 0x32 : 0xFA0x31 0x05 0x01 0x01 0x23 0x7B 0xFB 0x32 : 0xFB0x31 0x05 0x01 0x01 0xDC 0x84 0xFB 0x32 : 0xFB

author: Gazello
author_rank: Contributor
timestamp: April 10, 2018, 10:08:29 pm
content: I did some data for CRC Reveng in Wordpad, but not all , + tests with reverse data and no adres .....

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 10, 2018, 10:09:41 pm
content: 00 00 A455 55 A4AA AA A4FF FF A4Interesting.... when bytes are the same you get A4

author: Gazello
author_rank: Contributor
timestamp: April 10, 2018, 10:19:54 pm
content: yes it is is partly XOR . If you sort the data by pot value ( third last) from 0-255 you get mirrored results to the center of 127 = 128 , 126 = 129 , 0 = 255 ,1= 254 ,But that did not help me any further . It is not a simple sum or XOR, not standard ( about 10) CRC8 , probably custom CRC8 with unknowm init and xor value, or something else I never heard of...

author: hamster_nz
author_rank: Super Contributor
timestamp: April 10, 2018, 10:37:46 pm
content: Doesn't look to be a simple CRC style check sum - the same bit difference gives different changes in the checksumCode:0x31 0x05 0x01 0x01 0x00 0x09 0x3E 0x32 : 0x3E0x31 0x05 0x01 0x01 0x00 0x00 0xA4 0x32 : 0xA40x09 0x9A0x31 0x05 0x01 0x01 0x12 0xCB 0x06 0x32 : 0x060x31 0x05 0x01 0x01 0x12 0xC2 0x9C 0x32 : 0x9C0x09 0x9A0x31 0x05 0x01 0x01 0x14 0x0A 0xAE 0x32 : 0xAE0x31 0x05 0x01 0x01 0x14 0x01 0xE6 0x32 : 0xE60x09 0x480x31 0x05 0x01 0x01 0x1A 0x9A 0x30 0x32 : 0x300x31 0x05 0x01 0x01 0x1A 0x91 0x78 0x32 : 0x780x09 0x480x31 0x05 0x01 0x01 0x22 0x60 0x3C 0x32 : 0x3C0x31 0x05 0x01 0x01 0x22 0x69 0xA6 0x32 : 0xA60x09 0x9A0x31 0x05 0x01 0x01 0x28 0xF0 0x6F 0x32 : 0x6F0x31 0x05 0x01 0x01 0x28 0xF9 0xF5 0x32 : 0xF50x09 099A

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 10, 2018, 11:03:00 pm
content: OK I give up. Definitely XOR (or bitwise addition based) but I can't quite get it.... Bed time for me...... if you were offering a La Chouffe I might have stayed up later.

author: Gazello
author_rank: Contributor
timestamp: April 10, 2018, 11:10:36 pm
content: La Chouffe.................... every beer you wish (available in europe)

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 11, 2018, 07:15:17 am
content: Is it possible to change the address? Change it by one bit from 5 to 4 and see how the data changes?

author: Blinkenlights
author_rank: Contributor
timestamp: April 11, 2018, 07:21:57 am
content: There is an improved Checksum algo called "Fletchers" that includes an addition or subtraction step as well as the XOR... perhaps that is why there is no match with just an XOR

author: hamster_nz
author_rank: Super Contributor
timestamp: April 11, 2018, 09:14:05 am
content: These pairs are most likely worth of further inspection:Code:0x31 0x05 0x01 0x01 0x00 0x00 0xA4 0x32 : 0xA40x31 0x05 0x01 0x01 0x00 0x09 0x3E 0x32 : 0x3E0x31 0x05 0x01 0x01 0x0C 0x3B 0x91 0x32 : 0x910x31 0x05 0x01 0x01 0x0C 0x44 0x1D 0x32 : 0x1D0x31 0x05 0x01 0x01 0x14 0x01 0xE6 0x32 : 0xE60x31 0x05 0x01 0x01 0x14 0x0A 0xAE 0x32 : 0xAE0x31 0x05 0x01 0x01 0x14 0xF8 0xE1 0x32 : 0xE10x31 0x05 0x01 0x01 0x1C 0xBE 0x47 0x32 : 0x470x31 0x05 0x01 0x01 0x1C 0xD0 0x44 0x32 : 0x440x31 0x05 0x01 0x01 0x22 0x60 0x3C 0x32 : 0x3C0x31 0x05 0x01 0x01 0x22 0x69 0xA6 0x32 : 0xA60x31 0x05 0x01 0x01 0x27 0xDE 0xA3 0x32 : 0xA30x31 0x05 0x01 0x01 0x27 0xE7 0x7A 0x32 : 0x7A0x31 0x05 0x01 0x01 0x28 0xF0 0x6F 0x32 : 0x6F0x31 0x05 0x01 0x01 0x28 0xF9 0xF5 0x32 : 0xF50x31 0x05 0x01 0x01 0x2B 0x38 0xF9 0x32 : 0xF90x31 0x05 0x01 0x01 0x2B 0x41 0x6A 0x32 : 0x6A0x31 0x05 0x01 0x01 0x2B 0x4A 0x22 0x32 : 0x220x31 0x05 0x01 0x01 0xC3 0x0E 0x2D 0x32 : 0x2D0x31 0x05 0x01 0x01 0xC3 0x20 0x64 0x32 : 0x640x31 0x05 0x01 0x01 0xEA 0xE3 0x3E 0x32 : 0x3E0x31 0x05 0x01 0x01 0xEA 0xEC 0xBB 0x32 : 0xBB0x31 0x05 0x01 0x01 0xF1 0x8E 0x28 0x32 : 0x280x31 0x05 0x01 0x01 0xF1 0xA0 0x61 0x32 : 0x61They only differ in the last byte of message, but the checksum differs greatly.For example, these pairs all have the same difference in low nibble of the 6th byte - the 0 becomes a 9, and it is last before the checksum:Code:0x31 0x05 0x01 0x01 0x00 0x00 0xA4 0x320x31 0x05 0x01 0x01 0x00 0x09 0x3E 0x320x31 0x05 0x01 0x01 0x22 0x60 0x3C 0x320x31 0x05 0x01 0x01 0x22 0x69 0xA6 0x320x31 0x05 0x01 0x01 0x28 0xF0 0x6F 0x320x31 0x05 0x01 0x01 0x28 0xF9 0xF5 0x32The checksums change in a non-obvious way (or if it is obvious, it is one I cannot see).

author: Gazello
author_rank: Contributor
timestamp: April 11, 2018, 10:01:28 am
content: NO I dont have a dataset with one one bit difference , there are only 5 adresses which are completly different .I cant see it for days. I use decimal to "see" more obvious things and to calculate easier

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 11, 2018, 10:41:59 am
content: D1 D2 CS95 90 0160 165 0This is interesting~95=160 and ~90=165Soa op b => X!a op !b => XThat identity is rather familiar...Maybe not XOR but something simpler

author: Ash
author_rank: Regular Contributor
timestamp: April 11, 2018, 11:19:05 am
content: Does the TIG welder give any acknowledgement of success / failure on the communication bus?If so, wouldn't it be faster to just brute force the thing.. its only 256 possibilities for each packet, and then there are 256 possible settings, so run through them all and record the working ones. Then you can build a table for your software with either the full packet, or just the relevant checksum for the value..Ash.

author: hamster_nz
author_rank: Super Contributor
timestamp: April 11, 2018, 11:57:02 am
content: First little wedge in...If bytes 1,2 & 3 are the same, then if bytes 4 = bytes 5 then the checksum is the same:0x31 0x05 0x01 0x01 0x00 0x00 0xA4 0x320x31 0x05 0x01 0x01 0x55 0x55 0xA4 0x320x31 0x05 0x01 0x01 0xAA 0xAA 0xA4 0x320x31 0x05 0x01 0x01 0xFF 0xFF 0xA4 0x32Extended a little bit to...If values 1,2 & 3 are the same, then if 4th and 5th byte XOR to the same value then the checksum is the same:0x31 0x05 0x01 0x01 0x7D 0x45 0x14 0x320x31 0x05 0x01 0x01 0x4C 0x74 0x14 0x320x31 0x05 0x01 0x01 0xB3 0x8B 0x14 0x320x7D XOR 0x45 = 0x4C XOR 0x74 = 0xB3 XOR 0x8B0x31 0x05 0x01 0x01 0x67 0x17 0xAD 0x320x31 0x05 0x01 0x01 0x5D 0x2D 0xAD 0x320x31 0x05 0x01 0x01 0x36 0x46 0xAD 0x320x31 0x05 0x01 0x01 0x2C 0x5C 0xAD 0x320x31 0x05 0x01 0x01 0xD3 0xA3 0xAD 0x320x67 XOR 0x17 = 0x5D XOR 0x2D = 0x36 XOR 0x46 = 0x2C XOR 0x5C = 0xD3 XOR 0xA3So if you only want to change bytes 4 and 5, you could look up the checksum. e.g byte = checksum_lookup_table[byte4 XOR byte5].If that is the case (I haven't checked all the pairs in the supplied data), then these are also valid checksums (but most likely not valid commands!):0x31 0x05 0x01 0x01 0x00 0x00 0xA4 0x320x31 0x05 0x01 0x01 0x00 0x02 0x76 0x320x31 0x05 0x01 0x01 0x00 0x37 0x91 0x320x31 0x05 0x01 0x01 0x00 0x38 0x14 0x320x31 0x05 0x01 0x01 0x00 0x56 0x17 0x320x31 0x05 0x01 0x01 0x00 0x70 0xAD 0x320x31 0x05 0x01 0x01 0x00 0xB2 0xA1 0x320x31 0x05 0x01 0x01 0x00 0xFA 0xA3 0x32So what is needed is to work out how the value in byte 5 alters the checksum in byte 6.

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 11, 2018, 12:29:42 pm
content: Incidentally... what makes you think it is a checksum rather than the lsB of the reading?

author: Gazello
author_rank: Contributor
timestamp: April 11, 2018, 02:39:20 pm
content: Hi to all the helpers,the pot value is not the problem , as I mentioned I can simply replay the collected data .The problem is the identifier . It is send out once a second and you have to answer right to make it work at all. NO acknowlege. Brute force does not work

author: mahi
author_rank: Regular Contributor
timestamp: April 11, 2018, 07:07:22 pm
content: I've ran all sample data through a program and the XOR result of all bytes (excluding the checksum) is always the same for byte combinations that have the same checksum.So itisa checksum based on XOR. However, the checksum value itself does not seem to have a direct relation to the XOR result. Perhaps a mathematical operation is performed on the XOR result but I fail to see it. Maybe it's simply using a lookup table for obfuscation?Instead of trying to figure out the relation between the checksum and the XOR value - if there even is one - you may be better off constructing a lookup table yourself (as already suggested by hamster_nz). The problem at this moment is that your sample data does not yet have all checksums from 0x00 to 0xFF - 109 values are still missing. Do you think you can somehow generate them?Here's the (incomplete) lookup table constructed from the data provided earlier in the thread. The XOR in the list below is calculated over all bytes excluding checksum and the start (0x31) and end (0x32) bytes.Code:XOR => Checksum0x00 => 0x000x01 => ?0x02 => ?0x03 => 0xBB0x04 => ?0x05 => 0xA40x06 => 0x1F0x07 => 0x760x08 => 0xF30x09 => 0x9A0x0A => 0x210x0B => 0x480x0C => 0x3E0x0D => ?0x0E => 0xEC0x0F => 0x850x10 => 0xE60x11 => 0x8F0x12 => 0x340x13 => 0x5D0x14 => 0x2B0x15 => 0x420x16 => 0xF90x17 => 0x900x18 => 0x150x19 => ?0x1A => 0xC70x1B => 0xAE0x1C => ?0x1D => ?0x1E => 0x0A0x1F => 0x630x20 => ?0x21 => 0xCC0x22 => ?0x23 => 0x1E0x24 => ?0x25 => 0x010x26 => ?0x27 => 0xD30x28 => ?0x29 => ?0x2A => 0x840x2B => ?0x2C => 0x9B0x2D => ?0x2E => 0x490x2F => ?0x30 => ?0x31 => ?0x32 => 0x910x33 => ?0x34 => 0x8E0x35 => 0xE70x36 => 0x5C0x37 => ?0x38 => 0xB00x39 => ?0x3A => ?0x3B => ?0x3C => ?0x3D => 0x140x3E => ?0x3F => 0xC60x40 => 0x4A0x41 => 0x230x42 => ?0x43 => 0xF10x44 => 0x870x45 => 0xEE0x46 => 0x550x47 => 0x3C0x48 => ?0x49 => 0xD00x4A => ?0x4B => ?0x4C => ?0x4D => 0x1D0x4E => 0xA60x4F => ?0x50 => ?0x51 => ?0x52 => 0x7E0x53 => 0x170x54 => 0x610x55 => ?0x56 => ?0x57 => 0xDA0x58 => 0x5F0x59 => 0x360x5A => 0x8D0x5B => 0xE40x5C => ?0x5D => 0xFB0x5E => 0x400x5F => ?0x60 => 0xEF0x61 => ?0x62 => ?0x63 => ?0x64 => 0x220x65 => ?0x66 => 0xF00x67 => 0x990x68 => ?0x69 => ?0x6A => 0xCE0x6B => 0xA70x6C => ?0x6D => 0xB80x6E => ?0x6F => 0x6A0x70 => 0x090x71 => 0x600x72 => ?0x73 => ?0x74 => ?0x75 => 0xAD0x76 => ?0x77 => ?0x78 => 0xFA0x79 => 0x930x7A => 0x280x7B => ?0x7C => 0x370x7D => ?0x7E => 0xE50x7F => ?0x80 => ?0x81 => ?0x82 => 0x460x83 => ?0x84 => 0x590x85 => 0x300x86 => 0x8B0x87 => 0xE20x88 => ?0x89 => 0x0E0x8A => 0xB50x8B => 0xDC0x8C => 0xAA0x8D => 0xC30x8E => 0x780x8F => ?0x90 => 0x720x91 => ?0x92 => 0xA00x93 => ?0x94 => 0xBF0x95 => 0xD60x96 => ?0x97 => ?0x98 => 0x810x99 => 0xE80x9A => ?0x9B => ?0x9C => ?0x9D => 0x250x9E => 0x9E0x9F => 0xF70xA0 => ?0xA1 => 0x580xA2 => ?0xA3 => ?0xA4 => ?0xA5 => ?0xA6 => ?0xA7 => 0x470xA8 => ?0xA9 => 0xAB0xAA => ?0xAB => 0x790xAC => 0x0F0xAD => 0x660xAE => 0xDD0xAF => ?0xB0 => 0xD70xB1 => ?0xB2 => 0x050xB3 => ?0xB4 => 0x1A0xB5 => ?0xB6 => 0xC80xB7 => 0xA10xB8 => ?0xB9 => 0x4D0xBA => 0xF60xBB => 0x9F0xBC => ?0xBD => 0x800xBE => ?0xBF => 0x520xC0 => ?0xC1 => ?0xC2 => 0x0C0xC3 => ?0xC4 => 0x130xC5 => 0x7A0xC6 => 0xC10xC7 => 0xA80xC8 => 0x2D0xC9 => 0x440xCA => ?0xCB => ?0xCC => ?0xCD => ?0xCE => ?0xCF => 0x5B0xD0 => 0x380xD1 => 0x510xD2 => 0xEA0xD3 => ?0xD4 => 0xF50xD5 => 0x9C0xD6 => ?0xD7 => ?0xD8 => 0xCB0xD9 => ?0xDA => ?0xDB => ?0xDC => 0x060xDD => 0x6F0xDE => ?0xDF => ?0xE0 => 0x7B0xE1 => ?0xE2 => ?0xE3 => 0xC00xE4 => ?0xE5 => 0xDF0xE6 => 0x640xE7 => ?0xE8 => ?0xE9 => 0xE10xEA => 0x5A0xEB => ?0xEC => ?0xED => 0x2C0xEE => ?0xEF => ?0xF0 => ?0xF1 => ?0xF2 => ?0xF3 => 0x260xF4 => ?0xF5 => ?0xF6 => 0x820xF7 => 0xEB0xF8 => 0x6E0xF9 => 0x070xFA => 0xBC0xFB => 0xD50xFC => 0xA30xFD => 0xCA0xFE => 0x710xFF => 0x18

author: Gazello
author_rank: Contributor
timestamp: April 11, 2018, 07:35:38 pm
content: I cant produce any data , the only thing I could do is , do the same thing for all 1023 ADC values !! and probably that data will fill the gaps in the lookup table.

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 11, 2018, 07:53:42 pm
content: a op b => X!a op !b => Xand of course that holds... for XOR

author: jmelson
author_rank: Super Contributor
timestamp: April 11, 2018, 09:17:31 pm
content: The way I cracked this on a Fanuc serial encoder was by recording a bunch of outputs to a file. Observing the data seemed to indicate a 5 bit CRC. So, I built a 5-bit CRC checker in a C program, with the polynomial entered manually, and then ran it against the recorded data. I then tried running it while entering all the polynomials. One of them resulted in a constant zero output, so that was the magic polynomial. You could even automate this and have the program go through all possible polynomials, looking for one where the resulting CRC output did not change.Note that not all CRCs have to be an 8-bit polynomial.Jon

author: JimRemington
author_rank: Regular Contributor
timestamp: April 11, 2018, 09:57:17 pm
content: QuoteIf you will actually be using the results of all this effort, you will need to automate the message collection, correct?So do that now, and collect a complete set of messages.

author: hamster_nz
author_rank: Super Contributor
timestamp: April 12, 2018, 12:43:04 am
content: Quote from: Gazello on April 11, 2018, 07:35:38 pmThe lookup table may serve some non-technical purpose. The most obvious one I can think of is it provides something that can be considered copyrightable.

author: Rerouter
author_rank: Super Contributor
timestamp: April 12, 2018, 12:59:40 am
content: Its not too uncommon in vehicles, running all bytes through a lookup table as anither layer if security through obscurity. Its expecially rife in earth moving equiptment where the crc input bytes and output bytes are pushed through one. Makes it a right pain to crack, (took jtag revengineerg to break those)

author: Sceptre
author_rank: Regular Contributor
timestamp: April 12, 2018, 03:37:36 am
content: Another clue - in some cases, [2*XOR]=>[2*Checksum (truncated to 8 bits)]:0x06 => 0x1F0x0C => 0x3E0x07 => 0x760x0E => 0xEC0x08 => 0xF30x10 => 0xE60x09 => 0x9A0x12 => 0x34In other cases, [2*XOR+1]=>[2*Checksum (truncated to 8 bits)]:0x03 => 0xBB0x07 => 0x760x05 => 0xA40x0B => 0x48

author: hamster_nz
author_rank: Super Contributor
timestamp: April 12, 2018, 04:45:49 am
content: Quote from: Rerouter on April 12, 2018, 12:59:40 amPhew, glad for some first-hand experience that this may get be being done.

author: Gazello
author_rank: Contributor
timestamp: April 12, 2018, 10:49:12 am
content: Yeah great Lookuptabel +crc .......the biggest crap I could find...I semi-automated the data reading , but still have to manually feed in the 2-5mV steps for each ADC value , with a 25 turn pot( have no 10bit DAC) .I get a lot of data but for a complete lookup table from 0-255 still missing 46 values .Who maybe is any longer interrested, have a look . Maybe now ( 0, 1,2,3..... ) easier to see how it s calculated.

author: mahi
author_rank: Regular Contributor
timestamp: April 12, 2018, 12:16:17 pm
content: Quote from: Sceptre on April 12, 2018, 03:37:36 amThat's a very interesting observation. I tested this against all sample data and it is true for all XOR from 0x00 to 0x7F for which both XOR*2 and XOR*2+1 exist. Note that each XOR has only one corresponding value: XOR*2 or XOR*2+1 - never both. Naturally the sample data is not complete but there's not a single false positive so I think we can assume this rule to be correct.With this knowledge it's possible to calculate new checksums. Take for example:Code:XOR => Checksum0x12 => 0x34XOR*2 = 0x24, Checksum*2 = 0x68XOR*2+1 = 0x25, Checksum*2 = 0x68The sample data does not yet contain a record with XOR 0x24, but XOR 0x25 is known:Code:XOR => Checksum0x24 => ?0x25 => 0x01The checksum of XOR 0x25 (XOR*2+1) does not match the 0x68 we calculated earlier. Using the rule that each XOR from 0x00 to 0x7F must have either a XOR*2 or XOR*2+1 match, we know that the match must be in the other XOR (XOR*2). In other words, the checksum for XOR 0x24 must be 0x68:Code:XOR => Checksum0x24 => 0x68Update:Was typing this while Gazello added new sample data. XOR 0x24 is in the new sample data and its checksum is... 0x68!

author: mahi
author_rank: Regular Contributor
timestamp: April 12, 2018, 12:17:01 pm
content: Quote from: Gazello on April 12, 2018, 10:49:12 amOnly 34 missing after applying the logic from previous post...Code:XOR => Checksum0x00 => 0x000x01 => 0x690x02 => 0xD20x03 => 0xBB0x04 => 0xCD0x05 => 0xA40x06 => 0x1F0x07 => 0x760x08 => 0xF30x09 => 0x9A0x0A => 0x210x0B => 0x480x0C => 0x3E0x0D => 0x570x0E => 0xEC0x0F => 0x850x10 => 0xE60x11 => 0x8F0x12 => 0x340x13 => 0x5D0x14 => 0x2B0x15 => 0x420x16 => 0xF90x17 => 0x900x18 => 0x150x19 => 0x7C0x1A => 0xC70x1B => 0xAE0x1C => 0xD80x1D => 0xB10x1E => 0x0A0x1F => 0x630x20 => 0xA50x21 => 0xCC0x22 => 0x770x23 => 0x1E0x24 => 0x680x25 => 0x010x26 => 0xBA0x27 => 0xD30x28 => 0x560x29 => 0x3F0x2A => 0x840x2B => 0xED0x2C => 0x9B0x2D => 0xF20x2E => 0x490x2F => 0x200x30 => 0x430x31 => 0x2A0x32 => 0x910x33 => 0xF80x34 => 0x8E0x35 => 0xE70x36 => 0x5C0x37 => ?0x38 => 0xB00x39 => ?0x3A => 0x620x3B => 0x0B0x3C => ?0x3D => 0x140x3E => ?0x3F => 0xC60x40 => 0x4A0x41 => 0x230x42 => 0x980x43 => 0xF10x44 => 0x870x45 => 0xEE0x46 => 0x550x47 => 0x3C0x48 => ?0x49 => 0xD00x4A => 0x6B0x4B => 0x020x4C => 0x740x4D => 0x1D0x4E => 0xA60x4F => 0xCF0x50 => 0xAC0x51 => ?0x52 => 0x7E0x53 => 0x170x54 => 0x610x55 => 0x080x56 => 0xB30x57 => 0xDA0x58 => 0x5F0x59 => 0x360x5A => 0x8D0x5B => 0xE40x5C => 0x920x5D => 0xFB0x5E => 0x400x5F => 0x290x60 => 0xEF0x61 => 0x860x62 => ?0x63 => 0x540x64 => 0x220x65 => 0x4B0x66 => 0xF00x67 => 0x990x68 => 0x1C0x69 => ?0x6A => 0xCE0x6B => 0xA70x6C => ?0x6D => 0xB80x6E => ?0x6F => 0x6A0x70 => 0x090x71 => 0x600x72 => ?0x73 => ?0x74 => 0xC40x75 => 0xAD0x76 => ?0x77 => ?0x78 => 0xFA0x79 => 0x930x7A => 0x280x7B => ?0x7C => 0x370x7D => ?0x7E => 0xE50x7F => 0x8C0x80 => 0x940x81 => 0xFD0x82 => 0x460x83 => 0x2F0x84 => 0x590x85 => 0x300x86 => 0x8B0x87 => 0xE20x88 => 0x670x89 => 0x0E0x8A => 0xB50x8B => 0xDC0x8C => 0xAA0x8D => 0xC30x8E => 0x780x8F => 0x110x90 => 0x720x91 => ?0x92 => 0xA00x93 => 0xC90x94 => 0xBF0x95 => 0xD60x96 => ?0x97 => ?0x98 => 0x810x99 => 0xE80x9A => 0x530x9B => 0x3A0x9C => 0x4C0x9D => 0x250x9E => 0x9E0x9F => 0xF70xA0 => ?0xA1 => 0x580xA2 => ?0xA3 => ?0xA4 => 0xFC0xA5 => 0x950xA6 => 0x2E0xA7 => 0x470xA8 => 0xC20xA9 => 0xAB0xAA => 0x100xAB => 0x790xAC => 0x0F0xAD => 0x660xAE => 0xDD0xAF => 0xB40xB0 => 0xD70xB1 => 0xBE0xB2 => 0x050xB3 => 0x6C0xB4 => 0x1A0xB5 => 0x730xB6 => 0xC80xB7 => 0xA10xB8 => 0x240xB9 => 0x4D0xBA => 0xF60xBB => 0x9F0xBC => ?0xBD => 0x800xBE => ?0xBF => 0x520xC0 => 0xDE0xC1 => 0xB70xC2 => 0x0C0xC3 => 0x650xC4 => 0x130xC5 => 0x7A0xC6 => 0xC10xC7 => 0xA80xC8 => 0x2D0xC9 => 0x440xCA => ?0xCB => ?0xCC => 0xE00xCD => 0x890xCE => 0x320xCF => 0x5B0xD0 => 0x380xD1 => 0x510xD2 => 0xEA0xD3 => ?0xD4 => 0xF50xD5 => 0x9C0xD6 => ?0xD7 => ?0xD8 => 0xCB0xD9 => 0xA20xDA => 0x190xDB => 0x700xDC => 0x060xDD => 0x6F0xDE => 0xD40xDF => ?0xE0 => 0x7B0xE1 => 0x120xE2 => 0xA90xE3 => 0xC00xE4 => 0xB60xE5 => 0xDF0xE6 => 0x640xE7 => ?0xE8 => 0x880xE9 => 0xE10xEA => 0x5A0xEB => ?0xEC => ?0xED => 0x2C0xEE => 0x970xEF => 0xFE0xF0 => 0x9D0xF1 => 0xF40xF2 => 0x4F0xF3 => 0x260xF4 => 0x500xF5 => ?0xF6 => 0x820xF7 => 0xEB0xF8 => 0x6E0xF9 => 0x070xFA => 0xBC0xFB => 0xD50xFC => 0xA30xFD => 0xCA0xFE => 0x710xFF => 0x18

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 12, 2018, 12:37:46 pm
content: 1050 0 0 01 105 105 692 210 210 D23 315 59 3B4 420 164 A45 525 13 D6 630 118 767 735 223 DF8 840 72 489 945 177 B110 1050 26 1A11 1155 131 8312 1260 236 EC13 1365 85 5514 1470 190 BE15 1575 39 2716 1680 144 9017 1785 249 F9If you take the XOR and you multiply by 105 then mod 256 you get quite a few matches....Makes me wonder if a polynomial could be fit

author: hamster_nz
author_rank: Super Contributor
timestamp: April 12, 2018, 09:36:33 pm
content: Quote from: mahi on April 11, 2018, 07:07:22 pmI checked to see if it is some sort of LFSR, using the checksum as an initial state, advance it 8 cycles then use that curent state as the checksum.If so, 00 should map to 00, and all the others should form a long chain.I can confirm that it isn't.There are at least two that map onto themselves:0x00 => 0x000x9E => 0x9EAnd these two map to the same value0x85 => 0x300x23 => 0x30This also means that not all 256 different checksums are obtainable, and the mapping of XOR to checksums was not generated by a 'shuffle' of an array with values 0 through 255 in it.How confident are you that the captures are without error? (Not questioning your work, I just don't want to discount an "almost fits" because of an error in the input data)

author: mahi
author_rank: Regular Contributor
timestamp: April 13, 2018, 05:50:16 am
content: Quote from: hamster_nz on April 12, 2018, 09:36:33 pmI'm really sorry but that is my mistake - not Gazello's. I had fed my program the nicely formatted hex file provided by Nominal Animal in post 3, then looked for more sample date in the thread and Gazello had just posted"welder 1 = 49 1 0 0 0 1 0 51 16 30 50". Since my program took only hex input I converted the decimal bytes manually and I accidentally kept decimal 30 as hexadecimal 30 - linking the XOR (0x23) to a wrong checksum... After Gazello posted a new set of sample data, again in decimal notation, I added the ability to parse decimals in my program and the mistake was automatically corrected. The lookup table I posted in reply #29 no longer had the conflicting checksum.Anyway, I noticed there's a repeating pattern in XOR*2 and XOR*2+1 in the range of 0x00 to 0x7F. This makes it possible to predict when to use XOR*2 and when XOR*2+1 and thus deduct several more checksums. We now have 237 out of 256 known. Only 19 to go and 5 of these are already partially known (7 bits known but most significant bit unknown due to shift operation).The problem is that while the XOR from 0x00 to 0x7F can be verified using the XOR*2 or XOR*2+1 and checksum*2 rule found earlier, the same does not apply to the XOR from 0x80 to 0xFF. There's probably a pattern in there as well but I don't see it immediately.Known (237)Code:XOR => Checksum0x00 => 0x000x01 => 0x690x02 => 0xD20x03 => 0xBB0x04 => 0xCD0x05 => 0xA40x06 => 0x1F0x07 => 0x760x08 => 0xF30x09 => 0x9A0x0A => 0x210x0B => 0x480x0C => 0x3E0x0D => 0x570x0E => 0xEC0x0F => 0x850x10 => 0xE60x11 => 0x8F0x12 => 0x340x13 => 0x5D0x14 => 0x2B0x15 => 0x420x16 => 0xF90x17 => 0x900x18 => 0x150x19 => 0x7C0x1A => 0xC70x1B => 0xAE0x1C => 0xD80x1D => 0xB10x1E => 0x0A0x1F => 0x630x20 => 0xA50x21 => 0xCC0x22 => 0x770x23 => 0x1E0x24 => 0x680x25 => 0x010x26 => 0xBA0x27 => 0xD30x28 => 0x560x29 => 0x3F0x2A => 0x840x2B => 0xED0x2C => 0x9B0x2D => 0xF20x2E => 0x490x2F => 0x200x30 => 0x430x31 => 0x2A0x32 => 0x910x33 => 0xF80x34 => 0x8E0x35 => 0xE70x36 => 0x5C0x37 => 0x350x38 => 0xB00x39 => 0xD90x3A => 0x620x3B => 0x0B0x3C => 0x7D0x3D => 0x140x3E => 0xAF0x3F => 0xC60x40 => 0x4A0x41 => 0x230x42 => 0x980x43 => 0xF10x44 => 0x870x45 => 0xEE0x46 => 0x550x47 => 0x3C0x49 => 0xD00x4A => 0x6B0x4B => 0x020x4C => 0x740x4D => 0x1D0x4E => 0xA60x4F => 0xCF0x50 => 0xAC0x52 => 0x7E0x53 => 0x170x54 => 0x610x55 => 0x080x56 => 0xB30x57 => 0xDA0x58 => 0x5F0x59 => 0x360x5A => 0x8D0x5B => 0xE40x5C => 0x920x5D => 0xFB0x5E => 0x400x5F => 0x290x60 => 0xEF0x61 => 0x860x63 => 0x540x64 => 0x220x65 => 0x4B0x66 => 0xF00x67 => 0x990x68 => 0x1C0x69 => 0x750x6A => 0xCE0x6B => 0xA70x6C => 0xD10x6D => 0xB80x6F => 0x6A0x70 => 0x090x71 => 0x600x72 => 0xDB0x73 => 0xB20x74 => 0xC40x75 => 0xAD0x76 => 0x160x78 => 0xFA0x79 => 0x930x7A => 0x280x7B => 0x410x7C => 0x370x7D => 0x5E0x7E => 0xE50x7F => 0x8C0x80 => 0x940x81 => 0xFD0x82 => 0x460x83 => 0x2F0x84 => 0x590x85 => 0x300x86 => 0x8B0x87 => 0xE20x88 => 0x670x89 => 0x0E0x8A => 0xB50x8B => 0xDC0x8C => 0xAA0x8D => 0xC30x8E => 0x780x8F => 0x110x90 => 0x720x92 => 0xA00x93 => 0xC90x94 => 0xBF0x95 => 0xD60x97 => 0x040x98 => 0x810x99 => 0xE80x9A => 0x530x9B => 0x3A0x9C => 0x4C0x9D => 0x250x9E => 0x9E0x9F => 0xF70xA1 => 0x580xA3 => 0x8A0xA4 => 0xFC0xA5 => 0x950xA6 => 0x2E0xA7 => 0x470xA8 => 0xC20xA9 => 0xAB0xAA => 0x100xAB => 0x790xAC => 0x0F0xAD => 0x660xAE => 0xDD0xAF => 0xB40xB0 => 0xD70xB1 => 0xBE0xB2 => 0x050xB3 => 0x6C0xB4 => 0x1A0xB5 => 0x730xB6 => 0xC80xB7 => 0xA10xB8 => 0x240xB9 => 0x4D0xBA => 0xF60xBB => 0x9F0xBD => 0x800xBF => 0x520xC0 => 0xDE0xC1 => 0xB70xC2 => 0x0C0xC3 => 0x650xC4 => 0x130xC5 => 0x7A0xC6 => 0xC10xC7 => 0xA80xC8 => 0x2D0xC9 => 0x440xCB => 0x960xCC => 0xE00xCD => 0x890xCE => 0x320xCF => 0x5B0xD0 => 0x380xD1 => 0x510xD2 => 0xEA0xD4 => 0xF50xD5 => 0x9C0xD7 => 0x4E0xD8 => 0xCB0xD9 => 0xA20xDA => 0x190xDB => 0x700xDC => 0x060xDD => 0x6F0xDE => 0xD40xE0 => 0x7B0xE1 => 0x120xE2 => 0xA90xE3 => 0xC00xE4 => 0xB60xE5 => 0xDF0xE6 => 0x640xE8 => 0x880xE9 => 0xE10xEA => 0x5A0xED => 0x2C0xEE => 0x970xEF => 0xFE0xF0 => 0x9D0xF1 => 0xF40xF2 => 0x4F0xF3 => 0x260xF4 => 0x500xF6 => 0x820xF7 => 0xEB0xF8 => 0x6E0xF9 => 0x070xFA => 0xBC0xFB => 0xD50xFC => 0xA30xFD => 0xCA0xFE => 0x710xFF => 0x18Partially known (5)(these are known up to 7 bits leaving the most significant bit uncertain)Code:XOR => Checksum0x48 => 0x39 or 0xB90x51 => 0x45 or 0xC50x62 => 0x3D or 0xBD0x6E => 0x03 or 0x830x77 => 0x7F or 0xFFUnknown (19)(partially known included)XOR = 0x48, 0x51, 0x62, 0x6E, 0x77, 0x91, 0x96, 0xA0, 0xA2, 0xBC, 0xBE, 0xCA, 0xD3, 0xD6, 0xDF, 0xE7, 0xEB, 0xEC, 0xF5Checksums = 0x03, 0x0D, 0x1B, 0x27, 0x31, 0x33, 0x39, 0x3B, 0x3D, 0x45, 0x6D, 0x7F, 0x83, 0xB9, 0xBD, 0xC5, 0xE3, 0xE9, 0xFF

author: ChunkyPastaSauce
author_rank: Unknown
timestamp: April 13, 2018, 07:29:33 am
content: Quote from: mahi on April 13, 2018, 05:50:16 amCalculated for partial/missing (plus 0x96 was also missing)...knowns tested at random matchCode:0x48->b90x51->c50x62->3d0x6e->030x77->7f0x91->1b0x96->6d0xa0->310xa2->e30xbc->e90xbe->3b0xca->ff0xcb->960xd3->830xd6->270xdf->bd0xe7->0d0x3b->330xec->450xf5->39Method: XOR values -> take each group of 16 (0x00->0x0F, 0x10->0x1F, etc), run each block in reveng to find model parms-> reverse missing for each block

author: hamster_nz
author_rank: Super Contributor
timestamp: April 13, 2018, 08:56:10 am
content: It is the CRC(XOR(data))How to calculate it....Lookup table (from data), but is actually a CRC...Code:XOR => Checksum0x01 => 0x69 => 011010010x02 => 0xD2 => 110100100x04 => 0xCD => 110011010x08 => 0xF3 => 111100110x10 => 0xE6 => 111001100x20 => 0xA5 => 101001010x40 => 0x4A => 010010100x80 => 0x94 => 10010100Say we want to find the checksum for 0x80Break into bits:Code:0x28 => 0x20 + 0x80Look up the values for the bits in the above table:Code:0x08 => 111100110x20 => 10100101XOR then togetherCode:10100101 XOR 11110011 => 01010110 => 0x56Checksum for 0x28 is 0x56Anybody want to verify it? (I've done a few by hand, and am on my phone....)

author: mahi
author_rank: Regular Contributor
timestamp: April 13, 2018, 09:29:42 am
content: hamster_nz:You nailed it! I checked your calculation against all 237 known XOR-checksum pairs and they all match!

author: ChunkyPastaSauce
author_rank: Unknown
timestamp: April 13, 2018, 09:36:06 am
content: Here's a full table from my previous method mentioned, 0x28->0x56 matches. Your solution also explains why I had to recalculate the model for each block.Code:HEX XORHEX CS CALCULATED000016902d203bb04cd05a4061f077608f3099a0A210B480C3e0D570Eec0F8510e6118f1234135d142b154216f917901815197c1Ac71Bae1Cd81Db11E0a1F6320a521cc2277231e246825126ba27d32856293f2A842Bed2C9b2Df22E492F203043312a329133f8348e35e7365c373538b039d93A623B0b3C7d3D143Eaf3Fc6404a4123429843f1448745ee4655473c48b949d04A6b4B24C744D1d4Ea64Fcf50ac51c5527e5317546155856b357da585f59365A8d5Be45C925Dfb5E405F2960ef6186623d63546422654b66f06799681c69756Ace6Ba76Cd16Db86E36F6a709716072db73b274c475ad7616777f78fa79937A287B417C377D5e7Ee57F8c809481fd8246832f84598530868b87e28867890e8Ab58Bdc8Caa8Dc38E788F119072911b92a093c994bf95d6966d974988199e89A539B3a9C4c9D259E9e9Ff7A031A158A2e3A38aA4fcA595A62eA747A8c2A9abAA10AB79AC0fAD66AEddAFb4B0d7B1beB25B36cB41aB573B6c8B7a1B824B94dBAf6BB9fBCe9BD80BE3bBF52C0deC1b7C20cC365C413C57aC6c1C7a8C82dC944CAffCB96CCe0CD89CE32CF5bD038D151D2eaD383D4f5D59cD627D74eD8cbD9a2DA19DB70DC6DD6fDEd4DFbdE07bE112E2a9E3c0E4b6E5dfE664E70dE888E9e1EA5aEB33EC45ED2cEE97EFfeF09dF1f4F24fF326F450F539F682F7ebF86eF97FAbcFBd5FCa3FDcaFE71FF18XOR values -> take each group of 16 (0x00->0x0F, 0x10->0x1F, etc), run each block in reveng to find model parms-> reverse missing for each block

author: Gazello
author_rank: Contributor
timestamp: April 13, 2018, 11:00:40 am
content: beeeeeeeeeeeeeeeer time.Holy crap, I still trying to unbrezel my brain from your amazing work. I am sorry to cause some trouble/confusion with my amateur-ish DECimal calculation.Special Thanks to mahi and hamster_nz for their continues work and efforts. But also thanks to anybody else for their help and time.There is only one 1st place , hamster_nzbut to be fair the second one gets the same prize, you mahi.So choose your beers , gentlemans , and I ship them out.edit: still dont know wheres mahi located , but for NZ it is damm expensive for shipping heavy glas bottles around the world. But I hold up to my promises !!Otherwise I could simply paypal you shipping cost and beer money , for fun with your local brand.Your choice!I need your shipping adres.

author: Gazello
author_rank: Contributor
timestamp: April 13, 2018, 11:53:33 am
content: The final result :CS = (XOR Data bytes) * CRC8 , poly= 0x69, + some strange order init value from 0 to F.

author: mahi
author_rank: Regular Contributor
timestamp: April 13, 2018, 11:56:34 am
content: Gazello:Thank you kindly for the offer but I participated just for the fun of it

author: NivagSwerdna
author_rank: Super Contributor
timestamp: April 13, 2018, 12:11:35 pm
content: Very good. That was fun.

author: ChunkyPastaSauce
author_rank: Unknown
timestamp: April 13, 2018, 03:41:03 pm
content: Quote from: Gazello on April 13, 2018, 11:53:33 amI found init starts to get weird from 'block' #04.... These are the model parameters used to calculate the previous table/missing valuescrc8Code:block poly init069016912692369346955694669776968690a9690ba698b699c69fd690ee690df690c

author: Gazello
author_rank: Contributor
timestamp: April 13, 2018, 04:01:06 pm
content: Ok you got me . I only did the 0-3 and it worked so nice I stoped .The order seems really strange, but the result seems to be right. When 230 readings ( confirmend) datasets match that system it is good enough for me.I finally use the lookuptable anyways, because it it easier to implement ( at least for me)

author: jancumps
author_rank: Unknown
timestamp: April 13, 2018, 04:11:36 pm
content: Quote from: mahi on April 13, 2018, 09:29:42 am@hamster_nz, I'd advise you to ask for the La Chouffe that one of the first entrants suggested. Very good.Ask for the champaign bottle size

author: hamster_nz
author_rank: Super Contributor
timestamp: April 13, 2018, 11:06:43 pm
content: It was never about the beer, but I'm heading down to a craft brewery for dinner tonight (The Laboratory -http://www.thelaboratory.co.nz/). I'll raise a glass to celebrate!Good luck with the welder!

author: Gazello
author_rank: Contributor
timestamp: April 14, 2018, 10:15:56 am
content: Two true humble gentlemans, but let me know ( email) if I can do any other favour for you .

author: Psi
author_rank: Super Contributor
timestamp: April 14, 2018, 12:00:48 pm
content: This has been an amazing thread to watch develop.Really love these sort of threads.

author: JimRemington
author_rank: Regular Contributor
timestamp: April 14, 2018, 05:14:49 pm
content: Quote from: hamster_nz on April 13, 2018, 11:06:43 pmGood choice! According to TripAdvisor, #1 in Lincoln.https://www.tripadvisor.com/Restaurants-g3179495-Lincoln_Canterbury_Region_South_Island.htmlLove that South Island (wish I could afford to move there)!