o
    ÍtBhÉ
  ã                   @   sn   d Z ddlZddlZddlZddlmZ ddedefdd„Zdd	edeeef fd
d„Z	dedefdd„Z
dS )a+  Simple module to generate PKCE code verifier and code challenge.

Examples
--------
>>> import pkce
>>> code_verifier, code_challenge = pkce.generate_pkce_pair()

>>> import pkce
>>> code_verifier = pkce.generate_code_verifier(length=128)
>>> code_challenge = pkce.get_code_challenge(code_verifier)
é    N)ÚTupleé€   ÚlengthÚreturnc                 C   s8   d|   kr
dksn d}t |ƒ‚t d¡d| … }|S )aE  Return a random PKCE-compliant code verifier.

    Parameters
    ----------
    length : int
        Code verifier length. Must verify `43 <= length <= 128`.

    Returns
    -------
    code_verifier : str
        Code verifier.

    Raises
    ------
    ValueError
        When `43 <= length <= 128` is not verified.
    é+   r   z5Parameter `length` must verify `43 <= length <= 128`.é`   N)Ú
ValueErrorÚsecretsÚtoken_urlsafe)r   ÚmsgÚcode_verifier© r   úd/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/pkce/__init__.pyÚgenerate_code_verifier   s
   r   Úcode_verifier_lengthc                 C   sB   d|   kr
dksn d}|d7 }t |ƒ‚t| ƒ}t|ƒ}||fS )aŠ  Return random PKCE-compliant code verifier and code challenge.

    Parameters
    ----------
    code_verifier_length : int
        Code verifier length. Must verify
        `43 <= code_verifier_length <= 128`.

    Returns
    -------
    code_verifier : str
    code_challenge : str

    Raises
    ------
    ValueError
        When `43 <= code_verifier_length <= 128` is not verified.
    r   r   z-Parameter `code_verifier_length` must verify z$`43 <= code_verifier_length <= 128`.)r   r   Úget_code_challenge)r   r   r   Úcode_challenger   r   r   Úgenerate_pkce_pair,   s   r   r   c                 C   sb   dt | ƒ  krdksn d}|d7 }t|ƒ‚t |  d¡¡ ¡ }t |¡}| d¡dd… }|S )aœ  Return the PKCE-compliant code challenge for a given verifier.

    Parameters
    ----------
    code_verifier : str
        Code verifier. Must verify `43 <= len(code_verifier) <= 128`.

    Returns
    -------
    code_challenge : str
        Code challenge that corresponds to the input code verifier.

    Raises
    ------
    ValueError
        When `43 <= len(code_verifier) <= 128` is not verified.
    r   r   z&Parameter `code_verifier` must verify z"`43 <= len(code_verifier) <= 128`.ÚasciiNéÿÿÿÿ)	Úlenr   ÚhashlibÚsha256ÚencodeÚdigestÚbase64Úurlsafe_b64encodeÚdecode)r   r   ÚhashedÚencodedr   r   r   r   r   H   s   
r   )r   )Ú__doc__r	   r   r   Útypingr   ÚintÚstrr   r   r   r   r   r   r   Ú<module>   s    