Repo created
This commit is contained in:
parent
81b91f4139
commit
f8c34fa5ee
22732 changed files with 4815320 additions and 2 deletions
61
TMessagesProj/jni/voip/tgcalls/CryptoHelper.cpp
Normal file
61
TMessagesProj/jni/voip/tgcalls/CryptoHelper.cpp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#include "CryptoHelper.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <limits.h>
|
||||
|
||||
namespace tgcalls {
|
||||
|
||||
AesKeyIv PrepareAesKeyIv(const uint8_t *key, const uint8_t *msgKey, int x) {
|
||||
auto result = AesKeyIv();
|
||||
|
||||
const auto sha256a = ConcatSHA256(
|
||||
MemorySpan{ msgKey, 16 },
|
||||
MemorySpan{ key + x, 36 });
|
||||
const auto sha256b = ConcatSHA256(
|
||||
MemorySpan{ key + 40 + x, 36 },
|
||||
MemorySpan{ msgKey, 16 });
|
||||
const auto aesKey = result.key.data();
|
||||
const auto aesIv = result.iv.data();
|
||||
memcpy(aesKey, sha256a.data(), 8);
|
||||
memcpy(aesKey + 8, sha256b.data() + 8, 16);
|
||||
memcpy(aesKey + 8 + 16, sha256a.data() + 24, 8);
|
||||
memcpy(aesIv, sha256b.data(), 4);
|
||||
memcpy(aesIv + 4, sha256a.data() + 8, 8);
|
||||
memcpy(aesIv + 4 + 8, sha256b.data() + 24, 4);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void AesProcessCtr(MemorySpan from, void *to, AesKeyIv &&aesKeyIv) {
|
||||
auto aes = AES_KEY();
|
||||
AES_set_encrypt_key(
|
||||
reinterpret_cast<const unsigned char*>(aesKeyIv.key.data()),
|
||||
aesKeyIv.key.size() * CHAR_BIT,
|
||||
&aes);
|
||||
|
||||
unsigned char ecountBuf[16] = { 0 };
|
||||
unsigned int offsetInBlock = 0;
|
||||
|
||||
#ifdef OPENSSL_IS_BORINGSSL
|
||||
AES_ctr128_encrypt(
|
||||
reinterpret_cast<const unsigned char*>(from.data),
|
||||
reinterpret_cast<unsigned char*>(to),
|
||||
from.size,
|
||||
&aes,
|
||||
reinterpret_cast<unsigned char*>(aesKeyIv.iv.data()),
|
||||
ecountBuf,
|
||||
&offsetInBlock);
|
||||
#else
|
||||
CRYPTO_ctr128_encrypt(
|
||||
reinterpret_cast<const unsigned char*>(from.data),
|
||||
reinterpret_cast<unsigned char*>(to),
|
||||
from.size,
|
||||
&aes,
|
||||
reinterpret_cast<unsigned char*>(aesKeyIv.iv.data()),
|
||||
ecountBuf,
|
||||
&offsetInBlock,
|
||||
block128_f(AES_encrypt));
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace tgcalls
|
||||
Loading…
Add table
Add a link
Reference in a new issue