§
    ¢”jÀx  ã                   ó|  — 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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 ddlmZmZmZ ddl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)m*Z*  G d
„ d¦  «        Z+ G d„ d¦  «        Z, G d„ d¦  «        Z-d„ Z.d„ Z/e e!ee"edœZ0d„ Z1d„ Z2dd„Z3dd„Z4d„ Z5d„ Z6d„ Z7d„ Z8dS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )ÚCertBagÚCertificateÚDSAPrivateKeyÚECPrivateKeyÚEncryptedDataÚEncryptedPrivateKeyInfoÚIntegerÚOctetStringÚPfxÚPrivateKeyInfoÚPublicKeyInfoÚRSAPrivateKeyÚRSAPublicKeyÚSafeContentsÚunarmor)Úpbkdf1Úpbkdf2Ú
pkcs12_kdf)Úaes_cbc_pkcs7_decryptÚdes_cbc_pkcs5_decryptÚrc2_cbc_pkcs5_decryptÚrc4_decryptÚtripledes_cbc_pkcs5_decrypt)Úconstant_compare)Úpretty_message)Úbyte_clsÚstr_clsÚ	type_namec                   ót   — e Zd ZdZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )Ú_PrivateKeyBaseNc           	      ó¼  — | j         dk    r| j        d         j        S | j         dk    rb| j        d         d         }t          d|d         |d         |d	         | j                             ¦   «         | j        d         j        d
œ¦  «        S | j         dk    rF| j        d         j        }| j        d         d         |d<   | j                             ¦   «         |d<   |S dS )a.  
        Unwraps the private key into an asn1crypto.keys.RSAPrivateKey,
        asn1crypto.keys.DSAPrivateKey or asn1crypto.keys.ECPrivateKey object

        :return:
            An asn1crypto.keys.RSAPrivateKey, asn1crypto.keys.DSAPrivateKey or
            asn1crypto.keys.ECPrivateKey object
        ÚrsaÚprivate_keyÚdsaÚprivate_key_algorithmÚ
