Ë
    íU.jÜ|  ã                   óì   — g d ¢Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZ dd	lmZmZmZ  G d
„ de«      Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"dd„Z#e#Z$dZ%y))ÚgenerateÚ	constructÚ
import_keyÚRsaKeyÚoidé    N)ÚRandom)ÚtobytesÚbordÚtostr)ÚDerSequenceÚDerNull)Úbytes_to_long)ÚInteger)Útest_probable_primeÚgenerate_probable_primeÚ	COMPOSITE)Ú_expand_subject_public_key_infoÚ_create_subject_public_key_infoÚ _extract_subject_public_key_infoc                   óL  — e Zd Z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ed„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 d&d„Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'y)'r   a×  Class defining an RSA key, private or public.
    Do not instantiate directly.
    Use :func:`generate`, :func:`construct` or :func:`import_key` instead.

    :ivar n: RSA modulus
    :vartype n: integer

    :ivar e: RSA public exponent
    :vartype e: integer

    :ivar d: RSA private exponent
    :vartype d: integer

    :ivar p: First factor of the RSA modulus
    :vartype p: integer

    :ivar q: Second factor of the RSA modulus
    :vartype q: integer

    :ivar invp: Chinese remainder component (:math:`p^{-1} \text{mod } q`)
    :vartype invp: integer

    :ivar invq: Chinese remainder component (:math:`q^{-1} \text{mod } p`)
    :vartype invq: integer

    :ivar u: Same as ``invp``
    :vartype u: integer
    c                 óx  — t        |j                  «       «      }t        d«      }|t        d«      z  }|||fvrt        d«      ‚|j                  «       D ]  \  }}t	        | d|z   |«       Œ ||k(  rJ| j
                  | j                  dz
  z  | _        | j
                  | j                  dz
  z  | _	        d| _
        yy)a.  Build an RSA key.

        :Keywords:
          n : integer
            The modulus.
          e : integer
            The public exponent.
          d : integer
            The private exponent. Only required for private keys.
          p : integer
            The first factor of the modulus. Only required for private keys.
          q : integer
            The second factor of the modulus. Only required for private keys.
          u : integer
            The CRT coefficient (inverse of p modulo q). Only required for
            private keys.
        ©ÚnÚe)ÚpÚqÚdÚuzSome RSA components are missingÚ_é   N)ÚsetÚkeysÚ
ValueErrorÚitemsÚsetattrÚ_dÚ_pÚ_dpÚ_qÚ_dqÚ_invq)ÚselfÚkwargsÚ	input_setÚ
public_setÚprivate_setÚ	componentÚvalues          úVC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\Crypto/PublicKey/RSA.pyÚ__init__zRsaKey.__init__R   s¯   € ô& ˜Ÿ™›Ó&ˆ	Ü˜“_ˆ
Ø ¤3Ð';Ó#<Ñ<ˆØ˜[¨*Ð5Ñ5ÜÐ>Ó?Ð?Ø &§¡¦ÑˆI�uÜ�D˜# 	™/¨5Õ1ð !/à˜Ò#Ø—w‘w $§'¡'¨A¡+Ñ.ˆDŒHØ—w‘w $§'¡'¨A¡+Ñ.ˆDŒHØˆD�Jð $ó    c                 ó,   — t        | j                  «      S ©N)ÚintÚ_n©r,   s    r3   r   zRsaKey.nq   ó   € ä�4—7‘7‹|Ðr5   c                 ó,   — t        | j                  «      S r7   )r8   Ú_er:   s    r3   r   zRsaKey.eu   r;   r5   c                 ób   — | j                  «       st        d«      ‚t        | j                  «      S )Nz-No private exponent available for public keys)Úhas_privateÚAttributeErrorr8   r&   r:   s    r3   r   zRsaKey.dy   s(   € à×ÑÔ!Ü Ð!PÓQÐQÜ�4—7‘7‹|Ðr5   c                 ób   — | j                  «       st        d«      ‚t        | j                  «      S )Nz.No CRT component 'p' available for public keys)r?   r@   r8   r'   r:   s    r3   r   zRsaKey.p   ó(   € à×ÑÔ!Ü Ð!QÓRÐRÜ�4—7‘7‹|Ðr5   c                 ób   — | j                  «       st        d«      ‚t        | j                  «      S )Nz.No CRT component 'q' available for public keys)r?   r@   r8   r)   r:   s    r3   r   zRsaKey.q…   rB   r5   c                 ób   — | j                  «       st        d«      ‚t        | j                  «      S )Nz/No CRT component 'dp' available for public keys)r?   r@   r8   r(   r:   s    r3   Údpz	RsaKey.dp‹   ó(   € à×ÑÔ!Ü Ð!RÓSÐSÜ�4—8‘8‹}Ðr5   c                 ób   — | j                  «       st        d«      ‚t        | j                  «      S )Nz/No CRT component 'dq' available for public keys)r?   r@   r8   r*   r:   s    r3   Údqz	RsaKey.dq‘   rF   r5   c                 óÎ   — | j                  «       st        d«      ‚| j                  €*| j                  j	                  | j
                  «      | _        t        | j                  «      S )Nz1No CRT component 'invq' available for public keys)r?   r@   r+   r)   Úinverser'   r8   r:   s    r3   ÚinvqzRsaKey.invq—   sJ   € à×ÑÔ!Ü Ð!TÓUÐUØ�:‰:ÐØŸ™Ÿ™¨¯©Ó1ˆDŒJÜ�4—:‘:‹Ðr5   c                 ó   — | j                   S r7   )r   r:   s    r3   ÚinvpzRsaKey.invpŸ   s   € à�v‰vˆr5   c                 ób   — | j                  «       st        d«      ‚t        | j                  «      S )Nz.No CRT component 'u' available for public keys)r?   r@   r8   Ú_ur:   s    r3   r   zRsaKey.u£   rB   r5   c                 ó6   — | j                   j                  «       S )zSize of the RSA modulus in bits©r9   Úsize_in_bitsr:   s    r3   rR   zRsaKey.size_in_bits©   s   € à�w‰w×#Ñ#Ó%Ð%r5   c                 óH   — | j                   j                  «       dz
  dz  dz   S )z9The minimal amount of bytes that can hold the RSA modulusr    é   rQ   r:   s    r3   Úsize_in_byteszRsaKey.size_in_bytes­   s$   € à—‘×$Ñ$Ó&¨Ñ*¨qÑ0°1Ñ4Ð4r5   c                 óÀ   — d|cxk  r| j                   k  st        d«      ‚ t        d«      ‚t        t        t	        |«      | j
                  | j                   «      «      S )Nr   zPlaintext too large)r9   r#   r8   Úpowr   r=   )r,   Ú	plaintexts     r3   Ú_encryptzRsaKey._encrypt±   sQ   € Ø�IÔ' §¡Ò'ÜÐ2Ó3Ð3ð (ÜÐ2Ó3Ð3Ü”3”w˜yÓ)¨4¯7©7°D·G±GÓ<Ó=Ð=r5   c                 ó¤  — d|cxk  r| j                   k  st        d«      ‚ t        d«      ‚| j                  «       st        d«      ‚t	        j
                  d| j                   ¬«      }t	        |«      t        || j                  | j                   «      z  | j                   z  }t        || j                  | j                  «      }t        || j                  | j                  «      }||z
  | j                  z  | j                  z  }|| j                  z  |z   }t	        j                  |j                  | j                   «      || j                   «      }|S )Nr   zCiphertext too largezThis is not a private keyr    )Úmin_inclusiveÚmax_exclusive)r9   r#   r?   Ú	TypeErrorr   Úrandom_rangerW   r=   r(   r'   r*   r)   rO   Ú_mult_modulo_bytesrJ   )	r,   Ú
