Ë
    U¼SfƒÃ  ã                  óB  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z
 d dlmZ d dlmZ d dlmZ d dl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mZmZmZ d d
lm Z m!Z!m"Z"m#Z#m$Z$m%Z% 	 d dl&m'Z( dZ)dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3 ejh                  d«      Z5dZ6dZ7dZ8dZ9dZ:dZ;dZ< ejh                  e7d z   e8z   ejz                  «      Z> e? e@ eAd!d"«      «      «      ZBe G d#„ d$«      «       ZC eCejˆ                  d%ejŠ                  dddd¬&«       eCejˆ                  d%ejŒ                  dddd¬&«       eCejˆ                  d%ejŽ                  dd'dd¬&«      d(œZHd)eId*<   e.e/e0d+œZJdWd,„ZKdXd-„ZLe7d.z   e8d.z   f	 	 	 	 	 	 	 dYd/„ZMdZd0„ZNd[d1„ZO	 	 	 	 	 	 	 	 	 	 d\d2„ZPd]d3„ZQd]d4„ZRd^d5„ZSd]d6„ZTd_d7„ZU G d8„ d9«      ZV G d:„ d;«      ZW G d<„ d=«      ZX G d>„ d?«      ZY G d@„ dA«      ZZe, eW«       e- eX«       e+ eZ«       e. eYdB ej¶                  «       «      e/ eYdC ej¸                  «       «      e0 eYdD ejº                  «       «      iZ^d`dE„Z_ejÀ                  ejÂ                  ejÄ                  ejÆ                  ejÈ                  f   Ze	 da	 	 	 	 	 	 	 dbdF„Zf	 	 	 	 	 	 	 	 dcdG„ZgejÀ                  ejÐ                  ejÒ                  ejÔ                  ejÖ                  f   ZlejÀ                  ejÐ                  ejÒ                  ejÖ                  f   Zm G dH„ dIejÜ                  «      Zo G dJ„ dK«      ZpdddL„Zq	 dU	 	 	 dedM„Zr	 	 	 	 dedN„ZsdfdO„Zt	 da	 	 	 	 	 dgdP„ZudhdQ„ZvejÀ                  ejÂ                  ejÄ                  ejÈ                  f   ZwdRZx G dS„ dT«      Zyy# e*$ r dZ)	 dU	 	 	 	 	 	 	 	 	 	 	 dVd„Z(Y �Œ&w xY w)ié    )ÚannotationsN)Úencodebytes)Ú	dataclass)Úutils©ÚUnsupportedAlgorithm)Úhashes)ÚdsaÚecÚed25519ÚpaddingÚrsa)ÚAEADDecryptionContextÚCipherÚ
algorithmsÚmodes)ÚEncodingÚKeySerializationEncryptionÚNoEncryptionÚPrivateFormatÚPublicFormatÚ_KeySerializationEncryption)ÚkdfTFc                ó   — t        d«      ‚)NzNeed bcrypt moduler   )ÚpasswordÚsaltÚdesired_key_bytesÚroundsÚignore_few_roundss        úoC:\Users\user\Documents\project_loop\venv\Lib\site-packages\cryptography/hazmat/primitives/serialization/ssh.pyÚ_bcrypt_kdfr!   1   s   € ô #Ð#7Ó8Ð8ó    s   ssh-ed25519s   ssh-rsas   ssh-dsss   ecdsa-sha2-nistp256s   ecdsa-sha2-nistp384s   ecdsa-sha2-nistp521s   -cert-v01@openssh.coms   rsa-sha2-256s   rsa-sha2-512s   \A(\S+)[ \t]+(\S+)s   openssh-key-v1 s#   -----BEGIN OPENSSH PRIVATE KEY-----s!   -----END OPENSSH PRIVATE KEY-----s   bcrypts   noneó
   aes256-ctré   s   (.*?)é   é   c                  óT   — e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   ded<   y)Ú
_SSHCipherztype[algorithms.AES]ÚalgÚintÚkey_lenz3type[modes.CTR] | type[modes.CBC] | type[modes.GCM]ÚmodeÚ	block_lenÚiv_lenú
int | NoneÚtag_lenÚboolÚis_aeadN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r"   r    r(   r(   X   s(   … à	ÓØƒLØ
=Ó=ØƒNØƒKØÓØ„Mr"   r(   é    )r)   r+   r,   r-   r.   r0   r2   é   )r#   s
   aes256-cbcs   aes256-gcm@openssh.comzdict[bytes, _SSHCipher]Ú_SSH_CIPHERS)Ú	secp256r1Ú	secp384r1Ú	secp521r1c                óü  — t        | t        j                  «      rt        | j	                  «       «      }|S t        | t        j
                  «      rt        | «      }|S t        | t        j                  t        j                  f«      rt        }|S t        | t        j                  t        j                  f«      rt        }|S t        | t        j                  t        j                   f«      rt"        }|S t%        d«      ‚)NúUnsupported key type)Ú
isinstancer   ÚEllipticCurvePrivateKeyÚ_ecdsa_key_typeÚ
public_keyÚEllipticCurvePublicKeyr   ÚRSAPrivateKeyÚRSAPublicKeyÚ_SSH_RSAr
   ÚDSAPrivateKeyÚDSAPublicKeyÚ_SSH_DSAr   ÚEd25519PrivateKeyÚEd25519PublicKeyÚ_SSH_ED25519Ú
ValueError)ÚkeyÚkey_types     r    Ú_get_ssh_key_typerQ   Š   sÛ   € Ü�#”r×1Ñ1Ô2Ü" 3§>¡>Ó#3Ó4ˆð €Oô 
�Cœ×2Ñ2Ô	3Ü" 3Ó'ˆð €Oô 
�Cœ#×+Ñ+¬S×-=Ñ-=Ð>Ô	?Üˆð €Oô 
�Cœ#×+Ñ+¬S×-=Ñ-=Ð>Ô	?Üˆð €Oô 
ØŒg×'Ñ'¬×)AÑ)AÐBô
ô  ˆð €Oô Ð/Ó0Ð0r"   c                ó”   — | j                   }|j                  t        vrt        d|j                  ›�«      ‚t        |j                     S )z3Return SSH key_type and curve_name for private key.z'Unsupported curve for ssh private key: )ÚcurveÚnameÚ_ECDSA_KEY_TYPErN   )rC   rS   s     r    rB   rB   �   sE   € à×Ñ€EØ‡z�zœÑ(ÜØ5°e·j±j°^ÐDó
ð 	
ô ˜5Ÿ:™:Ñ&Ð&r"   ó   
c                ó<   — dj                  |t        | «      |g«      S )Nr"   )ÚjoinÚ_base64_encode)ÚdataÚprefixÚsuffixs      r    Ú_ssh_pem_encoder]   §   s   € ð
 �8‰8�Vœ^¨DÓ1°6Ð:Ó;Ð;r"   c                ó@   — | rt        | «      |z  dk7  rt        d«      ‚y)zRequire data to be full blocksr   zCorrupt data: missing paddingN)ÚlenrN   )rZ   r-   s     r    Ú_check_block_sizer`   ¯   s&   € á”3�t“9˜yÑ(¨AÒ-ÜÐ8Ó9Ð9ð .r"   c                ó   — | rt        d«      ‚y)z!All data should have been parsed.zCorrupt data: unparsed dataN)rN   ©rZ   s    r    Ú_check_emptyrc   µ   s   € áÜÐ6Ó7Ð7ð r"   c                ó  — |st        d«      ‚t        |    }t        |||j                  |j                  z   |d«      }t        |j                  |d|j                   «      |j                  ||j                  d «      «      S )z$Generate key + iv and return cipher.zKey is password-protected.TN)rN   r:   r!   r+   r.   r   r)   r,   )Ú
