From 6f77e828db644f737573c43eeb949c055932a68a Mon Sep 17 00:00:00 2001 From: Wizou Date: Wed, 18 Aug 2021 00:12:33 +0200 Subject: [PATCH] Added new package logo from @MrVeil303 (resized 128x128 as recommended by Nuget) --- README.md | 4 +-- logo.png | Bin 0 -> 10807 bytes src/Encryption.cs | 61 +++++++++++++++++-------------------- src/WTelegramClient.csproj | 7 ++++- 4 files changed, 36 insertions(+), 36 deletions(-) create mode 100644 logo.png diff --git a/README.md b/README.md index 3983a5d..39ca123 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![API Layer](https://img.shields.io/badge/API_Layer-121-blueviolet)](https://core.telegram.org/api/layers) [![Support Chat](https://img.shields.io/badge/Chat_with_us-on_Telegram-0088cc)](https://t.me/WTelegramClient) -# WTelegramClient +# WTelegramClient ### _Telegram client library written 100% in C# and .NET Standard_ ## How to use @@ -111,7 +111,7 @@ I've added several useful converters or implicit cast to various API object so t Beyond the TL async methods, the Client class offers a few other methods to simplify the sending of files, medias or messages. -This library works best with **.NET 5.0** and is also available for **.NET Standard 2.0** (.NET Framework 4.6.1 & .NET Core 2.0) +This library works best with **.NET 5.0+** and is also available for **.NET Standard 2.0** (.NET Framework 4.6.1+ & .NET Core 2.0+) # Development status The library is usable for most scenarios including (sequential or parallel) automated steps based on API requests/responses, or real-time monitoring of incoming Updates/messages. Secret chats have not been tested yet. diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d9990eda5ad34d83ffa93a069695e132394680 GIT binary patch literal 10807 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 a5|Z*EoX`Ys{@dlhH?`FCR4bKj!v7D5FSxh> literal 0 HcmV?d00001 diff --git a/src/Encryption.cs b/src/Encryption.cs index ced363d..3ad9d4f 100644 --- a/src/Encryption.cs +++ b/src/Encryption.cs @@ -312,7 +312,8 @@ Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB Sha256.TransformFinalBlock(algo.salt2, 0, algo.salt2.Length); hash = Sha256.Hash; #if NETCOREAPP2_0_OR_GREATER - var pbkdf2 = new Rfc2898DeriveBytes(hash, algo.salt1, 100000, HashAlgorithmName.SHA512).GetBytes(64); + using var derive = new Rfc2898DeriveBytes(hash, algo.salt1, 100000, HashAlgorithmName.SHA512); + var pbkdf2 = derive.GetBytes(64); #else var pbkdf2 = PBKDF2_SHA512(hash, algo.salt1, 100000, 64); #endif @@ -360,9 +361,7 @@ Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB // adapted from https://github.com/dotnet/aspnetcore/blob/main/src/DataProtection/Cryptography.KeyDerivation/src/PBKDF2/ManagedPbkdf2Provider.cs public static byte[] PBKDF2_SHA512(byte[] password, byte[] salt, int iterationCount, int numBytesRequested) { - // PBKDF2 is defined in NIST SP800-132, Sec. 5.3. - // http://csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf - + // PBKDF2 is defined in NIST SP800-132, Sec. 5.3: http://csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf byte[] retVal = new byte[numBytesRequested]; int numBytesWritten = 0; int numBytesRemaining = numBytesRequested; @@ -371,39 +370,35 @@ Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB byte[] saltWithBlockIndex = new byte[checked(salt.Length + sizeof(uint))]; Buffer.BlockCopy(salt, 0, saltWithBlockIndex, 0, salt.Length); - using (var hashAlgorithm = new HMACSHA512(password)) + using var hashAlgorithm = new HMACSHA512(password); + for (uint blockIndex = 1; numBytesRemaining > 0; blockIndex++) { - for (uint blockIndex = 1; numBytesRemaining > 0; blockIndex++) + // write the block index out as big-endian + saltWithBlockIndex[^4] = (byte)(blockIndex >> 24); + saltWithBlockIndex[^3] = (byte)(blockIndex >> 16); + saltWithBlockIndex[^2] = (byte)(blockIndex >> 8); + saltWithBlockIndex[^1] = (byte)blockIndex; + + // U_1 = PRF(U_0) = PRF(Salt || block_index) + // T_blockIndex = U_1 + byte[] U_iter = hashAlgorithm.ComputeHash(saltWithBlockIndex); // this is U_1 + byte[] T_blockIndex = U_iter; + + for (int iter = 1; iter < iterationCount; iter++) { - // write the block index out as big-endian - saltWithBlockIndex[^4] = (byte)(blockIndex >> 24); - saltWithBlockIndex[^3] = (byte)(blockIndex >> 16); - saltWithBlockIndex[^2] = (byte)(blockIndex >> 8); - saltWithBlockIndex[^1] = (byte)blockIndex; - - // U_1 = PRF(U_0) = PRF(Salt || block_index) - // T_blockIndex = U_1 - byte[] U_iter = hashAlgorithm.ComputeHash(saltWithBlockIndex); // this is U_1 - byte[] T_blockIndex = U_iter; - - for (int iter = 1; iter < iterationCount; iter++) - { - U_iter = hashAlgorithm.ComputeHash(U_iter); - for (int j = U_iter.Length - 1; j >= 0; j--) - T_blockIndex[j] ^= U_iter[j]; - // At this point, the 'U_iter' variable actually contains U_{iter+1} (due to indexing differences). - } - - // At this point, we're done iterating on this block, so copy the transformed block into retVal. - int numBytesToCopy = Math.Min(numBytesRemaining, T_blockIndex.Length); - Buffer.BlockCopy(T_blockIndex, 0, retVal, numBytesWritten, numBytesToCopy); - numBytesWritten += numBytesToCopy; - numBytesRemaining -= numBytesToCopy; + U_iter = hashAlgorithm.ComputeHash(U_iter); + for (int j = U_iter.Length - 1; j >= 0; j--) + T_blockIndex[j] ^= U_iter[j]; + // At this point, the 'U_iter' variable actually contains U_{iter+1} (due to indexing differences). } - } - // retVal := T_1 || T_2 || ... || T_n, where T_n may be truncated to meet the desired output length - return retVal; + // At this point, we're done iterating on this block, so copy the transformed block into retVal. + int numBytesToCopy = Math.Min(numBytesRemaining, T_blockIndex.Length); + Buffer.BlockCopy(T_blockIndex, 0, retVal, numBytesWritten, numBytesToCopy); + numBytesWritten += numBytesToCopy; + numBytesRemaining -= numBytesToCopy; + } + return retVal; // retVal := T_1 || T_2 || ... || T_n, where T_n may be truncated to meet the desired output length } #endif } diff --git a/src/WTelegramClient.csproj b/src/WTelegramClient.csproj index e72e8f7..1731208 100644 --- a/src/WTelegramClient.csproj +++ b/src/WTelegramClient.csproj @@ -14,6 +14,7 @@ Telegram client library written 100% in C# and .NET Standard Wizou Copyright © Olivier Marcoux 2021 + logo.png Telegram;Client;Api;UserBot;MTProto MIT https://github.com/wiz0u/WTelegramClient @@ -29,7 +30,11 @@ - + + + + +