ciphertextÚrÚcpÚm1Úm2ÚhÚmpÚresults	            r3   Ú_decrypt_to_byteszRsaKey._decrypt_to_bytes¶   s  € Ø�JÔ( §¡Ò(ÜÐ3Ó4Ð4ð )ÜÐ3Ó4Ð4Ø×ÑÔ!ÜÐ7Ó8Ð8ô
 × Ñ ¨qÀÇÁÔHˆä�ZÓ ¤3 q¨$¯'©'°4·7±7Ó#;Ñ;¸d¿g¹gÑEˆä��T—X‘X˜tŸw™wÓ'ˆÜ��T—X‘X˜tŸw™wÓ'ˆØ�2‰g˜Ÿ™Ñ  D§G¡GÑ+ˆØ�—‘‰[˜2Ñˆô ×+Ñ+Ø—I‘I˜dŸg™gÓ&ØØ—G‘Góˆð ˆr5   c                 ó6   — t        | j                  |«      «      S )zLegacy private method)r   rh   ©r,   r`   s     r3   Ú_decryptzRsaKey._decryptÏ   s   € ô ˜T×3Ñ3°JÓ?Ó@Ð@r5   c                 ó   — t        | d«      S )z"Whether this is an RSA private keyr&   )Úhasattrr:   s    r3   r?   zRsaKey.has_privateÔ   s   € ô �t˜TÓ"Ð"r5   c                  ó   — y©NT© r:   s    r3   Úcan_encryptzRsaKey.can_encryptÙ   ó   € Ør5   c                  ó   — yro   rp   r:   s    r3   Úcan_signzRsaKey.can_signÜ   rr   r5   c                 óD   — t        | j                  | j                  ¬«      S )z^A matching RSA public key.

        Returns:
            a new :class:`RsaKey` object
        r   )r   r9   r=   r:   s    r3   Ú
public_keyzRsaKey.public_keyß   s   € ô ˜Ÿ™ 4§7¡7Ô+Ð+r5   c                 ó   — | j                  «       |j                  «       k7  ry| j                  |j                  k7  s| j                  |j                  k7  ry| j                  «       sy| j                  |j                  k(  S )NFT)r?   r   r   r   ©r,   Úothers     r3   Ú__eq__zRsaKey.__eq__ç   sc   € Ø×ÑÓ ×!2Ñ!2Ó!4Ò4ØØ�6‰6�U—W‘WÒ §¡¨%¯'©'Ò 1ØØ×ÑÔ!ØØ—‘˜%Ÿ'™'Ñ!Ð"r5   c                 ó   — | |k(   S r7   rp   rx   s     r3   Ú__ne__zRsaKey.__ne__ð   s   € Ø˜E‘MÐ"Ð"r5   c                 ó   — ddl m} |‚)Nr   )ÚPicklingError)Úpickler~   )r,   r~   s     r3   Ú__getstate__zRsaKey.__getstate__ó   s   € å(ØÐr5   c                 ó.  — | j                  «       rVdt        | j                  «      t        | j                  «      t        | j                  «      t        | j
                  «      fz  }nd}dt        | j                  «      t        | j                  «      |fz  S )Nz, d=%d, p=%d, q=%d, u=%dÚ zRsaKey(n=%d, e=%d%s))r?   r8   r&   r'   r)   rO   r9   r=   )r,   Úextras     r3   Ú__repr__zRsaKey.__repr__ø   sq   € Ø×ÑÔØ.´#°d·g±g³,ÄÀDÇGÁGÃÜ25°d·g±g³,ÄÀDÇGÁGÃð2Nñ N‰Eð ˆEØ%¬¨T¯W©W«´s¸4¿7¹7³|ÀUÐ(KÑKÐKr5   c                 óL   — | j                  «       rd}nd}d|t        | «      fz  S )NÚPrivateÚPublicz%s RSA key at 0x%X)r?   Úid)r,   Úkey_types     r3   Ú__str__zRsaKey.__str__   s,   € Ø×ÑÔØ ‰HàˆHØ# x´°D³Ð&:Ñ:Ð:r5   Nc                 ód  — |�t        |«      }|€t        j                  }|dk(  rÂ| j                  | j                  fD �cg c]  }|j                  «       ‘Œ c}\  }}	t        |d   «      dz  rd|z   }t        |	d   «      dz  rd|	z   }	d||	g}
dj                  |
D �cg c]$  }t        j                  dt        |«      «      |z   ‘Œ& c}«      }d	t        j                  |«      dd
 z   S | j                  «       �r7t        d| j                  | j                   | j"                  | j$                  | j&                  | j"                  | j$                  dz
  z  | j"                  | j&                  dz
  z  t)        | j&                  «      j+                  | j$                  «      g	«      j-                  «       }|dk(  rd}|dk(  r±|r¯t/        d«      ‚ddlm} |dk(  r&|€$d}|j5                  |t6        dt9        «       ¬«      }nsd}|s|rt/        d«      ‚d}|j5                  |t6        |||t9        «       ¬«      }d}n:d}t;        t6        t        | j                  | j                   g«      t9        «       «      }|dk(  r|S |dk(  r%ddlm} |j-                  ||||«      }t        |«      S t/        d|z  «      ‚c c}w c c}w )aØ  Export this RSA key.

        Keyword Args:
          format (string):
            The desired output format:

            - ``'PEM'``. (default) Text output, according to `RFC1421`_/`RFC1423`_.
            - ``'DER'``. Binary output.
            - ``'OpenSSH'``. Text output, according to the OpenSSH specification.
              Only suitable for public keys (not private keys).

            Note that PEM contains a DER structure.

          passphrase (bytes or string):
            (*Private keys only*) The passphrase to protect the
            private key.

          pkcs (integer):
            (*Private keys only*) The standard to use for
            serializing the key: PKCS#1 or PKCS#8.

            With ``pkcs=1`` (*default*), the private key is encoded with a
            simple `PKCS#1`_ structure (``RSAPrivateKey``). The key cannot be
            securely encrypted.

            With ``pkcs=8``, the private key is encoded with a `PKCS#8`_ structure
            (``PrivateKeyInfo``). PKCS#8 offers the best ways to securely
            encrypt the key.

            .. note::
                This parameter is ignored for a public key.
                For DER and PEM, the output is always an
                ASN.1 DER ``SubjectPublicKeyInfo`` structure.

          protection (string):
            (*For private keys only*)
            The encryption scheme to use for protecting the private key
            using the passphrase.

            You can only specify a value if ``pkcs=8``.
            For all possible protection schemes,
            refer to :ref:`the encryption parameters of PKCS#8<enc_params>`.
            The recommended value is
            ``'PBKDF2WithHMAC-SHA512AndAES256-CBC'``.

            If ``None`` (default), the behavior depends on :attr:`format`:

            - if ``format='PEM'``, the obsolete PEM encryption scheme is used.
              It is based on MD5 for key derivation, and 3DES for encryption.

            - if ``format='DER'``, the ``'PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC'``
              scheme is used.

          prot_params (dict):
            (*For private keys only*)

            The parameters to use to derive the encryption key
            from the passphrase. ``'protection'`` must be also specified.
            For all possible values,
            refer to :ref:`the encryption parameters of PKCS#8<enc_params>`.
            The recommendation is to use ``{'iteration_count':21000}`` for PBKDF2,
            and ``{'iteration_count':131072}`` for scrypt.

          randfunc (callable):
            A function that provides random bytes. Only used for PEM encoding.
            The default is :func:`Crypto.Random.get_random_bytes`.

        Returns:
          bytes: the encoded key

        Raises:
          ValueError:when the format is unknown or when you try to encrypt a private
            key with *DER* format and PKCS#1.

        .. warning::
            If you don't provide a pass phrase, the private key will be
            exported in the clear!

        .. _RFC1421:    http://www.ietf.org/rfc/rfc1421.txt
        .. _RFC1423:    http://www.ietf.org/rfc/rfc1423.txt
        .. _`PKCS#1`:   http://www.ietf.org/rfc/rfc3447.txt
        .. _`PKCS#8`:   http://www.ietf.org/rfc/rfc5208.txt
        NÚOpenSSHr   é€   ó    s   ssh-rsar5   ú>Ió   ssh-rsa éÿÿÿÿr    zRSA PRIVATE KEYÚDERz&PKCS#1 private key cannot be encrypted©ÚPKCS8ÚPEMzPRIVATE KEY)Ú