ciphernamer   r   r   ÚciphÚseeds         r    Ú_init_cipherrh   »   s|   € ñ ÜÐ5Ó6Ð6ä˜
Ñ#€DÜØ�$˜Ÿ™ t§{¡{Ñ2°F¸Dó€Dô Ø�‰��n˜Ÿ™Ð%Ó&Ø�	‰	�$�t—|‘|�~Ð&Ó'óð r"   c                ór   — t        | «      dk  rt        d«      ‚t        j                  | dd d¬«      | dd fS )ÚUint32é   úInvalid dataNÚbig©Ú	byteorder©r_   rN   r*   Ú
from_bytesrb   s    r    Ú_get_u32rr   Ï   ó<   € ä
ˆ4ƒy�1‚}Ü˜Ó(Ð(Ü�>‰>˜$˜r ˜(¨eˆ>Ó4°d¸1¸2°hÐ>Ð>r"   c                ór   — t        | «      dk  rt        d«      ‚t        j                  | dd d¬«      | dd fS )ÚUint64é   rl   Nrm   rn   rp   rb   s    r    Ú_get_u64rw   Ö   rs   r"   c                ód   — t        | «      \  }} |t        | «      kD  rt        d«      ‚| d| | |d fS )zBytes with u32 length prefixrl   N)rr   r_   rN   )rZ   Úns     r    Ú_get_sshstrrz   Ý   s<   € ä�t‹n�G€A€tØŒ3ˆt‹9‚}Ü˜Ó(Ð(Ø��ˆ8�T˜!˜"�XÐÐr"   c                óx   — t        | «      \  }} |r|d   dkD  rt        d«      ‚t        j                  |d«      | fS )zBig integer.r   é   rl   rm   )rz   rN   r*   rq   )rZ   Úvals     r    Ú
_get_mpintr~   å   s>   € ä˜DÓ!�I€CˆÙ
ˆs�1‰v˜Š}Ü˜Ó(Ð(Ü�>‰>˜#˜uÓ% tÐ+Ð+r"   c                ó€   — | dk  rt        d«      ‚| sy| j                  «       dz   dz  }t        j                  | |«      S )z!Storage format for signed bigint.r   znegative mpint not allowedr"   rv   )rN   Ú
bit_lengthr   Úint_to_bytes)r}   Únbytess     r    Ú	_to_mpintrƒ   í   sD   € à
ˆQ‚wÜÐ5Ó6Ð6ÙØØ�n‰nÓ Ñ" qÑ(€FÜ×Ñ˜c 6Ó*Ð*r"   c                  óh   — e Zd ZU dZded<   ddd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„Zddd„Zdd„Zy)Ú	_FragListz,Build recursive structure without data copy.úlist[bytes]ÚflistNc                óN   — g | _         |r| j                   j                  |«       y y ©N)r‡   Úextend)ÚselfÚinits     r    Ú__init__z_FragList.__init__ü   s#   € ØˆŒ
ÙØ�J‰J×Ñ˜dÕ#ð r"   c                ó:   — | j                   j                  |«       y)zAdd plain bytesN)r‡   Úappend©r‹   r}   s     r    Úput_rawz_FragList.put_raw  s   € à�
‰
×Ñ˜#Õr"   c                ó\   — | j                   j                  |j                  dd¬«      «       y)zBig-endian uint32rk   rm   ©Úlengthro   N©r‡   r�   Úto_bytesr�   s     r    Úput_u32z_FragList.put_u32  ó!   € à�
‰
×Ñ˜#Ÿ,™,¨a¸5˜,ÓAÕBr"   c                ó\   — | j                   j                  |j                  dd¬«      «       y)zBig-endian uint64rv   rm   r“   Nr•   r�   s     r    Úput_u64z_FragList.put_u64	  r˜   r"   c                ó.  — t        |t        t        t        f«      r6| j	                  t        |«      «       | j                  j                  |«       y| j	                  |j                  «       «       | j                  j                  |j                  «       y)zBytes prefixed with u32 lengthN)
r@   ÚbytesÚ
memoryviewÚ	bytearrayr—   r_   r‡   r�   ÚsizerŠ   r�   s     r    Ú
put_sshstrz_FragList.put_sshstr  s]   € ä�cœE¤:¬yÐ9Ô:Ø�L‰Lœ˜S›Ô"Ø�J‰J×Ñ˜cÕ"à�L‰L˜Ÿ™›Ô$Ø�J‰J×Ñ˜cŸi™iÕ(r"   c                ó8   — | j                  t        |«      «       y)z*Big-endian bigint prefixed with u32 lengthN)r    rƒ   r�   s     r    Ú	put_mpintz_FragList.put_mpint  s   € à�‰œ	 #›Õ'r"   c                óH   — t        t        t        | j                  «      «      S )zCurrent number of bytes)ÚsumÚmapr_   r‡   ©r‹   s    r    rŸ   z_FragList.size  s   € ä”3”s˜DŸJ™JÓ'Ó(Ð(r"   c                óV   — | j                   D ]  }t        |«      }|||z   }}|||| Œ |S )zWrite into bytearray)r‡   r_   )r‹   ÚdstbufÚposÚfragÚflenÚstarts         r    Úrenderz_FragList.render  s>   € à—J‘Jò 	%ˆDÜ�t“9ˆDØ˜c D™j�3ˆEØ $ˆF�5˜Ñð	%ð ˆ
r"   c                óˆ   — t        t        | j                  «       «      «      }| j                  |«       |j	                  «       S )zReturn as bytes)r�   rž   rŸ   r­   Útobytes)r‹   Úbufs     r    r¯   z_FragList.tobytes&  s/   € äœ 4§9¡9£;Ó/Ó0ˆØ�‰�CÔØ�{‰{‹}Ðr"   r‰   )rŒ   zlist[bytes] | NoneÚreturnÚNone)r}   rœ   r±   r²   )r}   r*   r±   r²   )r}   zbytes | _FragListr±   r²   ©r±   r*   )r   )r¨   r�   r©   r*   r±   r*   ©r±   rœ   )r3   r4   r5   Ú__doc__r6   r�   r‘   r—   rš   r    r¢   rŸ   r­   r¯   r7   r"   r    r…   r…   ÷   s:   … Ù6àÓô$ó
óCóCó)ó(ó)ôôr"   r…   c                  ó`   — e Zd ZdZdd„Z	 	 	 	 d	d„Z	 	 	 	 d
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)Ú_SSHFormatRSAzhFormat for RSA keys.

    Public:
        mpint e, n
    Private:
        mpint n, e, d, iqmp, p, q
    c                óF   — t        |«      \  }}t        |«      \  }}||f|fS )zRSA public fields©r~   )r‹   rZ   Úery   s       r    Ú
get_publicz_SSHFormatRSA.get_public6  s,   € ä˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ø�1ˆv�tˆ|Ðr"   c                ó„   — | j                  |«      \  \  }}}t        j                  ||«      }|j                  «       }||fS )zMake RSA public key from data.)r»   r   ÚRSAPublicNumbersrC   )r‹   rZ   rº   ry   Úpublic_numbersrC   s         r    Úload_publicz_SSHFormatRSA.load_public<  sE   € ð —‘ tÓ,‰‰ˆˆA�Ü×-Ñ-¨a°Ó3ˆØ#×.Ñ.Ó0ˆ
Ø˜4ÐÐr"   c           	     ó°  — t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}||f|k7  rt        d«      ‚t        j                  ||«      }	t        j                  ||«      }
t        j
                  ||«      }t        j                  ||||	|
||«      }|j                  «       }||fS )zMake RSA private key from data.z Corrupt data: rsa field mismatch)r~   rN   r   Úrsa_crt_dmp1Úrsa_crt_dmq1r½   ÚRSAPrivateNumbersÚprivate_key)r‹   rZ   Ú	pubfieldsry   rº   ÚdÚiqmpÚpÚqÚdmp1Údmq1r¾   Úprivate_numbersrÄ   s                 r    Úload_privatez_SSHFormatRSA.load_privateE  sà   € ô ˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü Ó%‰
ˆˆdÜ˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4àˆqˆ6�YÒÜÐ?Ó@Ð@Ü×Ñ  1Ó%ˆÜ×Ñ  1Ó%ˆÜ×-Ñ-¨a°Ó3ˆÜ×/Ñ/Øˆq�!�T˜4  ~ó
ˆð &×1Ñ1Ó3ˆØ˜DÐ Ð r"   c                ó�   — |j                  «       }|j                  |j                  «       |j                  |j                  «       y)zWrite RSA public keyN)r¾   r¢   rº   ry   )r‹   rC   Úf_pubÚpubns       r    Úencode_publicz_SSHFormatRSA.encode_public[  s2   € ð ×(Ñ(Ó*ˆØ�‰˜Ÿ™ÔØ�‰˜Ÿ™Õr"   c                ó€  — |j                  «       }|j                  }|j                  |j                  «       |j                  |j                  «       |j                  |j
                  «       |j                  |j                  «       |j                  |j                  «       |j                  |j                  «       y)zWrite RSA private keyN)	rÌ   r¾   r¢   ry   rº   rÆ   rÇ   rÈ   rÉ   )r‹   rÄ   Úf_privrÌ   r¾   s        r    Úencode_privatez_SSHFormatRSA.encode_privatec  s•   € ð &×5Ñ5Ó7ˆØ(×7Ñ7ˆà×Ñ˜×)Ñ)Ô*Ø×Ñ˜×)Ñ)Ô*à×Ñ˜×*Ñ*Ô+Ø×Ñ˜×-Ñ-Ô.Ø×Ñ˜×*Ñ*Ô+Ø×Ñ˜×*Ñ*Õ+r"   N)rZ   r�   )rZ   r�   r±   z#tuple[rsa.RSAPublicKey, memoryview])rZ   r�   r±   z$tuple[rsa.RSAPrivateKey, memoryview])rC   zrsa.RSAPublicKeyrÏ   r…   r±   r²   )rÄ   zrsa.RSAPrivateKeyrÓ   r…   r±   r²   ©	r3   r4   r5   rµ   r»   r¿   rÍ   rÑ   rÔ   r7   r"   r    r·   r·   -  sp   „ ñóð Øð à	,ó ð!Øð!à	-ó!ð, Ø*ð Ø3<ð à	ó ð,Ø,ð,Ø6?ð,à	ô,r"   r·   c                  óh   — e Zd ZdZd	d„Z	 	 	 	 d
d„Z	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zdd„Z	y)Ú_SSHFormatDSAzhFormat for DSA keys.

    Public:
        mpint p, q, g, y
    Private:
        mpint p, q, g, y, x
    c                ó‚   — t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}||||f|fS )zDSA public fieldsr¹   )r‹   rZ   rÈ   rÉ   ÚgÚys         r    r»   z_SSHFormatDSA.get_public|  sM   € ä˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ø�1�a˜ˆ|˜TÐ!Ð!r"   c                óØ   — | j                  |«      \  \  }}}}}t        j                  |||«      }t        j                  ||«      }| j	                  |«       |j                  «       }||fS )zMake DSA public key from data.)r»   r
   ÚDSAParameterNumbersÚDSAPublicNumbersÚ	_validaterC   )	r‹   rZ   rÈ   rÉ   rÙ   rÚ   Úparameter_numbersr¾   rC   s	            r    r¿   z_SSHFormatDSA.load_public„  sl   € ð "Ÿ_™_¨TÓ2Ñ‰ˆˆAˆq�!�dÜ×3Ñ3°A°q¸!Ó<ÐÜ×-Ñ-¨aÐ1BÓCˆØ�‰�~Ô&Ø#×.Ñ.Ó0ˆ
Ø˜4ÐÐr"   c                óH  — | j                  |«      \  \  }}}}}t        |«      \  }}||||f|k7  rt        d«      ‚t        j                  |||«      }t        j
                  ||«      }	| j                  |	«       t        j                  ||	«      }