parametersr   ÚpÚqÚg©Úversionr,   r-   r.   Ú
public_keyr(   Úecr1   N)Ú	algorithmÚasn1Úparsedr
   r1   Úunwrap)ÚselfÚparamsÚoutputs      úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/oscrypto/_asymmetric.pyr6   z_PrivateKeyBase.unwrap-   sì   € ð Œ>˜UÒ"Ð"Ø”9˜]Ô+Ô2Ð2àŒ>˜UÒ"Ð"Ø”YÐ6Ô7¸ÔEˆFÝ ØØ˜C”[Ø˜C”[Ø˜C”[Ø"œo×4Ò4Ñ6Ô6Ø#œy¨Ô7Ô>ð"ð "ñ ô ð ð Œ>˜TÒ!Ð!Ø”Y˜}Ô-Ô4ˆFØ#'¤9Ð-DÔ#EÀlÔ#SˆF�<Ñ Ø#'¤?×#9Ò#9Ñ#;Ô#;ˆF�<Ñ ØˆMð	 "Ð!ó    c                 ó   — | j         j        S ©zO
        :return:
            A unicode string of "rsa", "dsa" or "ec"
        ©r4   r3   ©r7   s    r:   r3   z_PrivateKeyBase.algorithmK   ó   € ð ŒyÔ"Ð"r;   c                 ó&   — | j         j        d         S ©úH
        :return:
            A unicode string of EC curve name
        r   ©r4   Úcurver?   s    r:   rE   z_PrivateKeyBase.curveT   ó   € ð ŒyŒ˜qÔ!Ð!r;   c                 ó   — | j         j        S ©zS
        :return:
            The number of bits in the key, as an integer
        ©r4   Úbit_sizer?   s    r:   rJ   z_PrivateKeyBase.bit_size]   ó   € ð ŒyÔ!Ð!r;   c                 ó   — | j         j        S ©zT
        :return:
            The number of bytes in the key, as an integer
        ©r4   Ú	byte_sizer?   s    r:   rO   z_PrivateKeyBase.byte_sizef   r@   r;   )Ú__name__Ú
__module__Ú__qualname__r4   Ú_fingerprintr6   Úpropertyr3   rE   rJ   rO   © r;   r:   r%   r%   (   s™   € € € € € à€DØ€Lðð ð ð< ð#ð #ñ „Xð#ð ð"ð "ñ „Xð"ð ð"ð "ñ „Xð"ð ð#ð #ñ „Xð#ð #ð #r;   r%   c                   óŠ   — e Zd ZdZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         ZdS )Ú_PublicKeyBaseNc                 óV   — | j         dk    r| j        d         S | j        d         j        S )a7  
        Unwraps a public key into an asn1crypto.keys.RSAPublicKey,
        asn1crypto.core.Integer (for DSA) or asn1crypto.keys.ECPointBitString
        object

        :return:
            An asn1crypto.keys.RSAPublicKey, asn1crypto.core.Integer or
            asn1crypto.keys.ECPointBitString object
        r2   r1   )r3   r4   r5   r?   s    r:   r6   z_PublicKeyBase.unwrapu   s.   € ð Œ>˜TÒ!Ð!Ø”9˜\Ô*Ð*ØŒy˜Ô&Ô-Ð-r;   c                 óR   — | j         €t          | j        d¦  «        | _         | j         S )aZ  
        Creates a fingerprint that can be compared with a private key to see if
        the two form a pair.

        This fingerprint is not compatible with fingerprints generated by any
        other software.

        :return:
            A byte string that is a sha256 hash of selected components (based
            on the key type)
        N)rS   r4   r?   s    r:   Úfingerprintz_PublicKeyBase.fingerprint„   s*   € ð ÔÐ$Ý ,¨T¬Y¸Ñ =Ô =ˆDÔØÔ Ð r;   c                 ó   — | j         j        S r=   r>   r?   s    r:   r3   z_PublicKeyBase.algorithm–   r@   r;   c                 ó&   — | j         j        d         S rB   rD   r?   s    r:   rE   z_PublicKeyBase.curveŸ   rF   r;   c                 ó   — | j         j        S rH   rI   r?   s    r:   rJ   z_PublicKeyBase.bit_size¨   rK   r;   c                 ó   — | j         j        S rM   rN   r?   s    r:   rO   z_PublicKeyBase.byte_size±   r@   r;   )rP   rQ   rR   r4   rS   r6   rT   rZ   r3   rE   rJ   rO   rU   r;   r:   rW   rW   p   s´   € € € € € à€DØ€Lð.ð .ð .ð ð!ð !ñ „Xð!ð" ð#ð #ñ „Xð#ð ð"ð "ñ „Xð"ð ð"ð "ñ „Xð"ð ð#ð #ñ „Xð#ð #ð #r;   rW   c                   ój   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú_CertificateBaseNc                 ó   — | j         j        S r=   )r1   r3   r?   s    r:   r3   z_CertificateBase.algorithm¿   ó   € ð ŒÔ(Ð(r;   c                 ó   — | j         j        S )rC   )r1   rE   r?   s    r:   rE   z_CertificateBase.curveÈ   s   € ð ŒÔ$Ð$r;   c                 ó   — | j         j        S )zZ
        :return:
            The number of bits in the public key, as an integer
        )r1   rJ   r?   s    r:   rJ   z_CertificateBase.bit_sizeÑ   s   € ð ŒÔ'Ð'r;   c                 ó   — | j         j        S )z[
        :return:
            The number of bytes in the public key, as an integer
        )r1   rO   r?   s    r:   rO   z_CertificateBase.byte_sizeÚ   rb   r;   )	rP   rQ   rR   r4   rT   r3   rE   rJ   rO   rU   r;   r:   r`   r`   »   sƒ   € € € € € à€Dàð)ð )ñ „Xð)ð ð%ð %ñ „Xð%ð ð(ð (ñ „Xð(ð ð)ð )ñ „Xð)ð )ð )r;   r`   c                 ó¼  — | j         }|dk    s|dk    r| d         j        S |dk    rz| d         d         }| d         j        }t          d|d         |d	         |d
         t          t	          |d
         j        |j        |d         j        ¦  «        ¦  «        |dœ¦  «        S |dk    r | d         j        }| d         d         |d<   |S t          d| j         z  ¦  «        ‚)a‡  
    Unwraps an asn1crypto.keys.PrivateKeyInfo object into an
    asn1crypto.keys.RSAPrivateKey, asn1crypto.keys.DSAPrivateKey
    or asn1crypto.keys.ECPrivateKey.

    :param key_info:
        An asn1crypto.keys.PrivateKeyInfo object

    :return:
        One of:
         - asn1crypto.keys.RSAPrivateKey
         - asn1crypto.keys.DSAPrivateKey
         - asn1crypto.keys.ECPrivateKey
    r'   Ú
rsassa_pssr(   r)   r*   r+   r   r,   r-   r.   r/   r2   z#Unsupported key_info.algorithm "%s")r3   r5   r
   r   ÚpowÚnativeÚ
ValueError)Úkey_infoÚkey_algr8   r5   s       r:   Ú_unwrap_private_key_inform   ä   s  € ð  Ô €Gà�%ÒÐ˜7 lÒ2Ð2Ø˜Ô&Ô-Ð-à�%ÒÐØÐ1Ô2°<Ô@ˆØ˜-Ô(Ô/ˆÝØØ˜”Ø˜”Ø˜”Ý!¥#Ø�s”Ô"Ø”Ø�s”Ô"ñ#ô #ñ ô ð
 "ð
ð 
ñ ô ð 	ð �$‚€Ø˜-Ô(Ô/ˆØ'Ð(?Ô@ÀÔNˆˆ|ÑØˆå
Ð:¸XÔ=OÑOÑ
PÔ
PÐPr;   c                 óæ  — t          | t          ¦  «        �r~| d         j        }| j        dk    rd|d         j        |d         j        fz  }nø| j        dk    r‚| d         d         }t          t          |d	         j        | d         j        j        |d
         j        ¦  «        ¦  «        }d|d
         j        |d         j        |d	         j        |j        fz  }nk| j        dk    r`|d         j        }|€' || ¦  «        j        }|j        d         j        j        }d| j	        d         z  }| 
                    d¦  «        }||z  }t          |t          ¦  «        r| 
                    d¦  «        }t          j        |¦  «                             ¦   «         S t          | t          ¦  «        �r| j        dk    r+| d         j        }d|d         j        |d         j        fz  }n˜| j        dk    rK| d         j        }| d         d         }d|d
         j        |d         j        |d	         j        |j        fz  }nB| j        dk    r7| d         j        }d| j	        d         z  }| 
                    d¦  «        }||z  }t          |t          ¦  «        r| 
                    d¦  «        }t          j        |¦  «                             ¦   «         S t!          t#          dt%          | ¦  «        ¦  «        ¦  «        ‚)a5  
    Returns a fingerprint used for correlating public keys and private keys

    :param key_object:
        An asn1crypto.keys.PrivateKeyInfo or asn1crypto.keys.PublicKeyInfo

    :raises:
        ValueError - when the key_object is not of the proper type

    ;return:
        A byte string fingerprint
    r(   r'   z%d:%dÚmodulusÚpublic_exponentr)   r*   r+   r.   r,   z%d:%d:%d:%dr-   r2   r1   Nz%s:r   zutf-8r3   z—
        key_object must be an instance of the
        asn1crypto.keys.PrivateKeyInfo or asn1crypto.keys.PublicKeyInfo
        classes, not %s
        )Ú
