B
    d                 @   s   d Z ddlmZmZmZ deeeedddZdgZ	e
dkred dd	lZx>ed
D ]2Ze \ZZerlP ed dkrVerVede  qVW ed d	S )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SHA-1)seedlengthhasherreturnc          
      s   yt j   j}W nD tk
rV } z&tdjdtt j d|W dd}~X Y nX |d| krvt	dj| dd fd	d
t
t||d D }|d| S )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, )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   s*   | ]"}t jtj|d d  dV  qdS )   )Z	fill_size)method_nameN)r   Zcompute_hashr   Z	int2bytes).0counter)r   r    >/var/www/html/venv/lib/python3.7/site-packages/rsa/pkcs1_v2.py	<genexpr>I   s   zmgf1.<locals>.<genexpr>   )r   ZHASH_METHODSdigest_sizeKeyError
ValueErrorformatjoinsortedkeysOverflowErrorranger   Zceil_div)r   r   r   r
   exoutputr   )r   r   r   mgf1   s     
r   __main__z'Running doctests 1000x or until failureNi  d   z%i timeszDoctests done)r   )__doc__Zrsar   r   r   bytesintstrr   __all____name__printdoctestr   counttestmodZfailurestestsr   r   r   r   <module>   s   9