mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-06 23:24:01 +02:00
Remove unused legacy protocol code.
This commit is contained in:
parent
d1e3e7d240
commit
5eba65aaa0
3 changed files with 19 additions and 60 deletions
|
@ -12,8 +12,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
namespace MTP::details {
|
namespace MTP::details {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
uint32 CountPaddingPrimesCount(uint32 requestSize, bool extended, bool old) {
|
uint32 CountPaddingPrimesCount(
|
||||||
if (old) {
|
uint32 requestSize,
|
||||||
|
bool extended,
|
||||||
|
bool forAuthKeyInner) {
|
||||||
|
if (forAuthKeyInner) {
|
||||||
return ((8 + requestSize) & 0x03)
|
return ((8 + requestSize) & 0x03)
|
||||||
? (4 - ((8 + requestSize) & 0x03))
|
? (4 - ((8 + requestSize) & 0x03))
|
||||||
: 0;
|
: 0;
|
||||||
|
@ -100,12 +103,15 @@ uint32 SerializedRequest::getSeqNo() const {
|
||||||
return uint32((*_data)[kSeqNoPosition]);
|
return uint32((*_data)[kSeqNoPosition]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializedRequest::addPadding(bool extended, bool old) {
|
void SerializedRequest::addPadding(bool extended, bool forAuthKeyInner) {
|
||||||
Expects(_data != nullptr);
|
Expects(_data != nullptr);
|
||||||
Expects(_data->size() > kMessageBodyPosition);
|
Expects(_data->size() > kMessageBodyPosition);
|
||||||
|
|
||||||
const auto requestSize = (tl::count_length(*this) >> 2);
|
const auto requestSize = (tl::count_length(*this) >> 2);
|
||||||
const auto padding = CountPaddingPrimesCount(requestSize, extended, old);
|
const auto padding = CountPaddingPrimesCount(
|
||||||
|
requestSize,
|
||||||
|
extended,
|
||||||
|
forAuthKeyInner);
|
||||||
const auto fullSize = kMessageBodyPosition + requestSize + padding;
|
const auto fullSize = kMessageBodyPosition + requestSize + padding;
|
||||||
if (uint32(_data->size()) != fullSize) {
|
if (uint32(_data->size()) != fullSize) {
|
||||||
_data->resize(fullSize);
|
_data->resize(fullSize);
|
||||||
|
|
|
@ -65,7 +65,7 @@ public:
|
||||||
void setSeqNo(uint32 seqNo);
|
void setSeqNo(uint32 seqNo);
|
||||||
[[nodiscard]] uint32 getSeqNo() const;
|
[[nodiscard]] uint32 getSeqNo() const;
|
||||||
|
|
||||||
void addPadding(bool extended, bool old);
|
void addPadding(bool extended, bool forAuthKeyInner);
|
||||||
[[nodiscard]] uint32 messageSize() const;
|
[[nodiscard]] uint32 messageSize() const;
|
||||||
|
|
||||||
[[nodiscard]] bool needAck() const;
|
[[nodiscard]] bool needAck() const;
|
||||||
|
|
|
@ -1263,17 +1263,16 @@ void SessionPrivate::handleReceived() {
|
||||||
return restart();
|
return restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr auto kMinPaddingSize = 12U;
|
||||||
|
constexpr auto kMaxPaddingSize = 1024U;
|
||||||
|
|
||||||
auto encryptedInts = ints + kExternalHeaderIntsCount;
|
auto encryptedInts = ints + kExternalHeaderIntsCount;
|
||||||
auto encryptedIntsCount = (intsCount - kExternalHeaderIntsCount) & ~0x03U;
|
auto encryptedIntsCount = (intsCount - kExternalHeaderIntsCount) & ~0x03U;
|
||||||
auto encryptedBytesCount = encryptedIntsCount * kIntSize;
|
auto encryptedBytesCount = encryptedIntsCount * kIntSize;
|
||||||
auto decryptedBuffer = QByteArray(encryptedBytesCount, Qt::Uninitialized);
|
auto decryptedBuffer = QByteArray(encryptedBytesCount, Qt::Uninitialized);
|
||||||
auto msgKey = *(MTPint128*)(ints + 2);
|
auto msgKey = *(MTPint128*)(ints + 2);
|
||||||
|
|
||||||
#ifdef TDESKTOP_MTPROTO_OLD
|
|
||||||
aesIgeDecrypt_oldmtp(encryptedInts, decryptedBuffer.data(), encryptedBytesCount, _encryptionKey, msgKey);
|
|
||||||
#else // TDESKTOP_MTPROTO_OLD
|
|
||||||
aesIgeDecrypt(encryptedInts, decryptedBuffer.data(), encryptedBytesCount, _encryptionKey, msgKey);
|
aesIgeDecrypt(encryptedInts, decryptedBuffer.data(), encryptedBytesCount, _encryptionKey, msgKey);
|
||||||
#endif // TDESKTOP_MTPROTO_OLD
|
|
||||||
|
|
||||||
auto decryptedInts = reinterpret_cast<const mtpPrime*>(decryptedBuffer.constData());
|
auto decryptedInts = reinterpret_cast<const mtpPrime*>(decryptedBuffer.constData());
|
||||||
auto serverSalt = *(uint64*)&decryptedInts[0];
|
auto serverSalt = *(uint64*)&decryptedInts[0];
|
||||||
|
@ -1283,31 +1282,10 @@ void SessionPrivate::handleReceived() {
|
||||||
auto needAck = ((seqNo & 0x01) != 0);
|
auto needAck = ((seqNo & 0x01) != 0);
|
||||||
auto messageLength = *(uint32*)&decryptedInts[7];
|
auto messageLength = *(uint32*)&decryptedInts[7];
|
||||||
auto fullDataLength = kEncryptedHeaderIntsCount * kIntSize + messageLength; // Without padding.
|
auto fullDataLength = kEncryptedHeaderIntsCount * kIntSize + messageLength; // Without padding.
|
||||||
auto badMessageLength = (messageLength > kMaxMessageLength);
|
|
||||||
|
|
||||||
// Can underflow, but it is an unsigned type, so we just check the range later.
|
// Can underflow, but it is an unsigned type, so we just check the range later.
|
||||||
auto paddingSize = static_cast<uint32>(encryptedBytesCount) - static_cast<uint32>(fullDataLength);
|
auto paddingSize = static_cast<uint32>(encryptedBytesCount) - static_cast<uint32>(fullDataLength);
|
||||||
|
|
||||||
#ifdef TDESKTOP_MTPROTO_OLD
|
|
||||||
constexpr auto kMinPaddingSize_oldmtp = 0U;
|
|
||||||
constexpr auto kMaxPaddingSize_oldmtp = 15U;
|
|
||||||
badMessageLength |= (/*paddingSize < kMinPaddingSize_oldmtp || */paddingSize > kMaxPaddingSize_oldmtp);
|
|
||||||
|
|
||||||
auto hashedDataLength = badMessageLength ? encryptedBytesCount : fullDataLength;
|
|
||||||
auto sha1ForMsgKeyCheck = hashSha1(decryptedInts, hashedDataLength);
|
|
||||||
|
|
||||||
constexpr auto kMsgKeyShift_oldmtp = 4U;
|
|
||||||
if (ConstTimeIsDifferent(&msgKey, sha1ForMsgKeyCheck.data() + kMsgKeyShift_oldmtp, sizeof(msgKey))) {
|
|
||||||
LOG(("TCP Error: bad SHA1 hash after aesDecrypt in message."));
|
|
||||||
TCP_LOG(("TCP Error: bad message %1").arg(Logs::mb(encryptedInts, encryptedBytesCount).str()));
|
|
||||||
|
|
||||||
return restart();
|
|
||||||
}
|
|
||||||
#else // TDESKTOP_MTPROTO_OLD
|
|
||||||
constexpr auto kMinPaddingSize = 12U;
|
|
||||||
constexpr auto kMaxPaddingSize = 1024U;
|
|
||||||
badMessageLength |= (paddingSize < kMinPaddingSize || paddingSize > kMaxPaddingSize);
|
|
||||||
|
|
||||||
std::array<uchar, 32> sha256Buffer = { { 0 } };
|
std::array<uchar, 32> sha256Buffer = { { 0 } };
|
||||||
|
|
||||||
SHA256_CTX msgKeyLargeContext;
|
SHA256_CTX msgKeyLargeContext;
|
||||||
|
@ -1323,9 +1301,11 @@ void SessionPrivate::handleReceived() {
|
||||||
|
|
||||||
return restart();
|
return restart();
|
||||||
}
|
}
|
||||||
#endif // TDESKTOP_MTPROTO_OLD
|
|
||||||
|
|
||||||
if (badMessageLength || (messageLength & 0x03)) {
|
if ((messageLength > kMaxMessageLength)
|
||||||
|
|| (messageLength & 0x03)
|
||||||
|
|| (paddingSize < kMinPaddingSize)
|
||||||
|
|| (paddingSize > kMaxPaddingSize)) {
|
||||||
LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(messageLength).arg(encryptedBytesCount));
|
LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(messageLength).arg(encryptedBytesCount));
|
||||||
TCP_LOG(("TCP Error: bad message %1").arg(Logs::mb(encryptedInts, encryptedBytesCount).str()));
|
TCP_LOG(("TCP Error: bad message %1").arg(Logs::mb(encryptedInts, encryptedBytesCount).str()));
|
||||||
|
|
||||||
|
@ -2616,12 +2596,7 @@ void SessionPrivate::destroyTemporaryKey() {
|
||||||
bool SessionPrivate::sendSecureRequest(
|
bool SessionPrivate::sendSecureRequest(
|
||||||
SerializedRequest &&request,
|
SerializedRequest &&request,
|
||||||
bool needAnyResponse) {
|
bool needAnyResponse) {
|
||||||
#ifdef TDESKTOP_MTPROTO_OLD
|
request.addPadding(_connection->requiresExtendedPadding(), false);
|
||||||
const auto oldPadding = true;
|
|
||||||
#else // TDESKTOP_MTPROTO_OLD
|
|
||||||
const auto oldPadding = false;
|
|
||||||
#endif // TDESKTOP_MTPROTO_OLD
|
|
||||||
request.addPadding(_connection->requiresExtendedPadding(), oldPadding);
|
|
||||||
|
|
||||||
uint32 fullSize = request->size();
|
uint32 fullSize = request->size();
|
||||||
if (fullSize < 9) {
|
if (fullSize < 9) {
|
||||||
|
@ -2643,27 +2618,6 @@ bool SessionPrivate::sendSecureRequest(
|
||||||
).arg(getProtocolDcId()
|
).arg(getProtocolDcId()
|
||||||
).arg(_encryptionKey->keyId()));
|
).arg(_encryptionKey->keyId()));
|
||||||
|
|
||||||
#ifdef TDESKTOP_MTPROTO_OLD
|
|
||||||
uint32 padding = fullSize - 4 - messageSize;
|
|
||||||
|
|
||||||
uchar encryptedSHA[20];
|
|
||||||
MTPint128 &msgKey(*(MTPint128*)(encryptedSHA + 4));
|
|
||||||
hashSha1(
|
|
||||||
request->constData(),
|
|
||||||
(fullSize - padding) * sizeof(mtpPrime),
|
|
||||||
encryptedSHA);
|
|
||||||
|
|
||||||
auto packet = _connection->prepareSecurePacket(_keyId, msgKey, fullSize);
|
|
||||||
const auto prefix = packet.size();
|
|
||||||
packet.resize(prefix + fullSize);
|
|
||||||
|
|
||||||
aesIgeEncrypt_oldmtp(
|
|
||||||
request->constData(),
|
|
||||||
&packet[prefix],
|
|
||||||
fullSize * sizeof(mtpPrime),
|
|
||||||
_encryptionKey,
|
|
||||||
msgKey);
|
|
||||||
#else // TDESKTOP_MTPROTO_OLD
|
|
||||||
uchar encryptedSHA256[32];
|
uchar encryptedSHA256[32];
|
||||||
MTPint128 &msgKey(*(MTPint128*)(encryptedSHA256 + 8));
|
MTPint128 &msgKey(*(MTPint128*)(encryptedSHA256 + 8));
|
||||||
|
|
||||||
|
@ -2683,7 +2637,6 @@ bool SessionPrivate::sendSecureRequest(
|
||||||
fullSize * sizeof(mtpPrime),
|
fullSize * sizeof(mtpPrime),
|
||||||
_encryptionKey,
|
_encryptionKey,
|
||||||
msgKey);
|
msgKey);
|
||||||
#endif // TDESKTOP_MTPROTO_OLD
|
|
||||||
|
|
||||||
DEBUG_LOG(("MTP Info: sending request, size: %1, num: %2, time: %3").arg(fullSize + 6).arg((*request)[4]).arg((*request)[5]));
|
DEBUG_LOG(("MTP Info: sending request, size: %1, num: %2, time: %3").arg(fullSize + 6).arg((*request)[4]).arg((*request)[5]));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue