o
    Œõ±jU  ã                   @   s˜   d dl mZmZmZmZ d dlZd dlZd dlZd dlZddl	m
Z
mZ ddlmZ ddlmZmZmZ ejdk r<eZndd	„ Zd
gZdd
„ Zde_dS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úint_from_bytesÚint_to_bytes)Úpretty_message)Ú	type_nameÚbyte_clsÚ	int_types)é   c                 C   s
   t | gƒS )N)Úbytes)Únum© r   ú‚/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/oscrypto/_pkcs5.pyÚchr_cls   s   
r   Úpbkdf2c                 C   sž  t |tƒsttdt|ƒƒƒ‚t |tƒsttdt|ƒƒƒ‚t |tƒs*ttdt|ƒƒƒ‚|dk r7ttdt|ƒƒƒ‚t |tƒsEttdt|ƒƒƒ‚|dk rRttdt|ƒƒƒ‚| tg d¢ƒvrcttd	t| ƒƒƒ‚t	t
| ƒ}d
ddddddœ|  }t |d|¡}d}d}	t|	ƒ|k rÉ| ¡ }
|
 |t d|¡ ¡ |
 ¡ }t|ƒ}t|d ƒD ]}| ¡ }
|
 |¡ |
 ¡ }|t|ƒN }q¡|	t||d�7 }	|d7 }t|	ƒ|k s„|	d|… S )a4  
    Implements PBKDF2 from PKCS#5 v2.2 in pure Python

    :param hash_algorithm:
        The string name of the hash algorithm to use: "md5", "sha1", "sha224",
        "sha256", "sha384", "sha512"

    :param password:
        A byte string of the password to use an input to the KDF

    :param salt:
        A cryptographic random byte string

    :param iterations:
        The numbers of iterations to use when deriving the key

    :param key_length:
        The length of the desired key in bytes

    :return:
        The derived key as a byte string
    z@
            password must be a byte string, not %s
            z<
            salt must be a byte string, not %s
            z?
            iterations must be an integer, not %s
            r   zC
            iterations must be greater than 0 - is %s
            z?
            key_length must be an integer, not %s
            zC
            key_length must be greater than 0 - is %s
            )Úmd5Úsha1Úsha224Úsha256Úsha384Úsha512z�
            hash_algorithm must be one of "md5", "sha1", "sha224", "sha256",
            "sha384", "sha512", not %s
            é   é   é   é    é0   é@   Nó    s   >I)Úwidthr   )Ú
isinstancer   Ú	TypeErrorr	   r
   r   Ú
ValueErrorÚreprÚsetÚgetattrÚhashlibÚhmacÚnewÚlenÚcopyÚupdateÚstructÚpackÚdigestr   Úranger   )Úhash_algorithmÚpasswordÚsaltÚ
iterationsÚ
key_lengthÚalgoÚhash_lengthÚoriginal_hmacÚblockÚoutputÚprfÚlastÚuÚ_r   r   r   r      s|   
ü
ü
üü
üüû
úù	
òT)Ú
__future__r   r   r   r   Úsysr(   r)   r.   Ú_asn1r   r   Ú_errorsr	   Ú_typesr
   r   r   Úversion_infoÚchrr   Ú__all__r   Úpure_pythonr   r   r   r   Ú<module>   s   
ÿ
t