§
    ¢”j,'  ã                   ó  — d dl mZmZmZmZ d dlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZmZmZ ddlmZ dd	lmZmZ dd
lmZ g d¢ZdZddgZd„ Zd„ Zd„ Zde_        d„ Z 	 ddl!m"Z" d„ Z#d„ Z$dS # e$ r
 ddl%m$Z$ Y dS w xY w)é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úpretty_message)Úbuffer_from_bytesÚbytes_from_bufferÚerrnoÚbyte_string_from_buffer)Ú	type_nameÚstr_clsÚbyte_clsÚ	int_types)ÚLibraryNotFoundErroré   )ÚCommonCryptoÚCommonCryptoConst)ÚSecurity)Úpbkdf2Ú
pkcs12_kdfÚ
rand_bytesúutf-8Úcp1252c                 óÐ   — 	 t          | t          ¦  «        S # t          $ r3 t          D ](}	 t          | |d¬¦  «        c cY S # t          $ r Y Œ%w xY wY nw xY wt          | d¬¦  «        S )NÚstrict)ÚerrorsÚreplace)r   Ú	_encodingÚUnicodeDecodeErrorÚ_fallback_encodings)ÚvalueÚencodings     úa/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/oscrypto/_mac/util.pyÚ_try_decoder%      s¨   € ð
Ý�u�iÑ(Ô(Ð(øõ ð ð ð Ý+ð 	ð 	ˆHðÝ˜u h°xÐ@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@øÝ&ð ð ð Ø�ðøøøð	ð 	ðøøøõ �5 Ð+Ñ+Ô+Ð+s1   ‚ —A«A¼AÁ
AÁAÁAÁAÁAc                  óÔ   — t          ¦   «         } 	 t          j        | ¦  «        }n# t          $ r t	          | ¦  «        cY S w xY wt          |t          ¦  «        r|S t          |¦  «        S )z~
    Extracts the last OS error message into a python unicode string

    :return:
        A unicode string error message
    )r   ÚosÚstrerrorÚ
ValueErrorr   Ú
isinstancer%   )Ú	error_numÚerror_strings     r$   Ú_extract_errorr-   *   sz   € õ ‘”€Ið"Ý”{ 9Ñ-Ô-ˆˆøÝð "ð "ð "Ý�yÑ!Ô!Ð!Ð!Ð!ð"øøøõ �,¥Ñ(Ô(ð ØÐå�|Ñ$Ô$Ð$s   �% ¥AÁ Ac                 óF  — t          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚t          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚t          |t
          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚|dk     rt          d¦  «        ‚t          |t
          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚|dk     rt          d¦  «        ‚| t          g d¢¦  «        vr*t          t          d	t          | ¦  «        ¦  «        ¦  «        ‚t          j
        t          j        t          j        t          j        t          j        dœ|          }t          |¦  «        }t!          j        t          j        |t'          |¦  «        |t'          |¦  «        ||||¦	  «	        }|d
k    rt)          t+          ¦   «         ¦  «        ‚t-          |¦  «        S )aç  
    PBKDF2 from PKCS#5

    :param hash_algorithm:
        The string name of the hash algorithm to use: "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

    :raises:
        ValueError - when any of the parameters contain an invalid value
        TypeError - when any of the parameters are of the wrong type
        OSError - when an error is returned by the OS crypto library

    :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   z!iterations must be greater than 0z?
            key_length must be an integer, not %s
            z!key_length must be greater than 0)Úsha1Úsha224Úsha256Úsha384Úsha512zz
            hash_algorithm must be one of "sha1", "sha224", "sha256", "sha384",
            "sha512", not %s
            r   )r*   r   Ú	TypeErrorr   r   r   r)   ÚsetÚreprr   ÚkCCPRFHmacAlgSHA1ÚkCCPRFHmacAlgSHA224ÚkCCPRFHmacAlgSHA256ÚkCCPRFHmacAlgSHA384ÚkCCPRFHmacAlgSHA512r	   r   ÚCCKeyDerivationPBKDFÚ	kCCPBKDF2ÚlenÚOSErrorr-   r
   )Úhash_algorithmÚpasswordÚsaltÚ