key_paramszENCRYPTED PRIVATE KEYz"'protection' parameter must be setz"PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC)Úprot_paramsr–   z
PUBLIC KEY©r•   z3Unknown key format '%s'. Cannot export the RSA key.)r	   r   Úget_random_bytesr=   r9   Úto_bytesr
   ÚjoinÚstructÚpackÚlenÚbinasciiÚ
b2a_base64r?   r   r   r   r   r   r   r   rJ   Úencoder#   Ú	Crypto.IOr”   Úwrapr   r   r   r•   )r,   ÚformatÚ
passphraseÚpkcsÚ
protectionÚrandfuncr—   ÚxÚe_bytesÚn_bytesÚkeypartsÚkpÚ	keystringÚ
binary_keyr‰   r”   r•   Úpem_strs                     r3   Ú
export_keyzRsaKey.export_key  s¦  € ðl Ð!Ü  Ó,ˆJàÐÜ×.Ñ.ˆHà�YÒØ7;·w±wÀÇÁÑ6HÓIÑ6H° §
¡
¥Ð6HÑIÑˆG�WÜ�G˜A‘JÓ $Ò&Ø! GÑ+�Ü�G˜A‘JÓ $Ò&Ø! GÑ+�Ø" G¨WÐ5ˆHØŸ™ÉHÓ!UÉHÀb¤&§+¡+¨d´C¸³GÓ"<¸rÓ"AÈHÑ!UÓVˆIØ¤×!4Ñ!4°YÓ!?ÀÀÐ!DÑDÐDð ×ÑÕÜ$ aØ&*§f¡fØ&*§f¡fØ&*§f¡fØ&*§f¡fØ&*§f¡fØ&*§f¡f°·±°q±Ñ&9Ø&*§f¡f°·±°q±Ñ&9Ü&-¨d¯f©f£o×&=Ñ&=¸d¿f¹fÓ&Eð	&(ó 	)÷ *0©«ð ð �qŠyØ,�Ø˜U’?¡zÜ$Ð%MÓNÐNå+à˜U’? zÐ'9Ø,�HØ!&§¡¨J¼¸TÜ7>³yð ",ó "B‘Jð  7�HÙ%Ù&Ü",Ð-QÓ"RÐRØ%I˜
Ø!&§¡¨J¼Ø,6¸
Ø8CÜ7>³yð ",ó "B�Jð "&‘Jà#ˆHÜ8¼Ü9DÀdÇfÁfØFJÇfÁfðFNó :Oä9@»ó;ˆJð �UŠ?ØÐØ�UŠ?Ý%à—j‘j ¨X°zÀ8ÓLˆGÜ˜7Ó#Ð#äÐNÐQWÑWÓXÐXùòy  Jùò "Vs   ¿J(Â)J-c                 ó&   —  | j                   |i |¤ŽS ©ú:meta private:)r±   )r,   Úargsr-   s      r3   Ú	exportKeyzRsaKey.exportKey£  s   € àˆt�‰ Ð/¨Ñ/Ð/r5   c                 ó"   — | j                  «       S r³   )rv   r:   s    r3   Ú	publickeyzRsaKey.publickey§  s   € à�‰Ó Ð r5   c                 ó   — t        d«      ‚©r´   z,Use module Crypto.Signature.pkcs1_15 instead©ÚNotImplementedError)r,   ÚMÚKs      r3   ÚsignzRsaKey.sign¬  ó   € ä!Ð"PÓQÐQr5   c                 ó   — t        d«      ‚rº   r»   )r,   r½   Ú	signatures      r3   ÚverifyzRsaKey.verify°  rÀ   r5   c                 ó   — t        d«      ‚©r´   z+Use module Crypto.Cipher.PKCS1_OAEP insteadr»   )r,   rX   r¾   s      r3   ÚencryptzRsaKey.encrypt´  ó   € ä!Ð"OÓPÐPr5   c                 ó   — t        d«      ‚rÅ   r»   rj   s     r3   ÚdecryptzRsaKey.decrypt¸  rÇ   r5   c                 ó   — t         ‚r³   r»   ©r,   r½   ÚBs      r3   ÚblindzRsaKey.blind¼  ó   € ä!Ð!r5   c                 ó   — t         ‚r³   r»   rË   s      r3   ÚunblindzRsaKey.unblindÀ  rÎ   r5   c                 ó   — t         ‚r³   r»   r:   s    r3   ÚsizezRsaKey.sizeÄ  rÎ   r5   )r•   Nr    NNN)(Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   Úpropertyr   r   r   r   r   rE   rH   rK   rM   r   rR   rU   rY   rh   rk   r?   rq   rt   rv   rz   r|   r€   r„   rŠ   r±   r¶   r¸   r¿   rÃ   rÆ   rÉ   rÍ   rÐ   rÒ   rp   r5   r3   r   r   4   s]  „ ñò:ð> ñó ðð ñó ðð ñó ðð
 ñó ðð
 ñó ðð
 ñó ðð
 ñó ðð
 ñó ðð ñó ðð ñó ðò
&ò5ò>ò
ò2Aò
#ò
òò,ò#ò#òò
Lò;ð >?Ø?CóYYòx0ò!ò
RòRòQòQò"ò"ó"r5   r   c                 ó  ‡‡‡‡‡— | dk  rt        d«      ‚‰dz  dk(  s‰dk  rt        d«      ‚|€t        j                  }t        d«      x}}t        ‰«      Š|j	                  «       | k7  rê|d| dz  z  k  rß| dz  }| |z
  }t        d«      d|z  dz
  z  j                  «       xŠŠ||k7  r"t        d«      d|z  dz
  z  j                  «       Šˆˆfd„}t        |||¬	«      Št        d«      | dz  d
z
  z  Šˆˆˆˆfd„}t        |||¬	«      }	‰|	z  }‰dz
  j                  |	dz
  «      }
‰j                  |
«      }|j	                  «       | k7  r|d| dz  z  k  rŒß‰	kD  r|	‰cŠ}	‰j                  |	«      }t        |‰|‰|	|¬«      S )aB  Create a new RSA key pair.

    The algorithm closely follows NIST `FIPS 186-4`_ in its
    sections B.3.1 and B.3.3. The modulus is the product of
    two non-strong probable primes.
    Each prime passes a suitable number of Miller-Rabin tests
    with random bases and a single Lucas test.

    Args:
      bits (integer):
        Key length, or size (in bits) of the RSA modulus.
        It must be at least 1024, but **2048 is recommended.**
        The FIPS standard only defines 1024, 2048 and 3072.
    Keyword Args:
      randfunc (callable):
        Function that returns random bytes.
        The default is :func:`Crypto.Random.get_random_bytes`.
      e (integer):
        Public RSA exponent. It must be an odd positive integer.
        It is typically a small number with very few ones in its
        binary representation.
        The FIPS standard requires the public exponent to be
        at least 65537 (the default).

    Returns: an RSA key object (:class:`RsaKey`, with private key).

    .. _FIPS 186-4: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
    i   z"RSA modulus length must be >= 1024é   r   é   zBRSA public exponent must be a positive, odd integer larger than 2.r    c                 ó@   •— | ‰kD  xr | dz
  j                  ‰«      dk(  S ©Nr    )Úgcd)Ú	candidater   Úmin_ps    €€r3   Úfilter_pzgenerate.<locals>.filter_pý  s'   ø€ Ø˜uÑ$ÒD¨)°a©-×)<Ñ)<¸QÓ)?À1Ñ)DÐDr5   )Ú
exact_bitsr¨   Úprime_filteréd   c                 óf   •— | ‰kD  xr* | dz
  j                  ‰«      dk(  xr t        | ‰z
  «      ‰kD  S rÜ   )rÝ   Úabs)rÞ   r   Úmin_distanceÚmin_qr   s    €€€€r3   Úfilter_qzgenerate.<locals>.filter_q  sB   ø€ Ø Ñ%ò 6Ø ‘]×'Ñ'¨Ó*¨aÑ/ò6ä˜	 A™Ó&¨Ñ5ð7r5   ©r   r   r   r   r   r   )
r#   r   r™   r   rR   Úsqrtr   ÚlcmrJ   r   )Úbitsr¨   r   r   r   Úsize_qÚsize_prà   rè   r   rë   r   ræ   rß   rç   r   s     `         @@@@r3   r   r   É  s¬  ü€ ð< ˆd‚{ÜÐ=Ó>Ð>Øˆ1�u�‚z�Q˜’UÜÐ]Ó^Ð^àÐÜ×*Ñ*ˆä�A‹JÐ€AˆÜ�‹
€Aà
�.‰.Ó
˜dÒ
" q¨A°$¸!±)Ñ,<Ò'=ð ˜‘ˆØ˜‘ˆä  ›¨¨F©
°Q©Ñ7×=Ñ=Ó?Ð?ˆ�Ø�VÒÜ˜Q“Z A¨¡J°¡NÑ3×9Ñ9Ó;ˆEõ	Eô $¨vØ-5Ø19ô;ˆô ˜q“z d¨a¡i°#¡oÑ6ˆ÷	7ô
 $¨vØ-5Ø19ô;ˆð �‰EˆØ�1‰u�k‰k˜!˜a™%Ó ˆØ�I‰I�c‹Nˆð? �.‰.Ó
˜dÒ
" q¨A°$¸!±)Ñ,<Ó'=ðB 	ˆ1‚uØ�!ˆˆˆ1à	�	‰	�!‹€Aä�A˜˜a 1¨¨QÔ/Ð/r5   c                 ó  —  G d„ dt         «      } |«       }t        d| «      D ]  \  }}t        ||t        |«      «       Œ |j                  }|j
                  }t        |d«      st        ||¬«      }�n.|j                  }	t        |d«      r|j                  }
|j                  }nÂ|	|z  dz
  }|}|dz  d	k(  r|dz  }|dz  d	k(  rŒd
}t        d«      }|sw|dk  rrt        |«      }||k  rUt        |||«      }|dk7  r8||dz
  k7  r0t        |d|«      dk(  r t        |«      j                  |dz   «      }
d}n|dz  }||k  rŒU|dz  }|s|dk  rŒr|st        d«      ‚|
z  d	k(  sJ ‚||
z  }t        |d«      r|j                  }n|
j                  |«      }t        |||	|
||¬«      }|�rc|dk  s||k\  rt        d«      ‚t        |«      j                  |«      dk7  rt        d«      ‚|dz  st        d«      ‚|j!                  «       �r	dk  s|	|k\  rt        d«      ‚t        |«      j                  |	«      dk7  rt        d«      ‚
z  |k7  rt        d«      ‚t#        |
«      t$        k(  rt        d«      ‚t#        |«      t$        k(  rt        d«      ‚|
dz
  |dz
  z  }||
dz
  j                  |dz
  «      z  }||	z  t'        |«      z  dk7  rt        d«      ‚t        |d«      r+dk  s||k\  rt        d«      ‚|
|z  |z  dk7  rt        d«      ‚|S )a3  Construct an RSA key from a tuple of valid RSA components.

    The modulus **n** must be the product of two primes.
    The public exponent **e** must be odd and larger than 1.

    In case of a private key, the following equations must apply:

    .. math::

        \begin{align}
        p*q &= n \\
        e*d &\equiv 1 ( \text{mod lcm} [(p-1)(q-1)]) \\
        p*u &\equiv 1 ( \text{mod } q)
        \end{align}

    Args:
        rsa_components (tuple):
            A tuple of integers, with at least 2 and no
            more than 6 items. The items come in the following order:

            1. RSA modulus *n*.
            2. Public exponent *e*.
            3. Private exponent *d*.
               Only required if the key is private.
            4. First factor of *n* (*p*).
               Optional, but the other factor *q* must also be present.
            5. Second factor of *n* (*q*). Optional.
            6. CRT coefficient *q*, that is :math:`p^{-1} \text{mod }q`. Optional.

    Keyword Args:
        consistency_check (boolean):
            If ``True``, the library will verify that the provided components
            fulfil the main RSA properties.

    Raises:
        ValueError: when the key being imported fails the most basic RSA validity checks.

    Returns: An RSA key object (:class:`RsaKey`).
    c                   ó   — e Zd Zy)úconstruct.<locals>.InputCompsN)rÓ   rÔ   rÕ   rp   r5   r3   Ú
InputCompsrñ   D  s   „ Ør5   rò   ré   r   r   r   r    rÙ   r   Frã   Tz2Unable to compute factors p and q from exponent d.r   zInvalid RSA public exponentz-RSA public exponent is not coprime to moduluszRSA modulus is not oddzInvalid RSA private exponentz.RSA private exponent is not coprime to modulusz RSA factors do not match moduluszRSA factor p is compositezRSA factor q is compositezInvalid RSA conditionzInvalid RSA component uzInvalid RSA component u with p)ÚobjectÚzipr%   r   r   r   rm   r   r   r   r   rW   rÝ   r#   r   rJ   r?   r   r   r8   )Úrsa_componentsÚconsistency_checkrò   Úinput_compsÚcompr2   r   r   Úkeyr   r   r   ÚktotÚtÚspottedÚaÚkÚcandr   Úphirë   s                        r3   r   r     s8  € ôR”Vô ñ “,€KÜÐ;¸^ÖL‰ˆˆuÜ�˜T¤7¨5£>Õ2ð Mð 	�‰€AØ�‰€AÜ�; Ô$Ü�q˜AÔŠà�M‰MˆÜ�; Ô$Ø—‘ˆAØ—‘‰Að
 �q‘5˜1‘9ˆDð ˆAØ�a‘%˜1’*Ø�a‘�ð �a‘%˜1“*ð ˆGÜ˜“
ˆAÙ ! c¢'Ü˜A“J�à˜$’hÜ˜q ! Q›<�Dà˜q’y T¨a°!©e¢_¼¸TÀ1Àa»ÈAÒ9Mô $ A›JŸN™N¨4°!©8Ó4˜Ø"&˜ØØ˜‘F�Að ˜$“hð �Q‘�ñ  ! c£'ñ Ü Ð!UÓVÐVà˜‘U˜q’LÐ!�LØ�Q‘ˆAä�; Ô$Ø—‘‰Aà—	‘	˜!“ˆAô �q˜A  a¨1°Ô2ˆò ð �Š6�Q˜!’VÜÐ:Ó;Ð;Ü�1‹:�>‰>˜!Ó Ò!ÜÐLÓMÐMð �1ŠuÜÐ5Ó6Ð6à�?‰?Õà�AŠv˜˜ašÜ Ð!?Ó@Ð@Ü�q‹z�~‰~˜aÓ  AÒ%Ü Ð!QÓRÐRà�1‰u˜ŠzÜ Ð!CÓDÐDÜ" 1Ó%¬Ò2Ü Ð!<Ó=Ð=Ü" 1Ó%¬Ò2Ü Ð!<Ó=Ð=à�q‘5˜Q ™UÑ#ˆCØ˜!˜a™%Ÿ™ Q¨¡UÓ+Ñ+ˆCØ�A‘œ˜C›Ñ  QÒ&Ü Ð!8Ó9Ð9Ü�s˜CÔ à˜’6˜Q !šVÜ$Ð%>Ó?Ð?Ø˜‘E˜A‘I !Ò#Ü$Ð%EÓFÐFà€Jr5   c                 óÀ   — t        «       j                  | dd¬«      }|d   dk7  rt        d«      ‚t        |dd t	        |d   «      j                  |d	   «      gz   «      S )
Né	   T©Únr_elementsÚonly_ints_expectedr   z(No PKCS#1 encoding of an RSA private keyr    é   é   é   )r   Údecoder#   r   r   rJ   ©Úencodedr-   Úders      r3   Ú_import_pkcs1_privater  «  sd   € ô ‹-×
Ñ
˜w°AÈ$Ð
Ó
O€CØ
ˆ1�v�‚{ÜÐCÓDÐDÜ�S˜˜1�X¤¨¨Q©£×!8Ñ!8¸¸Q¹Ó!@Ð AÑAÓBÐBr5   c                 óP   — t        «       j                  | dd¬«      }t        |«      S )NrÙ   Tr  )r   r	  r   r
  s      r3   Ú_import_pkcs1_publicr  ¿  s'   € ô
 ‹-×
Ñ
˜w°AÈ$Ð
Ó
O€CÜ�S‹>Ðr5   c                 óh   — t         df}t        | «      \  }}}||vs|�t        d«      ‚t        |«      S )Nú1.2.840.113549.1.1.10zNo RSA subjectPublicKeyInfo)r   r   r#   r  )r  r-   ÚoidsÚalgoidÚencoded_keyÚparamss         r3   Ú_import_subjectPublicKeyInfor  È  sB   € äÐ(Ð)€Dä"AÀ'Ó"JÑ€FˆK˜Ø�TÑ˜VÐ/ÜÐ6Ó7Ð7Ü Ó,Ð,r5   c                 ó.   — t        | «      }t        |«      S r7   )r   r  )r  r-   Úsp_infos      r3   Ú_import_x509_certr  Ò  s   € ä.¨wÓ7€GÜ'¨Ó0Ð0r5   c                 ó„   — ddl m} t        df}|j                  | |«      }|d   |vrt	        d«      ‚t        |d   |«      S )Nr   r“   r  zNo PKCS#8 encoded RSA keyr    )r¢   r”   r   Úunwrapr#   Ú_import_keyDER)r  r¥   r”   r  rþ   s        r3   Ú_import_pkcs8r  Ø  sI   € ÝäÐ(Ð)€Dà�‰�W˜jÓ)€AØˆ�t�4ÑÜÐ4Ó5Ð5Ü˜!˜A™$ 
Ó+Ð+r5   c                 ó�   — t         t        t        t        t        f}|D ]  }	  || |«      c S  t        d«      ‚# t
        $ r Y Œ&w xY w)z@Import an RSA key (public or private half), encoded in DER form.úRSA key format is not supported)r  r  r  r  r  r#   )Ú