|
j                  «       }||fS )zMake DSA private key from data.z Corrupt data: dsa field mismatch)	r»   r~   rN   r
   rÜ   rÝ   rÞ   ÚDSAPrivateNumbersrÄ   )r‹   rZ   rÅ   rÈ   rÉ   rÙ   rÚ   Úxrß   r¾   rÌ   rÄ   s               r    rÍ   z_SSHFormatDSA.load_private�  s¨   € ð "Ÿ_™_¨TÓ2Ñ‰ˆˆAˆq�!�dÜ˜TÓ"‰ˆˆ4àˆq�!�Qˆ<˜9Ò$ÜÐ?Ó@Ð@Ü×3Ñ3°A°q¸!Ó<ÐÜ×-Ñ-¨aÐ1BÓCˆØ�‰�~Ô&Ü×/Ñ/°°>ÓBˆØ%×1Ñ1Ó3ˆØ˜DÐ Ð r"   c                ó6  — |j                  «       }|j                  }| j                  |«       |j                  |j                  «       |j                  |j
                  «       |j                  |j                  «       |j                  |j                  «       y)zWrite DSA public keyN)r¾   rß   rÞ   r¢   rÈ   rÉ   rÙ   rÚ   )r‹   rC   rÏ   r¾   rß   s        r    rÑ   z_SSHFormatDSA.encode_publicŸ  su   € ð $×2Ñ2Ó4ˆØ*×<Ñ<ÐØ�‰�~Ô&à�‰Ð)×+Ñ+Ô,Ø�‰Ð)×+Ñ+Ô,Ø�‰Ð)×+Ñ+Ô,Ø�‰˜×(Ñ(Õ)r"   c                ó–   — | j                  |j                  «       |«       |j                  |j                  «       j                  «       y)zWrite DSA private keyN)rÑ   rC   r¢   rÌ   râ   )r‹   rÄ   rÓ   s      r    rÔ   z_SSHFormatDSA.encode_private¬  s:   € ð 	×Ñ˜;×1Ñ1Ó3°VÔ<Ø×Ñ˜×4Ñ4Ó6×8Ñ8Õ9r"   c                ól   — |j                   }|j                  j                  «       dk7  rt        d«      ‚y )Ni   z#SSH supports only 1024 bit DSA keys)rß   rÈ   r€   rN   )r‹   r¾   rß   s      r    rÞ   z_SSHFormatDSA._validate³  s6   € Ø*×<Ñ<ÐØ×Ñ×)Ñ)Ó+¨tÒ3ÜÐBÓCÐCð 4r"   N©rZ   r�   r±   ztuple[tuple, memoryview])rZ   r�   r±   z#tuple[dsa.DSAPublicKey, memoryview])rZ   r�   r±   z$tuple[dsa.DSAPrivateKey, memoryview])rC   zdsa.DSAPublicKeyrÏ   r…   r±   r²   )rÄ   zdsa.DSAPrivateKeyrÓ   r…   r±   r²   )r¾   zdsa.DSAPublicNumbersr±   r²   )
r3   r4   r5   rµ   r»   r¿   rÍ   rÑ   rÔ   rÞ   r7   r"   r    r×   r×   s  sv   „ ñó"ð	 Øð	 à	,ó	 ð!Øð!à	-ó!ð *Ø*ð*Ø3<ð*à	ó*ð:Ø,ð:Ø6?ð:à	ó:ôDr"   r×   c                  óh   — e Zd ZdZd	d„Zd
d„Z	 	 	 	 dd„Z	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	y)Ú_SSHFormatECDSAz–Format for ECDSA keys.

    Public:
        str curve
        bytes point
    Private:
        str curve
        bytes point
        mpint secret
    c                ó    — || _         || _        y r‰   )Ússh_curve_namerS   )r‹   rê   rS   s      r    r�   z_SSHFormatECDSA.__init__Å  s   € Ø,ˆÔØˆ�
r"   c                ó    — t        |«      \  }}t        |«      \  }}|| j                  k7  rt        d«      ‚|d   dk7  rt        d«      ‚||f|fS )zECDSA public fieldszCurve name mismatchr   rk   zNeed uncompressed point)rz   rê   rN   ÚNotImplementedError)r‹   rZ   rS   Úpoints       r    r»   z_SSHFormatECDSA.get_publicÉ  s^   € ä! $Ó'‰ˆˆtÜ! $Ó'‰ˆˆtØ�D×'Ñ'Ò'ÜÐ2Ó3Ð3Ø�‰8�qŠ=Ü%Ð&?Ó@Ð@Ø�uˆ~˜tÐ#Ð#r"   c                ó¨   — | j                  |«      \  \  }}}t        j                  j                  | j                  |j                  «       «      }||fS )z Make ECDSA public key from data.)r»   r   rD   Úfrom_encoded_pointrS   r¯   )r‹   rZ   Ú_rí   rC   s        r    r¿   z_SSHFormatECDSA.load_publicÓ  sM   € ð  Ÿ?™?¨4Ó0Ñ‰
ˆˆE�DÜ×.Ñ.×AÑAØ�J‰J˜Ÿ™›ó
ˆ
ð ˜4ÐÐr"   c                ó¸   — | j                  |«      \  \  }}}t        |«      \  }}||f|k7  rt        d«      ‚t        j                  || j
                  «      }||fS )z!Make ECDSA private key from data.z"Corrupt data: ecdsa field mismatch)r»   r~   rN   r   Úderive_private_keyrS   )r‹   rZ   rÅ   Ú
curve_namerí   ÚsecretrÄ   s          r    rÍ   z_SSHFormatECDSA.load_privateÝ  sd   € ð %)§O¡O°DÓ$9Ñ!Ñˆ�U˜TÜ! $Ó'‰ˆ�à˜Ð )Ò+ÜÐAÓBÐBÜ×+Ñ+¨F°D·J±JÓ?ˆØ˜DÐ Ð r"   c                ó¸   — |j                  t        j                  t        j                  «      }|j                  | j                  «       |j                  |«       y)zWrite ECDSA public keyN)Úpublic_bytesr   ÚX962r   ÚUncompressedPointr    rê   )r‹   rC   rÏ   rí   s       r    rÑ   z_SSHFormatECDSA.encode_publicé  sG   € ð ×'Ñ'Ü�M‰Mœ<×9Ñ9ó
ˆð 	×Ñ˜×,Ñ,Ô-Ø×Ñ˜Õr"   c                óž   — |j                  «       }|j                  «       }| j                  ||«       |j                  |j                  «       y)zWrite ECDSA private keyN)rC   rÌ   rÑ   r¢   Úprivate_value)r‹   rÄ   rÓ   rC   rÌ   s        r    rÔ   z_SSHFormatECDSA.encode_privateó  sD   € ð !×+Ñ+Ó-ˆ
Ø%×5Ñ5Ó7ˆà×Ñ˜: vÔ.Ø×Ñ˜×6Ñ6Õ7r"   N)rê   rœ   rS   úec.EllipticCurveræ   )rZ   r�   r±   z,tuple[ec.EllipticCurvePublicKey, memoryview])rZ   r�   r±   z-tuple[ec.EllipticCurvePrivateKey, memoryview])rC   úec.EllipticCurvePublicKeyrÏ   r…   r±   r²   )rÄ   zec.EllipticCurvePrivateKeyrÓ   r…   r±   r²   )
r3   r4   r5   rµ   r�   r»   r¿   rÍ   rÑ   rÔ   r7   r"   r    rè   rè   ¹  su   „ ñ	óó$ð Øð à	5ó ð
!Øð
!à	6ó
!ð Ø3ð Ø<Eð à	ó ð8Ø5ð8Ø?Hð8à	ô8r"   rè   c                  ó`   — e Zd ZdZdd„Z	 	 	 	 d	d„Z	 	 	 	 d
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)Ú_SSHFormatEd25519z~Format for Ed25519 keys.

    Public:
        bytes point
    Private:
        bytes point
        bytes secret_and_point
    c                ó(   — t        |«      \  }}|f|fS )zEd25519 public fields)rz   )r‹   rZ   rí   s      r    r»   z_SSHFormatEd25519.get_public  s   € ä! $Ó'‰ˆˆtØˆx˜ˆ~Ðr"   c                ó�   — | j                  |«      \  \  }}t        j                  j                  |j	                  «       «      }||fS )z"Make Ed25519 public key from data.)r»   r   rL   Úfrom_public_bytesr¯   )r‹   rZ   rí   rC   s       r    r¿   z_SSHFormatEd25519.load_public  sD   € ð Ÿ™¨Ó.‰‰ˆ�$Ü×-Ñ-×?Ñ?Ø�M‰M‹Oó
