mirror of
https://github.com/wiz0u/WTelegramClient.git
synced 2026-04-21 06:13:57 +00:00
Remember the good primes to prevent verifying them twice
This commit is contained in:
parent
3701ba6f72
commit
67285c1c08
4 changed files with 13 additions and 11 deletions
2
.github/ci.yml
vendored
2
.github/ci.yml
vendored
|
|
@ -2,7 +2,7 @@ pr: none
|
||||||
trigger:
|
trigger:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
name: 0.9.4-ci.$(Rev:r)
|
name: 0.9.5-ci.$(Rev:r)
|
||||||
|
|
||||||
pool:
|
pool:
|
||||||
vmImage: ubuntu-latest
|
vmImage: ubuntu-latest
|
||||||
|
|
|
||||||
|
|
@ -190,7 +190,7 @@ namespace WTelegram
|
||||||
writer.Write(0L); // int64 auth_key_id = 0 (Unencrypted)
|
writer.Write(0L); // int64 auth_key_id = 0 (Unencrypted)
|
||||||
writer.Write(msgId); // int64 message_id
|
writer.Write(msgId); // int64 message_id
|
||||||
writer.Write(0); // int32 message_data_length (to be patched)
|
writer.Write(0); // int32 message_data_length (to be patched)
|
||||||
var typeName = func(writer); // bytes message_data
|
var typeName = func(writer); // bytes message_data
|
||||||
Helpers.Log(1, $"Sending {typeName}...");
|
Helpers.Log(1, $"Sending {typeName}...");
|
||||||
BinaryPrimitives.WriteInt32LittleEndian(memStream.GetBuffer().AsSpan(24), (int)memStream.Length - 28); // patch message_data_length
|
BinaryPrimitives.WriteInt32LittleEndian(memStream.GetBuffer().AsSpan(24), (int)memStream.Length - 28); // patch message_data_length
|
||||||
}
|
}
|
||||||
|
|
@ -204,12 +204,12 @@ namespace WTelegram
|
||||||
const int prepend = 32;
|
const int prepend = 32;
|
||||||
clearWriter.Write(_session.AuthKey, 88, prepend);
|
clearWriter.Write(_session.AuthKey, 88, prepend);
|
||||||
#endif
|
#endif
|
||||||
clearWriter.Write(_session.Salt); // int64 salt
|
clearWriter.Write(_session.Salt); // int64 salt
|
||||||
clearWriter.Write(_session.Id); // int64 session_id
|
clearWriter.Write(_session.Id); // int64 session_id
|
||||||
clearWriter.Write(msgId); // int64 message_id
|
clearWriter.Write(msgId); // int64 message_id
|
||||||
clearWriter.Write(seqno); // int32 msg_seqno
|
clearWriter.Write(seqno); // int32 msg_seqno
|
||||||
clearWriter.Write(0); // int32 message_data_length (to be patched)
|
clearWriter.Write(0); // int32 message_data_length (to be patched)
|
||||||
var typeName = func(clearWriter); // bytes message_data
|
var typeName = func(clearWriter); // bytes message_data
|
||||||
if ((seqno & 1) != 0)
|
if ((seqno & 1) != 0)
|
||||||
Helpers.Log(1, $"Sending {typeName,-50} #{(short)msgId.GetHashCode():X4}");
|
Helpers.Log(1, $"Sending {typeName,-50} #{(short)msgId.GetHashCode():X4}");
|
||||||
else
|
else
|
||||||
|
|
@ -558,7 +558,7 @@ namespace WTelegram
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{ }
|
{ }
|
||||||
catch (Exception ex)
|
catch (Exception ex) when (!ct.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
Helpers.Log(5, $"An exception occured in the reactor: {ex}");
|
Helpers.Log(5, $"An exception occured in the reactor: {ex}");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,7 @@ namespace WTelegram
|
||||||
|
|
||||||
private static void ValidityChecks(BigInteger p, int g)
|
private static void ValidityChecks(BigInteger p, int g)
|
||||||
{
|
{
|
||||||
Helpers.Log(2, "Verifying encryption key safety... (this happens only during session negociation)");
|
Helpers.Log(2, "Verifying encryption key safety... (this should happen only once)");
|
||||||
// check that 2^2047 <= p < 2^2048
|
// check that 2^2047 <= p < 2^2048
|
||||||
if (p.GetBitLength() != 2048) throw new ApplicationException("p is not 2048-bit number");
|
if (p.GetBitLength() != 2048) throw new ApplicationException("p is not 2048-bit number");
|
||||||
// check that g generates a cyclic subgroup of prime order (p - 1) / 2, i.e. is a quadratic residue mod p.
|
// check that g generates a cyclic subgroup of prime order (p - 1) / 2, i.e. is a quadratic residue mod p.
|
||||||
|
|
|
||||||
|
|
@ -147,12 +147,13 @@ namespace WTelegram
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int MillerRabinIterations { get; set; } = 64; // 64 is OpenSSL default for 2048-bits numbers
|
public static int MillerRabinIterations { get; set; } = 64; // 64 is OpenSSL default for 2048-bits numbers
|
||||||
|
private static readonly HashSet<BigInteger> GoodPrimes = new();
|
||||||
// Miller–Rabin primality test
|
// Miller–Rabin primality test
|
||||||
public static bool IsProbablePrime(this BigInteger n)
|
public static bool IsProbablePrime(this BigInteger n)
|
||||||
{
|
{
|
||||||
var n_minus_one = n - BigInteger.One;
|
var n_minus_one = n - BigInteger.One;
|
||||||
if (n_minus_one.Sign <= 0) return false;
|
if (n_minus_one.Sign <= 0) return false;
|
||||||
|
if (GoodPrimes.Contains(n)) return true;
|
||||||
|
|
||||||
int s;
|
int s;
|
||||||
var d = n_minus_one;
|
var d = n_minus_one;
|
||||||
|
|
@ -187,6 +188,7 @@ namespace WTelegram
|
||||||
}
|
}
|
||||||
if (r == 0) return false;
|
if (r == 0) return false;
|
||||||
}
|
}
|
||||||
|
GoodPrimes.Add(n);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue