
    Zi                         S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
   S SKJr  \R                  " \5      r\R%                  \R&                  " 5       5        S r " S S	5      rg! \ a	    S SKJr   NNf = f)
    N)md5)pack)default_backend)Cipher)ARC4c                    U R                  S5      n [        U 5      R                  5       nUSS nXA-   S-  n[        U5      R                  5       nUSS n[        SU5      n[        XG-   5      R                  5       nUSS n	U	$ )a  
Return a intermediate key.

    >>> password = 'password1'
    >>> salt = b'\xe8w,\x1d\x91\xc5j7\x96Ga\xb2\x80\x182\x17'
    >>> block = 0
    >>> expected = b' \xbf2\xdd\xf5@\x85\x8cQ7D\xaf\x0f$\xe0<'
    >>> _makekey(password, salt, block) == expected
    True
zUTF-16LEN      z<I)encoder   digestr   )
passwordsaltblockh0truncatedHashintermediateBufferh1
blockbyteshfinalkeys
             p/var/www/eduai.edurigo.com/question_generate/ques_gen_env/lib/python3.13/site-packages/msoffcrypto/method/rc4.py_makekeyr      s     z*H	X			BrFM'."4		 	'	'	)BrFMdE"J+,335F
8
CJ    c                   >    \ rS rSrS r\S 5       r\SS j5       rSrg)DocumentRC4-   c                     g )N )selfs    r   __init__DocumentRC4.__init__.   s    r   c                 "   Sn[        XU5      n[        [        U5      S[        5       S9nUR	                  5       nUR                  U5      nUR                  U5      n	[        U5      R                  5       n
[        R                  " X/5        X:H  $ )a  
Return True if the given password is valid.

    >>> password = 'password1'
    >>> salt = b'\xe8w,\x1d\x91\xc5j7\x96Ga\xb2\x80\x182\x17'
    >>> encryptedVerifier = b'\xc9\xe9\x97\xd4T\x97=1\x0b\xb1\xbap\x14&\x83~'
    >>> encryptedVerifierHash = b'\xb1\xde\x17\x8f\x07\xe9\x89\xc4M\xae^L\xf9j\xc4\x07'
    >>> DocumentRC4.verifypw(password, salt, encryptedVerifier, encryptedVerifierHash)
    True
r   Nmodebackend)
r   r   r   r   	decryptorupdater   r   loggingdebug)r   r   encryptedVerifierencryptedVerifierHashr   r   cipherr&   verifierverfiferHashhashs              r   verifypwDocumentRC4.verifypw1   s     xu-S	o6GH$$&	##$56 ''(=>8}##%|*+##r   c                    [         R                  " 5       nSn[        XU5      n[        [	        [
        R                  " UR                  U5      S5      5       Hu  u  px[        [        U5      S[        5       S9n	U	R                  5       n
U
R                  U5      U
R                  5       -   nUR                  U5        US-  n[        XU5      nMw     UR                  S5        U$ )z
Return decrypted data.
r   r   Nr#      )ioBytesIOr   	enumerateiter	functoolspartialreadr   r   r   r&   r'   finalizewriteseek)r   r   ibuf	blocksizeobufr   r   cbufr,   r&   decs               r   decryptDocumentRC4.decryptH   s    
 zz|xu-Y%6%6tyy)%Lc RSFADID/:KLF((*I""3')*<*<*>>CJJsO QJE851C T 			!r   r   N)i   )	__name__
__module____qualname____firstlineno__r    staticmethodr0   rD   __static_attributes__r   r   r   r   r   -   s/     $ $,  r   r   )r8   r4   r(   hashlibr   structr   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   /cryptography.hazmat.decrepit.ciphers.algorithmsr   ImportError1cryptography.hazmat.primitives.ciphers.algorithms	getLoggerrF   logger
addHandlerNullHandlerr   r   r   r   r   <module>rW      st     	    8 9G E 
		8	$   '%%' (04 4?  GFGs   A, ,A;:A;