ˆ
ð ˜4ÐÐr"   c                óÐ   — | j                  |«      \  \  }}t        |«      \  }}|dd }|dd }||k7  s|f|k7  rt        d«      ‚t        j                  j                  |«      }||fS )z#Make Ed25519 private key from data.Nr8   z$Corrupt data: ed25519 field mismatch)r»   rz   rN   r   rK   Úfrom_private_bytes)r‹   rZ   rÅ   rí   Úkeypairrô   Úpoint2rÄ   s           r    rÍ   z_SSHFormatEd25519.load_private  sy   € ð Ÿ™¨Ó.‰‰ˆ�$Ü# DÓ)‰ˆ�à˜˜"�ˆØ˜˜�ˆØ�FŠ?˜u˜h¨)Ò3ÜÐCÓDÐDÜ×/Ñ/×BÑBÀ6ÓJˆØ˜DÐ Ð r"   c                ó‚   — |j                  t        j                  t        j                  «      }|j	                  |«       y)zWrite Ed25519 public keyN)rö   r   ÚRawr   r    )r‹   rC   rÏ   Úraw_public_keys       r    rÑ   z_SSHFormatEd25519.encode_public%  s3   € ð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆð 	×Ñ˜Õ(r"   c                óN  — |j                  «       }|j                  t        j                  t        j                  t        «       «      }|j                  t        j                  t        j                  «      }t        ||g«      }| j                  ||«       |j                  |«       y)zWrite Ed25519 private keyN)rC   Úprivate_bytesr   r  r   r   rö   r   r…   rÑ   r    )r‹   rÄ   rÓ   rC   Úraw_private_keyr  Ú	f_keypairs          r    rÔ   z _SSHFormatEd25519.encode_private.  s…   € ð !×+Ñ+Ó-ˆ
Ø%×3Ñ3Ü�L‰Lœ-×+Ñ+¬\«^ó
ˆð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆô ˜°Ð?Ó@ˆ	à×Ñ˜: vÔ.Ø×Ñ˜)Õ$r"   Nræ   )rZ   r�   r±   z+tuple[ed25519.Ed25519PublicKey, memoryview])rZ   r�   r±   z,tuple[ed25519.Ed25519PrivateKey, memoryview])rC   zed25519.Ed25519PublicKeyrÏ   r…   r±   r²   )rÄ   zed25519.Ed25519PrivateKeyrÓ   r…   r±   r²   rÕ   r7   r"   r    rþ   rþ   þ  sp   „ ñóð
 Øð à	4ó ð!Øð!à	5ó!ð)Ø2ð)Ø;Dð)à	ó)ð%Ø4ð%Ø>Gð%à	ô%r"   rþ   s   nistp256s   nistp384s   nistp521c                ó’   — t        | t        «      st        | «      j                  «       } | t        v r	t        |    S t        d| ›�«      ‚)z"Return valid format or throw errorzUnsupported key type: )r@   rœ   r�   r¯   Ú_KEY_FORMATSr   )rP   s    r    Ú_lookup_kformatr  I  sE   € ä�h¤Ô&Ü˜hÓ'×/Ñ/Ó1ˆØ”<ÑÜ˜HÑ%Ð%Ü
