
    g              	           d Z ddlmZmZmZ ddedededefdZdgZ	e
d	k(  rQ ed
       ddlZ ed      D ]1  Z ej                         \  ZZer nedz  dk(  s$es' edez         3  ed       yy)zFunctions for PKCS#1 version 2 encryption and signing

This module implements certain functionality from PKCS#1 version 2. Main
documentation is RFC 2437: https://tools.ietf.org/html/rfc2437
    )commonpkcs1	transformseedlengthhasherreturnc                     	 t        j                            j                  }|d|z  kD  rt        dj                  |            dj                   fd	t        t        j                  ||      d
z         D              }|d| S # t        $ rU}t	        dj                  dj                  t        t         j                  j                                                 |d}~ww xY w)a  
    MGF1 is a Mask Generation Function based on a hash function.

    A mask generation function takes an octet string of variable length and a
    desired output length as input, and outputs an octet string of the desired
    length. The plaintext-awareness of RSAES-OAEP relies on the random nature of
    the output of the mask generation function, which in turn relies on the
    random nature of the underlying hash.

    :param bytes seed: seed from which mask is generated, an octet string
    :param int length: intended length in octets of the mask, at most 2^32(hLen)
    :param str hasher: hash function (hLen denotes the length in octets of the hash
        function output)

    :return: mask, an octet string of length `length`
    :rtype: bytes

    :raise OverflowError: when `length` is too large for the specified `hasher`
    :raise ValueError: when specified `hasher` is invalid
    z=Invalid `hasher` specified. Please select one of: {hash_list}z, )	hash_listNl        zmDesired length should be at most 2**32 times the hasher's output length ({hash_length} for {hasher} function))hash_lengthr       c              3   |   K   | ]3  }t        j                  t        j                  |d       z          5 yw)   )	fill_size)method_nameN)r   compute_hashr   	int2bytes).0counterr   r   s     A/var/www/openai/venv/lib/python3.12/site-packages/rsa/pkcs1_v2.py	<genexpr>zmgf1.<locals>.<genexpr>H   sG      
 GG	 	9&&w!<<	
 	
 Gs   9<   )r   HASH_METHODSdigest_sizeKeyError
ValueErrorformatjoinsortedkeysOverflowErrorranger   ceil_div)r   r   r   r   exoutputs   ` `   r   mgf1r&      s    ,((02>> ;&';;A6' <B <
 	
 XX 
 V__V[AAEF F '6?;  KRR))F5+=+=+B+B+D$EF S 
 		s   !B	 		C'AC""C'r&   __main__z'Running doctests 1000x or until failureNi  d   z%i timeszDoctests done)zSHA-1)__doc__rsar   r   r   bytesintstrr&   __all____name__printdoctestr"   counttestmodfailurestests r   r   <module>r7      s    5u 5c 53 5U 5r  z	
34t+GOO-53;!*u$%  
/ r   