§
    ¢”jV3  ã                   ó4  — d dl mZmZmZmZ d dlZd dlZddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddl m!Z!  e¦   «         Z"e"dk    r/ddl#mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 nie"dk    se"dk    r/ddl8mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 n.ddl9mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 g d¢Z:dd„Z;dd„Z<dd„Z=dd„Z>d„ Z?dS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úbackend)	ÚarmorÚCertificateÚDHParametersÚEncryptedPrivateKeyInfoÚNullÚOrderedDictÚ
Pbkdf2SaltÚPrivateKeyInfoÚPublicKeyInfo)Ú_unwrap_private_key_info)Úpretty_message)Ú	type_nameÚstr_cls)Úpbkdf2Úpbkdf2_iteration_calculator)Úaes_cbc_pkcs7_encrypt)Ú
rand_bytesÚmac)r
   Údsa_signÚ
dsa_verifyÚ
ecdsa_signÚecdsa_verifyÚgenerate_pairÚgenerate_dh_parametersÚload_certificateÚload_pkcs12Úload_private_keyÚload_public_keyÚ
PrivateKeyÚ	PublicKeyÚrsa_pkcs1v15_signÚrsa_pkcs1v15_verifyÚrsa_pss_signÚrsa_pss_verifyÚrsa_pkcs1v15_encryptÚrsa_pkcs1v15_decryptÚrsa_oaep_encryptÚrsa_oaep_decryptÚwinÚ	winlegacy)r
   r   r   Údump_certificateÚdump_dh_parametersÚdump_openssl_private_keyÚdump_private_keyÚdump_public_keyr   r   r   r    r!   r"   r#   r$   r%   r&   r.   r-   r,   r+   r'   r(   r)   r*   Úpemc                 óR  — |t          ddg¦  «        vr*t          t          dt          |¦  «        ¦  «        ¦  «        ‚t	          | t
          ¦  «        s*t          t          dt          | ¦  «        ¦  «        ¦  «        ‚|                      ¦   «         }|dk    rt          d|¦  «        }|S )a  
    Serializes an asn1crypto.algos.DHParameters object into a byte string

    :param dh_parameters:
        An asn1crypto.algos.DHParameters object

    :param encoding:
        A unicode string of "pem" or "der"

    :return:
        A byte string of the encoded DH parameters
    r6   ÚderúF
            encoding must be one of "pem", "der", not %s
            zp
            dh_parameters must be an instance of asn1crypto.algos.DHParameters,
            not %s
            zDH PARAMETERS)
ÚsetÚ
ValueErrorr   ÚreprÚ
isinstancer   Ú	TypeErrorr   Údumpr	   )Údh_parametersÚencodingÚoutputs      úb/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/oscrypto/asymmetric.pyr2   r2   ˆ   s¿   € ð •s˜E 5˜>Ñ*Ô*Ð*Ð*Ý�ðõ �‰NŒNñ	
ô 
ñ ô ð 	õ �m¥\Ñ2Ô2ð Ý�ðõ �mÑ$Ô$ñ
ô 
ñ ô ð 	ð ×ÒÑ!Ô!€FØ�5ÒÐÝ�¨Ñ/Ô/ˆØ€Mó    c                 ó’  — |t          ddg¦  «        vr*t          t          dt          |¦  «        ¦  «        ¦  «        ‚t	          | t
          ¦  «        }t	          | t          ¦  «        s,|s*t          t          dt          | ¦  «        ¦  «        ¦  «        ‚|r| j	        } |  
                    ¦   «         }|dk    rt          d|¦  «        }|S )a#  
    Serializes a public key object into a byte string

    :param public_key:
        An oscrypto.asymmetric.PublicKey or asn1crypto.keys.PublicKeyInfo object

    :param encoding:
        A unicode string of "pem" or "der"

    :return:
        A byte string of the encoded public key
    r6   r8   r9   zŽ
            public_key must be an instance of oscrypto.asymmetric.PublicKey or
            asn1crypto.keys.PublicKeyInfo, not %s
            z