Ð!7¸°|ÐDÓ
EÐEr"   c                óÖ  — t        j                  d| «       |�t        j                  d|«       t        j	                  | «      }|st        d«      ‚|j                  d«      }|j                  d«      }t        j                  t        | «      || «      } | j                  t        «      st        d«      ‚t        | «      t        t        «      d } t        | «      \  }} t        | «      \  }} t        | «      \  }} t        | «      \  }	} |	dk7  rt        d«      ‚t        | «      \  }
} t        |
«      \  }}
t!        |«      }|j#                  |
«      \  }}
t%        |
«       ||ft&        t&        fk7  �r†|j)                  «       }|t*        vrt-        d|›�«      ‚|t.        k7  rt-        d|›�«      ‚t*        |   j0                  }t*        |   j2                  }t        | «      \  }} t*        |   j4                  r$t7        | «      }t        |«      |k7  rt        d	«      ‚t%        | «       t9        ||«       t        |«      \  }}t        |«      \  }}t%        |«       t;        |||j)                  «       |«      }|j=                  «       }t        |j?                  |«      «      }t*        |   j4                  r-tA        |tB        «      sJ ‚t%        |jE                  «      «       nAt%        |jG                  «       «       n't        | «      \  }} t%        | «       d
}t9        ||«       t        |«      \  }}t        |«      \  }}||k7  rt        d«      ‚t        |«      \  }}||k7  rt        d«      ‚|jI                  ||«      \  }}t        |«      \  }}|tJ        dt        |«       k7  rt        d«      ‚tA        |tL        jN                  «      r&tQ        jR                  dt         jT                  d¬«       |S )z.Load private key from OpenSSH custom encoding.rZ   Nr   zNot OpenSSH private key formatr%   zOnly one key supportedzUnsupported cipher: zUnsupported KDF: z+Corrupt data: invalid tag length for cipherrv   zCorrupt data: broken checksumzCorrupt data: key type mismatchzCorrupt data: invalid paddingúDSSH DSA keys are deprecated and will be removed in a future release.é   ©Ú
stacklevel)+r   Ú_check_byteslikeÚ_check_bytesÚ_PEM_RCÚsearchrN   r¬   ÚendÚbinasciiÚ
a2b_base64r�   Ú
startswithÚ	_SK_MAGICr_   rz   rr   r  r»   rc   Ú_NONEr¯   r:   r   Ú_BCRYPTr-   r0   r2   rœ   r`   rh   Ú	decryptorÚupdater@   r   Úfinalize_with_tagÚfinalizerÍ   Ú_PADDINGr
   rH   ÚwarningsÚwarnÚDeprecatedIn40)rZ   r   ÚbackendÚmÚp1Úp2re   ÚkdfnameÚ
kdfoptionsÚnkeysÚpubdataÚpub_key_typeÚkformatrÅ   Úciphername_bytesÚblklenr0   ÚedataÚtagr   Úkbufr   rf   ÚdecÚck1Úck2rP   rÄ   rð   s                                r    Úload_ssh_private_keyr:  Z  s�  € ô 
×Ñ˜6 4Ô(ØÐÜ×Ñ˜: xÔ0ä�‰�tÓ€AÙÜÐ9Ó:Ð:Ø	
�‰�‹€BØ	
�‰ˆq‹€BÜ×Ñœz¨$Ó/°°2Ð6Ó7€DØ�?‰?œ9Ô%ÜÐ9Ó:Ð:Ü�dÓœC¤	›NÐ,Ð-€Dô # 4Ó(Ñ€J�Ü Ó%�M€GˆTÜ" 4Ó(Ñ€J�Ü˜4“.�K€Eˆ4Ø�‚zÜÐ1Ó2Ð2ô   Ó%�M€GˆTÜ'¨Ó0Ñ€L�'Ü˜lÓ+€GØ ×+Ñ+¨GÓ4Ñ€IˆwÜ�Ôà�GÐ¤¬ Ó.Ø%×-Ñ-Ó/ÐØ¤<Ñ/Ü&Ø&Ð'7Ð&:Ð;óð ð ”gÒÜ&Ð):¸7¸+Ð'FÓGÐGÜÐ.Ñ/×9Ñ9ˆÜÐ/Ñ0×8Ñ8ˆä! $Ó'‰ˆˆtô Ð(Ñ)×1Ò1Ü˜“+ˆCÜ�3‹x˜7Ò"Ü Ð!NÓOÐOä˜ÔÜ˜% Ô(Ü  Ó,‰
ˆˆdÜ “~‰ˆ�Ü�TÔÜÐ,¨h¸¿¹»ÈÓOˆØ�n‰nÓˆÜ˜3Ÿ:™: eÓ,Ó-ˆÜÐ(Ñ)×1Ò1Ü˜cÔ#8Ô9Ñ9Ü˜×.Ñ.¨sÓ3Õ4ô ˜Ÿ™›Õ(ô " $Ó'‰ˆˆtÜ�TÔØˆÜ˜% Ô(Ü˜%“�J€CˆÜ˜%“�J€CˆØ
ˆc‚zÜÐ8Ó9Ð9ô " %Ó(�O€HˆeØ�<ÒÜÐ:Ó;Ð;Ø ×-Ñ-¨e°YÓ?Ñ€K�ä˜5Ó!�H€A€uð ”˜œ3˜u›:Ð&Ò&ÜÐ8Ó9Ð9ä�+œs×0Ñ0Ô1Ü�‰ðä× Ñ Øõ		
ð Ðr"   c                óÂ  — t        j                  d|«       t        | t        j                  «      r&t        j                  dt         j                  d¬«       t        | «      }t        |«      }t        «       }|r“t        }t        |   j                  }t        }t        }	t        |t         «      r|j"                  �|j"                  }	t%        j&                  d«      }
|j)                  |
«       |j+                  |	«       t-        |||
|	«      }nt.        x}}d}d}d}t%        j&                  d«      }d	}t        «       }|j)                  |«       |j1                  | j3                  «       |«       t        ||g«      }|j)                  |«       |j5                  | |«       |j)                  |«       |j7                  t8        d||j;                  «       |z  z
   «       t        «       }|j7                  t<        «       |j)                  |«       |j)                  |«       |j)                  |«       |j+                  |«       |j)                  |«       |j)                  |«       |j;                  «       }|j;                  «       }t?        tA        ||z   «      «      }|jC                  |«       ||z
  }|�&|jE                  «       jG                  ||| ||d «       tI        |d| «      S )
z3Serialize private key with OpenSSH custom encoding.r   úISSH DSA key support is deprecated and will be removed in a future releaserk   r  Nr$   rv   r%   r"   )%r   r  r@   r
   rH   r%  r&  r'  rQ   r  r…   Ú_DEFAULT_CIPHERr:   r-   r  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomr    r—   rh   r  rÑ   rC   rÔ   r‘   r$  rŸ   r  r�   rž   r­   Ú	encryptorÚupdate_intor]   )rÄ   r   Úencryption_algorithmrP   r1  Úf_kdfoptionsre   r3  r,  r   r   rf   r.  ÚcheckvalÚcommentÚf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenr°   Úofss                         r    Ú_serialize_ssh_private_keyrN  Â  s  € ô 
×Ñ�z 8Ô,Ü�+œs×0Ñ0Ô1Ü�‰ð*ä× Ñ Øõ		
ô ! Ó-€HÜ˜hÓ'€Gô “;€LÙÜ$ˆ
Ü˜jÑ)×3Ñ3ˆÜˆÜ ˆäÐ+Ô-HÔIØ$×0Ñ0Ð<à)×5Ñ5ˆFÜ�z‰z˜"‹~ˆØ×Ñ Ô%Ø×Ñ˜VÔ$Ü˜J¨°$¸Ó?‰ä$Ð$ˆ
�WØˆØˆØ€EÜ�z‰z˜!‹}€HØ€Gô “;€LØ×Ñ˜HÔ%Ø×Ñ˜+×0Ñ0Ó2°LÔAä˜8 XÐ.Ó/€IØ×Ñ˜Ô"Ø×Ñ˜;¨	Ô2Ø×Ñ˜Ô!Ø×Ñ”hÐE ¨9¯>©>Ó+;¸fÑ+DÑ!EÐFÔGô ‹[€FØ
‡N�N”9ÔØ
×Ñ�jÔ!Ø
×Ñ�gÔØ
×Ñ�lÔ#Ø
‡N�N�5ÔØ
×Ñ�lÔ#Ø
×Ñ�iÔ ð �>‰>Ó€DØ�;‰;‹=€DÜ
”Y˜t f™}Ó-Ó
.€CØ
‡M�M�#ÔØ
�‰+€Cð ÐØ�‰Ó×$Ñ$ S¨¨T ]°C¸¸°IÔ>ä˜3˜u ˜:Ó&Ð&r"   c                  ó   — e Zd ZdZdZy)ÚSSHCertificateTyper%   r  N)r3   r4   r5   ÚUSERÚHOSTr7   r"   r    rP  rP    s   „ Ø€DØ�Dr"   rP  c                  ó  — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zdd„Zedd„«       Zedd„«       Zedd„«       Z	edd„«       Z
edd„«       Zedd	„«       Zedd
„«       Zedd„«       Zdd„Zdd„Zdd„Zy)ÚSSHCertificatec                ó6  — || _         || _        || _        	 t        |«      | _        || _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        || _        || _        || _        || _        y # t
        $ r t        d«      ‚w xY w)NzInvalid certificate type)Ú_nonceÚ_public_keyÚ_serialrP  Ú_typerN   Ú_key_idÚ_valid_principalsÚ_valid_afterÚ_valid_beforeÚ_critical_optionsÚ_extensionsÚ	_sig_typeÚ_sig_keyÚ_inner_sig_typeÚ
_signatureÚ_cert_key_typeÚ
_cert_bodyÚ_tbs_cert_body)r‹   rV  rW  rX  Ú_cctyperZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rf  rd  re  s                     r    r�   zSSHCertificate.__init__#  s­   € ð( ˆŒØ&ˆÔØˆŒð	9Ü+¨GÓ4ˆDŒJð ˆŒØ!2ˆÔØ(ˆÔØ*ˆÔØ!2ˆÔØ&ˆÔØ"ˆŒØ ˆŒØ.ˆÔØ$ˆŒØ,ˆÔØ$ˆŒØ,ˆÕøô ò 	9ÜÐ7Ó8Ð8ð	9ús   —B ÂBc                ó,   — t        | j                  «      S r‰   )rœ   rV  r¦   s    r    ÚnoncezSSHCertificate.nonceL  s   € ä�T—[‘[Ó!Ð!r"   c                óJ   — t        j                  t        | j                  «      S r‰   )ÚtypingÚcastÚSSHCertPublicKeyTypesrW  r¦   s    r    rC   zSSHCertificate.public_keyP  s   € ô �{‰{Ô0°$×2BÑ2BÓCÐCr"   c                ó   — | j                   S r‰   )rX  r¦   s    r    ÚserialzSSHCertificate.serialU  s   € à�|‰|Ðr"   c                ó   — | j                   S r‰   )rY  r¦   s    r    ÚtypezSSHCertificate.typeY  s   € à�z‰zÐr"   c                ó,   — t        | j                  «      S r‰   )rœ   rZ  r¦   s    r    Úkey_idzSSHCertificate.key_id]  s   € ä�T—\‘\Ó"Ð"r"   c                ó   — | j                   S r‰   )r[  r¦   s    r    Úvalid_principalszSSHCertificate.valid_principalsa  ó   € à×%Ñ%Ð%r"   c                ó   — | j                   S r‰   )r]  r¦   s    r    Úvalid_beforezSSHCertificate.valid_beforee  s   € à×!Ñ!Ð!r"   c                ó   — | j                   S r‰   )r\  r¦   s    r    Úvalid_afterzSSHCertificate.valid_afteri  s   € à× Ñ Ð r"   c                ó   — | j                   S r‰   )r^  r¦   s    r    Úcritical_optionszSSHCertificate.critical_optionsm  rv  r"   c                ó   — | j                   S r‰   )r_  r¦   s    r    Ú
extensionszSSHCertificate.extensionsq  s   € à×ÑÐr"   c                ó‚   — t        | j                  «      }|j                  | j                  «      \  }}t	        |«       |S r‰   )r  r`  r¿   ra  rc   )r‹   Ú	sigformatÚsignature_keyÚsigkey_rests       r    r�  zSSHCertificate.signature_keyu  s7   € Ü# D§N¡NÓ3ˆ	Ø%.×%:Ñ%:¸4¿=¹=Ó%IÑ"ˆ�{Ü�[Ô!ØÐr"   c                óˆ   — t        | j                  «      dz   t        j                  t        | j                  «      d¬«      z   S )Nó    F)Únewline)rœ   rd  r  Ú
b2a_base64re  r¦   s    r    rö   zSSHCertificate.public_bytes{  s<   € ä�$×%Ñ%Ó&Øñä×!Ñ!¤%¨¯©Ó"8À%ÔHñIð	
r"   c                óì  — | j                  «       }t        |t        j                  «      r9|j	                  t        | j                  «      t        | j                  «      «       y t        |t        j                  «      r–t        | j                  «      \  }}t        |«      \  }}t        |«       t        j                  ||«      }t        |j                  «      }|j	                  |t        | j                  «      t        j                   |«      «       y t        |t"        j$                  «      sJ ‚| j&                  t(        k(  rt+        j,                  «       }nQ| j&                  t.        k(  rt+        j0                  «       }n)| j&                  t2        k(  sJ ‚t+        j4                  «       }|j	                  t        | j                  «      t        | j                  «      t7        j8                  «       |«       y r‰   )r�  r@   r   rL   Úverifyrœ   rc  rf  r   rD   r~   rc   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrS   ÚECDSAr   rF   rb  rG   r	   ÚSHA1Ú_SSH_RSA_SHA256ÚSHA256Ú_SSH_RSA_SHA512ÚSHA512r   ÚPKCS1v15)r‹   r�  ÚrrZ   ÚsÚcomputed_sigÚhash_algs          r    Úverify_cert_signaturez$SSHCertificate.verify_cert_signature‚  sf  € Ø×*Ñ*Ó,ˆÜ�m¤W×%=Ñ%=Ô>Ø× Ñ Ü�d—o‘oÓ&¬¨d×.AÑ.AÓ(Bõô ˜¤r×'@Ñ'@ÔAä  §¡Ó1‰GˆAˆtÜ  Ó&‰GˆAˆtÜ˜ÔÜ%×:Ñ:¸1¸aÓ@ˆLÜ'¨×(;Ñ(;Ó<ˆHØ× Ñ Øœe D×$7Ñ$7Ó8¼"¿(¹(À8Ó:Lõô ˜m¬S×-=Ñ-=Ô>Ñ>Ø×#Ñ#¤xÒ/Ü!Ÿ;™;›=‘Ø×%Ñ%¬Ò8Ü!Ÿ=™=›?‘à×+Ñ+¬Ò>Ñ>Ü!Ÿ=™=›?�Ø× Ñ Ü�d—o‘oÓ&Ü�d×)Ñ)Ó*Ü× Ñ Ó"Øõ	r"   N)"rV  r�   rW  ÚSSHPublicKeyTypesrX  r*   rg  r*   rZ  r�   r[  r†   r\  r*   r]  r*   r^  údict[bytes, bytes]r_  r™  r`  r�   ra  r�   rb  r�   rc  r�   rf  r�   rd  rœ   re  r�   r´   )r±   rm  r³   )r±   rP  )r±   r†   )r±   r™  )r±   r²   )r3   r4   r5   r�   Úpropertyri  rC   ro  rq  rs  ru  rx  rz  r|  r~  r�  rö   r—  r7   r"   r    rT  rT  "  sy  „ ð'-àð'-ð 'ð'-ð ð	'-ð
 ð'-ð ð'-ð 'ð'-ð ð'-ð ð'-ð .ð'-ð (ð'-ð ð'-ð ð'-ð $ð'-ð ð'-ð  #ð!'-ð" ð#'-ð$ ó%'-ðR ò"ó ð"óDð
 òó ðð òó ðð ò#ó ð#ð ò&ó ð&ð ò"ó ð"ð ò!ó ð!ð ò&ó ð&ð ò ó ð óó
ôr"   rT  c                ó  — t        | t        j                  «      rt        j                  «       S t        | t        j
                  «      rt        j                  «       S t        | t        j                  «      sJ ‚t        j                  «       S r‰   )	r@   r   Ú	SECP256R1r	   r�  Ú	SECP384R1ÚSHA384Ú	SECP521R1r‘  )rS   s    r    r‹  r‹  £  sS   € Ü�%œŸ™Ô&Ü�}‰}‹ÐÜ	�Eœ2Ÿ<™<Ô	(Ü�}‰}‹Ðä˜%¤§¡Ô.Ñ.Ü�}‰}‹Ðr"   c                ó¶  — t        j                  d| «       t        j                  | «      }|st	        d«      ‚|j                  d«      x}}|j                  d«      }d}|j                  t        «      rd}|d t        t        «        }|t        k(  r|st        d«      ‚t        |«      }	 t        t        j                  |«      «      }|r|}	t#        |«      \  }
}|
|k7  rt	        d	«      ‚|rt#        |«      \  }}|j%                  |«      \  }}|�r”t'        |«      \  }}t)        |«      \  }}t#        |«      \  }}t#        |«      \  }}g }|r+t#        |«      \  }}|j+                  t-        |«      «       |rŒ+t'        |«      \  }}t'        |«      \  }}t#        |«      \  }}t/        |«      }t#        |«      \  }}t/        |«      }t#        |«      \  }}t#        |«      \  }}t#        |«      \  }}|t        k(  r|st        d
«      ‚	d t        |«        }t#        |«      \  }}t1        |«       t#        |«      \  }} |t2        k(  r|t4        t6        t2        fvs|t2        k7  r||k7  rt	        d«      ‚t#        | «      \  }!} t1        | «       t9        |||||||||||||!|||	«      S t1        |«       |S # t        t        j                   f$ r t	        d«      ‚w xY w)NrZ   zInvalid line formatr%   r  FTz-DSA keys aren't supported in SSH certificateszInvalid formatzInvalid key formatz3DSA signatures aren't supported in SSH certificatesz!Signature key type does not match)r   r  Ú_SSH_PUBKEY_RCÚmatchrN   ÚgroupÚendswithÚ_CERT_SUFFIXr_   rJ   r   r  r�   r  r  Ú	TypeErrorÚErrorrz   r¿   rw   rr   r�   rœ   Ú_parse_exts_optsrc   rG   rŽ  r�  rT  )"rZ   Ú_legacy_dsa_allowedr)  rP   Úorig_key_typeÚkey_bodyÚ	with_certr1  ÚrestÚ	cert_bodyÚinner_key_typeri  rC   ro  Úcctypers  Ú
principalsru  Ú	principalrz  rx  Úcrit_optionsr|  Úextsr~  rð   Úsig_key_rawÚsig_typeÚsig_keyÚtbs_cert_bodyÚsignature_rawÚinner_sig_typeÚsig_restÚ	signatures"                                     r    Ú_load_ssh_public_identityr½  ­  s  € ô 
×Ñ˜6 4Ô(ä×Ñ˜TÓ"€AÙÜÐ.Ó/Ð/Ø Ÿw™w q›zÐ)€Hˆ}Ø�w‰w�q‹z€HØ€IØ×ÑœÔ&Øˆ	ØÐ0œs¤<Ó0Ð0Ð1ˆØ”8ÒÑ$7Ü"Ø;ó
ð 	
ô ˜hÓ'€Gð+Üœ(×-Ñ-¨hÓ7Ó8ˆñ Øˆ	Ü& tÓ,Ñ€N�DØ˜Ò&ÜÐ-Ó.Ð.ÙÜ! $Ó'‰ˆˆtØ×*Ñ*¨4Ó0Ñ€J�ÚÜ “~‰ˆ�Ü “~‰ˆ�Ü" 4Ó(‰ˆ�Ü& tÓ,Ñˆ
�DØÐÙÜ$/°
Ó$;Ñ!ˆI�zØ×#Ñ#¤E¨)Ó$4Ô5ò ô % T›NÑˆ�TÜ% d›^Ñˆ�dÜ(¨Ó.Ñˆ�dÜ+¨LÓ9ÐÜ  Ó&‰
ˆˆdÜ% dÓ+ˆ
ä˜dÓ#‰ˆˆ4Ü'¨Ó-Ñˆ�TÜ'¨Ó4Ñˆ�'Ø”xÒÑ(;Ü&ØEóð ð " ,¤S¨£Y JÐ/ˆÜ)¨$Ó/Ñˆ�tÜ�TÔÜ#.¨}Ó#=Ñ ˆ˜ð œÒ ØÜ#¤_´hÐ?ñ@àœ(Ò" ~¸Ò'AÜÐ@ÓAÐAÜ)¨(Ó3Ñˆ	�8Ü�XÔÜØØØØØØØØØØØØØØØØØó#
ð 	
ô( 	�TÔØÐøôK ”x—~‘~Ð&ò +ÜÐ)Ó*Ð*ð+ús   Â+J3 Ê3%Kc                ó   — t        | «      S r‰   )r½  rb   s    r    Úload_ssh_public_identityr¿    s   € ô % TÓ*Ð*r"   c                ó2  — i }d }| r�t        | «      \  }} t        |«      }||v rt        d«      ‚|�||k  rt        d«      ‚t        | «      \  }} t        |«      dkD  r't        |«      \  }}t        |«      dkD  rt        d«      ‚t        |«      ||<   |}| rŒ�|S )NzDuplicate namezFields not lexically sortedr   z!Unexpected extra data after value)rz   rœ   rN   r_   )Ú	exts_optsÚresultÚ	last_namerT   ÚbnameÚvalueÚextras          r    r¨  r¨    s¯   € Ø!#€FØ€IÙ
Ü% iÓ0‰ˆˆiÜ˜T“{ˆØ�F‰?ÜÐ-Ó.Ð.ØÐ  U¨YÒ%6ÜÐ:Ó;Ð;Ü& yÓ1ÑˆˆyÜˆu‹:˜Š>Ü& uÓ-‰LˆE�5Ü�5‹z˜AŠ~Ü Ð!DÓEÐEÜ˜e›ˆˆu‰Øˆ	ò ð €Mr"   c                óæ   — t        | d¬«      }t        |t        «      r|j                  «       }n|}t        |t        j
                  «      r&t        j                  dt        j                  d¬«       |S )NT)r©  r  r  r  )
