Re: BA Falcon BEM EEPROM via CAN
Posted: Mon May 05, 2025 3:22 pm
Well looks like somebody's been busy
Electronic Fuel Injection - Developement & Tuning
https://pcmhacking.net/forums/
Yes, too busy to do much more on this lately
Code: Select all
def calc_key_nibbles(seed):
lookup_table = [
0x09, 0x82, 0x14, 0x10, 0x32, 0x65, 0x87, 0x25,
0x47, 0x61, 0x08, 0x70, 0x94, 0x36, 0x76, 0x98,
0x32, 0x54, 0x43, 0x65, 0x09, 0x21, 0x83, 0x25,
0x49, 0x81, 0x07, 0x6A, 0x9C, 0xB6, 0x58, 0x7E,
0xD4, 0x98, 0xBA, 0x54, 0x76, 0xDC, 0x32, 0x43,
0x65, 0x09, 0x21, 0x87, 0xED, 0x83, 0x25, 0x49,
0x81, 0x07, 0x6D, 0xC7, 0x66, 0x58, 0x72, 0x14,
0x3A, 0x90, 0xFA, 0x9C, 0x54, 0x76, 0x10, 0x32,
0x98, 0xFE, 0x98, 0xBA
]
sn1 = (seed[0] >> 4) & 0xF
sn2 = seed[0] & 0xF
sn3 = (seed[1] >> 4) & 0xF
sn4 = seed[1] & 0xF
sn5 = (seed[2] >> 4) & 0xF
sn6 = seed[2] & 0xF
sn7 = (seed[3] >> 4) & 0xF
sn8 = seed[3] & 0xF
# KN1 logic
kn1 = sn2 ^ (0x1 if (sn2 & 0x8) else 0x5)
if (sn3 ^ 0xA) < 2 and (sn4 ^ 0xA) < 2 and (sn2 & 0x1):
kn1 = (kn1 + 1) & 0xF
if (sn2 >= 0xA):
kn1 ^= 0x4
# KN2 logic
tmp_high = sn3
tmp_low = sn4
if tmp_low > tmp_high:
tmp_high, tmp_low = tmp_low, tmp_high
index = (tmp_high * (tmp_high + 1)) // 2 + tmp_low
if index & 1:
kn2 = lookup_table[index >> 1] & 0xF
else:
kn2 = (lookup_table[index >> 1] >> 4) & 0xF
if (sn5 ^ 0xA) < 2 and (sn6 ^ 0xA) < 2 and ((sn3 ^ sn4) & 1) == 0:
kn2 = (kn2 + 1) & 0xF
# KN3 logic placeholder
kn3 = 0
# KN4 logic
kn4 = sn7 ^ (0x1 if (sn7 & 0x8) else 0x5)
if (sn7 >= 0xA):
kn4 ^= 0x4
return kn1, kn2, kn3, kn4