From 219c35f0071f38c303f5c4befb921e39413752c3 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 23 Aug 2019 01:54:19 +0300 Subject: [PATCH] Optimize key generation. GitOrigin-RevId: e0958f470a15aa83066d20685c15a056d853a42a --- td/mtproto/TlsInit.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/td/mtproto/TlsInit.cpp b/td/mtproto/TlsInit.cpp index 07d80fc13..a1a3b71b7 100644 --- a/td/mtproto/TlsInit.cpp +++ b/td/mtproto/TlsInit.cpp @@ -295,12 +295,8 @@ class TlsHelloStore { auto key = dest_.substr(0, 32); while (true) { Random::secure_bytes(key); - key[31] = static_cast(key[31] & 127); - BigNum x = BigNum::from_le_binary(key); - if (!is_quadratic_residue(x)) { - continue; - } - + BigNum x = BigNum::from_binary(key); + BigNum::mod_mul(x, x, x, mod, big_num_context); BigNum y = x.clone(); BigNum coef = BigNum::from_decimal("486662").move_as_ok(); BigNum::mod_add(y, y, coef, mod, big_num_context); @@ -310,6 +306,7 @@ class TlsHelloStore { BigNum::mod_mul(y, y, x, mod, big_num_context); // y = x^3 + 486662 * x^2 + x if (is_quadratic_residue(y)) { + key.copy_from(x.to_le_binary(32)); break; } }