r½  r@   rT  rC   r
   rI   r%  r&  r   r'  )rZ   r(  Úcert_or_keyrC   s       r    Úload_ssh_public_keyrÉ  &  sb   € ô ,¨DÀdÔK€Kä�+œ~Ô.Ø ×+Ñ+Ó-‰
à ˆ
ä�*œc×.Ñ.Ô/Ü�‰ðä× Ñ Øõ		
ð Ðr"   c                ó’  — t        | t        j                  «      r&t        j                  dt
        j                  d¬«       t        | «      }t        |«      }t        «       }|j                  |«       |j                  | |«       t        j                  |j                  «       «      j                  «       }dj!                  |d|g«      S )z&One-line public key format for OpenSSHr<  rk   r  r"   r„  )r@   r
   rI   r%  r&  r   r'  rQ   r  r…   r    rÑ   r  r†  r¯   ÚstriprX   )rC   rP   r1  rÏ   Úpubs        r    Úserialize_ssh_public_keyrÍ  :  sŸ   € ä�*œc×.Ñ.Ô/Ü�‰ð*ä× Ñ Øõ		
ô ! Ó,€HÜ˜hÓ'€Gä‹K€EØ	×Ñ�XÔØ×Ñ˜* eÔ,ä
×
Ñ
˜eŸm™m›oÓ
.×
4Ñ
4Ó
6€CØ�8‰8�X˜t SÐ)Ó*Ð*r"   é   c            
      óÎ   — e Zd Zddddg dddg g f
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 dd„Zdd„Zdd„Zdd„Z	 	 	 	 dd„Zd	„ Z	dd
„Z
dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zdd„Zy)ÚSSHCertificateBuilderNFc                ó�   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        y r‰   ©
rW  rX  rY  rZ  r[  Ú_valid_for_all_principalsr]  r\  r^  r_  )r‹   rW  rX  rY  rZ  r[  rÓ  r]  r\  r^  r_  s              r    r�   zSSHCertificateBuilder.__init__[  sQ   € ð 'ˆÔØˆŒØˆŒ
ØˆŒØ!2ˆÔØ)BˆÔ&Ø*ˆÔØ(ˆÔØ!2ˆÔØ&ˆÕr"   c                ó–  — t        |t        j                  t        j                  t
        j                  f«      st        d«      ‚| j                  �t        d«      ‚t        || j                  | j                  | j                  | j                  | j                  | j                   | j"                  | j$                  | j&                  ¬«
      S )Nr?   zpublic_key already setrÒ  )r@   r   rD   r   rF   r   rL   r¦  rW  rN   rÐ  rX  rY  rZ  r[  rÓ  r]  r\  r^  r_  )r‹   rC   s     r    rC   z SSHCertificateBuilder.public_keys  s°   € ô Øä×)Ñ)Ü× Ñ Ü×(Ñ(ðô
ô Ð2Ó3Ð3Ø×ÑÐ'ÜÐ5Ó6Ð6ä$Ø"Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                óˆ  — t        |t        «      st        d«      ‚d|cxk  rdk  st        d«      ‚ t        d«      ‚| j                  �t        d«      ‚t        | j                  || j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  ¬«
      S )Nzserial must be an integerr   ì            z"serial must be between 0 and 2**64zserial already setrÒ  )r@   r*   r¦  rN   rX  rÐ  rW  rY  rZ  r[  rÓ  r]  r\  r^  r_  )r‹   ro  s     r    ro  zSSHCertificateBuilder.serial�  sµ   € Ü˜&¤#Ô&ÜÐ7Ó8Ð8Ø�FÔ"˜UÒ"ÜÐAÓBÐBð #ÜÐAÓBÐBØ�<‰<Ð#ÜÐ1Ó2Ð2ä$Ø×(Ñ(ØØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                óD  — t        |t        «      st        d«      ‚| j                  �t	        d«      ‚t        | j                  | j                  || j                  | j                  | j                  | j                  | j                  | j                  | j                  ¬«
      S )Nz"type must be an SSHCertificateTypeztype already setrÒ  )r@   rP  r¦  rY  rN   rÐ  rW  rX  rZ  r[  rÓ  r]  r\  r^  r_  )r‹   rq  s     r    rq  zSSHCertificateBuilder.type¤  sŒ   € Ü˜$Ô 2Ô3ÜÐ@ÓAÐAØ�:‰:Ð!ÜÐ/Ó0Ð0ä$Ø×(Ñ(Ø—L‘LØØ—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                óD  — t        |t        «      st        d«      ‚| j                  �t	        d«      ‚t        | j                  | j                  | j                  || j                  | j                  | j                  | j                  | j                  | j                  ¬«
      S )Nzkey_id must be byteszkey_id already setrÒ  )r@   rœ   r¦  rZ  rN   rÐ  rW  rX  rY  r[  rÓ  r]  r\  r^  r_  )r‹   rs  s     r    rs  zSSHCertificateBuilder.key_id·  s‹   € Ü˜&¤%Ô(ÜÐ2Ó3Ð3Ø�<‰<Ð#ÜÐ1Ó2Ð2ä$Ø×(Ñ(Ø—L‘LØ—*‘*ØØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                ó´  — | j                   rt        d«      ‚t        d„ |D «       «      r|st        d«      ‚| j                  rt        d«      ‚t        |«      t        kD  rt        d«      ‚t        | j                  | j                  | j                  | j                  || j                   | j                  | j                  | j                  | j                  ¬«
      S )NzDPrincipals can't be set because the cert is valid for all principalsc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr‰   )r@   rœ   )Ú.0râ   s     r    ú	<genexpr>z9SSHCertificateBuilder.valid_principals.<locals>.<genexpr>Ó  s   è ø€ ÒC¨Q”J˜q¤%×(ÑCùs   ‚z5principals must be a list of bytes and can't be emptyzvalid_principals already setz:Reached or exceeded the maximum number of valid_principalsrÒ  )rÓ  rN   Úallr¦  r[  r_   Ú_SSHKEY_CERT_MAX_PRINCIPALSrÐ  rW  rX  rY  rZ  r]  r\  r^  r_  )r‹   ru  s     r    ru  z&SSHCertificateBuilder.valid_principalsÊ  sÖ   € ð ×)Ò)Üð%óð ô
 ÑCÐ2BÔCÔCÙ#äØGóð ð ×!Ò!ÜÐ;Ó<Ð<äÐÓ Ô#>Ò>ÜØLóð ô %Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ.Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                ó<  — | j                   rt        d«      ‚| j                  rt        d«      ‚t        | j                  | j
                  | j                  | j                  | j                   d| j                  | j                  | j                  | j                  ¬«
      S )Nz@valid_principals already set, can't set valid_for_all_principalsz$valid_for_all_principals already setTrÒ  )r[  rN   rÓ  rÐ  rW  rX  rY  rZ  r]  r\  r^  r_  r¦   s    r    Úvalid_for_all_principalsz.SSHCertificateBuilder.valid_for_all_principalsî  s�   € Ø×!Ò!Üð+óð ð ×)Ò)ÜÐCÓDÐDä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*Ø×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                ó�  — t        |t        t        f«      st        d«      ‚t        |«      }|dk  s|dk\  rt	        d«      ‚| j
                  �t	        d«      ‚t        | j                  | j                  | j                  | j                  | j                  | j                  || j                  | j                  | j                  ¬«
      S )Nz$valid_before must be an int or floatr   rÖ  zvalid_before must [0, 2**64)zvalid_before already setrÒ  )r@   r*   Úfloatr¦  rN   r]  rÐ  rW  rX  rY  rZ  r[  rÓ  r\  r^  r_  )r‹   rx  s     r    rx  z"SSHCertificateBuilder.valid_before  s´   € Ü˜,¬¬e¨Ô5ÜÐBÓCÐCÜ˜<Ó(ˆØ˜!Ò˜|¨uÒ4ÜÐ;Ó<Ð<Ø×ÑÐ)ÜÐ7Ó8Ð8ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ&Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                ó�  — t        |t        t        f«      st        d«      ‚t        |«      }|dk  s|dk\  rt	        d«      ‚| j
                  �t	        d«      ‚t        | j                  | j                  | j                  | j                  | j                  | j                  | j                  || j                  | j                  ¬«
      S )Nz#valid_after must be an int or floatr   rÖ  zvalid_after must [0, 2**64)zvalid_after already setrÒ  )r@   r*   râ  r¦  rN   r\  rÐ  rW  rX  rY  rZ  r[  rÓ  r]  r^  r_  )r‹   rz  s     r    rz  z!SSHCertificateBuilder.valid_after  s³   € Ü˜+¬¬U |Ô4ÜÐAÓBÐBÜ˜+Ó&ˆØ˜Š?˜k¨UÒ2ÜÐ:Ó;Ð;Ø×ÑÐ(ÜÐ6Ó7Ð7ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø$Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r"   c                óº  — t        |t        «      rt        |t        «      st        d«      ‚|| j                  D ��cg c]  \  }}|‘Œ	 c}}v rt	        d«      ‚t        | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  g | j                  ¢|f‘| j                  ¬«
      S c c}}w )Núname and value must be byteszDuplicate critical option namerÒ  )r@   rœ   r¦  r^  rN   rÐ  rW  rX  rY  rZ  r[  rÓ  r]  r\  r_  ©r‹   rT   rÅ  rð   s       r    Úadd_critical_optionz)SSHCertificateBuilder.add_critical_option0  sÁ   € ô ˜$¤Ô&¬j¸ÄÔ.FÜÐ:Ó;Ð;à¨×(>Ñ(>×?™W˜T 1’DÓ?Ñ?ÜÐ=Ó>Ð>ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*ØF × 6Ñ 6ÐF¸¸u¸ÐFØ×(Ñ(ô
ð 	
ùó @ó   ¼Cc                óº  — t        |t        «      rt        |t        «      st        d«      ‚|| j                  D ��cg c]  \  }}|‘Œ	 c}}v rt	        d«      ‚t        | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  g | j                  ¢|f‘¬«
      S c c}}w )Nrå  zDuplicate extension namerÒ  )r@   rœ   r¦  r_  rN   rÐ  rW  rX  rY  rZ  r[  rÓ  r]  r\  r^  ræ  s       r    Úadd_extensionz#SSHCertificateBuilder.add_extensionF  sÀ   € ô ˜$¤Ô&¬j¸ÄÔ.FÜÐ:Ó;Ð;à¨×(8Ñ(8×9™W˜T 1’DÓ9Ñ9ÜÐ7Ó8Ð8ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø:˜$×*Ñ*Ð:¨T°5¨MÐ:ô
