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);