
    ;Si                     H   d dl Z d dlZddlmZ ddlmZ dedefdZdedefd	Z	d
edede
fdZdZd
edefdZdedefdZdedefdZde
fdZdededefdZdededefdZdej&                  defdZdej&                  defdZdej.                  j0                  defdZy)    N   )factorization)typesprimegc                 B   d}| dk  s| j                         |k7  r)t        dj                  | j                         |            t        j                  j                  |       d   dk7  rt        d      |dk(  r&| dz  dk7  rt        d	j                  || dz              |d
k(  r&| d
z  dk7  rt        dj                  || d
z              |dk(  rn|dk(  r%| dz  dvrt        dj                  || dz              |dk(  r%| dz  dvrbt        dj                  || dz              |dk(  r%| dz  dvr8t        dj                  || dz              t        dj                  |            | dz
  dz  }t        j                  j                  |      d   dk7  rt        d      y )Ni   r   zbad prime count {}, expected {}r   zgiven "prime" is not prime         zbad g {}, mod8 {}   zbad g {}, mod3 {}      )r   r   zbad g {}, mod5 {}      )      zbad g {}, mod24 {})r   r   r   zbad g {}, mod7 {}zbad g {}z(prime - 1) // 2 is not prime)
bit_length
ValueErrorformatr   Factorization	factorize)r   r   good_prime_bits_countprime_sub1_div2s       V/var/www/OnlineNewsSite/project/venv/lib/python3.12/site-packages/telethon/password.pycheck_prime_and_good_checkr      s    qyE$$&*??: &!1!1!35JKM 	M "",,U3A6!;566Av19>077519EFF	
a19>077519EFF	
a	
a19F"077519EFF	
a2:X%188EBJGHH	
a19I%077519EFF**1-..qyQ&O"",,_=a@AE899 F    prime_bytesc                 n    t        d      }|| k(  r|dv ry t        t        j                  | d      |       y )N(                        r      l   R   /   p      ?   s         @   #   r&   >   !      I   4      7   V   =         H         
      r4   r0   X   "      r;      %   0            3   o   n   r@   r%   rF   r      C   r!      L      |   r8          Q      rD   rB   r*   Z   r#      rP      k   r[   r            F   rV   )   i   2      T   r+         rY   Y   _   d   $   w   rZ         *   rD      [      ro   J         r5      r   r
   rJ      r8   r&   <   O   :      `         rS         r      rN         rV   rz   ~      '   S      r[   r<   r[   A   r/      t         K   rn         r   N      r+   (   G   rd   rU   r      rN   r/   rg   e      r"      r_   rB   -   r$   r      r      r[      r            r         re      rp         r   r            r2   r|               r   ^   r   r*   r   r/   r   r   r5   rH   {   r~   rg      r9            r`   r      r/   r   r   rW   5   r$   r      .   r   r   r7   r   rj   rd      rL   rx         r6   r$   r   r      r   r      r"   r)   rt   rp   )r   r   r   r   big)bytesr   int
from_bytes)r   r   
good_primes      r   check_prime_and_goodr   -   s=     h iJ$ [ s~~k5A1Er   numberpreturnc                      | dkD  xr || z
  dkD  S )Nr    )r   r   s     r   is_good_larger   G   s    A:(!f*q.(r      c                 >    t        t        t        |       z
        | z   S N)r   SIZE_FOR_HASHlen)r   s    r   num_bytes_for_hashr   N   s    V,-66r   c                 .    | j                  t        d      S )Nr   )to_bytesr   )r   s    r   big_num_for_hashr   R   s    ::mU++r   c                  z    t        j                         }| D ]  }|j                  |        |j                         S r   )hashlibsha256updatedigest)r   hashqs      r   r   r   V   s4    >>D A;;=r   c                     || z
  }d}d}|dk  s?|j                         |k  s,| j                         |k  s| j                         dz   dz  |kD  ryy)Ni  r   r   r   r
   FT)r   )modexpr   diffmin_diff_bits_countmax_mod_exp_sizes        r   is_good_mod_exp_firstr   ]   sb    6>D#axOO 33"55 1$*-==r   abc                 :    t        d t        | |      D              S )Nc              3   ,   K   | ]  \  }}||z    y wr   r   ).0xys      r   	<genexpr>zxor.<locals>.<genexpr>j   s     -41aQ-s   )r   zip)r   r   s     r   xorr   i   s    -3q!9---r   passwordsalt