ð 	
ùó :rè  c           
     ó"  — t        |t        j                  t        j                  t
        j                  f«      st        d«      ‚| j                  €t        d«      ‚| j                  €dn| j                  }| j                  €t        d«      ‚| j                  €dn| j                  }| j                  s| j                  st        d«      ‚| j                  €t        d«      ‚| j                   €t        d«      ‚| j                   | j                  kD  rt        d	«      ‚| j"                  j%                  d
„ ¬«       | j&                  j%                  d„ ¬«       t)        | j                  «      }|t*        z   }t-        j.                  d«      }t1        |«      }t3        «       }|j5                  |«       |j5                  |«       |j7                  | j                  |«       |j9                  |«       |j;                  | j                  j<                  «       |j5                  |«       t3        «       }	| j                  D ]  }
|	j5                  |
«       Œ |j5                  |	j?                  «       «       |j9                  | j                   «       |j9                  | j                  «       t3        «       }| j"                  D ]p  \  }}|j5                  |«       tA        |«      dkD  r;t3        «       }|j5                  |«       |j5                  |j?                  «       «       Œ`|j5                  |«       Œr |j5                  |j?                  «       «       t3        «       }| j&                  D ]p  \  }}|j5                  |«       tA        |«      dkD  r;t3        «       }|j5                  |«       |j5                  |j?                  «       «       Œ`|j5                  |«       Œr |j5                  |j?                  «       «       |j5                  d«       t)        |«      }t1        |«      }t3        «       }|j5                  |«       |j7                  |jC                  «       |«       |j5                  |j?                  «       «       t        |t
        j                  «      rl|jE                  |j?                  «       «      }t3        «       }|j5                  |«       |j5                  |«       |j5                  |j?                  «       «       �n°t        |t        j                  «      rætG        |jH                  «      }|jE                  |j?                  «       t        jJ                  |«      «      }tM        jN                  |«      \  }}t3        «       }|j5                  |«       t3        «       }|jQ                  |«       |jQ                  |«       |j5                  |j?                  «       «       |j5                  |j?                  «       «       n°t        |t        j                  «      sJ ‚t3        «       }|j5                  tR        «       |jE                  |j?                  «       tU        jV                  «       tY        jZ                  «       «      }|j5                  |«       |j5                  |j?                  «       «       t]        j^                  |j?                  «       «      ja                  «       }tc        jd                  tf        ti        djk                  |d|g«      «      «      S )NzUnsupported private key typezpublic_key must be setr   ztype must be setr"   zAvalid_principals must be set if valid_for_all_principals is Falsezvalid_before must be setzvalid_after must be setz-valid_after must be earlier than valid_beforec                ó   — | d   S ©Nr   r7   ©râ   s    r    ú<lambda>z,SSHCertificateBuilder.sign.<locals>.<lambda>‡  s
   € °!°A±$€ r"   )rO   c                ó   — | d   S rí  r7   rî  s    r    rï  z,SSHCertificateBuilder.sign.<locals>.<lambda>ˆ  s
   € ¨A¨a©D€ r"   r8   r„  )6r@   r   rA   r   rE   r   rK   r¦  rW  rN   rX  rY  rZ  r[  rÓ  r]  r\  r^  Úsortr_  rQ   r¥  r@  rA  r  r…   r    rÑ   rš   r—   rÅ  r¯   r_   rC   Úsignr‹  rS   rŒ  r‰  Údecode_dss_signaturer¢   r�  r   r’  r	   r‘  r  r†  rË  rk  rl  rT  r¿  rX   )r‹   rÄ   ro  rs  rP   Úcert_prefixri  r1  ÚfÚfprincipalsrÈ   ÚfcritrT   rÅ  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafr¼  Úfsigr–  r“  r”  ÚfsigblobÚ	cert_datas                              r    rò  zSSHCertificateBuilder.sign\  se  € ÜØä×*Ñ*Ü×!Ñ!Ü×)Ñ)ðô
