From 8b9d584815ddb7d9be801db2872dc7cf24659f47 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 16 Mar 2026 13:38:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanUds.c | 21 +++++++++++---------- CanUds.h | 6 ++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/CanUds.c b/CanUds.c index 684475f..8368f8c 100644 --- a/CanUds.c +++ b/CanUds.c @@ -15,9 +15,6 @@ #define LOG_SIGN "CAN_UDS" #define LOGGER env->logger -uint32_t randomSecuritySeed = 0x853A08FB; - - extern uint32_t generate_key(uint32_t seed); @@ -975,14 +972,16 @@ static uint16_t SecurityAccess_27(tCanUds *env) { env->dataResponse[5] = 0; } else { - if (randomSecuritySeed == 0) { - randomSecuritySeed = 0x11223344; + env->randomSecuritySeed = getRandom32(env->adcTask0); + + if (env->randomSecuritySeed == 0) { + env->randomSecuritySeed = 0x11223344; } - env->dataResponse[2] = randomSecuritySeed >> 24; - env->dataResponse[3] = randomSecuritySeed >> 16; - env->dataResponse[4] = randomSecuritySeed >> 8; - env->dataResponse[5] = randomSecuritySeed; + env->dataResponse[2] = env->randomSecuritySeed >> 24; + env->dataResponse[3] = env->randomSecuritySeed >> 16; + env->dataResponse[4] = env->randomSecuritySeed >> 8; + env->dataResponse[5] = env->randomSecuritySeed; } return 6; } @@ -1013,7 +1012,7 @@ static uint16_t SecurityAccess_27(tCanUds *env) { uint32_t securitySeedFromServer = (env->data.data[2] << 24) | (env->data.data[3] << 16) | (env->data.data[4] << 8) | env->data.data[5]; - uint32_t securitySeedMy = generate_key(randomSecuritySeed); + uint32_t securitySeedMy = generate_key(env->randomSecuritySeed); if (securitySeedMy != securitySeedFromServer) { ++env->SA.counter_max_attempts_default; @@ -1360,12 +1359,14 @@ void CanUds_Init( tSerialPortFrameIO *CanIO, tDeviceStorage *deviceStorage, tCanSpamTransmitter *canSpamTransmitter, + tAdcTask *adcTask0, tLoggerInterface *logger) { env->logger = logger; env->CanIO = CanIO; env->deviceStorage = deviceStorage; env->Diagnostic = Diagnostic; + env->adcTask0 = adcTask0; env->filterIdCount = 2; env->canSpamTransmitter = canSpamTransmitter; env->queue = osMessageQueueNew(CAN_US_QUEUE_SIZE, sizeof(tCanTP_data), NULL); diff --git a/CanUds.h b/CanUds.h index 7fbe448..3fff669 100644 --- a/CanUds.h +++ b/CanUds.h @@ -9,6 +9,7 @@ #include "DeviceStorage.h" #include "DiagnosticTask.h" #include "CanSpamTransmitter.h" +#include "AdcTasks.h" #define LOG_UDS 1 @@ -143,6 +144,8 @@ typedef struct { osMessageQueueId_t queue; + tAdcTask *adcTask0; + tCanTP_data data; uint8_t dataResponse[1024]; @@ -158,6 +161,8 @@ typedef struct { tCanSpamTransmitter *canSpamTransmitter; + uint32_t randomSecuritySeed; + struct { bool requestSequenceRequestSeed; bool stateSecurityAccess; @@ -181,6 +186,7 @@ void CanUds_Init( tSerialPortFrameIO *CanIO, tDeviceStorage *deviceStorage, tCanSpamTransmitter *canSpamTransmitter, + tAdcTask *adcTask0, tLoggerInterface *logger); void CanSerialPortCanUds_Start(tCanUds *env);