iterationsc                 2    t        j                  d| ||      S )Nsha512)r   pbkdf2_hmac)r   r   r   s      r   pbkdf2sha512r   m   s    x4DDr   algoc                    t        | j                  |j                  d      | j                        }t        | j                  || j                        }t	        || j                  d      }t        | j                  || j                        S )Nzutf-8i )r   salt1encodesalt2r   )r   r   hash1hash2hash3s        r   compute_hashr   q   s`    4::xw7DE4::udjj1E

F3E$**eTZZ00r   c           	      0   	 t        | j                  | j                         t	        | j                  t
        j                  t        | |      d      t
        j                  | j                  d            }t        |      S # t        $ r t        d      w xY w)Nbad p/g in passwordr   )	r   r   r   r   powr   r   r   r   )r   r   values      r   compute_digestr   y   s|    0TVVTVV, |D(;UCtvvu-/E E""  0.//0s    B   Brequestc                    | j                   }t        |t        j                        s.t	        dj                  |j                  j                              t        ||      }t        j                  |j                  d      |j                  t        j                  | j                  d      }	 t        |j                         t        |      st	        d      t        j                  |d      }t!        |j                        }t#              }t!        | j                        t%        |      }t        j                  t'        ||      d      }	|	|z  z  }
fd} |       \  }}}||
z
  z  }t)        |      st	        d      ||z  }||z   }t%        ||      }t'        t#        |            }t'        t+        t'        |      t'        |            t'        |j,                        t'        |j.                        ||      }t        j0                  | j2                  t5        |      t5        |            S # t        $ r t	        d      w xY w)Nz!unsupported password algorithm {}r   r   zbad b in checkc                      d} 	 t        j                  |       }t        j                  |d      }t	        |      }t        |      r5t        |      }t        j                  t        |      d      }|dkD  r|||fS z)Nr   r   r   )osurandomr   r   r   r   r   r   )	random_sizerandomr   A
a_for_hashu
b_for_hashr   r   s	         r   generate_and_check_randomz0compute_check.<locals>.generate_and_check_random   sz    ZZ,Fvu-AAq!A$Q*-a0
NN6*j#A5Iq5z1-- r   zbad g_b)current_algo
isinstancer   APasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowr   r   	__class____name__r   r   r   r   r   srp_Br   r   r   r   r   r   r   r   r   r   InputCheckPasswordSRPsrp_idr   )r   r   r   pw_hashBr   
p_for_hash
g_for_hashg_xkkg_xr  r   r  r  g_buxa_uxSKM1r  r   r   s                        @@@r   compute_checkr     s   DdEccd< &!8!89; 	; 4*Gtvvu%AAw}}e,A0TVVQ' A)**w&A#DFF+J!!$J#GMM2J
aA,Cvj*5u=AGq=D
. 12Az1t8q.C a(##	
QBr6DCqA"#A	F:z 23tzztzz	
B &&j)596 6Y  0.//0s   1H? ?I)r   r   cryptor   tlr   r   r   r   r   boolr   r   r   r   r   r   r   r   r	  strr   r   accountPasswordr  r   r   r   <module>r#     s*    	 !  :c  :c  :JFe F F4)# )# )$ ) 7u 7 7, , ,u  	D 	.5 .U .u .E5 E E3 E1u^^ 11#`` # #:65==11 :6S :6r   