PUBLIC KEY)r:   r;   r   r<   r=   r&   r   r>   r   Úasn1r?   r	   )Ú
public_keyrA   Úis_oscryptorB   s       rC   r5   r5   ­   sâ   € ð •s˜E 5˜>Ñ*Ô*Ð*Ð*Ý�ðõ �‰NŒNñ	
ô 
ñ ô ð 	õ ˜Z­Ñ3Ô3€KÝ�j¥-Ñ0Ô0ð ¸ð Ý�ðõ �jÑ!Ô!ñ
ô 
ñ ô ð 	ð ð %Ø”_ˆ
à�_Š_ÑÔ€FØ�5ÒÐÝ�| VÑ,Ô,ˆØ€MrD   c                 ó’  — |t          ddg¦  «        vr*t          t          dt          |¦  «        ¦  «        ¦  «        ‚t	          | t
          ¦  «        }t	          | t          ¦  «        s,|s*t          t          dt          | ¦  «        ¦  «        ¦  «        ‚|r| j	        } |  
                    ¦   «         }|dk    rt          d|¦  «        }|S )a&  
    Serializes a certificate object into a byte string

    :param certificate:
        An oscrypto.asymmetric.Certificate or asn1crypto.x509.Certificate object

    :param encoding:
        A unicode string of "pem" or "der"

    :return:
        A byte string of the encoded certificate
    r6   r8   r9   z�
            certificate must be an instance of oscrypto.asymmetric.Certificate
            or asn1crypto.x509.Certificate, not %s
            ÚCERTIFICATE)r:   r;   r   r<   r=   r
   ÚAsn1Certificater>   r   rF   r?   r	   )ÚcertificaterA   rH   rB   s       rC   r1   r1   Ö   så   € ð •s˜E 5˜>Ñ*Ô*Ð*Ð*Ý�ðõ �‰NŒNñ	
ô 
ñ ô ð 	õ ˜[­+Ñ6Ô6€KÝ�k¥?Ñ3Ô3ð ¸Kð Ý�ðõ �kÑ"Ô"ñ
ô 
ñ ô ð 	ð ð 'Ø!Ô&ˆà×ÒÑÔ€FØ�5ÒÐÝ�} fÑ-Ô-ˆØ€MrD   éÈ   c           	      óæ  — |t          ddg¦  «        vr*t          t          dt          |¦  «        ¦  «        ¦  «        ‚|�at	          |t
          ¦  «        s*t          t          dt          |¦  «        ¦  «        ¦  «        ‚|dk    rt          t          d¦  «        ¦  «        ‚t	          | t          ¦  «        }t	          | t          ¦  «        s,|s*t          t          dt          | ¦  «        ¦  «        ¦  «        ‚|r| j
        } |                      ¦   «         }|�¾d	}d
}d}t          |¦  «        }	t          |||d¬¦  «        }
|
dk     rd}
|                     d¦  «        }t          |||	|
|¦  «        }t!          ||d¦  «        \  }}t#          ddt%          d|	¬¦  «        |
|t'          ¦   «         dœdœdœ||dœdœdœ|dœ¦  «                             ¦   «         }|dk    r|€d}nd}t)          ||¦  «        }|S )aM  
    Serializes a private key object into a byte string of the PKCS#8 format

    :param private_key:
        An oscrypto.asymmetric.PrivateKey or asn1crypto.keys.PrivateKeyInfo
        object

    :param passphrase:
        A unicode string of the passphrase to encrypt the private key with.
        A passphrase of None will result in no encryption. A blank string will
        result in a ValueError to help ensure that the lack of passphrase is
        intentional.

    :param encoding:
        A unicode string of "pem" or "der"

    :param target_ms:
        Use PBKDF2 with the number of iterations that takes about this many
        milliseconds on the current machine.

    :raises:
        ValueError - when a blank string is provided for the passphrase

    :return:
        A byte string of the encoded and encrypted public key
    r6   r8   r9   NúM
                passphrase must be a unicode string, not %s
                Ú úx
                passphrase may not be a blank string - pass None to disable
                encryption
                z‘
            private_key must be an instance of oscrypto.asymmetric.PrivateKey
            or asn1crypto.keys.PrivateKeyInfo, not %s
            Ú
