From 412d214a997149e4cb0dc3cbc7ac6e3e5e1ad2d8 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 3 Jun 2023 01:30:48 -0400 Subject: [PATCH] we know a secret! --- src/main/java/com/rusefi/uds/KeyCalculator.java | 14 +++++++++++--- src/test/java/com/rusefi/uds/SecurityTest.java | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/rusefi/uds/KeyCalculator.java b/src/main/java/com/rusefi/uds/KeyCalculator.java index bf655e4..46f8360 100644 --- a/src/main/java/com/rusefi/uds/KeyCalculator.java +++ b/src/main/java/com/rusefi/uds/KeyCalculator.java @@ -1,10 +1,18 @@ package com.rusefi.uds; public class KeyCalculator { - //private static final int SECRET = 0x57649392; + private static final int MAIN_APP_SECRET = 0x57649392; private static final int BOOTLOADER_SECRET = 0xB24F5249; - public static int udsSecurityCalcKey(int seed, int rnd) { + public static int udsBootloaderSecurityCalcKey(int seed, int rnd) { + return udsSecurityCalcKey(BOOTLOADER_SECRET, seed, rnd); + } + + public static int udsMainAppSecurityCalcKey(int seed, int rnd) { + return udsSecurityCalcKey(MAIN_APP_SECRET, seed, rnd); + } + + private static int udsSecurityCalcKey(int secret, int seed, int rnd) { if (rnd < 220) { rnd += 35; } else { @@ -13,7 +21,7 @@ public class KeyCalculator { for (int i = 0; i < rnd; i++) { if (seed < 0) { - seed = BOOTLOADER_SECRET ^ seed << 1; + seed = secret ^ seed << 1; } else { seed <<= 1; } diff --git a/src/test/java/com/rusefi/uds/SecurityTest.java b/src/test/java/com/rusefi/uds/SecurityTest.java index 25fa2a0..1706480 100644 --- a/src/test/java/com/rusefi/uds/SecurityTest.java +++ b/src/test/java/com/rusefi/uds/SecurityTest.java @@ -7,7 +7,17 @@ import static org.junit.Assert.assertEquals; public class SecurityTest { @Test public void testCalcKey() { - int key = KeyCalculator.udsSecurityCalcKey(0x5D8A2010, 0xF0); - assertEquals("Got " + String.format("%x", key), 0xc42f15ae, key); + { + int key = KeyCalculator.udsBootloaderSecurityCalcKey(0x5D8A2010, 0xF0); + assertEquals("Got " + String.format("%x", key), 0xc42f15ae, key); + } + { + int key = KeyCalculator.udsBootloaderSecurityCalcKey(0x5D8A202C, 0xF0); + assertEquals("Got " + String.format("%x", key), 0xAEE52AA2, key); + } + { + int key = KeyCalculator.udsMainAppSecurityCalcKey(0x5DA0B808, 0xA4); + assertEquals("Got " + String.format("%x", key), 0x001B6F78, key); + } } }