isinstancer   r5   r3   ri   r   rh   r1   r4   rE   Úencoder"   ÚhashlibÚsha256Údigestr   rj   r    r#   )Ú
key_objectÚload_private_keyÚkeyÚto_hashr8   r1   Úpublic_key_objects          r:   rS   rS     s  € õ �*�nÑ-Ô-ñ *0Ø˜Ô'Ô.ˆàÔ 5Ò(Ð(ØØ�I”Ô%ØÐ%Ô&Ô-ð!ñ ˆGˆGð
 Ô! UÒ*Ð*ØÐ 7Ô8¸ÔFˆFÝ ¥Ø�s”Ô"Ø˜=Ô)Ô0Ô7Ø�s”Ô"ñ"ô "ñ ô ˆJð $Ø�s”Ô"Ø�s”Ô"Ø�s”Ô"ØÔ!ð	'ñ ˆGˆGð Ô! TÒ)Ð)Ø˜\Ô*Ô1ˆJØÐ!ð %5Ð$4°ZÑ$@Ô$@Ô$KÐ!Ø.Ô3°LÔAÔHÔO�
à˜jÔ.¨qÔ1Ñ1ˆGØ—n’n WÑ-Ô-ˆGØ�zÑ!ˆGå�g�wÑ'Ô'ð 	.Ø—n’n WÑ-Ô-ˆGåŒ~˜gÑ&Ô&×-Ò-Ñ/Ô/Ð/å�*�mÑ,Ô,ñ 0ØÔ 5Ò(Ð(Ø˜\Ô*Ô1ˆCàØ�I”Ô%ØÐ%Ô&Ô-ð!ñ ˆGˆGð
 Ô! UÒ*Ð*Ø˜\Ô*Ô1ˆCØ Ô,¨\Ô:ˆFà#Ø�s”Ô"Ø�s”Ô"Ø�s”Ô"Ø”
ð	'ñ ˆGˆGð Ô! TÒ)Ð)Ø# LÔ1Ô8ˆJà˜jÔ.¨qÔ1Ñ1ˆGØ—n’n WÑ-Ô-ˆGØ�zÑ!ˆGå�g�wÑ'Ô'ð 	.Ø—n’n WÑ-Ô-ˆGåŒ~˜gÑ&Ô&×-Ò-Ñ/Ô/Ð/å
•^ð	õ
 	�*ÑÔñô ñ ô ð r;   )Úrc2Úrc4ÚdesÚ	tripledesÚaesc                 óÔ  — t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚d}t          j        d| ¦  «        �Pt          | ¦  «        \  }}} |dk    rt          t          d¦  «        ¦  «        ‚|dk    rt          j
        | d¦  «        S |�|dk    ro	 t          j        | ¦  «        }|j         |S # t          $ r Y nw xY w	 t          j        | ¦  «        }|j         t          j
        |d¦  «        S # t          $ r Y nw xY w|�|dk    r5	 t          j        | ¦  «        }|d	         d
         }|S # t          $ r Y nw xY wt          d¦  «        ‚)aå  
    Loads a public key from a DER or PEM-formatted file. Supports RSA, DSA and
    EC public keys. For RSA keys, both the old RSAPublicKey and
    SubjectPublicKeyInfo structures are supported. Also allows extracting a
    public key from an X.509 certificate.

    :param data:
        A byte string to load the public key from

    :raises:
        ValueError - when the data does not appear to contain a public key

    :return:
        An asn1crypto.keys.PublicKeyInfo object
    ú<
            data must be a byte string, not %s
            Nó   \s*-----úprivate keyz�
                The data specified does not appear to be a public key or
                certificate, but rather a private key
                r'   ú