aes256_cbcé    Úsha256T)Ú	target_msÚquieti'  úutf-8Úpbes2r   Ú	specified)ÚnameÚvalue)Ú	algorithmÚ
parameters)ÚsaltÚiteration_countÚprf)Úkey_derivation_funcÚencryption_scheme)Úencryption_algorithmÚencrypted_datazPRIVATE KEYzENCRYPTED PRIVATE KEY)r:   r;   r   r<   r=   r   r>   r   r%   r   rF   r?   r   r   Úencoder   r   r   r   r   r	   )Úprivate_keyÚ
passphraserA   rU   rH   rB   ÚcipherÚ
key_lengthÚkdf_hmacÚkdf_saltÚ
iterationsÚpassphrase_bytesÚkeyÚivÚ
ciphertextÚobject_types                   rC   r4   r4   ÿ   s›  € ð8 •s˜E 5˜>Ñ*Ô*Ð*Ð*Ý�ðõ �‰NŒNñ	
ô 
ñ ô ð 	ð ÐÝ˜*¥gÑ.Ô.ð 	Ý�Nðõ ˜*Ñ%Ô%ñ	ô ñ ô ð ð ˜ÒÐÝ�^ðñô ñ ô ð õ ˜[­*Ñ5Ô5€KÝ�k¥>Ñ2Ô2ð ¸;ð Ý�ðõ �kÑ"Ô"ñ
ô 
ñ ô ð 	ð ð 'Ø!Ô&ˆà×ÒÑÔ€FàÐØˆØˆ
ØˆÝ˜jÑ)Ô)ˆÝ0°¸:ÐQZÐbfÐgÑgÔgˆ
à˜ÒÐØˆJà%×,Ò,¨WÑ5Ô5ÐÝ�XÐ/°¸:ÀzÑRÔRˆÝ.¨s°F¸DÑAÔA‰ˆˆJå(à$ð &.å$.Ø%0Ø&.ð%ñ %ô %ð 0:à-5Ý.2©f¬fð$ð $ð
'ð 
'ð,ð ,ð &,Ø&(ð*ð *ðð ð%ð %ð. )ð1*
ð *
ñ ô ÷2 Š4‰6Œ6ð3 	ð6 �5ÒÐØÐØ'ˆKˆKà1ˆKÝ�{ FÑ+Ô+ˆà€MrD   c                 ól  — |�at          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚|dk    rt          t          d¦  «        ¦  «        ‚t          | t          ¦  «        }t          | t          ¦  «        s,|s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚|r| j        } t          | ¦  «         
                    ¦   «         }d}|��t          d¦  «        }t          ¦   «         }d|d<   d	t          j        |¦  «                             d
