fix inverted byte order for LLA auth packets; add logging for when a SU fails LLA authentication;

3.5-maint
Bryan Biedenkapp 2 years ago
parent 4d234ccfe7
commit d9c4f0d79d

@ -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

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

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

@ -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<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);

@ -643,14 +643,12 @@ bool ControlSignaling::process(uint8_t* data, uint32_t len, std::unique_ptr<lc::
}
}
if (m_p25->m_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);
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.