diff --git a/TL.php b/TL.php index 7f55c136..1b150f6d 100644 --- a/TL.php +++ b/TL.php @@ -107,17 +107,25 @@ class TL { switch ($type_) { case 'int': - if(!is_numeric($value)) throw new Exception("serialize_param: given value isn't numeric"); - if(!(strlen(decbin($value)) <= 32)) throw new Exception("Given value is too long."); + if (!is_numeric($value)) { + throw new Exception("serialize_param: given value isn't numeric"); + } + if (!(strlen(decbin($value)) <= 32)) { + throw new Exception('Given value is too long.'); + } fwrite($bytes_io, $this->struct->pack('struct->pack('struct->unpack('struct->unpack(' 254) throw new Exception("Length is too big");; + if ($l > 254) { + throw new Exception('Length is too big'); + } if ($l == 254) { $long_len = $this->struct->unpack('struct->unpack('aes_calculate($message_key, 'from server'); $decrypted_data = crypt::ige_decrypt($encrypted_data, $aes_key, $aes_iv); - if (substr($decrypted_data, 0, 8) != $this->server_salt) throw new Exception("Server salt does not match."); - if (substr($decrypted_data, 8, 8) != $this->session_id) throw new Exception("Session id does not match."); + if (substr($decrypted_data, 0, 8) != $this->server_salt) { + throw new Exception('Server salt does not match.'); + } + if (substr($decrypted_data, 8, 8) != $this->session_id) { + throw new Exception('Session id does not match.'); + } $message_id = substr($decrypted_data, 16, 24 - 16); $seq_no = $this->struct->unpack('struct->unpack('tl->deserialize(fopen_and_write('php://memory', 'rw+b', $server_answer)); } - throw new Exception("An error occurred while calling method ".$method.'.'); - + throw new Exception('An error occurred while calling method '.$method.'.'); } public function create_auth_key() @@ -234,7 +239,7 @@ class Session pyjslib_printnl('Requesting pq'); $ResPQ = $this->method_call('req_pq', ['nonce' => $nonce]); if ($ResPQ['nonce'] !== $nonce) { - throw new Exception("Handshake: wrong nonce"); + throw new Exception('Handshake: wrong nonce'); } $server_nonce = $ResPQ['server_nonce']; $public_key_fingerprint = (int) $ResPQ['server_public_key_fingerprints'][0]; @@ -247,7 +252,9 @@ class Session if ($p->compare($q) > 0) { list($p, $q) = [$q, $p]; } - if(!(($pq->equals($p->multiply($q))) && ($p < $q))) throw new Exception("Handshake: couldn't compute p or q."); + if (!(($pq->equals($p->multiply($q))) && ($p < $q))) { + throw new Exception("Handshake: couldn't compute p or q."); + } pyjslib_printnl(sprintf('Factorization %s = %s * %s', $pq, $p, $q)); $p_bytes = $this->struct->pack('>Q', (string) $p); $q_bytes = $this->struct->pack('>Q', (string) $q); @@ -262,8 +269,12 @@ class Session $encrypted_data = $key->_raw_encrypt($to_encrypt); pyjslib_printnl('Starting Diffie Hellman key exchange'); $server_dh_params = $this->method_call('req_DH_params', ['nonce' => $nonce, 'server_nonce' => $server_nonce, 'p' => $p_bytes, 'q' => $q_bytes, 'public_key_fingerprint' => $public_key_fingerprint, 'encrypted_data' => $encrypted_data]); - if($nonce != $server_dh_params['nonce']) throw new Exception("Handshake: wrong nonce."); - if($server_nonce != $server_dh_params['server_nonce']) throw new Exception("Handshake: wrong server nonce."); + if ($nonce != $server_dh_params['nonce']) { + throw new Exception('Handshake: wrong nonce.'); + } + if ($server_nonce != $server_dh_params['server_nonce']) { + throw new Exception('Handshake: wrong server nonce.'); + } $encrypted_answer = $server_dh_params['encrypted_answer']; $tmp_aes_key = sha1($new_nonce.$server_nonce, true).substr(sha1($server_nonce.$new_nonce, true), 0, 12); $tmp_aes_iv = substr(sha1($server_nonce.$new_nonce, true), 12, 8).sha1($new_nonce.$new_nonce, true).substr($new_nonce, 0, 4); @@ -271,8 +282,12 @@ class Session $answer_hash = substr($answer_with_hash, 0, 20); $answer = substr($answer_with_hash, 20); $server_DH_inner_data = deserialize(fopen_and_write('php://memory', 'rw+b', $answer)); - if($nonce != $server_DH_inner_data['nonce']) throw new Exception("Handshake: wrong nonce"); - if($server_nonce != $server_DH_inner_data['server_nonce']) throw new Exception("Handshake: wrong server nonce");; + if ($nonce != $server_DH_inner_data['nonce']) { + throw new Exception('Handshake: wrong nonce'); + } + if ($server_nonce != $server_DH_inner_data['server_nonce']) { + throw new Exception('Handshake: wrong server nonce'); + } $dh_prime_str = $server_DH_inner_data['dh_prime']; $g = $server_DH_inner_data['g']; $g_a_str = $server_DH_inner_data['g_a']; @@ -281,7 +296,9 @@ class Session pyjslib_printnl(sprintf('Server-client time delta = %.1f s', $this->timedelta)); $dh_prime = $this->struct->unpack('>Q', $dh_prime_str); $g_a = $this->struct->unpack('>Q', $g_a_str); - if(!$this->PrimeModule->isprime($dh_prime)) throw new Exception("Handshake: dh_prime isn't a prime.");; + if (!$this->PrimeModule->isprime($dh_prime)) { + throw new Exception("Handshake: dh_prime isn't a prime."); + } $retry_id = 0; $b_str = \phpseclib\Crypt\Random::string(256); $b = $this->struct->unpack('>Q', $b_str); @@ -300,10 +317,16 @@ class Session $new_nonce_hash1 = substr(sha1($new_nonce.''.$auth_key_aux_hash, true), -16); $new_nonce_hash2 = substr(sha1($new_nonce.''.$auth_key_aux_hash, true), -16); $new_nonce_hash3 = substr(sha1($new_nonce.''.$auth_key_aux_hash, true), -16); - if($Set_client_DH_params_answer['nonce'] != $nonce) throw new Exception("Handshake: wrong nonce."); - if($Set_client_DH_params_answer['server_nonce'] != $server_nonce) throw new Exception("Handshake: wrong server nonce");; + if ($Set_client_DH_params_answer['nonce'] != $nonce) { + throw new Exception('Handshake: wrong nonce.'); + } + if ($Set_client_DH_params_answer['server_nonce'] != $server_nonce) { + throw new Exception('Handshake: wrong server nonce'); + } if ($Set_client_DH_params_answer->name == 'dh_gen_ok') { - if($Set_client_DH_params_answer['new_nonce_hash1'] != $new_nonce_hash1) throw new Exception("Handshake: wrong new_nonce_hash1");; + if ($Set_client_DH_params_answer['new_nonce_hash1'] != $new_nonce_hash1) { + throw new Exception('Handshake: wrong new_nonce_hash1'); + } pyjslib_printnl('Diffie Hellman key exchange processed successfully'); $this->server_salt = new strxor(substr($new_nonce, 0, 8 - 0), substr($server_nonce, 0, 8 - 0)); $this->auth_key = $auth_key_str; @@ -312,10 +335,14 @@ class Session return 'Auth Ok'; } elseif ($Set_client_DH_params_answer->name == 'dh_gen_retry') { - if($Set_client_DH_params_answer['new_nonce_hash2'] != $new_nonce_hash2) throw new Exception("Handshake: wrong new_nonce_hash_2"); + if ($Set_client_DH_params_answer['new_nonce_hash2'] != $new_nonce_hash2) { + throw new Exception('Handshake: wrong new_nonce_hash_2'); + } pyjslib_printnl('Retry Auth'); } elseif ($Set_client_DH_params_answer->name == 'dh_gen_fail') { - if($Set_client_DH_params_answer['new_nonce_hash3'] != $new_nonce_hash3) throw new Exception("Handshake: wrong new_nonce_hash_3"); + if ($Set_client_DH_params_answer['new_nonce_hash3'] != $new_nonce_hash3) { + throw new Exception('Handshake: wrong new_nonce_hash_3'); + } pyjslib_printnl('Auth Failed'); throw new Exception('Auth Failed'); } else {