¦  «        z  |d<   d}|                     d¦  «        }t#          j        ||dd…         z   ¦  «                             ¦   «         }|t)          |¦  «        k    rJ|t#          j        ||z   |dd…         z   ¦  «                             ¦   «         z  }|t)          |¦  «        k    °J|d|…         }t+          |||¦  «        \  }}| j        dk    rd}	n| j        dk    rd}	n| j        dk    rd}	t/          |	||¬¦  «        S )a   
    Serializes a private key object into a byte string of the PEM formats used
    by OpenSSL. The format chosen will depend on the type of private key - RSA,
    DSA or EC.

    Do not use this method unless you really must interact with a system that
    does not support PKCS#8 private keys. The encryption provided by PKCS#8 is
    far superior to the OpenSSL formats. This is due to the fact that the
    OpenSSL formats don't stretch the passphrase, making it very easy to
    brute-force.

    :param private_key:
        An oscrypto.asymmetric.PrivateKey or asn1crypto.keys.PrivateKeyInfo
        object

    :param passphrase:
        A unicode string of the passphrase to encrypt the private key with.
        A passphrase of None will result in no encryption. A blank string will
        result in a ValueError to help ensure that the lack of passphrase is
        intentional.

    :raises:
        ValueError - when a blank string is provided for the passphrase

    :return:
        A byte string of the encoded and encrypted public key
    NrO   rP   rQ   z‘
            private_key must be an instance of oscrypto.asymmetric.PrivateKey or
            asn1crypto.keys.PrivateKeyInfo, not %s
            é   z4,ENCRYPTEDz	Proc-TypezAES-128-CBC,%sÚasciizDEK-InforW   r   é   ÚeczEC PRIVATE KEYÚrsazRSA PRIVATE KEYÚdsazDSA PRIVATE KEY)Úheaders)r=   r   r>   r   r   r;   r%   r   rF   r   r?   r   r   ÚbinasciiÚhexlifyÚdecodere   ÚhashlibÚmd5ÚdigestÚlenr   r\   r	   )
rf   rg   rH   rB   ry   ro   ri   rm   rn   rq   s
             rC   r3   r3   u  s`  € ð: ÐÝ˜*¥gÑ.Ô.ð 	Ý�Nðõ ˜*Ñ%Ô%ñ	ô ñ ô ð ð ˜ÒÐÝ�^ðñô ñ ô ð õ ˜[­*Ñ5Ô5€KÝ�k¥>Ñ2Ô2ð ¸;ð Ý�ðõ �kÑ"Ô"ñ
ô 
ñ ô ð 	ð ð 'Ø!Ô&ˆå% kÑ2Ô2×7Ò7Ñ9Ô9€Fà€GØÑÝ˜‰^Œ^ˆå‘-”-ˆØ,ˆ�ÑØ.µÔ1AÀ"Ñ1EÔ1E×1LÒ1LÈWÑ1UÔ1UÑUˆ�
Ñàˆ
Ø%×,Ò,¨WÑ5Ô5ÐåŒkÐ*¨R°°!°¬WÑ4Ñ5Ô5×<Ò<Ñ>Ô>ˆØ�3˜s™8œ8Ò#Ð#Ø•7”;˜sÐ%5Ñ5¸¸1¸Q¸3¼Ñ?Ñ@Ô@×GÒGÑIÔIÑIˆCð �3˜s™8œ8Ò#Ð#à�!�J�,Ôˆå*¨3°¸Ñ;Ô;‰
ˆˆFàÔ Ò$Ð$Ø&ˆˆØ	Ô	 %Ò	'Ð	'Ø'ˆˆØ	Ô	 %Ò	'Ð	'Ø'ˆå�˜f¨gÐ6Ñ6Ô6Ð6rD   )r6   )r6   rM   )@Ú
__future__r   r   r   r   r}   rz   rP   r   Ú_asn1r	   r
   rK   r   r   r   r   r   r   r   Ú_asymmetricr   Ú_errorsr   Ú_typesr   r   Úkdfr   r   Ú	symmetricr   Úutilr   Ú_backendÚ_mac.asymmetricr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Ú_win.asymmetricÚ_openssl.asymmetricÚ__all__r2   r5   r1   r4   r3   © rD   rC   ú<module>r�      s©  ðà RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà €€€Ø €€€à Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 2Ð 1Ð 1Ð 1Ð 1Ð 1Ø #Ð #Ð #Ð #Ð #Ð #Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð ð ˆ7‰9Œ9€ð ˆuÒÐðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð0 �ÒÐ˜( kÒ1Ð1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð2ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð2ð ð €ð<"ð "ð "ð "ðJ&ð &ð &ð &ðR&ð &ð &ð &ðRsð sð sð sðlU7ð U7ð U7ð U7ð U7rD   