public keyÚcertificateÚtbs_certificateÚsubject_public_key_infozQThe data specified does not appear to be a known public key or certificate format)rq   r!   Ú	TypeErrorr    r#   ÚreÚmatchÚ_unarmor_pemrj   r   ÚwrapÚloadri   r   r	   )ÚdataÚkey_typeÚalgoÚpkiÚrpkÚparsed_certrk   s          r:   Úparse_publicr”   ~  sÍ  € õ" �d�HÑ%Ô%ð Ý�ðõ �d‰OŒOñ	
ô 
ñ ô ð 	ð €Hõ 
„x�˜dÑ#Ô#Ð/Ý+¨DÑ1Ô1Ñˆ�$˜à�}Ò$Ð$Ý�^ðñô ñ ô ð ð �5Š=ˆ=Ý Ô% d¨EÑ2Ô2Ð2àÐ˜8 |Ò3Ð3ð	ÝÔ$ TÑ*Ô*ˆCàŒJˆJØˆJøÝð 	ð 	ð 	ØˆDð	øøøð	ÝÔ# DÑ)Ô)ˆCàŒJˆJÝ Ô% c¨5Ñ1Ô1Ð1øÝð 	ð 	ð 	ØˆDð	øøøð Ð˜8 }Ò4Ð4ð	Ý%Ô*¨4Ñ0Ô0ˆKØ"Ð#4Ô5Ð6OÔPˆHØˆOøÝð 	ð 	ð 	ØˆDð	øøøõ ÐhÑ
iÔ
iÐis6   Â0C Ã
CÃCÃ/D Ä
DÄDÄ'#E Å
EÅEc                 óî  — t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚d}t          j        d| ¦  «        �Wt          | ¦  «        \  }}} |dk    rt          t          d¦  «        ¦  «        ‚|dk    rt          t          d¦  «        ¦  «        ‚|�|dk    r%	 t          j
        | ¦  «        S # t          $ r Y nw xY wt          t          d	¦  «        ¦  «        ‚)
a@  
    Loads a certificate from a DER or PEM-formatted file. Supports X.509
    certificates only.

    :param data:
        A byte string to load the certificate from

    :raises:
        ValueError - when the data does not appear to contain a certificate

    :return:
        An asn1crypto.x509.Certificate object
    r�   Nr‚   rƒ   z‚
                The data specified does not appear to be a certificate, but
                rather a private key
                r„   z�
                The data specified does not appear to be a certificate, but
                rather a public key
                r…   zU
        The data specified does not appear to be a known certificate format
        )rq   r!   rˆ   r    r#   r‰   rŠ   r‹   rj   r	   r�   )rŽ   r�   Ú_s      r:   Úparse_certificater—   Ç  s>  € õ �d�HÑ%Ô%ð Ý�ðõ �d‰OŒOñ	
ô 
ñ ô ð 	ð €Hõ 
„x�˜dÑ#Ô#Ð/Ý(¨Ñ.Ô.Ñˆ�!�Tà�}Ò$Ð$Ý�^ðñô ñ ô ð ð �|Ò#Ð#Ý�^ðñô ñ ô ð ð Ð˜8 }Ò4Ð4ð	ÝÔ# DÑ)Ô)Ð)øÝð 	ð 	ð 	ØˆDð	øøøõ •^ð	ñô ñ ô ð s   Â7C Ã
CÃCc                 óÌ  — t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚|�@t          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚nd}t          j        d| ¦  «        �Xt          | |¦  «        \  }}} |dk    rt          t          d¦  «        ¦  «        ‚|dk    rt          t          d	¦  «        ¦  «        ‚	 t          j
        | ¦  «        }|j         |S # t          $ r Y nw xY w	 t          j
        | ¦  «        }|d
         }|d         j        }t          |||¦  «        }t          j
        |¦  «        }|j         |S # t          $ r Y nw xY w	 t          j
        | ¦  «        }	|	j         t          j        |	d¦  «        S # t          $ r Y nw xY w	 t!          j
        | ¦  «        }	|	j         t          j        |	d¦  «        S # t          $ r Y nw xY w	 t#          j
        | ¦  «        }	|	j         t          j        |	d¦  «        S # t          $ r Y nw xY wt          t          d¦  «        ¦  «        ‚)a%  
    Loads a private key from a DER or PEM-formatted file. Supports RSA, DSA and
    EC private keys. Works with the follow formats:

     - RSAPrivateKey (PKCS#1)
     - ECPrivateKey (SECG SEC1 V2)
     - DSAPrivateKey (OpenSSL)
     - PrivateKeyInfo (RSA/DSA/EC - PKCS#8)
     - EncryptedPrivateKeyInfo (RSA/DSA/EC - PKCS#8)
     - Encrypted RSAPrivateKey (PEM only, OpenSSL)
     - Encrypted DSAPrivateKey (PEM only, OpenSSL)
     - Encrypted ECPrivateKey (PEM only, OpenSSL)

    :param data:
        A byte string to load the private key from

    :param password:
        The password to unencrypt the private key

    :raises:
        ValueError - when the data does not appear to contain a private key, or the password is invalid

    :return:
        An asn1crypto.keys.PrivateKeyInfo object
    r�   NúH
                password must be a byte string, not %s
                r;   r‚   r„   z�
                The data specified does not appear to be a private key, but
                rather a public key
                r…   z‚
                The data specified does not appear to be a private key, but
                rather a certificate
                Úencryption_algorithmÚencrypted_datar'   r)   r2   zU
        The data specified does not appear to be a known private key format
        )rq   r!   rˆ   r    r#   r‰   rŠ   r‹   rj   r   r�   ri   r   Ú_decrypt_encrypted_datar   rŒ   r
   r   )
rŽ   Úpasswordr�   r–   r‘   Úparsed_wrapperÚencryption_algorithm_infor›   Údecrypted_datar5   s
             r:   Úparse_privater¡     só  € õ6 �d�HÑ%Ô%ð Ý�ðõ �d‰OŒOñ	
ô 
ñ ô ð 	ð ÐÝ˜(¥HÑ-Ô-ð 	Ý�Nðõ ˜(Ñ#Ô#ñ	ô ñ ô ð ð	ð ˆõ 
„x�˜dÑ#Ô#Ð/Ý(¨¨xÑ8Ô8Ñˆ�!�Tà�|Ò#Ð#Ý�^ðñô ñ ô ð ð �}Ò$Ð$Ý�^ðñô ñ ô ð ðÝÔ! $Ñ'Ô'ˆàŒ
ˆ
Øˆ
øÝð ð ð Øˆðøøøð
Ý0Ô5°dÑ;Ô;ˆØ$2Ð3IÔ$JÐ!Ø'Ð(8Ô9Ô@ˆÝ0Ð1JÈNÐ\dÑeÔeˆÝÔ! .Ñ1Ô1ˆàŒ
ˆ
Øˆ
øÝð ð ð ØˆðøøøðÝÔ# DÑ)Ô)ˆàŒˆÝÔ" 6¨5Ñ1Ô1Ð1øÝð ð ð ØˆðøøøðÝÔ# DÑ)Ô)ˆàŒˆÝÔ" 6¨5Ñ1Ô1Ð1øÝð ð ð ØˆðøøøðÝÔ" 4Ñ(Ô(ˆàŒˆÝÔ" 6¨4Ñ0Ô0Ð0øÝð ð ð Øˆðøøøõ •^ð	ñô ñ ô ð s[   Ã2D Ä
DÄDÄ AE7 Å7
FÆFÆ/F8 Æ8
GÇGÇ	/G9 Ç9
HÈHÈ
/H: È:
IÉIc                 óÜ  — t          | ¦  «        \  }}}d}t          j        ||¦  «        }|st          t	          d¦  «        ¦  «        ‚|                     d¦  «        }|                      ¦   «         } |t          g d¢¦  «        v r;|                     d¦  «                             ¦   «         }d|t          |||¦  «        fS |                     ¦   «         }	d}|	dk    rd}	n
|	d	k    rd
}	d}|	||fS )a3  
    Removes PEM-encoding from a public key, private key or certificate. If the
    private key is encrypted, the password will be used to decrypt it.

    :param data:
        A byte string of the PEM-encoded data

    :param password:
        A byte string of the encryption password, or None

    :return:
        A 3-element tuple in the format: (key_type, algorithm, der_bytes). The
        key_type will be a unicode string of "public key", "private key" or
        "certificate". The algorithm will be a unicode string of "rsa", "dsa"
        or "ec".
    zc^((DSA|EC|RSA) PRIVATE KEY|ENCRYPTED PRIVATE KEY|PRIVATE KEY|PUBLIC KEY|RSA PUBLIC KEY|CERTIFICATE)zx
            data does not seem to contain a PEM-encoded certificate, private
            key or public key
            r   )zRSA PRIVATE KEYzDSA PRIVATE KEYzEC PRIVATE KEYé   rƒ   Nzencrypted private keyzrsa public keyr„   r'   )
r   r‰   rŠ   rj   r    ÚgroupÚstripÚsetÚlowerÚ_unarmor_pem_openssl_private)
rŽ   r�   Úobject_typeÚheadersÚ	der_bytesÚ
type_regexÚ
armor_typeÚ
pem_headerr�   r�   s
             r:   r‹   r‹   v  s  € õ$ '.¨d¡m¤mÑ#€K�˜)àv€JÝ”˜* kÑ2Ô2€JØð Ý�ðñ
ô 
ñ ô ð 	ð ×!Ò! !Ñ$Ô$€Jà�:Š:‰<Œ<€Dð •SÐQÐQÐQÑRÔRÐRÐRØ×Ò Ñ"Ô"×(Ò(Ñ*Ô*ˆØ˜tÕ%AÀ'È9ÐV^Ñ%_Ô%_Ð`Ð`à×ÒÑ!Ô!€HØ€DØÐ*Ò*Ð*Ø ˆˆØ	Ð%Ò	%Ð	%ØˆØˆà�d˜IÐ&Ð&r;   c                 ó¼  — d}d}d}d| v rN| d         }|                      d¦  «        dk    r+|                     ¦   «                              d¦  «        \  }}nd}|s|S |r't          j        |                     d¦  «        ¦  «        }|                     ¦   «         }i dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥|         }t          j        ||dd…         z   ¦  «         	                    ¦   «         }|t          |¦  «        k    rJ|t          j        ||z   |dd…         z   ¦  «         	                    ¦   «         z  }|t          |¦  «        k    °J|d|…         }i dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “dd “dd “dd “d!d!dœ¥|         }	t          |	         }
|	dk    r |
||¦  «        S  |
|||¦  «        S )"aŽ  
    Parses a PKCS#1 private key, or encrypted private key

    :param headers:
        A dict of "Name: Value" lines from right after the PEM header

    :param data:
        A byte string of the DER-encoded PKCS#1 private key

    :param password:
        A byte string of the password to use if the private key is encrypted

    :return:
        A byte string of the DER-encoded private key
    NzDEK-Infoú,éÿÿÿÿÚRC4Úasciizaes-128-cbcé   zaes-128zaes-192-cbcé   zaes-192zaes-256-cbcé    zaes-256r|   zrc4-64é   zrc4-40é   z
rc2-64-cbcz
rc2-40-cbczrc2-cbcr{   zdes-ede3-cbczdes-ede3Údes3zdes-ede-cbc)zdes-cbcr}   r   r   r~   r}   )Úfindr¥   ÚsplitÚbinasciiÚ	unhexlifyrr   r§   rs   Úmd5ru   ÚlenÚcrypto_funcs)rª   rŽ   r�   Úenc_algoÚ
enc_iv_hexÚenc_ivr8   Úenc_key_lengthÚenc_keyÚenc_algo_nameÚdecrypt_funcs              r:   r¨   r¨   ©  sU  € ð" €HØ€JØ€Fà�WÐÐØ˜Ô$ˆØ�;Š;�sÑÔ˜rÒ!Ð!Ø#)§<¢<¡>¤>×#7Ò#7¸Ñ#<Ô#<Ñ ˆH�j�jàˆHàð Øˆàð @ÝÔ# J×$5Ò$5°gÑ$>Ô$>Ñ?Ô?ˆØ�~Š~ÑÔ€HðØ�rðà�2ðð 	�rðð 	�2ð	ð
 	�rðð 	�2ðð 	ˆrðð 	�!ðð 	�!ðð 	�aðð 	�aðð 	�2ðð 	ˆrðð 	˜ðð 	�Bðð  	�ð!ð" 	�rð#ð$ Øð'ð ð ð( ô)€Nõ, Œk˜( V¨A¨a¨C¤[Ñ0Ñ1Ô1×8Ò8Ñ:Ô:€GØ
�3˜w™<œ<Ò
'Ð
'Ø•7”;˜w¨Ñ1°F¸1¸Q¸3´KÑ?Ñ@Ô@×GÒGÑIÔIÑIˆð �3˜w™<œ<Ò
'Ð
'à�a˜Ð&Ô'€GðØ�uðà�5ðð 	�uðð 	�5ð	ð
 	�uðð 	�5ðð 	ˆuðð 	�%ðð 	�%ðð 	�eðð 	�eðð 	�5ðð 	ˆuðð 	˜ðð 	�Kðð  	�ð!ð" 	�{ð#ð$ Øð'ð ð ð( ô)€Mõ*   Ô.€Là˜ÒÐØˆ|˜G TÑ*Ô*Ð*àˆ<˜  vÑ.Ô.Ð.r;   c                 óÜ  ‡‡— t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚|�@t          |t          ¦  «        s*t          t          dt	          |¦  «        ¦  «        ¦  «        ‚nd}i Ši }t          j        | ¦  «        }|d         }|d         j        dk    rt          t          d¦  «        ¦  «        ‚|j	        }|d	         }|rÍ|d
         d         d         j        }ddddddddœ|         }	t          |||d         j        |d         j        |	d¦  «        }
t          t          |¦  «        }t          j        |
|d         j        |¦  «                             ¦   «         }|d
         d         j        }t#          ||¦  «        st          d¦  «        ‚|D ]ª}|d         }t          |t$          ¦  «        rt'          |j        ‰|||¦  «         Œ8t          |t(          ¦  «        rB|d         }|d         }|d         j        }t+          |||¦  «        }t'          |‰|||¦  «         Œ�t          t          d¦  «        ¦  «        ‚t-          |                     ¦   «         ¦  «        }t-          ‰                     ¦   «         ¦  «        }t1          t3          ||z  ¦  «        ¦  «        }d}d}g }t5          |¦  «        dk    r,|d         Š|‰         }‰‰         }ˆˆfd„‰D ¦   «         }|||fS t5          |¦  «        dk    r<t1          t3          |                     ¦   «         ¦  «        ¦  «        d         }||         }t5          ‰¦  «        dk    r?t1          t3          ‰                     ¦   «         ¦  «        ¦  «        d         }‰|         }‰|= t5          ‰¦  «        dk    r1t1          t3          ‰                     ¦   «         ¦  «        d „ ¬!¦  «        }|||fS )"aY  
    Parses a PKCS#12 ANS.1 DER-encoded structure and extracts certs and keys

    :param data:
        A byte string of a DER-encoded PKCS#12 file

    :param password:
        A byte string of the password to any encrypted data

    :param load_private_key:
        A callable that will accept a byte string and return an
        oscrypto.asymmetric.PrivateKey object

    :raises:
        ValueError - when any of the parameters are of the wrong type or value
        OSError - when an error is returned by one of the OS decryption functions

    :return:
        A three-element tuple of:
         1. An asn1crypto.keys.PrivateKeyInfo object
         2. An asn1crypto.x509.Certificate object
         3. A list of zero or more asn1crypto.x509.Certificate objects that are
            "extra" certificates, possibly intermediates from the cert chain
    r�   Nr™   r;   Ú	auth_safeÚcontent_typerŽ   zV
            Only password-protected PKCS12 files are currently supported
            Úmac_dataÚmacÚdigest_algorithmr3   é   é   r¶   é0   é@   )Úsha1Úsha224rt   Úsha384Úsha512Ú
sha512_224Ú
sha512_256Úmac_saltÚ
iterationsé   Úcontentru   zPassword provided is invalidÚencrypted_content_infoÚcontent_encryption_algorithmÚencrypted_contentz[
                Public-key-based PKCS12 files are not currently supported
                r   r   c                 ó,   •— g | ]}|‰k    ¯‰|         ‘ŒS rU   rU   )Ú.0ÚfÚcertsrZ   s     €€r:   ú
<listcomp>z!_parse_pkcs12.<locals>.<listcomp>|  s'   ø€ ÐCÐCÐC A°!°{Ò2BÐ2B�u˜Q”xÐ2BÐ2BÐ2Br;   c                 ó   — | j         j        S ©N)ÚsubjectÚhuman_friendly)Úcs    r:   ú<lambda>z_parse_pkcs12.<locals>.<lambda>‰  s   € ÀÄÔAY€ r;   )rx   )rq   r!   rˆ   r    r#   r   r�   ri   rj   Úauthenticated_safer   Úgetattrrs   ÚhmacÚnewÚcontentsru   r   r   Ú_parse_safe_contentsr   rœ   r¦   ÚkeysÚsortedÚlistr¿   Úvalues)rŽ   r�   rw   Úprivate_keysÚpfxrÉ   rê   rË   Úmac_algoÚ
key_lengthÚmac_keyÚhash_modÚcomputed_hmacÚstored_hmacÚcontent_inforÛ   rÜ   rŸ   rÞ   Údecrypted_contentÚkey_fingerprintsÚcert_fingerprintsÚcommon_fingerprintsrx   ÚcertÚother_certsÚ	first_keyrâ   rZ   s                              @@r:   Ú_parse_pkcs12r    sD  øø€ õ4 �d�HÑ%Ô%ð Ý�ðõ �d‰OŒOñ	
ô 
ñ ô ð 	ð ÐÝ˜(¥HÑ-Ô-ð 	Ý�Nðõ ˜(Ñ#Ô#ñ	ô ñ ô ð ð	ð ˆà€EØ€Lå
Œ(�4‰.Œ.€Cà�KÔ €IØ�Ô Ô'¨6Ò1Ð1Ý�ðñ
ô 
ñ ô ð 	ð
 Ô/Ðà�:Œ€HØð =Ø˜E”?Ð#5Ô6°{ÔCÔJˆàØØØØØØð
ð 
ð ôˆ
õ ØØØ�ZÔ Ô'Ø�\Ô"Ô)ØØñ
ô 
ˆõ �7 HÑ-Ô-ˆÝœ ¨)°IÔ*>Ô*GÈÑRÔR×YÒYÑ[Ô[ˆØ˜u”o hÔ/Ô6ˆÝ ¨{Ñ;Ô;ð 	=ÝÐ;Ñ<Ô<Ð<à*ð ð ˆØ˜yÔ)ˆå�g�{Ñ+Ô+ð 	Ý  ¤°¸ÀhÐP`ÑaÔaÐaÐaå˜¥Ñ/Ô/ð 	Ø%,Ð-EÔ%FÐ"à(>Ð?]Ô(^Ð%Ø 6Ð7JÔ KÔ RÐÝ 7Ð8QÐSdÐfnÑ oÔ oÐå Ð!2°E¸<ÈÐScÑdÔdÐdÐdõ �^ðñô ñ ô ð õ ˜<×,Ò,Ñ.Ô.Ñ/Ô/ÐÝ˜EŸJšJ™LœLÑ)Ô)Ðå ¥Ð&6Ð9JÑ&JÑ!KÔ!KÑLÔLÐà
€CØ€DØ€Kå
ÐÑÔ 1Ò$Ð$Ø)¨!Ô,ˆØ˜;Ô'ˆØ�[Ô!ˆØCÐCÐCÐCÐC¨ÐCÑCÔCˆØ�T˜;Ð'Ð'å
ˆ<ÑÔ˜1ÒÐÝ�4 × 1Ò 1Ñ 3Ô 3Ñ4Ô4Ñ5Ô5°aÔ8ˆ	Ø˜9Ô%ˆå
ˆ5�z„z�A‚~€~Ý�4 §
¢
¡¤Ñ-Ô-Ñ.Ô.¨qÔ1ˆ	Ø�YÔˆØ�)Ðå
ˆ5�z„z�A‚~€~Ý�T %§,¢,¡.¤.Ñ1Ô1Ð7YÐ7YÐZÑZÔZˆà��{Ð#Ð#r;   c                 ó¢  — t          | t          ¦  «        rt          j        | ¦  «        } | D �]!}|d         }t          |t          ¦  «        rK|d         j        dk    r9|d         j        }|d         d         }|d         j        |t          |d¦  «        <   Œkt          |t          ¦  «        r||t          ||¦  «        <   Œ”t          |t          ¦  «        rN|d         }	|d	         j        }
t          |	|
|¦  «        }t          j        |¦  «        }||t          ||¦  «        <   Œ÷t          |t          ¦  «        rt          |||||¦  «         �Œ!�Œ#dS )
a&  
    Parses a SafeContents PKCS#12 ANS.1 structure and extracts certs and keys

    :param safe_contents:
        A byte string of ber-encoded SafeContents, or a asn1crypto.pkcs12.SafeContents
        parsed object

    :param certs:
        A dict to store certificates in

    :param keys:
        A dict to store keys in

    :param password:
        A byte string of the password to any encrypted data

    :param load_private_key:
        A callable that will accept a byte string and return an
        oscrypto.asymmetric.PrivateKey object
    Ú	bag_valueÚcert_idÚx509Ú
cert_valuer†   r‡   Nrš   r›   )rq   r!   r   r�   r   ri   r5   rS   r   r   rœ   rï   )Úsafe_contentsrâ   rô   r�   rw   Úsafe_bagr  r  Úpublic_key_inforŸ   Úencrypted_key_bytesÚdecrypted_key_bytesr(   s                r:   rï   rï   Ž  sp  € õ, �-¥Ñ*Ô*ð 9Ý$Ô)¨-Ñ8Ô8ˆà!ð ñ ˆØ˜[Ô)ˆ	å�i¥Ñ)Ô)ð 	Ø˜Ô#Ô*¨fÒ4Ð4Ø  Ô.Ô5�Ø"&Ð'8Ô"9Ð:SÔ"T�Ø=FÀ|Ô=TÔ=[�•l ?°DÑ9Ô9Ñ:øå˜	¥>Ñ2Ô2ð 	ØFOˆL� iÐ1AÑBÔBÑCÐCå˜	Õ#:Ñ;Ô;ð 	Ø(1Ð2HÔ(IÐ%Ø"+Ð,<Ô"=Ô"DÐÝ"9Ð:SÐUhÐjrÑ"sÔ"sÐÝ(Ô-Ð.AÑBÔBˆKØHSˆL� kÐ3CÑDÔDÑEÐEå˜	¥<Ñ0Ô0ð 	Ý  ¨E°<ÀÐK[Ñ\Ô\Ð\Ñ\ñ ð1ð r;   c                 ó´  — t           | j                 }| j        dk    rc| j        dk    rt          t	          d¦  «        ¦  «        ‚t          | j        || j        | j        | j	        ¦  «        }| j
        } ||||¦  «        }n×| j        dk    rLt          | j        || j        | j        | j	        dz   ¦  «        }|dd…         }|dd…         } ||||¦  «        }n€| j        dk    rut          | j        || j        | j        | j	        d	¦  «        }| j        d
k    r |||¦  «        }n5t          | j        || j        | j        | j        d¦  «        } ||||¦  «        }|S )al  
    Decrypts encrypted ASN.1 data

    :param encryption_algorithm_info:
        An instance of asn1crypto.pkcs5.Pkcs5EncryptionAlgorithm

    :param encrypted_content:
        A byte string of the encrypted content

    :param password:
        A byte string of the encrypted content's password

    :return:
        A byte string of the decrypted plaintext
    r   Úrc5zc
                PBES2 encryption scheme utilizing RC5 encryption is not supported
                r   r·   r   r´   r   r   r|   r£   )rÀ   Úencryption_cipherÚkdfrj   r    r   Úkdf_hmacÚkdf_saltÚkdf_iterationsr÷   Úencryption_ivr   r   Úencryption_block_size)rŸ   rÞ   r�   rÇ   rÅ   rÃ   Ú	plaintextÚderived_outputs           r:   rœ   rœ   Â  sº  € õ"  Ð 9Ô KÔL€Lð !Ô$¨Ò0Ð0à$Ô6¸%Ò?Ð?Ý�^ðñô ñ ô ð õ Ø%Ô.ØØ%Ô.Ø%Ô4Ø%Ô0ñ
ô 
ˆð +Ô8ˆà �L Ð*;¸VÑDÔDˆ	ˆ	à	"Ô	&¨(Ò	2Ð	2ÝØ%Ô.ØØ%Ô.Ø%Ô4Ø%Ô0°1Ñ4ñ
ô 
ˆð !  1 Ô%ˆØ  " Ô%ˆà �L Ð*;¸VÑDÔDˆ	ˆ	à	"Ô	&¨,Ò	6Ð	6ÝØ%Ô.ØØ%Ô.Ø%Ô4Ø%Ô0Øñ
ô 
ˆð %Ô6¸%Ò?Ð?Ø$˜ WÐ.?Ñ@Ô@ˆIˆIõ  Ø)Ô2ØØ)Ô2Ø)Ô8Ø)Ô?Øñô ˆFð %˜ WÐ.?ÀÑHÔHˆIàÐr;   rå   )9Ú
__future__r   r   r   r   rs   rì   r‰   r¼   Ú_asn1r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   Ú	symmetricr   r   r   r   r   Úutilr   Ú_errorsr    Ú_typesr!   r"   r#   r%   rW   r`   rm   rS   rÀ   r”   r—   r¡   r‹   r¨   r  rï   rœ   rU   r;   r:   ú<module>r      s  ðà RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà €€€Ø €€€Ø 	€	€	€	Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ ,Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð ð ð ð ð #Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðE#ð E#ð E#ð E#ð E#ñ E#ô E#ð E#ðPH#ð H#ð H#ð H#ð H#ñ H#ô H#ð H#ðV&)ð &)ð &)ð &)ð &)ñ &)ô &)ð &)ðR*Qð *Qð *QðZað að aðJ !ØØ Ø,Ø ðð €ðFjð Fjð FjðR7ð 7ð 7ðtrð rð rð rðj0'ð 0'ð 0'ð 0'ðfX/ð X/ð X/ðvG$ð G$ð G$ðT1ð 1ð 1ðhNð Nð Nð Nð Nr;   