iterationsÚ
key_lengthÚalgoÚoutput_bufferÚresults           r$   r   r   ?   s:  € õ8 �h¥Ñ)Ô)ð Ý�ðõ �hÑÔñ	
ô 
ñ ô ð 	õ �d�HÑ%Ô%ð Ý�ðõ �d‰OŒOñ	
ô 
ñ ô ð 	õ �j¥)Ñ,Ô,ð Ý�ðõ �jÑ!Ô!ñ	
ô 
ñ ô ð 	ð �A‚~€~ÝÐ<Ñ=Ô=Ð=å�j¥)Ñ,Ô,ð Ý�ðõ �jÑ!Ô!ñ	
ô 
ñ ô ð 	ð �A‚~€~ÝÐ<Ñ=Ô=Ð=à�SÐ!QÐ!QÐ!QÑRÔRÐRÐRÝ�ðõ �Ñ Ô ñ
ô 
ñ ô ð 	õ "Ô3Ý#Ô7Ý#Ô7Ý#Ô7Ý#Ô7ðð ð ô€Dõ & jÑ1Ô1€MÝÔ.ÝÔ#ØÝˆH‰ŒØÝˆD‰	Œ	ØØØØñ
ô 
€Fð �‚{€{Ý•nÑ&Ô&Ñ'Ô'Ð'å˜]Ñ+Ô+Ð+ó    Fc                 ó’  — t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚| dk     rt          d¦  «        ‚| dk    rt          d¦  «        ‚t          | ¦  «        }t          j        t          j	        | |¦  «        }|dk    rt          t          ¦   «         ¦  «        ‚t          |¦  «        S )a‹  
    Returns a number of random bytes suitable for cryptographic purposes

    :param length:
        The desired number of bytes

    :raises:
        ValueError - when any of the parameters contain an invalid value
        TypeError - when any of the parameters are of the wrong type
        OSError - when an error is returned by the OS crypto library

    :return:
        A byte string
    z;
            length must be an integer, not %s
            r   zlength must be greater than 0i   z$length must not be greater than 1024r   )r*   r   r4   r   r   r)   r	   r   ÚSecRandomCopyBytesÚkSecRandomDefaultr?   r-   r
   )ÚlengthÚbufferrG   s      r$   r   r   §   sÇ   € õ  �f�iÑ(Ô(ð Ý�ðõ �fÑÔñ	
ô 
ñ ô ð 	ð �‚z€zÝÐ8Ñ9Ô9Ð9à�‚}€}ÝÐ?Ñ@Ô@Ð@å˜vÑ&Ô&€FÝÔ(­Ô)CÀVÈVÑTÔT€FØ�‚{€{Ý•nÑ&Ô&Ñ'Ô'Ð'å˜VÑ$Ô$Ð$rH   )Ú	libcryptoc                  ó¬   — t          j        ¦   «         } t          d¦  «        }t          j        | |¦  «         t	          |¦  «        }t          |¦  «        S )z“
        Extracts the last OpenSSL error message into a python unicode string

        :return:
            A unicode string error message
        éx   )rN   ÚERR_get_errorr	   ÚERR_error_stringr   r%   )r+   rM   r,   s      r$   Ú_extract_openssl_errorrS   Ò   sO   € õ Ô+Ñ-Ô-ˆ	Ý" 3Ñ'Ô'ˆÝÔ" 9¨fÑ5Ô5Ð5õ /¨vÑ6Ô6ˆå˜<Ñ(Ô(Ð(rH   c                 ó”  — t          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚t          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚t          |t
          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚|dk     r*t          t          dt          |¦  «        ¦  «        ¦  «        ‚t          |t
          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚|dk     r*t          t          dt          |¦  «        ¦  «        ¦  «        ‚| t          g d¢¦  «        vr*t          t          d	t          | ¦  «        ¦  «        ¦  «        ‚|t          g d
¢¦  «        vr*t          t          dt          |¦  «        ¦  «        ¦  «        ‚| 	                    d¦  «         
                    d¦  «        dz   }	 t          j        t          j        t          j        t          j        t          j        t          j        dœ|          ¦   «         }t%          |¦  «        }t          j        |t)          |¦  «        |t)          |¦  «        |||||¦	  «	        }	|	dk    rt+          t-          ¦   «         ¦  «        ‚t/          |¦  «        S )aÅ  
        KDF from RFC7292 appendix B.2 - https://tools.ietf.org/html/rfc7292#page-19

        :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

        :param id_:
            The ID of the usage - 1 for key, 2 for iv, 3 for mac

        :raises:
            ValueError - when any of the parameters contain an invalid value
            TypeError - when any of the parameters are of the wrong type
            OSError - when an error is returned by the OS crypto library

        :return:
            The derived key as a byte string
        zH
                password must be a byte string, not %s
                zD
                salt must be a byte string, not %s
                zG
                iterations must be an integer, not %s
                r   zK
                iterations must be greater than 0 - is %s
                zG
                key_length must be an integer, not %s
                zK
                key_length must be greater than 0 - is %s
                )Úmd5r/   r0   r1   r2   r3   z�
                hash_algorithm must be one of "md5", "sha1", "sha224", "sha256",
                "sha384", "sha512", not %s
                )r   r   é   zD
                id_ must be one of 1, 2, 3, not %s
                r   zutf-16bes     )r*   r   r4   r   r   r   r)   r6   r5   ÚdecodeÚencoderN   ÚEVP_md5ÚEVP_sha1Ú
