diff --git a/src/p25/lc/tsbk/ISP_AUTH_RESP.cpp b/src/p25/lc/tsbk/ISP_AUTH_RESP.cpp index e55904f7..efd0b50d 100644 --- a/src/p25/lc/tsbk/ISP_AUTH_RESP.cpp +++ b/src/p25/lc/tsbk/ISP_AUTH_RESP.cpp @@ -83,10 +83,10 @@ bool ISP_AUTH_RESP::decode(const uint8_t* data, bool rawTSBK) ulong64_t tsbkValue = TSBK::toValue(tsbk); m_authStandalone = (((tsbkValue >> 56) & 0xFFU) & 0x01U) == 0x01U; // Authentication Standalone Flag - m_authRes[3U] = tsbk[3U]; // RES1(3) - m_authRes[2U] = tsbk[4U]; // RES1(2) - m_authRes[1U] = tsbk[5U]; // RES1(1) - m_authRes[0U] = tsbk[6U]; // RES1(0) + m_authRes[0U] = tsbk[3U]; // RES1(3) + m_authRes[1U] = tsbk[4U]; // RES1(2) + m_authRes[2U] = tsbk[5U]; // RES1(1) + m_authRes[3U] = tsbk[6U]; // RES1(0) m_srcId = (uint32_t)(tsbkValue & 0xFFFFFFU); // Source Radio Address diff --git a/src/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp b/src/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp index 0b5c23b5..92bfc71b 100644 --- a/src/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp +++ b/src/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp @@ -97,17 +97,17 @@ bool MBT_ISP_AUTH_RESP_M::decodeMBT(const data::DataHeader& dataHeader, const da m_srcId = dataHeader.getLLId(); // Source Radio Address /** Block 1 */ - m_authRC[4U] = (uint8_t)pduUserData[5U] & 0xFFU; // Random Challenge b4 - m_authRC[3U] = (uint8_t)pduUserData[6U] & 0xFFU; // Random Challenge b3 + m_authRC[0U] = (uint8_t)pduUserData[5U] & 0xFFU; // Random Challenge b4 + m_authRC[1U] = (uint8_t)pduUserData[6U] & 0xFFU; // Random Challenge b3 m_authRC[2U] = (uint8_t)pduUserData[7U] & 0xFFU; // Random Challenge b2 - m_authRC[1U] = (uint8_t)pduUserData[8U] & 0xFFU; // Random Challenge b1 - m_authRC[0U] = (uint8_t)pduUserData[9U] & 0xFFU; // Random Challenge b0 - m_authRes[3U] = (uint8_t)pduUserData[10U] & 0xFFU; // Result b3 - m_authRes[2U] = (uint8_t)pduUserData[11U] & 0xFFU; // Result b2 + m_authRC[3U] = (uint8_t)pduUserData[8U] & 0xFFU; // Random Challenge b1 + m_authRC[4U] = (uint8_t)pduUserData[9U] & 0xFFU; // Random Challenge b0 + m_authRes[0U] = (uint8_t)pduUserData[10U] & 0xFFU; // Result b3 + m_authRes[1U] = (uint8_t)pduUserData[11U] & 0xFFU; // Result b2 /** Block 2 */ - m_authRes[1U] = (uint8_t)pduUserData[12U] & 0xFFU; // Result b1 - m_authRes[0U] = (uint8_t)pduUserData[13U] & 0xFFU; // Result b0 + m_authRes[2U] = (uint8_t)pduUserData[12U] & 0xFFU; // Result b1 + m_authRes[3U] = (uint8_t)pduUserData[13U] & 0xFFU; // Result b0 m_authStandalone = ((pduUserData[14U] & 0xFFU) & 0x01U) == 0x01U; // Authentication Standalone Flag return true; diff --git a/src/p25/lc/tsbk/MBT_OSP_AUTH_DMD.cpp b/src/p25/lc/tsbk/MBT_OSP_AUTH_DMD.cpp index 62e9aa54..e6f7ce39 100644 --- a/src/p25/lc/tsbk/MBT_OSP_AUTH_DMD.cpp +++ b/src/p25/lc/tsbk/MBT_OSP_AUTH_DMD.cpp @@ -103,23 +103,23 @@ void MBT_OSP_AUTH_DMD::encodeMBT(data::DataHeader& dataHeader, uint8_t* pduUserD __SET_UINT16(m_dstId, pduUserData, 2U); // Target Radio Address - pduUserData[5U] = m_authRS[9U]; // Random Salt b9 - pduUserData[6U] = m_authRS[8U]; // Random Salt b8 - pduUserData[7U] = m_authRS[7U]; // Random Salt b7 - pduUserData[8U] = m_authRS[6U]; // Random Salt b6 - pduUserData[9U] = m_authRS[5U]; // Random Salt b5 - pduUserData[10U] = m_authRS[4U]; // Random Salt b4 - pduUserData[11U] = m_authRS[3U]; // Random Salt b3 + pduUserData[5U] = m_authRS[0U]; // Random Salt b9 + pduUserData[6U] = m_authRS[1U]; // Random Salt b8 + pduUserData[7U] = m_authRS[2U]; // Random Salt b7 + pduUserData[8U] = m_authRS[3U]; // Random Salt b6 + pduUserData[9U] = m_authRS[4U]; // Random Salt b5 + pduUserData[10U] = m_authRS[5U]; // Random Salt b4 + pduUserData[11U] = m_authRS[6U]; // Random Salt b3 /** Block 2 */ - pduUserData[12U] = m_authRS[2U]; // Random Salt b2 - pduUserData[13U] = m_authRS[1U]; // Random Salt b1 - pduUserData[14U] = m_authRS[0U]; // Random Salt b0 - pduUserData[15U] = m_authRC[4U]; // Random Challenge b4 - pduUserData[16U] = m_authRC[3U]; // Random Challenge b3 + pduUserData[12U] = m_authRS[7U]; // Random Salt b2 + pduUserData[13U] = m_authRS[8U]; // Random Salt b1 + pduUserData[14U] = m_authRS[9U]; // Random Salt b0 + pduUserData[15U] = m_authRC[0U]; // Random Challenge b4 + pduUserData[16U] = m_authRC[1U]; // Random Challenge b3 pduUserData[17U] = m_authRC[2U]; // Random Challenge b2 - pduUserData[18U] = m_authRC[1U]; // Random Challenge b1 - pduUserData[19U] = m_authRC[0U]; // Random Challenge b0 + pduUserData[18U] = m_authRC[3U]; // Random Challenge b1 + pduUserData[19U] = m_authRC[4U]; // Random Challenge b0 AMBT::encode(dataHeader, pduUserData); } diff --git a/src/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp b/src/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp index be6173f5..0bfe09bd 100644 --- a/src/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp +++ b/src/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp @@ -89,10 +89,10 @@ void OSP_AUTH_FNE_RESP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) ulong64_t tsbkValue = 0U; - tsbkValue = (tsbkValue << 8) + m_authRes[3U]; // Result b3 - tsbkValue = (tsbkValue << 8) + m_authRes[2U]; // Result b2 - tsbkValue = (tsbkValue << 8) + m_authRes[1U]; // Result b1 - tsbkValue = (tsbkValue << 8) + m_authRes[0U]; // Result b0 + tsbkValue = (tsbkValue << 8) + m_authRes[0U]; // Result b3 + tsbkValue = (tsbkValue << 8) + m_authRes[1U]; // Result b2 + tsbkValue = (tsbkValue << 8) + m_authRes[2U]; // Result b1 + tsbkValue = (tsbkValue << 8) + m_authRes[3U]; // Result b0 tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); diff --git a/src/p25/packet/ControlSignaling.cpp b/src/p25/packet/ControlSignaling.cpp index 4e5cddae..742424b5 100644 --- a/src/p25/packet/ControlSignaling.cpp +++ b/src/p25/packet/ControlSignaling.cpp @@ -643,14 +643,12 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptrm_ackTSBKRequests) { - writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_AUTH_RESP, true, true); - } - if (!authFailed) { writeRF_TSDU_U_Reg_Rsp(srcId, tsbk->getSysId()); } else { + LogWarning(LOG_RF, P25_TSDU_STR ", %s denial, AUTH failed, src = %u", isp->toString().c_str(), srcId); + ::ActivityLog("P25", true, "unit registration request from %u denied, authentication failure", srcId); writeRF_TSDU_Deny(P25_WUID_FNE, srcId, P25_DENY_RSN_SU_FAILED_AUTH, TSBK_IOSP_U_REG); } }