Ë
    ¹2ÚiSÇ  ã                  óJ  — 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+œZJ	 	 	 	 dWd,„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        úg/var/www/html/acx/venv/lib/python3.12/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typing.Type[algorithms.AES]ÚalgÚintÚkey_lenzTtyping.Union[typing.Type[modes.CTR], typing.Type[modes.CBC], typing.Type[modes.GCM]]ÚmodeÚ	block_lenÚiv_lenútyping.Optional[int]Ú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typing.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                  óp   — 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.útyping.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#typing.Optional[typing.List[bytes]]ÚreturnÚNone)r}   rœ   r±   r²   )r}   r*   r±   r²   )r}   ztyping.Union[bytes, _FragList]r±   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…   ý   sO   … Ù6àÓð ;?ð$Ø7ð$à	ó$óó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_public>  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_publicD  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_privateM  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_publicc  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_privatek  s•   € ð &×5Ñ5Ó7ˆØ(×7Ñ7ˆà×Ñ˜×)Ñ)Ô*Ø×Ñ˜×)Ñ)Ô*à×Ñ˜×*Ñ*Ô+Ø×Ñ˜×-Ñ-Ô.Ø×Ñ˜×*Ñ*Ô+Ø×Ñ˜×*Ñ*Õ+r"   N)rZ   r�   )rZ   r�   r±   z*typing.Tuple[rsa.RSAPublicKey, memoryview])rZ   r�   r±   z+typing.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·   5  sp   „ ñóð Øð à	3ó ð!Øð!à	4ó!ð, Ø*ð Ø3<ð à	ó ð,Ø,ð,Ø6?ð,à	ô,r"   r·   c                  óp   — 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„  sO   € ô ˜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&typing.Tuple[typing.Tuple, memoryview])rZ   r�   r±   z*typing.Tuple[dsa.DSAPublicKey, memoryview])rZ   r�   r±   z+typing.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†   „ ñð"Øð"à	/ó"ð	 Øð	 à	3ó	 ð!Øð!à	4ó!ð *Ø*ð*Ø3<ð*à	ó*ð:Ø,ð:Ø6?ð:à	ó:ôDr"   r×   c                  óp   — 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   Ú
curve_namerí   rC   s        r    r¿   z_SSHFormatECDSA.load_publicß  sN   € ð %)§O¡O°DÓ$9Ñ!Ñˆ�U˜TÜ×.Ñ.×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Å   rð   rí   Ú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±   z3typing.Tuple[ec.EllipticCurvePublicKey, memoryview])rZ   r�   r±   z4typing.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è   Ã  s…   „ ñ	óð
$Øð
$à	/ó
$ð Øð à	<ó ð
!Øð
!à	=ó
!ð Ø3ð Ø<Eð à	ó ð8Ø5ð8Ø?Hð8à	ô8r"   rè   c                  óh   — 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_public3  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±   z2typing.Tuple[ed25519.Ed25519PublicKey, memoryview])rZ   r�   r±   z3typing.Tuple[ed25519.Ed25519PrivateKey, memoryview])rC   zed25519.Ed25519PublicKeyrÏ   r…   r±   r²   )rÄ   zed25519.Ed25519PrivateKeyrÓ   r…   r±   r²   rÕ   r7   r"   r    rý   rý   
  s€   „ ñðØðà	/óð Øð à	;ó ð!Øð!à	<ó!ð)Ø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  W  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Ä   Úcomments                                r    Úload_ssh_private_keyr:  h  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Ð9Ü˜×.Ñ.¨sÓ3Õ4ô ˜Ÿ™›Õ(ô " $Ó'‰ˆˆtÜ�TÔØˆÜ˜% Ô(Ü˜%“�J€CˆÜ˜%“�J€CˆØ
ˆc‚zÜÐ8Ó9Ð9ô " %Ó(�O€HˆeØ�<ÒÜÐ:Ó;Ð;Ø ×-Ñ-¨e°YÓ?Ñ€K�Ü  Ó'�N€Gˆ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   r0  Úf_kdfoptionsre   r2  r+  r   r   rf   r-  Úcheckvalr9  Úf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenr°   Úofss                         r    Ú_serialize_ssh_private_keyrM  Ï  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    rO  rO  *  s   „ Ø€DØ�Dr"   rO  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Ú_serialrO  Ú_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‹   rU  rV  rW  Ú_cctyperY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  re  rc  rd  s                     r    r�   zSSHCertificate.__init__0  s­   € ð( ˆŒØ&ˆÔØˆŒð	9Ü+¨GÓ4ˆDŒJð ˆŒØ!2ˆÔØ(ˆÔØ*ˆÔØ!2ˆÔØ&ˆÔØ"ˆŒØ ˆŒØ.ˆÔØ$ˆŒØ,ˆÔØ$ˆŒØ,ˆÕøô ò 	9ÜÐ7Ó8Ð8ð	9ús   —B ÂBc                ó,   — t        | j                  «      S r‰   )rœ   rU  r¦   s    r    ÚnoncezSSHCertificate.nonceY  s   € ä�T—[‘[Ó!Ð!r"   c                óJ   — t        j                  t        | j                  «      S r‰   )ÚtypingÚcastÚSSHCertPublicKeyTypesrV  r¦   s    r    rC   zSSHCertificate.public_key]  s   € ô �{‰{Ô0°$×2BÑ2BÓCÐCr"   c                ó   — | j                   S r‰   )rW  r¦   s    r    ÚserialzSSHCertificate.serialb  s   € à�|‰|Ðr"   c                ó   — | j                   S r‰   )rX  r¦   s    r    ÚtypezSSHCertificate.typef  s   € à�z‰zÐr"   c                ó,   — t        | j                  «      S r‰   )rœ   rY  r¦   s    r    Úkey_idzSSHCertificate.key_idj  s   € ä�T—\‘\Ó"Ð"r"   c                ó   — | j                   S r‰   )rZ  r¦   s    r    Úvalid_principalszSSHCertificate.valid_principalsn  ó   € à×%Ñ%Ð%r"   c                ó   — | j                   S r‰   )r\  r¦   s    r    Úvalid_beforezSSHCertificate.valid_beforer  s   € à×!Ñ!Ð!r"   c                ó   — | j                   S r‰   )r[  r¦   s    r    Úvalid_afterzSSHCertificate.valid_afterv  s   € à× Ñ Ð r"   c                ó   — | j                   S r‰   )r]  r¦   s    r    Úcritical_optionszSSHCertificate.critical_optionsz  ru  r"   c                ó   — | j                   S r‰   )r^  r¦   s    r    Ú
extensionszSSHCertificate.extensions~  s   € à×ÑÐr"   c                ó‚   — t        | j                  «      }|j                  | j                  «      \  }}t	        |«       |S r‰   )r  r_  r¿   r`  rc   )r‹   Ú	sigformatÚsignature_keyÚsigkey_rests       r    r€  zSSHCertificate.signature_key‚  s7   € Ü# D§N¡NÓ3ˆ	Ø%.×%:Ñ%:¸4¿=¹=Ó%IÑ"ˆ�{Ü�[Ô!ØÐr"   c                óˆ   — t        | j                  «      dz   t        j                  t        | j                  «      d¬«      z   S )Nó    F)Únewline)rœ   rc  r  Ú
b2a_base64rd  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œ   rb  re  r   rD   r~   rc   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrS   ÚECDSAr   rF   ra  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�  sl  € Ø×*Ñ*Ó,ˆÜ�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)"rU  r�   rV  ÚSSHPublicKeyTypesrW  r*   rf  r*   rY  r�   rZ  r†   r[  r*   r\  r*   r]  útyping.Dict[bytes, bytes]r^  r˜  r_  r�   r`  r�   ra  r�   rb  r�   re  r�   rc  rœ   rd  r�   r´   )r±   rl  r³   )r±   rO  )r±   r†   )r±   r˜  )r±   r²   )r3   r4   r5   r�   Úpropertyrh  rC   rn  rp  rr  rt  rw  ry  r{  r}  r€  rõ   r–  r7   r"   r    rS  rS  /  sy  „ ð'-àð'-ð 'ð'-ð ð	'-ð
 ð'-ð ð'-ð .ð'-ð ð'-ð ð'-ð 5ð'-ð /ð'-ð ð'-ð ð'-ð $ð'-ð ð'-ð  #ð!'-ð" ð#'-ð$ ó%'-ðR ò"ó ð"óDð
 òó ðð òó ðð ò#ó ð#ð ò&ó ð&ð ò"ó ð"ð ò!ó ð!ð ò&ó ð&ð ò ó ð óó
ôr"   rS  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Š  °  sV   € Ü�%œŸ™Ô&Ü�}‰}‹ÐÜ	�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�  rS  )"rZ   Ú_legacy_dsa_allowedr(  rP   Úorig_key_typeÚkey_bodyÚ	with_certr0  ÚrestÚ	cert_bodyÚinner_key_typerh  rC   rn  Úcctyperr  Ú
principalsrt  Ú	principalry  rw  Úcrit_optionsr{  Úextsr}  Ú_Ú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                óž  — 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 # t        $ r) t	        j
                  dt        j                  d¬«       Y ŒFw xY w)NzDuplicate namezFields not lexically sortedr   z!Unexpected extra data after valuez{This certificate has an incorrect encoding for critical options or extensions. This will be an exception in cryptography 42rk   r  )rz   rœ   rN   r_   r$  r%  r   ÚDeprecatedIn41)Ú	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‹:˜Š>ðJÜ*¨5Ó1‘��uô �u“: ’>Ü$Ð%HÓIÐIÜ˜e›ˆˆu‰Øˆ	ò/ ð0 €Møô ò Ü—‘ð&ô ×(Ñ(Ø ÷ðús   ÁB Â/CÃC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@   rS  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   r0  rÏ   Úpubs        r    Úserialize_ssh_public_keyrÎ  Q  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‰   ©
rV  rW  rX  rY  rZ  Ú_valid_for_all_principalsr\  r[  r]  r^  )r‹   rV  rW  rX  rY  rZ  rÔ  r\  r[  r]  r^  s              r    r�   zSSHCertificateBuilder.__init__r  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¥  rV  rN   rÑ  rW  rX  rY  rZ  rÔ  r\  r[  r]  r^  )r‹   rC   s     r    rC   z SSHCertificateBuilder.public_keyŠ  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   rW  rÑ  rV  rX  rY  rZ  rÔ  r\  r[  r]  r^  )r‹   rn  s     r    rn  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@   rO  r¥  rX  rN   rÑ  rV  rW  rY  rZ  rÔ  r\  r[  r]  r^  )r‹   rp  s     r    rp  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¥  rY  rN   rÑ  rV  rW  rX  rZ  rÔ  r\  r[  r]  r^  )r‹   rr  s     r    rr  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¥  rZ  r_   Ú_SSHKEY_CERT_MAX_PRINCIPALSrÑ  rV  rW  rX  rY  r\  r[  r]  r^  )r‹   rt  s     r    rt  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Ó  )rZ  rN   rÔ  rÑ  rV  rW  rX  rY  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Ñ  rV  rW  rX  rY  rZ  rÔ  r[  r]  r^  )r‹   rw  s     r    rw  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Ñ  rV  rW  rX  rY  rZ  rÔ  r\  r]  r^  )r‹   ry  s     r    ry  z!SSHCertificateBuilder.valid_after3  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                  | j                  |fgz   | j                  ¬«
      S c c}}w )Núname and value must be byteszDuplicate critical option namerÓ  )r@   rœ   r¥  r]  rN   rÑ  rV  rW  rX  rY  rZ  rÔ  r\  r[  r^  ©r‹   rT   rÆ  r´  s       r    Úadd_critical_optionz)SSHCertificateBuilder.add_critical_optionK  s¾   € ô ˜$¤Ô&¬j¸ÄÔ.FÜÐ:Ó;Ð;à¨×(>Ñ(>×?™W˜T 1’DÓ?Ñ?ÜÐ=Ó>Ð>ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4¸¸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                  | j                  |fgz   ¬«
      S c c}}w )Nræ  zDuplicate extension namerÓ  )r@   rœ   r¥  r^  rN   rÑ  rV  rW  rX  rY  rZ  rÔ  r\  r[  r]  rç  s       r    Úadd_extensionz#SSHCertificateBuilder.add_extensiona  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¥  rV  rN   rW  rX  rY  rZ  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Ì  rj  rk  rS  r¿  rX   )r‹   rÄ   rn  rr  rP   Úcert_prefixrh  r0  ÚfÚfprincipalsrÈ   ÚfcritrT   rÆ  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafr¼  Úfsigr•  r’  r“  ÚfsigblobÚ	cert_datas                              r    ró  zSSHCertificateBuilder.signw  sh  € ÜØä×*Ñ*Ü×!Ñ!Ü×)Ñ)ðô
ô Ð:Ó;Ð;à×ÑÐ#ÜÐ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"   )rV  z&typing.Optional[SSHCertPublicKeyTypes]rW  r/   rX  z#typing.Optional[SSHCertificateType]rY  útyping.Optional[bytes]rZ  r†   rÔ  r1   r\  r/   r[  r/   r]  ú'typing.List[typing.Tuple[bytes, bytes]]r^  r  )rC   rl  r±   rÑ  )rn  r*   r±   rÑ  )rp  rO  r±   rÑ  )rr  rœ   r±   rÑ  )rt  r†   r±   rÑ  )rw  útyping.Union[int, float]r±   rÑ  )ry  r  r±   rÑ  )rT   rœ   rÆ  rœ   r±   rÑ  )rÄ   ÚSSHCertPrivateKeyTypesr±   rS  )r3   r4   r5   r�   rC   rn  rp  rr  rt  rá  rw  ry  rè  rë  ró  r7   r"   r    rÑ  rÑ  q  s4  „ ð ?CØ(,Ø59Ø*.Ø02Ø*/Ø.2Ø-1ØEGØ?Að'à;ð'ð &ð'ð 3ð	'ð
 (ð'ð .ð'ð $(ð'ð ,ð'ð +ð'ð Cð'ð =ó'ð0
Ø/ð
à	ó
ó8
ó*
ó&
ð&"
Ø 2ð"
à	ó"
òH
ð,
Ø4ð
à	ó
ð0
Ø3ð
à	ó
ð0
Øð
Ø"'ð
à	ó
ð,
Øð
Ø"'ð
à	ó
ô,G
r"   rÑ  )F)r   rœ   r   rœ   r   r*   r   r*   r   r1   r±   rœ   )rO   z3typing.Union[SSHPrivateKeyTypes, SSHPublicKeyTypes]r±   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±   z5Cipher[typing.Union[modes.CBC, modes.CTR, modes.GCM]])rZ   r�   r±   ztyping.Tuple[int, memoryview])rZ   r�   r±   z$typing.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/typing.Union[SSHCertificate, SSHPublicKeyTypes])rÂ  r�   r±   r˜  )rZ   rœ   r'  r  r±   r—  )rC   r—  r±   rœ   )zÚ
__future__r   r  Úenumr@  Úrerj  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:  rM  rD   rF   rI   rL   r—  rl  ÚEnumrO  rS  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ØØØØô ñ'0€Ð,ó ð@ !Ø Ø ñ€ðØ	<ðà
óó*'ð  Ñ%Ø˜e‘Oð<Ø
ð<àð<ð ð<ð ó	<ó:ó8ðØðà$ðð ðð ð	ð
 ;óó(?ó?óó,ó+÷5ñ 5÷pC,ñ C,÷LEDñ ED÷PD8ñ D8÷N@%ñ @%ðH ‰m‹oØ‰m‹oØÑ#Ó%Ø‘_ [°,°"·,±,³.ÓAØ‘_ [°,°"·,±,³.ÓAØ‘_ [°,°"·,±,³.ÓAð€óFð —\‘\Ø×ÑØ×ÑØ×ÑØ×ÑðñÐ ð ðdØ
ðdà$ðdð ðdð ó	dðNJ'Ø#ðJ'àðJ'ð 5ðJ'ð ó	J'ðZ —L‘LØ×ÑØ×ÑØ×ÑØ×ÑðñÐ ð Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ô˜Ÿ™ô ÷
~ñ ~óBð ð\Ø
ð\ð 5ó\ð~+Ø
ð+à4ó+óð> (,ðØ
ðØ$ðàóó(+ð(  Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ð "Ð ÷M
ò M
øðG" ò 
9ØÐð #(ð9Øð9àð9ð ð9ð ð	9ð
  ð9ð 
ö9ð
9ús   Á/N ÎN"Î!N"