ô Ð:Ó;Ð;à×ÑÐ#ÜÐ5Ó6Ð6ð —l‘lÐ*‘°·±ˆà�:‰:ÐÜÐ/Ó0Ð0ð Ÿ™Ð,‘°$·,±,ˆð ×%Ò%¨d×.LÒ.LÜðóð ð
 ×ÑÐ%ÜÐ7Ó8Ð8à×ÑÐ$ÜÐ6Ó7Ð7à×Ñ˜t×1Ñ1Ò1ÜÐLÓMÐMð 	×Ñ×#Ñ#©Ð#Ô7Ø×Ñ×Ñ¡.ÐÔ1ä$ T×%5Ñ%5Ó6ˆØ¤Ñ-ˆô —
‘
˜2“ˆÜ! (Ó+ˆÜ‹KˆØ	�‰�[Ô!Ø	�‰�UÔØ×Ñ˜d×.Ñ.°Ô2Ø	�	‰	�&ÔØ	�	‰	�$—*‘*×"Ñ"Ô#Ø	�‰�VÔÜ“kˆØ×'Ñ'ò 	&ˆAØ×"Ñ" 1Õ%ð	&à	�‰�[×(Ñ(Ó*Ô+Ø	�	‰	�$×#Ñ#Ô$Ø	�	‰	�$×$Ñ$Ô%Ü“ˆØ×1Ñ1ò 	(‰KˆD�%Ø×Ñ˜TÔ"Ü�5‹z˜AŠ~Ü#›+�Ø×"Ñ" 5Ô)Ø× Ñ  §¡Ó!2Õ3à× Ñ  Õ'ð	(ð 	
�‰�U—]‘]“_Ô%Ü‹{ˆØ×+Ñ+ò 	'‰KˆD�%Ø�O‰O˜DÔ!Ü�5‹z˜AŠ~Ü#›+�Ø×"Ñ" 5Ô)Ø—‘ §¡Ó 1Õ2à—‘ Õ&ð	'ð 	
�‰�T—\‘\“^Ô$Ø	�‰�SÔä# KÓ0ˆÜ" 7Ó+ˆÜ‹kˆØ�‰�wÔØ×Ñ˜{×5Ñ5Ó7¸Ô=Ø	�‰�S—[‘[“]Ô#ô �k¤7×#<Ñ#<Ô=Ø#×(Ñ(¨¯©«Ó5ˆIÜ“;ˆDØ�O‰O˜GÔ$Ø�O‰O˜IÔ&Ø�L‰L˜Ÿ™›Ö(Ü˜¤R×%?Ñ%?Ô@Ü'¨×(9Ñ(9Ó:ˆHØ#×(Ñ(¨¯©«´b·h±h¸xÓ6HÓIˆIÜ×2Ñ2°9Ó=‰DˆAˆqÜ“;ˆDØ�O‰O˜GÔ$Ü “{ˆHØ×Ñ˜qÔ!Ø×Ñ˜qÔ!Ø�O‰O˜H×,Ñ,Ó.Ô/Ø�L‰L˜Ÿ™›Õ(ô ˜k¬3×+<Ñ+<Ô=Ñ=ô
 “;ˆDØ�O‰OœOÔ,Ø#×(Ñ(Ø—	‘	“œW×-Ñ-Ó/´·±³óˆIð �O‰O˜IÔ&Ø�L‰L˜Ÿ™›Ô(ä×'Ñ'¨¯	©	«Ó4×:Ñ:Ó<ˆ	ô �{‰{ÜÜ$ S§X¡X¨{¸DÀ)Ð.LÓ%MÓNó
ð 	
r"   )rW  zSSHCertPublicKeyTypes | NonerX  r/   rY  zSSHCertificateType | NonerZ  úbytes | Noner[  r†   rÓ  r1   r]  r/   r\  r/   r^  úlist[tuple[bytes, bytes]]r_  r  )rC   rm  r±   rÐ  )ro  r*   r±   rÐ  )rq  rP  r±   rÐ  )rs  rœ   r±   rÐ  )ru  r†   r±   rÐ  )rx  úint | floatr±   rÐ  )rz  r  r±   rÐ  )rT   rœ   rÅ  rœ   r±   rÐ  )rÄ   ÚSSHCertPrivateKeyTypesr±   rT  )r3   r4   r5   r�   rC   ro  rq  rs  ru  rà  rx  rz  rç  rê  rò  r7   r"   r    rÐ  rÐ  Z  s  „ ð 59Ø"Ø+/Ø $Ø)+Ø*/Ø$(Ø#'Ø79Ø13ð'à1ð'ð ð'ð )ð	'ð
 ð'ð 'ð'ð $(ð'ð "ð'ð !ð'ð 5ð'ð /ó'ð0
Ø/ð
à	ó
ó8
ó*
ó&
ð&"
Ø +ð"
à	ó"
òH
ó,
ó,
ð,
Øð
Ø"'ð
à	ó
ð,
Øð
Ø"'ð
à	ó
ô,G
r"   rÐ  )F)r   rœ   r   rœ   r   r*   r   r*   r   r1   r±   rœ   )rO   z&SSHPrivateKeyTypes | SSHPublicKeyTypesr±   rœ   )rC   rü   r±   rœ   )rZ   rœ   r[   rœ   r\   rœ   r±   rœ   )rZ   rœ   r-   r*   r±   r²   )rZ   rœ   r±   r²   )
re   rœ   r   r  r   rœ   r   r*   r±   z)Cipher[modes.CBC | modes.CTR | modes.GCM])rZ   r�   r±   ztuple[int, memoryview])rZ   r�   r±   ztuple[memoryview, memoryview])r}   r*   r±   rœ   )rP   rœ   r‰   )rZ   rœ   r   r  r(  ú
typing.Anyr±   ÚSSHPrivateKeyTypes)rÄ   r  r   rœ   rD  r   r±   rœ   )rS   rû   r±   zhashes.HashAlgorithm)rZ   rœ   r±   z"SSHCertificate | SSHPublicKeyTypes)rÁ  r�   r±   r™  )rZ   rœ   r(  r  r±   r˜  )rC   r˜  r±   rœ   )zÚ
__future__r   r  Úenumr@  Úrerk  r%  Úbase64r   rY   Údataclassesr   Úcryptographyr   Úcryptography.exceptionsr   Úcryptography.hazmat.primitivesr	   Ú)cryptography.hazmat.primitives.asymmetricr
   r   r   r   r   r‰  Ú&cryptography.hazmat.primitives.ciphersr   r   r   r   Ú,cryptography.hazmat.primitives.serializationr   r   r   r   r   r   Úbcryptr   r!   Ú_bcrypt_supportedÚImportErrorrM   rG   rJ   Ú_ECDSA_NISTP256Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521r¥  rŽ  r�  Úcompiler¡  r  Ú	_SK_STARTÚ_SK_ENDr  r  r=  r>  ÚDOTALLr  r�   rž   Úranger$  r(   ÚAESÚCTRÚCBCÚGCMr:   r6   rU   rQ   rB   r]   r`   rc   rh   rr   rw   rz   r~   rƒ   r…   r·   r×   rè   rþ   rœ  r�  rŸ  r  r  ÚUnionrA   rE   rH   rK   r  r:  rN  rD   rF   rI   rL   r˜  rm  ÚEnumrP  rT  r‹  r½  r¿  r¨  rÉ  rÍ  r  rÞ  rÐ  r7   r"   r    ú<module>r#     s  ðö
 #ã Û Û 	Û 	Û Û Ý 0Ý !å Ý 8Ý 1÷õ õ J÷ó ÷÷ ð9Ý)àÐð €Ø€Ø€Ø(€Ø(€Ø(€Ø'€ð "€Ø!€à�—‘Ð2Ó3€Ø€	Ø2€	Ø
.€Ø
€Ø€Ø€Ø€ð ˆ"�*‰*�Y Ñ)¨GÑ3°R·Y±YÓ
?€ñ ‘i¡ a¨Ó 0Ó1Ó2€ð ÷ð ó ðñ Ø�N‰NØØ�Y‰YØØØØôñ Ø�N‰NØØ�Y‰YØØØØôñ  *Ø�N‰NØØ�Y‰YØØØØô ñ')€Ð%ó ð@ !Ø Ø ñ€óó&'ð  Ñ%Ø˜e‘Oð<Ø
ð<àð<ð ð<ð ó	<ó:ó8ðØðàðð ðð ð	ð
 /óó(?ó?óó,ó+÷3ñ 3÷lC,ñ C,÷LCDñ CD÷LB8ñ B8÷J>%ñ >%ðD ‰m‹oØ‰m‹oØÑ#Ó%Ø‘_ [°,°"·,±,³.ÓAØ‘_ [°,°"·,±,³.ÓAØ‘_ [°,°"·,±,³.ÓAð€óFð —\‘\Ø×ÑØ×ÑØ×ÑØ×ÑðñÐ ð ðeØ
ðeàðeð ðeð ó	eðPJ'Ø#ðJ'àðJ'ð 5ðJ'ð ó	J'ðZ —L‘LØ×ÑØ×ÑØ×ÑØ×ÑðñÐ ð Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ô˜Ÿ™ô ÷
~ñ ~óBð ð\Ø
ð\ð (ó\ð~+Ø
ð+à'ó+óð* (,ðØ
ðØ$ðàóó(+ð(  Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ð "Ð ÷I
ò I
øðY! ò 
9ØÐð #(ð9Øð9àð9ð ð9ð ð	9ð
  ð9ð 
ö9ð
9ús   Á/N ÎNÎN