Created
March 14, 2021 08:47
-
-
Save plambrechtsen/8187ec88349520e1ada67e30add28030 to your computer and use it in GitHub Desktop.
Pet hub crc calculations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import crccheck | |
from operator import xor | |
from pathlib import Path | |
#Xor key from surepetpacket.xorkey | |
xorkey='000000589e6c5a71ba9633f8c7fc4eafce9ee203c3a89ee498822ba00d9bc7bde054d5dd4ab02ba61a01fa477aec124811273f59ee848b9303903b3acd74678f8305d5ef33df79d5d56e159656aff90055ae' | |
def tohex(ba): | |
return ''.join(format(x, '02x') for x in ba) | |
#Convert a int to hex | |
def hexb(hexbyte): | |
return format(hexbyte,'02x') | |
#Convert a int to hex | |
def crcpoly(hexbyte, checkbyteval): | |
poly=0 | |
print("hex",tohex(hexbyte),"check",checkbyteval | |
#Loop through all polynomials as one of them should work right?? | |
while poly<255: | |
#Poly as counter | |
crcpolyval = hexb(crccheck.crc.Crc(8, poly, initvalue=0, reflect_input=False, reflect_output=False, xor_output=0, check_result=0).calc(hexbyte)) | |
if crcpolyval == checkbyteval: | |
print("PolyVal0: Match", crcpolyval == checkbyteval , "Checkbyte", checkbyteval, "Calc checksum", crcpolyval, "Poly",poly) | |
#Poly as counter with initval = ff | |
crcpolyvalf = hexb(crccheck.crc.Crc(8, poly, initvalue=0xff, reflect_input=False, reflect_output=False, xor_output=0, check_result=0).calc(hexbyte)) | |
if crcpolyvalf == checkbyteval: | |
print("PolyValF: Match", crcpolyvalf == checkbyteval , "Checkbyte", checkbyteval, "Calc checksum", crcpolyvalf, "Poly",poly) | |
#Poly as counter xor output | |
crcpolyvalx = hexb(crccheck.crc.Crc(8, poly, initvalue=0, reflect_input=False, reflect_output=False, xor_output=1, check_result=0).calc(hexbyte)) | |
if crcpolyvalx == checkbyteval: | |
print("PolyVal0X:Match", crcpolyvalx == checkbyteval , "Checkbyte", checkbyteval, "Calc checksum", crcpolyvalx, "Poly",poly) | |
#Poly as counter with initval = ff | |
crcpolyvalxf = hexb(crccheck.crc.Crc(8, poly, initvalue=0xff, reflect_input=False, reflect_output=False, xor_output=1, check_result=0).calc(hexbyte)) | |
if crcpolyvalxf == checkbyteval: | |
print("PolyValFX:Match", crcpolyvalxf == checkbyteval , "Checkbyte", checkbyteval, "Calc checksum", crcpolyvalxf, "Poly",poly) | |
poly += 1 | |
#Sample standard packets, the last byte is what we are trying to calculate. | |
packetarray = [ '01a13c58946c5a4aba973063','01b53c58946c5a4aba973764','01c73c58946c5a4dba973662','01323c58946c5a55ba97307c','01df3c58946c5a55ba97317d','014a3c58946c5a55ba97327e','01ef3c58946c5a55ba97337f','01263c58946c5a55ba97377b','01f03c58946c5a59ba973171','014c3c58916c5b30ba9032f4c6f04cae2c','01982a58b76c5171ba8e336c4c581aa6ce9ee903c3bf9e7013267fa90d9bccbde042d549c1147faf1a0199','01062a58b76c5171babe33104b581aa6ce9ee903c3829e0c14267fa90d9bccbde07dd535c6147faf1a01d0','010c2d58876c5771b0969e7263a84eb6ce9ee200c3a89ee4998143','01ec2d58876c5771b296527263a84eb6ce9ee200c3a89ee499818d','01022d58876c5771b396b97263a84eb6ce9ee200c3a89ee4998167','01fe2d58876c5771b396b97263a84eb6ce9ee200c3a89ee4998167','01992d58876c5771bc96507163a84eb6ce9ee200c3a89ee4998083','01cf2d58876c5771bd96257263a84eb6ce9ee200c3a89ee49980f4' ] | |
for packet in packetarray: | |
#convert to byte array | |
packetba = bytearray.fromhex(packet) | |
#Copy check byte | |
checkbyte = tohex(packetba[-1:]) | |
print("Standard:", tohex(packetba), "Checkbyte",checkbyte) | |
#Offset to copy from for validation | |
stdoffset=5 | |
#Copy from offset and exclude check byte | |
checkba = packetba[stdoffset:-1] | |
#checksum8 | |
checksumval = hexb(crccheck.checksum.Checksum8.calc(checkba)) | |
#checksum8xor | |
checksumxorval = hexb(crccheck.checksum.ChecksumXor8.calc(checkba)) | |
if checksumval == checkbyte: | |
print("Standard: Match", checksumval == checkbyte , "Checkbyte", checkbyte, "Calc checksum", checksumval) | |
if checksumxorval == checkbyte: | |
print("Standard: Match", checksumxorval == checkbyte , "Checkbyte", checkbyte, "Calc checksumxor", checksumxorval) | |
crcpoly(checkba, checkbyte) | |
xorpacketba = list(map(xor, packetba, xorkey)) | |
#Copy check byte | |
xorcheckbyte = tohex(xorpacketba[-1:]) | |
print("Dexor :",tohex(xorpacketba),"Checkbyte",xorcheckbyte) | |
xoroffset = 0 | |
count=0 | |
#Loop through updating the packet type as it might be an xored value we don't know | |
while count<255: | |
print("Byte ",packetba[0:2],"packet",packetba[2], "xorvalue",packetba[2] ^ count) | |
# xorpacketba[2] = map(xor, packetba[2], count) | |
xorpacketba[2] = packetba[2] ^ count | |
# xorpacketba[2] = count | |
#Set where to start copying from | |
#Copy from offset and exclude check byte | |
xorcheckba = xorpacketba[xoroffset:-1] | |
xorcrcval = hexb(crccheck.crc.Crc8.calc(xorcheckba)) | |
if xorcrcval == xorcheckbyte: | |
# print("Dexor - :",tohex(xorcheckba)) | |
print("Dexor : Match", xorcrcval == xorcheckbyte , "Count", hexb(count), "Checkbyte", xorcheckbyte, "Calc checksum", xorcrcval) | |
xorchecksumval = hexb(crccheck.checksum.Checksum8.calc(xorcheckba)) | |
if xorchecksumval == xorcheckbyte: | |
# print("Dexor - :",tohex(xorcheckba)) | |
print("Dexor : Match", xorchecksumval == xorcheckbyte ,"Count", hexb(count), "Checkbyte", xorcheckbyte, "Calc checksum", xorchecksumval) | |
xorchecksumxorval = hexb(crccheck.checksum.ChecksumXor8.calc(xorcheckba)) | |
if xorchecksumxorval == xorcheckbyte: | |
# print("Dexor - :",tohex(xorcheckba)) | |
print("Dexor : Match", xorchecksumxorval == xorcheckbyte , "Count", hexb(count), "Checkbyte", xorcheckbyte, "Calc checksumxor", xorchecksumxorval) | |
crcpoly(xorcheckba, xorcheckbyte) | |
count += 1 | |
#Check with the non xored checkbyte | |
print("Dexor 2 :",tohex(xorpacketba),"Checkbyte",checkbyte) | |
count=0 | |
#Loop through updating the packet type as it might be an xored value we don't know | |
while count<255: | |
print("Byte ",packetba[0:2],"packet",packetba[2], "xorvalue",packetba[2] ^ count) | |
# xorpacketba[2] = map(xor, packetba[2], count) | |
xorpacketba[2] = packetba[2] ^ count | |
# xorpacketba[2] = count | |
#Set where to start copying from | |
#Copy from offset and exclude check byte | |
xorcheckba = xorpacketba[xoroffset:-1] | |
xorcrcval = hexb(crccheck.crc.Crc8.calc(xorcheckba)) | |
if xorcrcval == checkbyte: | |
# print("Dexor - :",tohex(xorcheckba)) | |
print("Dexor 2 : Match", xorcrcval == checkbyte , "Count", hexb(count), "Checkbyte", checkbyte, "Calc checksum", xorcrcval) | |
xorchecksumval = hexb(crccheck.checksum.Checksum8.calc(xorcheckba)) | |
if xorchecksumval == checkbyte: | |
# print("Dexor - :",tohex(xorcheckba)) | |
print("Dexor 2 : Match", xorchecksumval == checkbyte ,"Count", hexb(count), "Checkbyte", checkbyte, "Calc checksum", xorchecksumval) | |
xorchecksumxorval = hexb(crccheck.checksum.ChecksumXor8.calc(xorcheckba)) | |
if xorchecksumxorval == checkbyte: | |
# print("Dexor - :",tohex(xorcheckba)) | |
print("Dexor 2 : Match", xorchecksumxorval == checkbyte , "Count", hexb(count), "Checkbyte", checkbyte, "Calc checksumxor", xorchecksumxorval) | |
crcpoly(xorcheckba, checkbyte) | |
count += 1 | |
#hexstringba = bytearray.fromhex(hexstring) | |
#offset=0 | |
#checkba = hexstringba[3:-1] | |
#checkbyte = tohex(hexstringba[-1:]) | |
#print(tohex(nhb)) | |
#print(shb) | |
#print(hexb(Crc8.calc(checkba))) | |
#print(hexb(Checksum8.calc(checkba))) | |
#sum(checkba) & 0xff == checkbyte | |
#print("Current Digest", checkbyte, "crc", sum(checkba) & 0xff == checkbyte ) | |
''' | |
count=0 | |
while count<255: | |
# print("FirstByte C", hexb(nhb[0])) | |
checkba[offset] = count | |
# print("FirstByte U", hexb(nhb[0])) | |
count += 1 | |
# hash = crc8.crc8() | |
# hash.update(nhb) | |
crcval = hexb(crccheck.crc.Crc8.calc(checkba)) | |
# crcval = hexb(crccheck.crc.Crc(8, count, initvalue=255, reflect_input=False, reflect_output=False, xor_output=0, check_result=0).calc(checkba)) | |
# print("Current Digest", checkbyte, "crc", crcval ) | |
checksumval = hexb(crccheck.checksum.Checksum8.calc(checkba)) | |
checksumxorval = hexb(crccheck.checksum.ChecksumXor8.calc(checkba)) | |
if crcval == checkbyte: | |
print("Current Digest", checkbyte, "crc", crcval, "count", count ) | |
print("OriMsg", hexstring, "Msg:",tohex(checkba), "Key:",hexb(checkba[offset]), "Current Digest", checkbyte , "crc", crcval ) | |
if checksumval == checkbyte: | |
print("OriMsg", hexstring, "Msg:",tohex(checkba), "Key:",hexb(checkba[offset]), "Current Digest", checkbyte , "checksum", checksumval ) | |
if checksumxorval == checkbyte: | |
print("OriMsg", hexstring, "Msg:",tohex(checkba), "Key:",hexb(checkba[offset]), "Current Digest", checkbyte , "checksumxor", checksumxorval ) | |
# dig = hash.hexdigest() | |
# print("dig", nhb[0]," ", dig, " ", shb) | |
# if dig == checkbyte: | |
# print("OriMsg", hexstring, "Msg:",tohex(nhb), "Key:",hexb(nhb[2]), "Current Digest", shb , "Calc", hash.hexdigest() ) | |
''' | |
#Packet:01ff2d588e6c5a718b94447c61a856afce1d | |
#Packet:01542d588e6c5a718c94927361a856afcec3 | |
#Packet:017e2d588e6c5a718d94c27d66a856ffce82 | |
#Packet:016b2d588e6c5a718d94d27361a856afce82 | |
#Packet:01382d588e6c5a718e94657361a856afce36 | |
#Packet:014e2d588e6c5a718f94a47361a856afcef6 | |
#Packet:01ef2d588e6c5a7190948be062a858afce58 | |
#Packet:01f32d588e6c5a7190948be062a858afce58 | |
#Packet:01ee2d588e6c5a7191948be062a856afce57 | |
#Packet:01d52d588e6c5a71929440e062a856afce9f | |
#Packet:01ea2d588e6c5a7193949de062a858afce4d | |
#Packet:01e62d588e6c5a719494518062a842afcefc | |
#Packet:01e52d588e6c5a719594518062a85eafcee1 | |
#Packet:01f62d588e6c5a719694e6e062a856afce3d | |
#Packet:013b2d588e6c5a71979498e162a856afce43 | |
#Packet:01bd2d588e6c5a71989476e062a856afcea3 | |
#Packet:01c32d588e6c5a7199947ce062a858afcea6 | |
#Packet:01bb2d588e6c5a719a9476e062a847afceb0 | |
#Packet:01bc2d588e6c5a719b9476e062a847afceb1 | |
#Packet:01cf2d588e6c5a719c945be062a858afce84 | |
#Dexor :01c82d001000000025025918a55418000026 | |
#Dexor :01cf2d001000000026026818a5541600001a | |
#Dexor :01d02d001000000027026818a5541600001b | |
#Dexor :01d52d001000000028027318a55418000001 | |
#Dexor :01ea2d00100000002902ae18a554160000d3 | |
#Dexor :01ef2d00100000002a02b818a554160000c6 | |
#Dexor :01f32d00100000002a02b818a554160000c6 | |
#Dexor :01ee2d00100000002b02b818a554180000c9 | |
#Dexor :01f62d00100000002c02d518a554180000a3 | |
#Dexor :013b2d00100000002d02ab19a554180000dd | |
#Dexor :01e62d00100000002e026278a5540c000062 | |
#Dexor :01e52d00100000002f026278a5541000007f | |
#Dexor :01ba2d001000000030029c83a6541800006e | |
#Dexor :01ff2d001000000031027784a65418000083 | |
#Dexor :010b2d00100000003202cb8aa65418000032 | |
#Dexor :01332d00100000003302478ba654180000be | |
#Dexor :01382d00100000003402568ba654180000a8 | |
#Dexor :014e2d00100000003502978ba65418000068 | |
''' | |
Packet:01a13c58946c5a4aba973063 | |
Dexor :01a13c000a00003b0001039b 63 | |
Packet:01b53c58946c5a4aba973764 | |
Dexor :01b53c000a00003b0001049c 64 | |
Packet:01c73c58946c5a4dba973662 | |
Dexor :01c73c000a00003c0001059a 62 | |
Packet:01323c58946c5a55ba97307c | |
Dexor :01323c000a00002400010384 7c | |
Packet:01df3c58946c5a55ba97317d | |
Dexor :01df3c000a00002400010285 7d | |
Packet:014a3c58946c5a55ba97327e | |
Dexor :018d3c000a00002400010186 7e | |
Packet:01ef3c58946c5a55ba97337f | |
Dexor :01ef3c000a00002400010087 7f | |
Packet:01263c58946c5a55ba97377b | |
Dexor :01ff3c000a00002400010483 7b | |
Packet:01f03c58946c5a59ba973171 | |
Dexor :01f03c000a00002800010289 71 | |
Packet:014c3c58916c5b30ba9032f4c6f04cae2c | |
Dexor :014c3c000f0001410006010c010c0201e2 2c | |
Packet:01982a58b76c5171ba8e336c4c581aa6ce9ee903c3bf9e7013267fa90d9bccbde042d549c1147faf1a0199 | |
Dexor :01982a0029000b00001800948ba4540900000b00001700948ba4540900000b00001600948ba45409000063 99 | |
Packet:01062a58b76c5171babe33104b581aa6ce9ee903c3829e0c14267fa90d9bccbde07dd535c6147faf1a01d0 | |
Dexor :01062a0029000b00002800e88ca4540900000b00002a00e88ca4540900000b00002900e88ca4540900002a d0 | |
Packet:010c2d58876c5771b0969e7263a84eb6ce9ee200c3a89ee4998143 | |
Dexor :010c2d0019000d000a00ad8aa45400190000000300000000010368 43 | |
Packet:01ec2d58876c5771b296527263a84eb6ce9ee200c3a89ee499818d | |
Dexor :01ec2d0019000d000800618aa454001900000003000000000103a6 8d | |
Packet:01022d58876c5771b396b97263a84eb6ce9ee200c3a89ee4998167 | |
Dexor :01022d0019000d0009008a8aa4540019000000030000000001034c 67 | |
Packet:01fe2d58876c5771b396b97263a84eb6ce9ee200c3a89ee4998167 | |
Dexor :01fe2d0019000d0009008a8aa4540019000000030000000001034c 67 | |
Packet:01992d58876c5771bc96507163a84eb6ce9ee200c3a89ee4998083 | |
Dexor :01992d0019000d0006006389a454001900000003000000000102a8 83 | |
Packet:01cf2d58876c5771bd96257263a84eb6ce9ee200c3a89ee49980f4 | |
Dexor :01cf2d0019000d000700168aa454001900000003000000000102df f4 | |
Dexor :01b63c000a000006cde1448f 77 | |
Dexor :010b3c000a00002400010087 7f | |
Dexor :011d3c000a00002400010087 7f | |
Dexor :013e3c000a00002400010087 7f | |
Dexor :014e3c000a00002400010087 7f | |
Dexor :01503c000a00002400010087 7f | |
Dexor :015a3c000a00002400010087 7f | |
Dexor :015d3c000a00002400010087 7f | |
Dexor :01913c000a00002400010087 7f | |
Dexor :019a3c000a00002400010087 7f | |
Dexor :01ca3c000a00002400010087 7f | |
Dexor :01ee3c000a00002400010087 7f | |
Dexor :01ef3c000a00002400010087 7f | |
Dexor :014a3c000a00002400010186 7e | |
Dexor :01323c000a00002400010384 7c | |
Dexor :01fc3c000a00002400010384 7c | |
Dexor :01263c000a00002400010483 7b | |
Dexor :016c3c000a00002400010483 7b | |
Dexor :017e3c000a00002400010483 7b | |
Dexor :01ff3c000a00002400010483 7b | |
Dexor :01e03c000a00002800010388 70 | |
Dexor :01fd3c000a00002800010388 70 | |
Dexor :01823c000a000028b6510289 71 | |
Dexor :01823c000a00003b0001049c 64 | |
Dexor :01b53c000a00003b0001049c 64 | |
''' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment