§
    ¡”jç“  ã                   ód  — d Z ddlmZmZmZmZ ddlZddlZddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZm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&  G d
„ de!¦  «        Z' G d„ de"¦  «        Z( G d„ de¦  «        Z) G d„ de!¦  «        Z* G d„ de!¦  «        Z+ G d„ de!¦  «        Z, G d„ d¦  «        Z- G d„ dee-¦  «        Z. G d„ dee-¦  «        Z/ G d„ de¦  «        Z0 G d„ de¦  «        Z1 G d „ d!e¦  «        Z2 G d"„ d#e!¦  «        Z3 G d$„ d%e!¦  «        Z4 G d&„ d'e!¦  «        Z5 G d(„ d)e!¦  «        Z6 G d*„ d+e!¦  «        Z7 G d,„ d-e¦  «        Z8 G d.„ d/e¦  «        Z9 G d0„ d1e¦  «        Z: G d2„ d3e!¦  «        Z; G d4„ d5e!¦  «        Z< G d6„ d7e!¦  «        Z= G d8„ d9e#¦  «        Z> G d:„ d;e¦  «        Z? G d<„ d=ee!¦  «        Z@ G d>„ d?e!¦  «        ZA G d@„ dAe!¦  «        ZB G dB„ dCe!¦  «        ZC G dD„ dEe!¦  «        ZD G dF„ dGe¦  «        ZE G dH„ dIee!¦  «        ZF G dJ„ dKe!¦  «        ZGdS )La'  
ASN.1 type classes for public and private keys. Exports the following items:

 - DSAPrivateKey()
 - ECPrivateKey()
 - EncryptedPrivateKeyInfo()
 - PrivateKeyInfo()
 - PublicKeyInfo()
 - RSAPrivateKey()
 - RSAPublicKey()

Other type classes are defined that help compose the types listed above.
é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )ÚunwrapÚAPIException)Ú	type_nameÚbyte_cls)Ú_ForceNullParametersÚDigestAlgorithmÚEncryptionAlgorithmÚRSAESOAEPParamsÚRSASSAPSSParams)ÚAnyÚ	Asn1ValueÚ	BitStringÚChoiceÚIntegerÚIntegerOctetStringÚNullÚObjectIdentifierÚOctetBitStringÚOctetStringÚParsableOctetStringÚParsableOctetBitStringÚSequenceÚ
SequenceOfÚSetOf)Úint_from_bytesÚint_to_bytesc                   ó(   — e Zd ZdZdefdefdefgZdS )ÚOtherPrimeInfoú=
    Source: https://tools.ietf.org/html/rfc3447#page-46
    ÚprimeÚexponentÚcoefficientN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú_fields© ó    ú^/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/asn1crypto/keys.pyr#   r#   -   s9   € € € € € ðð ð
 
�'ÐØ	�WÐØ	˜Ð ð€G€G€Gr/   r#   c                   ó   — e Zd ZdZeZdS )ÚOtherPrimeInfosr$   N)r)   r*   r+   r,   r#   Ú_child_specr.   r/   r0   r2   r2   9   s   € € € € € ðð ð !€K€K€Kr/   r2   c                   ó   — e Zd ZdZdddœZdS )ÚRSAPrivateKeyVersionzX
    Original Name: Version
    Source: https://tools.ietf.org/html/rfc3447#page-45
    z	two-primeÚmulti)r   r   N©r)   r*   r+   r,   Ú_mapr.   r/   r0   r5   r5   A   s,   € € € € € ðð ð Øðð €D€D€Dr/   r5   c                   óX   — e Zd ZdZdefdefdefdefdefdefdefd	efd
efdeddifg
ZdS )ÚRSAPrivateKeyz=
    Source: https://tools.ietf.org/html/rfc3447#page-45
    ÚversionÚmodulusÚpublic_exponentÚprivate_exponentÚprime1Úprime2Ú	exponent1Ú	exponent2r'   Úother_prime_infosÚoptionalTN)r)   r*   r+   r,   r5   r   r2   r-   r.   r/   r0   r:   r:   M   sy   € € € € € ðð ð
 
Ð(Ð)Ø	�GÐØ	˜GÐ$Ø	˜WÐ%Ø	�7ÐØ	�7ÐØ	�gÐØ	�gÐØ	˜Ð Ø	˜o°
¸DÐ/AÐBð€G€G€Gr/   r:   c                   ó"   — e Zd ZdZdefdefgZdS )ÚRSAPublicKeyz=
    Source: https://tools.ietf.org/html/rfc3447#page-44
    r<   r=   Nr(   r.   r/   r0   rF   rF   `   s1   € € € € € ðð ð
 
�GÐØ	˜GÐ$ð€G€G€Gr/   rF   c                   ó:   — e Zd ZdZdefdefdefdefdefdefgZdS )	ÚDSAPrivateKeya&  
    The ASN.1 structure that OpenSSL uses to store a DSA private key that is
    not part of a PKCS#8 structure. Reversed engineered from english-language
    description on linked OpenSSL documentation page.

    Original Name: None
    Source: https://www.openssl.org/docs/apps/dsa.html
    r;   ÚpÚqÚgÚ
public_keyÚprivate_keyNr(   r.   r/   r0   rH   rH   k   sN   € € € € € ðð ð 
�GÐØ	ˆgˆØ	ˆgˆØ	ˆgˆØ	�wÐØ	˜Ð ð€G€G€Gr/   rH   c                   ó.   — e Zd ZdZed„ ¦   «         Zd„ ZdS )Ú_ECPointa
  
    In both PublicKeyInfo and PrivateKeyInfo, the EC public key is a byte
    string that is encoded as a bit string. This class adds convenience
    methods for converting to and from the byte string to a pair of integers
    that are the X and Y coordinates.
    c                 óh  — t          t          j        t          j        |d¦  «        dz  ¦  «        ¦  «        }t          t          j        t          j        |d¦  «        dz  ¦  «        ¦  «        }t	          ||¦  «        }d}|t          ||¬¦  «        z  }|t          ||¬¦  «        z  } | |¦  «        S )a  
        Creates an ECPoint object from the X and Y integer coordinates of the
        point

        :param x:
            The X coordinate, as an integer

        :param y:
            The Y coordinate, as an integer

        :return:
            An ECPoint object
        é   ç       @ó   )Úwidth)ÚintÚmathÚceilÚlogÚmaxr!   )ÚclsÚxÚyÚx_bytesÚy_bytesÚ	num_bytesÚbyte_strings          r0   Úfrom_coordsz_ECPoint.from_coords‡   s¢   € õ  •d”i¥¤¨¨A¡¤°Ñ 4Ñ5Ô5Ñ6Ô6ˆÝ•d”i¥¤¨¨A¡¤°Ñ 4Ñ5Ô5Ñ6Ô6ˆå˜ Ñ)Ô)ˆ	àˆØ•| A¨YÐ7Ñ7Ô7Ñ7ˆØ•| A¨YÐ7Ñ7Ô7Ñ7ˆàˆs�;ÑÔÐr/   c                 ób  — | j         }|dd…         }|dk    rN|dd…         }t          |¦  «        dz  }t          |d|…         ¦  «        }t          ||d…         ¦  «        }||fS |t          ddg¦  «        vrt	          t          d¦  «        ¦  «        ‚t	          t          d	¦  «        ¦  «        ‚)
z±
        Returns the X and Y coordinates for this EC point, as native Python
        integers

        :return:
            A 2-element tuple containing integers (X, Y)
        r   r   rS   NrQ   ó   ó   zQ
                Invalid EC public key - first byte is incorrect
                z|
            Compressed representations of EC public keys are not supported due
            to patent US6252960
            )ÚnativeÚlenr    ÚsetÚ
ValueErrorr   )ÚselfÚdataÚ
first_byteÚ	remainingÚ	field_lenr[   r\   s          r0   Ú	to_coordsz_ECPoint.to_coords¢   s×   € ð Œ{ˆØ˜!˜A˜#”Yˆ
ð ˜Ò Ð Ø˜Q˜R˜RœˆIÝ˜I™œ¨!Ñ+ˆIÝ˜y¨¨9¨Ô5Ñ6Ô6ˆAÝ˜y¨¨¨Ô4Ñ5Ô5ˆAØ�q�6ˆMà�S '¨7Ð!3Ñ4Ô4Ð4Ð4Ý�Vðñô ñ ô ð õ �ðñ
ô 
ñ ô ð 	r/   N)r)   r*   r+   r,   Úclassmethodra   rn   r.   r/   r0   rO   rO      sH   € € € € € ðð ð ð ð  ñ „[ð ð4 ð  ð  ð  ð  r/   rO   c                   ó   — e Zd ZdS )ÚECPointN©r)   r*   r+   r.   r/   r0   rq   rq   Å   ó   € € € € € à€Dr/   rq   c                   ó   — e Zd ZdS )ÚECPointBitStringNrr   r.   r/   r0   ru   ru   Ê   rs   r/   ru   c                   ó   — e Zd ZdZddddœZdS )ÚSpecifiedECDomainVersionú:
    Source: http://www.secg.org/sec1-v2.pdf page 104
    ÚecdpVer1ÚecdpVer2ÚecdpVer3)r   rQ   é   Nr7   r.   r/   r0   rw   rw   Ï   s/   € € € € € ðð ð ØØðð €D€D€Dr/   rw   c                   ó   — e Zd ZdZdddœZdS )Ú	FieldTypezR
    Original Name: None
    Source: http://www.secg.org/sec1-v2.pdf page 101
    Úprime_fieldÚcharacteristic_two_field)z1.2.840.10045.1.1z1.2.840.10045.1.2Nr7   r.   r/   r0   r~   r~   Ú   s,   € € € € € ðð ð +Ø7ðð €D€D€Dr/   r~   c                   ó   — e Zd ZdZddddœZdS )ÚCharacteristicTwoBasiszR
    Original Name: None
    Source: http://www.secg.org/sec1-v2.pdf page 102
    Úgn_basisÚtp_basisÚpp_basis)z1.2.840.10045.1.2.1.1z1.2.840.10045.1.2.1.2z1.2.840.10045.1.2.1.3Nr7   r.   r/   r0   r‚   r‚   æ   s/   € € € € € ðð ð ",Ø!+Ø!+ðð €D€D€Dr/   r‚   c                   ó(   — e Zd ZdZdefdefdefgZdS )ÚPentanomialú:
    Source: http://www.secg.org/sec1-v2.pdf page 102
    Úk1Úk2Úk3Nr(   r.   r/   r0   r‡   r‡   ó   s6   € € € € € ðð ð
 
ˆwˆØ	ˆwˆØ	ˆwˆð€G€G€Gr/   r‡   c                   ó8   — e Zd ZdZdefdefdefgZdZe	ee
dœZdS )ÚCharacteristicTwoz`
    Original Name: Characteristic-two
    Source: http://www.secg.org/sec1-v2.pdf page 101
    ÚmÚbasisÚ
parameters)r�   r�   )rƒ   r„   r…   N)r)   r*   r+   r,   r   r‚   r   r-   Ú	_oid_pairr   r‡   Ú
_oid_specsr.   r/   r0   r�   r�   ÿ   sU   € € € € € ðð ð 
ˆgˆØ	Ð(Ð)Ø	�sÐð€Gð (€IàØØðð €J€J€Jr/   r�   c                   ó0   — e Zd ZdZdefdefgZdZee	dœZ
dS )ÚFieldIDz:
    Source: http://www.secg.org/sec1-v2.pdf page 100
    Ú
field_typer�   )r•   r�   )r   r€   N)r)   r*   r+   r,   r~   r   r-   r‘   r   r�   r’   r.   r/   r0   r”   r”     sJ   € € € € € ðð ð
 
�yÐ!Ø	�sÐð€Gð
 -€IàØ$5ðð €J€J€Jr/   r”   c                   ó.   — e Zd ZdZdefdefdeddifgZdS )ÚCurverx   ÚaÚbÚseedrD   TN)r)   r*   r+   r,   r   r   r-   r.   r/   r0   r—   r—   $  s@   € € € € € ðð ð
 
ˆkÐØ	ˆkÐØ	� *¨dÐ!3Ð4ð€G€G€Gr/   r—   c            
       óL   — e Zd ZdZdefdefdefdefdefdedd	ifd
e	dd	ifgZ
dS )ÚSpecifiedECDomainz:
    Source: http://www.secg.org/sec1-v2.pdf page 103
    r;   Úfield_idÚcurveÚbaseÚorderÚcofactorrD   TÚhashN)r)   r*   r+   r,   rw   r”   r—   rq   r   r   r-   r.   r/   r0   rœ   rœ   0  sh   € € € € € ðð ð
 
Ð,Ð-Ø	�WÐØ	�%ÐØ	�ÐØ	�'ÐØ	�W˜z¨4Ð0Ð1Ø	� :¨tÐ"4Ð5ð€G€G€Gr/   rœ   c                   ó”  — e Zd ZdZ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#“i d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“¥i dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“¥i dhdi“djdk“dldm“dndo“dpdq“drds“dtdu“dvdw“dxdy“dzd{“d|d}“d~d“d€d�“d‚dƒ“d„d…“d†d‡“dˆd‰“¥dŠd‹dŒd�dŽœ¥Z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”“i d$d•“d&d•“d(d–“d*d�“d,d�“d.d’“d0d’“d2d’“d4d�“d6d—“d8d�“d:d�“d<d’“d>d˜“d@d˜“dBd™“dDd™“¥i dFd�“dHd�“dJd—“dLd�“dNdš“dPdš“dRd›“dTd›“dVd‘“dXd‘“dZdœ“d\d’“d^d�“d`d�“dbd�“ddd�“dfdœ“¥i dhdž“djdŸ“dld “dnd¡“dpd¢“drd£“dtd£“dvd¤“dxd¤“dzd�“d|d�“d~dž“d€dž“d‚d—“d„d—“d†d¥“dˆd¥“¥dŸdŸd¦d¦dŽœ¥Zed§„ ¦   «         Zd¨S )©Ú
NamedCurvez§
    Various named curves

    Original Name: None
    Source: https://tools.ietf.org/html/rfc3279#page-23,
            https://tools.ietf.org/html/rfc5480#page-5
    z1.2.840.10045.3.0.1Ú
c2pnb163v1z1.2.840.10045.3.0.2Ú
c2pnb163v2z1.2.840.10045.3.0.3Ú
c2pnb163v3z1.2.840.10045.3.0.4Ú
c2pnb176w1z1.2.840.10045.3.0.5Ú
c2tnb191v1z1.2.840.10045.3.0.6Ú
c2tnb191v2z1.2.840.10045.3.0.7Ú
c2tnb191v3z1.2.840.10045.3.0.8Ú
c2onb191v4z1.2.840.10045.3.0.9Ú
c2onb191v5z1.2.840.10045.3.0.10Ú
c2pnb208w1z1.2.840.10045.3.0.11Ú
c2tnb239v1z1.2.840.10045.3.0.12Ú
c2tnb239v2z1.2.840.10045.3.0.13Ú
c2tnb239v3z1.2.840.10045.3.0.14Ú
c2onb239v4z1.2.840.10045.3.0.15Ú
c2onb239v5z1.2.840.10045.3.0.16Ú
c2pnb272w1z1.2.840.10045.3.0.17Ú
c2pnb304w1z1.2.840.10045.3.0.18Ú
c2tnb359v1z1.2.840.10045.3.0.19Ú
c2pnb368w1z1.2.840.10045.3.0.20Ú
c2tnb431r1z1.2.840.10045.3.1.2Ú
prime192v2z1.2.840.10045.3.1.3Ú
prime192v3z1.2.840.10045.3.1.4Ú
prime239v1z1.2.840.10045.3.1.5Ú
prime239v2z1.2.840.10045.3.1.6Ú
prime239v3z1.2.840.10045.3.1.1Ú	secp192r1z1.2.840.10045.3.1.7Ú	secp256r1z1.3.132.0.1Ú	sect163k1z1.3.132.0.2Ú	sect163r1z1.3.132.0.3Ú	sect239k1z1.3.132.0.4Ú	sect113r1z1.3.132.0.5Ú	sect113r2z1.3.132.0.6Ú	secp112r1z1.3.132.0.7Ú	secp112r2z1.3.132.0.8Ú	secp160r1z1.3.132.0.9Ú	secp160k1z1.3.132.0.10Ú	secp256k1z1.3.132.0.15Ú	sect163r2z1.3.132.0.16Ú	sect283k1z1.3.132.0.17Ú	sect283r1z1.3.132.0.22Ú	sect131r1z1.3.132.0.23Ú	sect131r2z1.3.132.0.24Ú	sect193r1z1.3.132.0.25Ú	sect193r2z1.3.132.0.26Ú	sect233k1z1.3.132.0.27Ú	sect233r1z1.3.132.0.28Ú	secp128r1z1.3.132.0.29Ú	secp128r2z1.3.132.0.30Ú	secp160r2z1.3.132.0.31Ú	secp192k1z1.3.132.0.32Ú	secp224k1z1.3.132.0.33Ú	secp224r1z1.3.132.0.34Ú	secp384r1z1.3.132.0.35Ú	secp521r1z1.3.132.0.36Ú	sect409k1z1.3.132.0.37Ú	sect409r1z1.3.132.0.38Ú	sect571k1z1.3.132.0.39Ú	sect571r1z1.3.36.3.3.2.8.1.1.1Úbrainpoolp160r1z1.3.36.3.3.2.8.1.1.2Úbrainpoolp160t1z1.3.36.3.3.2.8.1.1.3Úbrainpoolp192r1z1.3.36.3.3.2.8.1.1.4Úbrainpoolp192t1z1.3.36.3.3.2.8.1.1.5Úbrainpoolp224r1z1.3.36.3.3.2.8.1.1.6Úbrainpoolp224t1z1.3.36.3.3.2.8.1.1.7Úbrainpoolp256r1z1.3.36.3.3.2.8.1.1.8Úbrainpoolp256t1z1.3.36.3.3.2.8.1.1.9Úbrainpoolp320r1z1.3.36.3.3.2.8.1.1.10Úbrainpoolp320t1Úbrainpoolp384r1Úbrainpoolp384t1Úbrainpoolp512r1Úbrainpoolp512t1)z1.3.36.3.3.2.8.1.1.11z1.3.36.3.3.2.8.1.1.12z1.3.36.3.3.2.8.1.1.13z1.3.36.3.3.2.8.1.1.14é   é   é   é   é!   é%   é-   é5   é    é   é   é$   é   é   é   é   é0   éB   é3   é4   éH   é   é(   é@   c                 óP   — || j         |<   | j        �
|| j        |<   || j        |<   dS )a€  
        Registers a new named elliptic curve that is not included in the
        default list of named curves

        :param name:
            A unicode string of the curve name

        :param oid:
            A unicode string of the dotted format OID

        :param key_size:
            An integer of the number of bytes the private key should be
            encoded to
        N)r8   Ú_reverse_mapÚ
_key_sizes)rZ   ÚnameÚoidÚkey_sizes       r0   ÚregisterzNamedCurve.registerë  s7   € ð" ˆŒ�‰ØÔÐ'Ø%(ˆCÔ˜TÑ"Ø&ˆŒ�sÑÐÐr/   N)r)   r*   r+   r,   r8   r  ro   r  r.   r/   r0   r¤   r¤   @  sk  € € € € € ðð ðMà˜|ðMð 	˜|ðMð 	˜|ð	Mð
 	˜|ðMð 	˜|ðMð 	˜|ðMð 	˜|ðMð 	˜|ðMð 	˜|ðMð 	 ðMð 	 ðMð 	 ðMð 	 ðMð 	 ðMð  	 ð!Mð" 	 ð#Mð$ 	 ð%Mð Mð& 	 ð'Mð( 	 ð)Mð* 	 ð+Mð, 	˜|ð-Mð. 	˜|ð/Mð0 	˜|ð1Mð2 	˜|ð3Mð4 	˜|ð5Mð: 	˜{ð;Mð< 	˜{ð=Mð> 	�{ð?Mð@ 	�{ðAMðB 	�{ðCMðD 	�{ðEMðF 	�{ðGMðH 	�{ðIMðJ 	�{ðKMð Mð MðL 	�{ðMMðN 	�{ðOMðP 	˜ðQMðR 	˜ðSMðT 	˜ðUMðV 	˜ðWMðX 	˜ðYMðZ 	˜ð[Mð\ 	˜ð]Mð^ 	˜ð_Mð` 	˜ðaMðb 	˜ðcMðd 	˜ðeMðf 	˜ðgMðh 	˜ðiMðj 	˜ðkMðl 	˜ðmMð Mð Mðn 	˜ðoMðp 	˜ðqMðr 	˜ðsMðt 	˜ðuMðv 	˜ðwMðx 	˜ðyMðz 	˜ð{Mð~ 	Ð 1ðMð@ 	Ð 1ðAMðB 	Ð 1ðCMðD 	Ð 1ðEMðF 	Ð 1ðGMðH 	Ð 1ðIMðJ 	Ð 1ðKMðL 	Ð 1ðMMðN 	Ð 1ðOMðP 	 Ð!2ðQMð MðR "3Ø!2Ø!2Ø!2ðYMð Mð M€Dð^Qð 	˜rðQð 	˜rð	Qð
 	˜rðQð 	˜rðQð 	˜rðQð 	˜rðQð 	˜rðQð 	˜rðQð 	˜rðQð 	 ðQð 	 ðQð 	 ðQð 	 ðQð  	 ð!Qð" 	 ð#Qð$ 	 ð%Qð& 	 ð'Qð Qð( 	 ð)Qð* 	 ð+Qð, 	 ð-Qð. 	˜rð/Qð0 	˜rð1Qð2 	˜rð3Qð4 	˜rð5Qð6 	˜rð7Qð> 	˜rð?Qð@ 	˜rðAQðB 	�rðCQðD 	�rðEQðF 	�rðGQðH 	�rðIQðJ 	�rðKQðL 	�rðMQðN 	�rðOQð Qð QðP 	�rðQQðR 	�rðSQðT 	˜ðUQðV 	˜ðWQðX 	˜ðYQðZ 	˜ð[Qð\ 	˜ð]Qð^ 	˜ð_Qð` 	˜ðaQðb 	˜ðcQðd 	˜ðeQðf 	˜ðgQðh 	˜ðiQðj 	˜ðkQðl 	˜ðmQðn 	˜ðoQðp 	˜ðqQð Qð Qðr 	˜ðsQðt 	˜ðuQðv 	˜ðwQðx 	˜ðyQðz 	˜ð{Qð| 	˜ð}Qð~ 	˜ðQðF 	 ðGQðH 	 ðIQðJ 	 ðKQðL 	 ðMQðN 	 ðOQðP 	 ðQQðR 	 ðSQðT 	 ðUQðV 	 ðWQðX 	  ðYQð QðZ "$Ø!#Ø!#Ø!#ðaQð Qð Q€Jðf ð'ð 'ñ „[ð'ð 'ð 'r/   r¤   c                   ó>   — e Zd ZdZdefdefdefgZed„ ¦   «         Z	dS )ÚECDomainParametersrˆ   Ú	specifiedÚnamedÚimplicit_cac                 óŠ  — | j         dk    rt          t          d¦  «        ¦  «        ‚| j         dk    r<| j        d         j        }t          j        t          j        |d¦  «        dz  ¦  «        S | j        j        }|t          j
        vr*t          t          dt          |¦  «        ¦  «        ¦  «        ‚t          j
        |         S )Nr  z�
                Unable to calculate key_size from ECDomainParameters
                that are implicitly defined by the CA key
                r  r    g       @rR   z¬
                The asn1crypto.keys.NamedCurve %s does not have a registered key length,
                please call asn1crypto.keys.NamedCurve.register()
                )r  rh   r   Úchosenre   rV   rW   rX   Údottedr¤   r  Úrepr)ri   r    r	  s      r0   r
  zECDomainParameters.key_size  sÇ   € àŒ9˜Ò%Ð%Ý�Vðñô ñ ô ð ð Œ9˜Ò#Ð#Ø”K Ô(Ô/ˆEÝ”9�TœX e¨SÑ1Ô1°CÑ7Ñ8Ô8Ð8àŒkÔ ˆØ•jÔ+Ð+Ð+Ý�Vðõ �S‘	”	ñô ñ ô ð õ Ô$ SÔ)Ð)r/   N)
r)   r*   r+   r,   rœ   r¤   r   Ú_alternativesÚpropertyr
  r.   r/   r0   r  r    s[   € € € € € ðð ð
 
Ð'Ð(Ø	�*ÐØ	˜Ðð€Mð ð*ð *ñ „Xð*ð *ð *r/   r  c                   ó   — e Zd ZdZddiZdS )ÚECPrivateKeyVersionzR
    Original Name: None
    Source: http://www.secg.org/sec1-v2.pdf page 108
    r   ÚecPrivkeyVer1Nr7   r.   r/   r0   r  r  '  s&   € € € € € ðð ð 	
ˆ?ð€D€D€Dr/   r  c                   ó^   ‡ — e Zd ZdZdefdefdedddœfded	ddœfgZd
Z	ˆ fd„Z
d„ Zd„ Zˆ xZS )ÚECPrivateKeyz:
    Source: http://www.secg.org/sec1-v2.pdf page 108
    r;   rM   r�   r   T)ÚexplicitrD   rL   r   Nc                 ó  •— t          t          | ¦  «                             ||¦  «        }|dk    r†| j        €c| d         j        }t          |t          ¦  «        r@t          |¦  «        dk    r-|                      t          | d         j        ¦  «        ¦  «         nn| j        �|  	                    ¦   «          nR|dk    rLt          | d         t          ¦  «        r1| d         j        dk    r |                      | d         j        ¦  «         |S )NrM   r   r�   r  )Úsuperr  Ú__setitem__Ú	_key_sizeÚcontentsÚ
isinstancer   rf   Úset_key_sizeÚ_update_key_sizer  r  r
  )ri   ÚkeyÚvalueÚresÚpkey_contentsÚ	__class__s        €r0   r  zECPrivateKey.__setitem__B  sü   ø€ Ý•L $Ñ'Ô'×3Ò3°C¸Ñ?Ô?ˆà�-ÒÐØŒ~Ð%à $ ]Ô 3Ô <�Ý˜m­XÑ6Ô6ð I½3¸}Ñ;MÔ;MÐPQÒ;QÐ;QØ×%Ò%¥c¨$¨}Ô*=Ô*FÑ&GÔ&GÑHÔHÐHøà”Ð+Ø×%Ò%Ñ'Ô'Ð'øà�LÒ Ð ¥Z°°\Ô0BÕDVÑ%WÔ%WÐ Ø�\Ô"Ô'¨=Ò8Ð8Ø×Ò˜d <Ô0Ô9Ñ:Ô:Ð:àˆ
r/   c                 ó<   — || _         |                      ¦   «          dS )z·
        Sets the key_size to ensure the private key is encoded to the proper length

        :param key_size:
            An integer byte length to encode the private_key to
        N)r   r$  )ri   r
  s     r0   r#  zECPrivateKey.set_key_sizeU  s#   € ð "ˆŒØ×ÒÑÔÐÐÐr/   c                 ó’   — | j         �=t          | d         t          ¦  «        r$| d                              | j         ¦  «         dS dS dS )zG
        Ensure the private_key explicit encoding width is set
        NrM   )r   r"  r   Úset_encoded_width©ri   s    r0   r$  zECPrivateKey._update_key_size`  sP   € ð
 Œ>Ð%­*°T¸-Ô5HÕJ\Ñ*]Ô*]Ð%Ø�Ô×1Ò1°$´.ÑAÔAÐAÐAÐAð &Ð%Ð%Ð%r/   )r)   r*   r+   r,   r  r   r  ru   r-   r   r  r#  r$  Ú__classcell__©r)  s   @r0   r  r  2  s¯   ø€ € € € € ðð ð
 
Ð'Ð(Ø	Ð*Ð+Ø	Ð)¸ÀtÐ+LÐ+LÐMØ	Ð'°aÀTÐ)JÐ)JÐKð	€Gð €Iðð ð ð ð ð&	 ð 	 ð 	 ðBð Bð Bð Bð Bð Bð Br/   r  c                   ó(   — e Zd ZdZdefdefdefgZdS )Ú	DSAParamsz‰
    Parameters for a DSA public or private key

    Original Name: Dss-Parms
    Source: https://tools.ietf.org/html/rfc3279#page-9
    rI   rJ   rK   Nr(   r.   r/   r0   r1  r1  i  s6   € € € € € ðð ð 
ˆgˆØ	ˆgˆØ	ˆgˆð€G€G€Gr/   r1  c                   ó(   — e Zd ZdZdefdedeifgZdS )Ú	Attributezq
    Source: https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.501-198811-S!!PDF-E&type=items page 8
    ÚtypeÚvaluesÚspecN)r)   r*   r+   r,   r   r   r   r-   r.   r/   r0   r3  r3  x  s8   € € € € € ðð ð
 
Ð!Ð"Ø	�5˜6 3˜-Ð(ð€G€G€Gr/   r3  c                   ó   — e Zd ZdZeZdS )Ú
Attributesú<
    Source: https://tools.ietf.org/html/rfc5208#page-3
    N)r)   r*   r+   r,   r3  r3   r.   r/   r0   r8  r8  ƒ  s   € € € € € ðð ð €K€K€Kr/   r8  c            	       ó(   — e Zd ZdZdddddddd	d
œZdS )ÚPrivateKeyAlgorithmIdz»
    These OIDs for various public keys are reused when storing private keys
    inside of a PKCS#8 structure

    Original Name: None
    Source: https://tools.ietf.org/html/rfc3279
    ÚrsaÚ
rsassa_pssÚdsaÚecÚx25519Úx448Úed25519Úed448)ú1.2.840.113549.1.1.1ú1.2.840.113549.1.1.10ú1.2.840.10040.4.1ú1.2.840.10045.2.1ú1.3.101.110ú1.3.101.111ú1.3.101.112ú1.3.101.113Nr7   r.   r/   r0   r;  r;  ‹  s>   € € € € € ðð ð !&à!-à"à!àØØ Øðð €D€D€Dr/   r;  c                   ó8   — e Zd ZdZdefdeddifgZdZee	e
dœZdS )	ÚPrivateKeyAlgorithmzm
    Original Name: PrivateKeyAlgorithmIdentifier
    Source: https://tools.ietf.org/html/rfc5208#page-3
    Ú	algorithmr�   rD   T©rN  r�   )r>  r?  r=  N)r)   r*   r+   r,   r;  r   r-   r‘   r1  r  r   r’   r.   r/   r0   rM  rM  ¥  sU   € € € € € ðð ð 
Ð+Ð,Ø	�s˜Z¨Ð.Ð/ð€Gð
 ,€IàØ Ø%ðð €J€J€Jr/   rM  c                   ó0  ‡ — e Zd ZdZdefdefdefdedddœfgZd	„ Z	de	iZ
d
Zd
Zd
Zd
Zed„ ¦   «         Zˆ fd„Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zˆ xZS )ÚPrivateKeyInfor9  r;   Úprivate_key_algorithmrM   Ú
attributesr   T)ÚimplicitrD   c           	      óš   — | d         d         j         }t          t          t          t          t          t          t          t          dœ|         S )NrR  rN  )r<  r=  r>  r?  r@  rA  rB  rC  )re   r:   r   r  r   ©ri   rN  s     r0   Ú_private_key_specz PrivateKeyInfo._private_key_specÄ  sH   € ØÐ0Ô1°+Ô>ÔEˆ	å Ý'ÝÝõ "ÝÝ"Ý ð
ð 
ð ôð 	r/   Nc                 óê  — t          |t          ¦  «        s?t          |t          ¦  «        s*t          t	          dt          |¦  «        ¦  «        ¦  «        ‚|dk    s|dk    r>t          |t          ¦  «        st                               |¦  «        }t          ¦   «         }nõ|dk    rot          |t          ¦  «        st                               |¦  «        }t          ¦   «         }|d         |d<   |d         |d<   |d         |d<   |d         }|d	         }n€|d
k    rPt          |t          ¦  «        st                               |¦  «        }n|                     ¦   «         }|d         }|d= n*t          t	          dt          |¦  «        ¦  «        ¦  «        ‚t          ¦   «         }t!          |¦  «        |d<   ||d<    | ¦   «         }||_        t%          d¦  «        |d<   ||d<   ||d	<   |dk    r||_        |S )a'  
        Wraps a private key in a PrivateKeyInfo structure

        :param private_key:
            A byte string or Asn1Value object of the private key

        :param algorithm:
            A unicode string of "rsa", "dsa" or "ec"

        :return:
            A PrivateKeyInfo object
        zX
                private_key must be a byte string or Asn1Value, not %s
                r<  r=  r>  rI   rJ   rK   rL   rM   r?  r�   zU
                algorithm must be one of "rsa", "dsa", "ec", not %s
                rN  r   r;   rR  )r"  r   r   Ú	TypeErrorr   r
   r:   Úloadr   rH   r1  r  Úcopyrh   r  rM  r;  Ú
_algorithmr   Ú_public_key)rZ   rM   rN  ÚparamsrL   Úprivate_key_algoÚ	containers          r0   ÚwrapzPrivateKeyInfo.wrapÜ  s  € õ ˜+¥xÑ0Ô0ð 	½ÀKÕQZÑ9[Ô9[ð 	Ý�Fðõ ˜+Ñ&Ô&ñ	ô ñ ô ð ð ˜ÒÐ ¨lÒ!:Ð!:Ý˜k­=Ñ9Ô9ð >Ý+×0Ò0°Ñ=Ô=�Ý‘V”VˆFˆFØ˜%ÒÐÝ˜k­=Ñ9Ô9ð >Ý+×0Ò0°Ñ=Ô=�Ý‘[”[ˆFØ% cÔ*ˆF�3‰KØ% cÔ*ˆF�3‰KØ% cÔ*ˆF�3‰KØ$ \Ô2ˆJØ% mÔ4ˆKˆKØ˜$ÒÐÝ˜k­<Ñ8Ô8ð 1Ý*×/Ò/°Ñ<Ô<��à)×.Ò.Ñ0Ô0�Ø  Ô.ˆFØ˜LÐ)Ð)å�Vðõ �Y‘”ñ	ô ñ ô ð õ /Ñ0Ô0ÐÝ(=¸iÑ(HÔ(HÐ˜Ñ%Ø)/Ð˜Ñ&à�C‘E”Eˆ	Ø(ˆ	ÔÝ& q™zœzˆ	�)ÑØ-=ˆ	Ð)Ñ*Ø#.ˆ	�-Ñ ð ˜ÒÐØ$.ˆIÔ!àÐr/   c                 óÈ  •— t          t          | ¦  «                             ||¦  «        }| d         }|dk    s|dk    r£|d         j        dk    r’t	          |d         t
          ¦  «        rw|d         j        dk    rft	          | d         t          ¦  «        rKt	          | d         j        t          ¦  «        r+| d         j         
                    |d         j        ¦  «         |S )NrR  rM   rN  r?  r�   r  )r  rQ  r  re   r"  r  r  r   Úparsedr  r#  r
  )ri   r%  r&  r'  rN  r)  s        €r0   r  zPrivateKeyInfo.__setitem__"  sà   ø€ Ý•N DÑ)Ô)×5Ò5°c¸5ÑAÔAˆàÐ0Ô1ˆ	ð Ð*Ò*Ð*¨c°]Ò.BÐ.BØ˜+Ô&Ô-°Ò5Ð5Ý˜9 \Ô2Õ4FÑGÔGð 6à˜,Ô'Ô,°Ò=Ð=Ý˜4 Ô.Õ0CÑDÔDð >å˜4 Ô.Ô5µ|ÑDÔDð >ð �ÔÔ&×3Ò3°I¸lÔ4KÔ4TÑUÔUÐUàˆ
r/   c                 ó    — t          d¦  «        ‚)zÂ
        Unwraps the private key into an RSAPrivateKey, DSAPrivateKey or
        ECPrivateKey object

        :return:
            An RSAPrivateKey, DSAPrivateKey or ECPrivateKey object
        zxasn1crypto.keys.PrivateKeyInfo().unwrap() has been removed, please use oscrypto.asymmetric.PrivateKey().unwrap() instead©r	   r-  s    r0   r   zPrivateKeyInfo.unwrap3  s   € õ ðKñLô Lð 	Lr/   c                 óæ   — | j         dk    r4t          t          d| j                              ¦   «         ¦  «        ¦  «        ‚| d         d         }|j        }|j        dk    rd}n|j        }|j        |fS )á#  
        Returns information about the curve used for an EC key

        :raises:
            ValueError - when the key is not an EC key

        :return:
            A two-element tuple, with the first element being a unicode string
            of "implicit_ca", "specified" or "named". If the first element is
            "implicit_ca", the second is None. If "specified", the second is
            an OrderedDict that is the native version of SpecifiedECDomain. If
            "named", the second is a unicode string of the curve name.
        r?  úK
                Only EC keys have a curve, this key is %s
                rR  r�   r  N©rN  rh   r   Úupperr  r  re   ©ri   r^  r  r&  s       r0   rž   zPrivateKeyInfo.curve@  sˆ   € ð  Œ>˜TÒ!Ð!Ý�Vðð ”×$Ò$Ñ&Ô&ñ	ô ñ ô ð ð Ð-Ô.¨|Ô<ˆØ”ˆàŒ;˜-Ò'Ð'ØˆEˆEà”MˆEà”˜UÐ#Ð#r/   c                 óò   — | j         dk    r4t          t          d| j                              ¦   «         ¦  «        ¦  «        ‚t	          j        | d         d         d         j        d¦  «        dz  }|dk    rd	nd
S )zò
        Returns the name of the family of hash algorithms used to generate a
        DSA key

        :raises:
            ValueError - when the key is not a DSA key

        :return:
            A unicode string of "sha1" or "sha2"
        r>  út
                Only DSA keys are generated using a hash algorithm, this key is
                %s
                rR  r�   rJ   rQ   é   r  Úsha1Úsha2)rN  rh   r   rj  rV   rX   re   )ri   Úbyte_lens     r0   Ú	hash_algozPrivateKeyInfo.hash_algob  s†   € ð Œ>˜UÒ"Ð"Ý�Vðð ”×$Ò$Ñ&Ô&ñô ñ ô ð õ ”8˜DÐ!8Ô9¸,ÔGÈÔLÔSÐUVÑWÔWÐZ[Ñ[ˆà! Rš˜ˆvˆv¨VÐ3r/   c                 óN   — | j         €| d         d         j        | _         | j         S )ú]
        :return:
            A unicode string of "rsa", "rsassa_pss", "dsa" or "ec"
        NrR  rN  ©r\  re   r-  s    r0   rN  zPrivateKeyInfo.algorithm|  s)   € ð Œ?Ð"Ø"Ð#:Ô;¸KÔHÔOˆDŒOØŒÐr/   c                 óÄ  — | j         €Ó| j        dk    s| j        dk    r| d         j        d         j        }nH| j        dk    r| d         d         d	         j        }n#| j        d
k    r| d         j        d         j        }t	          t          j        t          j        |d¦  «        ¦  «        ¦  «        | _         | j         dz  }|dk    r| xj         d|z
  z  c_         | j         S )zU
        :return:
            The bit size of the private key, as an integer
        Nr<  r=  rM   r<   r>  rR  r�   rI   r?  rQ   rn  r   )Ú	_bit_sizerN  rc  re   rU   rV   rW   rX   ©ri   r%   r<   s      r0   Úbit_sizezPrivateKeyInfo.bit_size‡  sÛ   € ð Œ>Ð!ØŒ~ Ò&Ð&¨$¬.¸LÒ*HÐ*HØ˜]Ô+Ô2°9Ô=ÔD��Ø” 5Ò(Ð(ØÐ4Ô5°lÔCÀCÔHÔO��Ø” 4Ò'Ð'Ø˜]Ô+Ô2°=ÔAÔH�Ý ¥¤­4¬8°E¸1Ñ+=Ô+=Ñ!>Ô!>Ñ?Ô?ˆDŒNØ”n qÑ(ˆGØ˜!Š|ˆ|Ø�” ! g¡+Ñ-�”ØŒ~Ðr/   c                 óT   — t          t          j        | j        dz  ¦  «        ¦  «        S )zV
        :return:
            The byte size of the private key, as an integer
        rn  ©rU   rV   rW   ry  r-  s    r0   Ú	byte_sizezPrivateKeyInfo.byte_size›  ó#   € õ •4”9˜Tœ]¨QÑ.Ñ/Ô/Ñ0Ô0Ð0r/   c                 ó    — t          d¦  «        ‚)z¤
        :return:
            If an RSA key, an RSAPublicKey object. If a DSA key, an Integer
            object. If an EC key, an ECPointBitString object.
        z…asn1crypto.keys.PrivateKeyInfo().public_key has been removed, please use oscrypto.asymmetric.PrivateKey().public_key.unwrap() insteadre  r-  s    r0   rL   zPrivateKeyInfo.public_key¤  s   € õ ðVñWô Wð 	Wr/   c                 ó    — t          d¦  «        ‚)z\
        :return:
            A PublicKeyInfo object derived from this private key.
        z†asn1crypto.keys.PrivateKeyInfo().public_key_info has been removed, please use oscrypto.asymmetric.PrivateKey().public_key.asn1 insteadre  r-  s    r0   Úpublic_key_infozPrivateKeyInfo.public_key_info°  s   € õ ðRñSô Sð 	Sr/   c                 ó    — t          d¦  «        ‚)aY  
        Creates a fingerprint that can be compared with a public 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)
        z~asn1crypto.keys.PrivateKeyInfo().fingerprint has been removed, please use oscrypto.asymmetric.PrivateKey().fingerprint insteadre  r-  s    r0   ÚfingerprintzPrivateKeyInfo.fingerprint»  s   € õ ðNñOô Oð 	Or/   )r)   r*   r+   r,   r   rM  r   r8  r-   rW  Ú_spec_callbacksr\  rw  r]  Ú_fingerprintro   ra  r  r   r  rž   rr  rN  ry  r|  rL   r€  r‚  r.  r/  s   @r0   rQ  rQ  ¸  sÀ  ø€ € € € € ðð ð
 
�GÐØ	 Ð"5Ð6Ø	Ð+Ð,Ø	�z°¸tÐ#DÐ#DÐEð	€Gðð ð ð  	Ð(ð€Oð €JØ€IØ€KØ€LàðAð Añ „[ðAðJð ð ð ð ð"Lð Lð Lð ð$ð $ñ „Xð$ðB ð4ð 4ñ „Xð4ð2 ðð ñ „Xðð ðð ñ „Xðð& ð1ð 1ñ „Xð1ð ð	Wð 	Wñ „Xð	Wð ðSð Sñ „XðSð ðOð Oñ „XðOð Oð Oð Oð Or/   rQ  c                   ó"   — e Zd ZdZdefdefgZdS )ÚEncryptedPrivateKeyInfoz<
    Source: https://tools.ietf.org/html/rfc5208#page-4
    Úencryption_algorithmÚencrypted_dataN)r)   r*   r+   r,   r   r   r-   r.   r/   r0   r†  r†  Î  s2   € € € € € ðð ð
 
 Ð!4Ð5Ø	˜;Ð'ð€G€G€Gr/   r†  c                   ó"   — e Zd ZdZdefdefgZdS )ÚValidationParmsú=
    Source: https://tools.ietf.org/html/rfc3279#page-10
    rš   Úpgen_counterN)r)   r*   r+   r,   r   r   r-   r.   r/   r0   rŠ  rŠ  Û  s1   € € € € € ðð ð
 
�ÐØ	˜Ð!ð€G€G€Gr/   rŠ  c                   ó@   — e Zd ZdZdefdefdefdeddifdeddifgZd	S )
ÚDomainParametersr‹  rI   rK   rJ   ÚjrD   TÚvalidation_paramsN)r)   r*   r+   r,   r   rŠ  r-   r.   r/   r0   rŽ  rŽ  æ  sT   € € € € € ðð ð
 
ˆgˆØ	ˆgˆØ	ˆgˆØ	ˆg˜
 DÐ)Ð*Ø	˜o°
¸DÐ/AÐBð€G€G€Gr/   rŽ  c                   ó,   — e Zd ZdZdddddddd	d
ddœ
ZdS )ÚPublicKeyAlgorithmIdzM
    Original Name: None
    Source: https://tools.ietf.org/html/rfc3279
    r<  Ú
rsaes_oaepr=  r>  r?  Údhr@  rA  rB  rC  )
rD  z1.2.840.113549.1.1.7rE  rF  rG  z1.2.840.10046.2.1rH  rI  rJ  rK  Nr7   r.   r/   r0   r’  r’  ô  sD   € € € € € ðð ð !&à ,à!-à"à!à!àØØ Øð#ð €D€D€Dr/   r’  c                   ó<   — e Zd ZdZdefdeddifgZdZee	e
eedœZdS )	ÚPublicKeyAlgorithmzd
    Original Name: AlgorithmIdentifier
    Source: https://tools.ietf.org/html/rfc5280#page-18
    rN  r�   rD   TrO  )r>  r?  r”  r“  r=  N)r)   r*   r+   r,   r’  r   r-   r‘   r1  r  rŽ  r   r   r’   r.   r/   r0   r–  r–    s[   € € € € € ðð ð 
Ð*Ð+Ø	�s˜Z¨Ð.Ð/ð€Gð
 ,€IàØ ØØ%Ø%ðð €J€J€Jr/   r–  c                   ó  — e Zd ZdZdefdefgZd„ ZdeiZdZ	dZ
dZdZdZed„ ¦   «         Zd„ Zed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚPublicKeyInfoze
    Original Name: SubjectPublicKeyInfo
    Source: https://tools.ietf.org/html/rfc5280#page-17
    rN  rL   c                 óÆ   — | d         d         j         }t          t          t          t          t          d ft          t          d ft          d ft          d ft          d fdœ
|         S )NrN  )
r<  r“  r=  r>  r?  r”  r@  rA  rB  rC  )re   rF   r   ru   r   rV  s     r0   Ú_public_key_speczPublicKeyInfo._public_key_spec/  sh   € Ø˜Ô% kÔ2Ô9ˆ	åÝ&Ý&Ýõ $ TÐ*Ýõ & tÐ,Ý# TÐ*Ý&¨Ð-Ý$ dÐ+ð
ð 
ð ôð 	r/   Nc                 ó4  — t          |t          ¦  «        s?t          |t          ¦  «        s*t          t	          dt          |¦  «        ¦  «        ¦  «        ‚|dk    r0|dk    r*t          t	          dt          |¦  «        ¦  «        ¦  «        ‚t          ¦   «         }t          |¦  «        |d<   t          ¦   «         |d<    | ¦   «         }||d<   t          |t          ¦  «        r&|                     ¦   «                              ¦   «         }t          |¦  «        |d<   |S )a  
        Wraps a public key in a PublicKeyInfo structure

        :param public_key:
            A byte string or Asn1Value object of the public key

        :param algorithm:
            A unicode string of "rsa"

        :return:
            A PublicKeyInfo object
        zW
                public_key must be a byte string or Asn1Value, not %s
                r<  r=  z>
                algorithm must "rsa", not %s
                rN  r�   rL   )r"  r   r   rY  r   r
   rh   r  r–  r’  r   ÚuntagÚdumpr   )rZ   rL   rN  Úalgor`  s        r0   ra  zPublicKeyInfo.wrapL  s%  € õ ˜*¥hÑ/Ô/ð 	½
À:ÍyÑ8YÔ8Yð 	Ý�Fðõ ˜*Ñ%Ô%ñ	ô ñ ô ð ð ˜ÒÐ )¨|Ò";Ð";Ý�Vðõ �Y‘”ñ	ô ñ ô ð õ "Ñ#Ô#ˆÝ0°Ñ;Ô;ˆˆ[ÑÝ!™VœVˆˆ\Ñà�C‘E”Eˆ	Ø!%ˆ	�+ÑÝ�j¥)Ñ,Ô,ð 	3Ø#×)Ò)Ñ+Ô+×0Ò0Ñ2Ô2ˆJÝ"8¸Ñ"DÔ"Dˆ	�,ÑàÐr/   c                 ó    — t          d¦  «        ‚)zÖ
        Unwraps an RSA public key into an RSAPublicKey object. Does not support
        DSA or EC public keys since they do not have an unwrapped form.

        :return:
            An RSAPublicKey object
        zvasn1crypto.keys.PublicKeyInfo().unwrap() has been removed, please use oscrypto.asymmetric.PublicKey().unwrap() insteadre  r-  s    r0   r   zPublicKeyInfo.unwrapw  s   € õ ðJñKô Kð 	Kr/   c                 óæ   — | j         dk    r4t          t          d| j                              ¦   «         ¦  «        ¦  «        ‚| d         d         }|j        }|j        dk    rd}n|j        }|j        |fS )rg  r?  rh  rN  r�   r  Nri  rk  s       r0   rž   zPublicKeyInfo.curve„  s‡   € ð  Œ>˜TÒ!Ð!Ý�Vðð ”×$Ò$Ñ&Ô&ñ	ô ñ ô ð ð �kÔ" <Ô0ˆØ”ˆàŒ;˜-Ò'Ð'ØˆEˆEà”MˆEà”˜UÐ#Ð#r/   c                 ó  — | j         dk    r4t          t          d| j                              ¦   «         ¦  «        ¦  «        ‚| d         d         }|j        €dS t          j        |d         j        d¦  «        dz  }|d	k    rd
ndS )a#  
        Returns the name of the family of hash algorithms used to generate a
        DSA key

        :raises:
            ValueError - when the key is not a DSA key

        :return:
            A unicode string of "sha1" or "sha2" or None if no parameters are
            present
        r>  rm  rN  r�   NrJ   rQ   rn  r  ro  rp  )rN  rh   r   rj  re   rV   rX   )ri   r�   rq  s      r0   rr  zPublicKeyInfo.hash_algo¦  s•   € ð Œ>˜UÒ"Ð"Ý�Vðð ”×$Ò$Ñ&Ô&ñô ñ ô ð ð ˜+Ô& |Ô4ˆ
ØÔÐ$Ø�4å”8˜J sœOÔ2°AÑ6Ô6¸Ñ:ˆà! Rš˜ˆvˆv¨VÐ3r/   c                 óN   — | j         €| d         d         j        | _         | j         S )rt  NrN  ru  r-  s    r0   rN  zPublicKeyInfo.algorithmÅ  s(   € ð Œ?Ð"Ø" ;Ô/°Ô<ÔCˆDŒOØŒÐr/   c                 óþ  — | j         €ð| j        dk    r6t          t          | d         j        ¦  «        dz
  dz  dz  ¦  «        | _         n¯| j        dk    s| j        dk    r| d         j        d	         j        }n$| j        d
k    r| d         d         d         j        }t          t          j        t          j        |d¦  «        ¦  «        ¦  «        | _         | j         dz  }|dk    r| xj         d|z
  z  c_         | j         S )zT
        :return:
            The bit size of the public key, as an integer
        Nr?  rL   r   rQ   rn  r<  r=  r<   r>  rN  r�   rI   r   )	rw  rN  rU   rf   re   rc  rV   rW   rX   rx  s      r0   ry  zPublicKeyInfo.bit_sizeÐ  sô   € ð Œ>Ð!ØŒ~ Ò%Ð%Ý!$¥s¨4°Ô+=Ô+DÑ'EÔ'EÈÑ'IÈQÑ&NÐRSÑ%SÑ!TÔ!T�”�à”> UÒ*Ð*¨d¬nÀÒ.LÐ.LØ  Ô.Ô5°iÔ@ÔG�E�EØ”^ uÒ,Ð,Ø  Ô-¨lÔ;¸CÔ@ÔG�EÝ!$¥T¤Y­t¬x¸¸qÑ/AÔ/AÑ%BÔ%BÑ!CÔ!C�”Øœ.¨1Ñ,�Ø˜a’<�<Ø�N”N a¨'¡kÑ1�N”NàŒ~Ðr/   c                 óT   — t          t          j        | j        dz  ¦  «        ¦  «        S )zU
        :return:
            The byte size of the public key, as an integer
        rn  r{  r-  s    r0   r|  zPublicKeyInfo.byte_sizeæ  r}  r/   c                 óš   — | j         €>t          j        t          | d         ¦  «        ¦  «                             ¦   «         | _         | j         S )ze
        :return:
            The SHA1 hash of the DER-encoded bytes of this public key info
        NrL   )Ú_sha1Úhashlibro  r   Údigestr-  s    r0   ro  zPublicKeyInfo.sha1ï  s>   € ð Œ:ÐÝ œ¥h¨t°LÔ/AÑ&BÔ&BÑCÔC×JÒJÑLÔLˆDŒJØŒzÐr/   c                 óš   — | j         €>t          j        t          | d         ¦  «        ¦  «                             ¦   «         | _         | j         S )zh
        :return:
            The SHA-256 hash of the DER-encoded bytes of this public key info
        NrL   )Ú_sha256r§  Úsha256r   r¨  r-  s    r0   r«  zPublicKeyInfo.sha256ú  s>   € ð Œ<ÐÝ"œ>­(°4¸Ô3EÑ*FÔ*FÑGÔG×NÒNÑPÔPˆDŒLØŒ|Ðr/   c                 ó    — t          d¦  «        ‚)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)
        z|asn1crypto.keys.PublicKeyInfo().fingerprint has been removed, please use oscrypto.asymmetric.PublicKey().fingerprint insteadre  r-  s    r0   r‚  zPublicKeyInfo.fingerprint  s   € õ ðMñNô Nð 	Nr/   )r)   r*   r+   r,   r–  r   r-   rš  rƒ  r\  rw  r„  r¦  rª  ro   ra  r   r  rž   rr  rN  ry  r|  ro  r«  r‚  r.   r/   r0   r˜  r˜  $  s|  € € € € € ðð ð 
Ð(Ð)Ø	Ð-Ð.ð€Gð
ð ð ð( 	Ð&ð€Oð €JØ€IØ€LØ€EØ€Gàð(ð (ñ „[ð(ðTKð Kð Kð ð$ð $ñ „Xð$ðB ð4ð 4ñ „Xð4ð< ðð ñ „Xðð ðð ñ „Xðð* ð1ð 1ñ „Xð1ð ðð ñ „Xðð ðð ñ „Xðð ðNð Nñ „XðNð Nð Nr/   r˜  )Hr,   Ú
__future__r   r   r   r   r§  rV   Ú_errorsr   r	   Ú_typesr
   r   Úalgosr   r   r   r   r   Úcorer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úutilr    r!   r#   r2   r5   r:   rF   rH   rO   rq   ru   rw   r~   r‚   r‡   r�   r”   r—   rœ   r¤   r  r  r  r1  r3  r8  r;  rM  rQ  r†  rŠ  rŽ  r’  r–  r˜  r.   r/   r0   ú<module>r³     s(  ððð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà €€€Ø €€€à )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" /Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð	ð 	ð 	ð 	ð 	�Xñ 	ô 	ð 	ð!ð !ð !ð !ð !�jñ !ô !ð !ð	ð 	ð 	ð 	ð 	˜7ñ 	ô 	ð 	ðð ð ð ð �Hñ ô ð ð&ð ð ð ð �8ñ ô ð ðð ð ð ð �Hñ ô ð ð(Cð Cð Cð Cð Cñ Cô Cð CðL	ð 	ð 	ð 	ð 	ˆk˜8ñ 	ô 	ð 	ð
	ð 	ð 	ð 	ð 	�~ xñ 	ô 	ð 	ð
ð ð ð ð ˜wñ ô ð ð	ð 	ð 	ð 	ð 	Ð ñ 	ô 	ð 	ð
ð 
ð 
ð 
ð 
Ð-ñ 
ô 
ð 
ð	ð 	ð 	ð 	ð 	�(ñ 	ô 	ð 	ðð ð ð ð ˜ñ ô ð ð(ð ð ð ð ˆhñ ô ð ð"	ð 	ð 	ð 	ð 	ˆHñ 	ô 	ð 	ðð ð ð ð ˜ñ ô ð ð 'ð 'ð 'ð 'ð 'Ð!ñ 'ô 'ð 'ðD"*ð "*ð "*ð "*ð "*˜ñ "*ô "*ð "*ðJð ð ð ð ˜'ñ ô ð ð4Bð 4Bð 4Bð 4Bð 4B�8ñ 4Bô 4Bð 4Bðnð ð ð ð �ñ ô ð ðð ð ð ð �ñ ô ð ðð ð ð ð �ñ ô ð ðð ð ð ð Ð,ñ ô ð ð4ð ð ð ð Ð.°ñ ô ð ð&SOð SOð SOð SOð SO�Xñ SOô SOð SOðlð ð ð ð ˜hñ ô ð ðð ð ð ð �hñ ô ð ðð ð ð ð �xñ ô ð ðð ð ð ð Ð+ñ ô ð ð6ð ð ð ð Ð-¨xñ ô ð ð*qNð qNð qNð qNð qN�Hñ qNô qNð qNð qNð qNr/   