EVP_sha224Ú
EVP_sha256Ú
EVP_sha384Ú
EVP_sha512r	   ÚPKCS12_key_gen_unir>   r?   rS   r
   )
r@   rA   rB   rC   rD   Úid_Úutf16_passwordÚdigest_typerF   rG   s
             r$   r   r   ã   sþ  € õ> ˜(¥HÑ-Ô-ð 	Ý�Nðõ ˜(Ñ#Ô#ñ	ô ñ ô ð õ ˜$¥Ñ)Ô)ð 	Ý�Nðõ ˜$‘”ñ	ô ñ ô ð õ ˜*¥iÑ0Ô0ð 	Ý�Nðõ ˜*Ñ%Ô%ñ	ô ñ ô ð ð ˜Š>ˆ>Ý�^ðõ �ZÑ Ô ñ	ô ñ ô ð õ ˜*¥iÑ0Ô0ð 	Ý�Nðõ ˜*Ñ%Ô%ñ	ô ñ ô ð ð ˜Š>ˆ>Ý�^ðõ �ZÑ Ô ñ	ô ñ ô ð ð ¥Ð%\Ð%\Ð%\Ñ!]Ô!]Ð]Ð]Ý�^ðõ �^Ñ$Ô$ñô ñ ô ð ð •c˜)˜)˜)‘n”nÐ$Ð$Ý�^ðõ �S‘	”	ñ	ô ñ ô ð ð "Ÿš¨Ñ1Ô1×8Ò8¸ÑDÔDÀ{ÑRˆðÝÔ$ÝÔ&ÝÔ*ÝÔ*ÝÔ*ÝÔ*ð
ð 
ð ôñ ô ˆõ *¨*Ñ5Ô5ˆÝÔ-ØÝ�ÑÔØÝ�‰IŒIØØØØØñ

ô 

ˆð �QŠ;ˆ;ÝÕ0Ñ2Ô2Ñ3Ô3Ð3å  Ñ/Ô/Ð/rH   )r   )&Ú
__future__r   r   r   r   r'   Ú_errorsr   Ú_ffir	   r
   r   r   Ú_typesr   r   r   r   r   r   Ú_common_cryptor   r   Ú	_securityr   Ú__all__r   r!   r%   r-   r   Úpure_pythonr   Ú_openssl._libcryptorN   rS   r   Ú_pkcs12© rH   r$   ú<module>rn      s´  ðà RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà 	€	€	€	à $Ð $Ð $Ð $Ð $Ð $Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø )Ð )Ð )Ð )Ð )Ð )Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø Ð Ð Ð Ð Ð ðð ð €ð €	Ø Ð)Ð ð,ð ,ð ,ð"%ð %ð %ð*b,ð b,ð b,ðJ €Ô ð#%ð #%ð #%ðPR%Ø/Ð/Ð/Ð/Ð/Ð/ð)ð )ð )ð"z0ð z0ð z0ð z0ð z0øðx 	ð %ð %ð %à$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ð%øøøs   Á!A/ Á/A>Á=A>