extern_keyr¥   Ú	decodingsÚdecodings       r3   r  r  ã  sZ   € ô 'Ü%Ü-Ü"Üð	 €Ió ˆð	Ù˜J¨
Ó3Ò3ð ô Ð6Ó
7Ð7øô ò 	Ùð	ús   ¢9¹	AÁAc                 ól  — ddl m}m}m}m}  || |«      \  }}|dk7  rt        d«      ‚ ||«      \  }} ||«      \  }	} ||«      \  }
} ||«      \  }} ||«      \  }} ||«      \  }} ||«      \  }} ||«       ||	|
|||fD �cg c]  }t        j                  |«      ‘Œ }}t        |«      S c c}w )Nr    )Úimport_openssh_private_genericÚ
read_bytesÚread_stringÚcheck_paddingzssh-rsazThis SSH key is not RSA)	Ú_opensshr$  r%  r&  r'  r#   r   Ú
from_bytesr   )ÚdataÚpasswordr$  r%  r&  r'  Ússh_nameÚ	decryptedr   r   r   Úiqmpr   r   r   Úpaddedr©   Úbuilds                     r3   Ú_import_openssh_private_rsar1  õ  sÞ   € ÷Có Cñ 9¸¸xÓHÑ€Hˆià�9ÒÜÐ2Ó3Ð3á˜iÓ(�L€A€yÙ˜iÓ(�L€A€yÙ˜iÓ(�L€A€yÙ  Ó+�O€Dˆ)Ù˜iÓ(�L€A€yÙ˜iÓ(�L€A€yá˜IÓ&�I€A€vÙ�&Ôà-.°°1°a¸¸DÑ,AÓBÑ,A qŒW×Ñ Õ"Ð,A€EÐBÜ�UÓÐùò Cs   ÂB1c                 óH  — ddl m} t        | «      } |�t        |«      }| j                  d«      r/t	        | «      }|j                  ||«      \  }}}t        ||«      }|S | j                  d«      r/|j                  t	        | «      |«      \  }}}|rd}t        ||«      S | j                  d«      r¾t        j                  | j                  d«      d   «      }	g }
t        |	«      d	kD  rJt        j                  d
|	dd	 «      d   }|
j                  |	d	d	|z    «       |	d	|z   d }	t        |	«      d	kD  rŒJt        j                   |
d   «      }t        j                   |
d   «      }t#        ||g«      S t        | «      dkD  rt%        | d   «      dk(  rt        | |«      S t'        d«      ‚)aé  Import an RSA key (public or private).

    Args:
      extern_key (string or byte string):
        The RSA key to import.

        The following formats are supported for an RSA **public key**:

        - X.509 certificate (binary or PEM format)
        - X.509 ``subjectPublicKeyInfo`` DER SEQUENCE (binary or PEM
          encoding)
        - `PKCS#1`_ ``RSAPublicKey`` DER SEQUENCE (binary or PEM encoding)
        - An OpenSSH line (e.g. the content of ``~/.ssh/id_ecdsa``, ASCII)

        The following formats are supported for an RSA **private key**:

        - PKCS#1 ``RSAPrivateKey`` DER SEQUENCE (binary or PEM encoding)
        - `PKCS#8`_ ``PrivateKeyInfo`` or ``EncryptedPrivateKeyInfo``
          DER SEQUENCE (binary or PEM encoding)
        - OpenSSH (text format, introduced in `OpenSSH 6.5`_)

        For details about the PEM encoding, see `RFC1421`_/`RFC1423`_.

      passphrase (string or byte string):
        For private keys only, the pass phrase that encrypts the key.

    Returns: An RSA key object (:class:`RsaKey`).

    Raises:
      ValueError/IndexError/TypeError:
        When the given key cannot be parsed (possibly because the pass
        phrase is wrong).

    .. _RFC1421: http://www.ietf.org/rfc/rfc1421.txt
    .. _RFC1423: http://www.ietf.org/rfc/rfc1423.txt
    .. _`PKCS#1`: http://www.ietf.org/rfc/rfc3447.txt
    .. _`PKCS#8`: http://www.ietf.org/rfc/rfc5208.txt
    .. _`OpenSSH 6.5`: https://flak.tedunangst.com/post/new-openssh-key-format-and-bcrypt-pbkdf
    r   r˜   Ns   -----BEGIN OPENSSH PRIVATE KEYs   -----r�   ó    r    r  r�   rÙ   é0   r  )r¢   r•   r	   Ú
startswithr   r	  r1  r  rŸ   Ú
a2b_base64Úsplitrž   rœ   ÚunpackÚappendr   r)  r   r
   r#   )r   r¥   r•   Útext_encodedÚopenssh_encodedÚmarkerÚenc_flagrg   r  r®   r¬   Úlengthr   r   s                 r3   r   r     sŸ  € õR ä˜Ó$€JØÐÜ˜ZÓ(ˆ
à×ÑÐ>Ô?Ü˜ZÓ(ˆØ,/¯J©J°|ÀZÓ,PÑ)ˆ˜ Ü,¨_¸jÓIˆØˆà×Ñ˜XÔ&à"%§*¡*¬U°:Ó->À
Ó"KÑˆˆf�hÙØˆJÜ˜c :Ó.Ð.à×Ñ˜[Ô)ä×'Ñ'¨
×(8Ñ(8¸Ó(>¸qÑ(AÓBˆ	ØˆÜ�)‹n˜qÒ Ü—]‘] 4¨°2°A¨Ó7¸Ñ:ˆFØ�O‰O˜I a¨¨F©
Ð3Ô4Ø! ! f¡* +Ð.ˆIô �)‹n˜qÓ ô ×Ñ˜x¨™{Ó+ˆÜ×Ñ˜x¨™{Ó+ˆÜ˜!˜Q˜Ó Ð ä
ˆ:ƒ˜Òœt J¨q¡MÓ2°dÒ:ä˜j¨*Ó5Ð5ä
Ð6Ó
7Ð7r5   z1.2.840.113549.1.1.1)Ni  )Tr7   )&Ú__all__rŸ   rœ   ÚCryptor   ÚCrypto.Util.py3compatr	   r
   r   ÚCrypto.Util.asn1r   r   ÚCrypto.Util.numberr   ÚCrypto.Math.Numbersr   ÚCrypto.Math.Primalityr   r   r   ÚCrypto.PublicKeyr   r   r   ró   r   r   r   r  r  r  r  r  r  r1  r   Ú	importKeyr   rp   r5   r3   Ú<module>rH     s•   ðò@€ó Û å ß 6Ñ 6ß 1Ý ,å '÷Gñ G÷@ñ @ô
R"ˆVô R"ójO0ódMò`Cò(ò-ò1ò,ò8ò$ó0L8ð` €	ð �r5   