Ë
    ±éägËÊ  ã                  ó–  — 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Z3dZ4dZ5 ejl                  d«      Z7dZ8dZ9dZ:dZ;dZ<d Z=d!Z> ejl                  e9d"z   e:z   ej~                  «      Z@ eA eB eCd#d$«      «      «      ZDe G d%„ d&«      «       ZE eEejŒ                  d'ejŽ                  d!d!dd¬(«       eEejŒ                  d'ej�                  d!d!dd¬(«       eEejŒ                  d'ej’                  d!d)d!d¬(«      d*œZJd+eKd,<   e.e/e0d-œZLd^d.„ZMd_d/„ZNe9d0z   e:d0z   f	 	 	 	 	 	 	 d`d1„ZOdad2„ZPdbd3„ZQ	 	 	 	 	 	 	 	 	 	 dcd4„ZRddd5„ZSddd6„ZTded7„ZUddd8„ZVdfd9„ZW G d:„ d;«      ZX G d<„ d=«      ZY G d>„ d?«      ZZ G d@„ dA«      Z[ G dB„ dC«      Z\dgdD„Z] G dE„ dF«      Z^ G dG„ dH«      Z_e, eY«       e- eZ«       e+ e\«       e. e[dI ejÀ                  «       «      e/ e[dJ ejÂ                  «       «      e0 e[dK ejÄ                  «       «      e2 e^«       e3 e_«       iZcdhdL„ZdejÊ                  ejÌ                  ejÎ                  ejÐ                  ejÒ                  f   Zj	 di	 	 	 	 	 	 	 djdM„Zk	 	 	 	 	 	 	 	 dkdN„ZlejÊ                  ejÚ                  ejÜ                  ejÞ                  ejà                  f   ZqejÊ                  ejÚ                  ejÜ                  ejà                  f   Zr G dO„ dPejæ                  «      Zt G dQ„ dR«      ZudldS„Zv	 d\	 	 	 dmdT„Zw	 	 	 	 dmdU„ZxdndV„Zy	 di	 	 	 	 	 dodW„ZzdpdX„Z{ejÊ                  ejÌ                  ejÎ                  ejÒ                  f   Z|dYZ} G dZ„ d[«      Z~y# e*$ r dZ)	 d\	 	 	 	 	 	 	 	 	 	 	 d]d„Z(Y �ŒPw xY w)qé    )Ú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        ún/var/www/skyplay_api_hub/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   sk-ssh-ed25519@openssh.coms"   sk-ecdsa-sha2-nistp256@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(   \   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                  óh   — 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_publicB  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_privateK  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_publica  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_privatei  s•   € ð &×5Ñ5Ó7ˆØ(×7Ñ7ˆà×Ñ˜×)Ñ)Ô*Ø×Ñ˜×)Ñ)Ô*à×Ñ˜×*Ñ*Ô+Ø×Ñ˜×-Ñ-Ô.Ø×Ñ˜×*Ñ*Ô+Ø×Ñ˜×*Ñ*Õ+r"   N)rZ   r�   r±   z"tuple[tuple[int, int], memoryview])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·   1  s€   „ ñðØðà	+óð Øð à	,ó ð!Øð!à	-ó!ð, Ø*ð Ø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×   y  sv   „ ñó"ð	 Øð	 à	,ó	 ð!Øð!à	-ó!ð *Ø*ð*Ø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   Ú_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.EllipticCurve)rZ   r�   r±   z0tuple[tuple[memoryview, memoryview], memoryview]©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ç   ¿  s…   „ ñ	óð
$Øð
$à	9ó
$ð Øð à	5ó ð
!Øð
!à	6ó
!ð Ø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_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_private8  s…   € ð !×+Ñ+Ó-ˆ
Ø%×3Ñ3Ü�L‰Lœ-×+Ñ+¬\«^ó
ˆð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆô ˜°Ð?Ó@ˆ	à×Ñ˜: vÔ.Ø×Ñ˜)Õ$r"   N)rZ   r�   r±   z$tuple[tuple[memoryview], memoryview]©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ÿ     s€   „ ñðØðà	-óð Øð à	4ó ð!Øð!à	5ó!ð)Ø2ð)Ø;Dð)à	ó)ð%Ø4ð%Ø>Gð%à	ô%r"   rÿ   c                ó‚   — t        | «      \  }} |j                  «       j                  d«      st        d|› d�«      ‚|| fS )z!
    U2F application strings
    s   ssh:z4U2F application string does not start with b'ssh:' (ú))rz   r¯   Ú
startswithrN   )rZ   Úapplications     r    Úload_applicationr  I  sU   € ô $ DÓ)Ñ€K�Ø×ÑÓ ×+Ñ+¨GÔ4ÜðØˆ}˜Aðó
ð 	
ð ˜ÐÐr"   c                  ó    — e Zd ZdZ	 	 	 	 dd„Zy)Ú_SSHFormatSKEd25519zÏ
    The format of a sk-ssh-ed25519@openssh.com public key is:

        string		"sk-ssh-ed25519@openssh.com"
        string		public key
        string		application (user-specified, but typically "ssh:")
    c                óh   — t        t        «      j                  |«      \  }}t        |«      \  }}||fS r  )Ú_lookup_kformatrM   r¿   r  ©r‹   rZ   rC   rð   s       r    r¿   z_SSHFormatSKEd25519.load_public_  s7   € ô +¬<Ó8×DÑDÀTÓJÑˆ
�DÜ" 4Ó(‰ˆˆ4Ø˜4ÐÐr"   Nr  ©r3   r4   r5   rµ   r¿   r7   r"   r    r  r  V  s   „ ñð Øð à	4ô r"   r  c                  ó    — e Zd ZdZ	 	 	 	 dd„Zy)Ú_SSHFormatSKECDSAzò
    The format of a sk-ecdsa-sha2-nistp256@openssh.com public key is:

        string		"sk-ecdsa-sha2-nistp256@openssh.com"
        string		curve name
        ec_point	Q
        string		application (user-specified, but typically "ssh:")
    c                óh   — t        t        «      j                  |«      \  }}t        |«      \  }}||fS rî   )r  Ú_ECDSA_NISTP256r¿   r  r  s       r    r¿   z_SSHFormatSKECDSA.load_publicr  s7   € ô +¬?Ó;×GÑGÈÓMÑˆ
�DÜ" 4Ó(‰ˆˆ4Ø˜4ÐÐr"   Nrü   r  r7   r"   r    r  r  h  s   „ ñð Øð à	5ô 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    r  r  ‡  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�   r  Ú	_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_keyrJ  ˜  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�ä˜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   r5  r6  r7  rQ   r  r…   Ú_DEFAULT_CIPHERr:   r-   r/  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomr    r—   rh   r.  rÑ   rC   rÔ   r‘   r4  rŸ   r-  r�   rž   r­   Ú	encryptorÚupdate_intor]   )rÄ   r   Úencryption_algorithmrP   rA  Úf_kdfoptionsre   rC  r<  r   r   rf   r>  ÚcheckvalÚcommentÚf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenr°   Úofss                         r    Ú_serialize_ssh_private_keyr^     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    r`  r`  [  s   „ Ø€DØ�Dr"   r`  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Ú_serialr`  Ú_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‹   rf  rg  rh  Ú_cctyperj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rv  rt  ru  s                     r    r�   zSSHCertificate.__init__a  s­   € ð( ˆŒØ&ˆÔØˆŒð	9Ü+¨GÓ4ˆDŒJð ˆŒØ!2ˆÔØ(ˆÔØ*ˆÔØ!2ˆÔØ&ˆÔØ"ˆŒØ ˆŒØ.ˆÔØ$ˆŒØ,ˆÔØ$ˆŒØ,ˆÕøô ò 	9ÜÐ7Ó8Ð8ð	9ús   —B ÂBc                ó,   — t        | j                  «      S r‰   )rœ   rf  r¦   s    r    ÚnoncezSSHCertificate.nonceŠ  s   € ä�T—[‘[Ó!Ð!r"   c                óJ   — t        j                  t        | j                  «      S r‰   )ÚtypingÚcastÚSSHCertPublicKeyTypesrg  r¦   s    r    rC   zSSHCertificate.public_keyŽ  s   € ô �{‰{Ô0°$×2BÑ2BÓCÐCr"   c                ó   — | j                   S r‰   )rh  r¦   s    r    ÚserialzSSHCertificate.serial“  s   € à�|‰|Ðr"   c                ó   — | j                   S r‰   )ri  r¦   s    r    ÚtypezSSHCertificate.type—  s   € à�z‰zÐr"   c                ó,   — t        | j                  «      S r‰   )rœ   rj  r¦   s    r    Úkey_idzSSHCertificate.key_id›  s   € ä�T—\‘\Ó"Ð"r"   c                ó   — | j                   S r‰   )rk  r¦   s    r    Úvalid_principalszSSHCertificate.valid_principalsŸ  ó   € à×%Ñ%Ð%r"   c                ó   — | j                   S r‰   )rm  r¦   s    r    Úvalid_beforezSSHCertificate.valid_before£  s   € à×!Ñ!Ð!r"   c                ó   — | j                   S r‰   )rl  r¦   s    r    Úvalid_afterzSSHCertificate.valid_after§  s   € à× Ñ Ð r"   c                ó   — | j                   S r‰   )rn  r¦   s    r    Úcritical_optionszSSHCertificate.critical_options«  r†  r"   c                ó   — | j                   S r‰   )ro  r¦   s    r    Ú
extensionszSSHCertificate.extensions¯  s   € à×ÑÐr"   c                ó‚   — t        | j                  «      }|j                  | j                  «      \  }}t	        |«       |S r‰   )r  rp  r¿   rq  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œ   rt  r+  Ú
b2a_base64ru  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œ   rs  rv  r   rD   r~   rc   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrS   ÚECDSAr   rF   rr  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)"rf  r�   rg  ÚSSHPublicKeyTypesrh  r*   rw  r*   rj  r�   rk  r†   rl  r*   rm  r*   rn  údict[bytes, bytes]ro  r©  rp  r�   rq  r�   rr  r�   rs  r�   rv  r�   rt  rœ   ru  r�   r´   )r±   r}  r³   )r±   r`  )r±   r†   )r±   r©  )r±   r²   )r3   r4   r5   r�   Úpropertyry  rC   r  r�  rƒ  r…  rˆ  rŠ  rŒ  rŽ  r‘  rö   r§  r7   r"   r    rd  rd  `  sy  „ ð'-àð'-ð 'ð'-ð ð	'-ð
 ð'-ð ð'-ð 'ð'-ð ð'-ð ð'-ð .ð'-ð (ð'-ð ð'-ð ð'-ð $ð'-ð ð'-ð  #ð!'-ð" ð#'-ð$ ó%'-ðR ò"ó ð"óDð
 òó ðð òó ðð ò#ó ð#ð ò&ó ð&ð ò"ó ð"ð ò!ó ð!ð ò&ó ð&ð ò ó ð óó
ôr"   rd  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   rd  )"rZ   Ú_legacy_dsa_allowedr9  rP   Úorig_key_typeÚkey_bodyÚ	with_certrA  ÚrestÚ	cert_bodyÚinner_key_typery  rC   r  Úcctyperƒ  Ú
principalsr…  Ú	principalrŠ  rˆ  Ú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Ï  J  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¸  P  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@   rd  rC   r
   rI   r5  r6  r   r7  )rZ   r8  Úcert_or_keyrC   s       r    Úload_ssh_public_keyrÙ  d  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 OpenSSHrL  rk   r$  r"   r”  )r@   r
   rI   r5  r6  r   r7  rQ   r  r…   r    rÑ   r+  r–  r¯   ÚstriprX   )rC   rP   rA  rÏ   Úpubs        r    Úserialize_ssh_public_keyrÝ  x  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‰   ©
rg  rh  ri  rj  rk  Ú_valid_for_all_principalsrm  rl  rn  ro  )r‹   rg  rh  ri  rj  rk  rã  rm  rl  rn  ro  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¶  rg  rN   rà  rh  ri  rj  rk  rã  rm  rl  rn  ro  )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   rh  rà  rg  ri  rj  rk  rã  rm  rl  rn  ro  )r‹   r  s     r    r  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@   r`  r¶  ri  rN   rà  rg  rh  rj  rk  rã  rm  rl  rn  ro  )r‹   r�  s     r    r�  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¶  rj  rN   rà  rg  rh  ri  rk  rã  rm  rl  rn  ro  )r‹   rƒ  s     r    rƒ  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¶  rk  r_   Ú_SSHKEY_CERT_MAX_PRINCIPALSrà  rg  rh  ri  rj  rm  rl  rn  ro  )r‹   r…  s     r    r…  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â  )rk  rN   rã  rà  rg  rh  ri  rj  rm  rl  rn  ro  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   rm  rà  rg  rh  ri  rj  rk  rã  rl  rn  ro  )r‹   rˆ  s     r    rˆ  z"SSHCertificateBuilder.valid_beforeB  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   rl  rà  rg  rh  ri  rj  rk  rã  rm  rn  ro  )r‹   rŠ  s     r    rŠ  z!SSHCertificateBuilder.valid_afterX  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¶  rn  rN   rà  rg  rh  ri  rj  rk  rã  rm  rl  ro  ©r‹   rT   rÕ  rð   s       r    Úadd_critical_optionz)SSHCertificateBuilder.add_critical_optionn  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¶  ro  rN   rà  rg  rh  ri  rj  rk  rã  rm  rl  rn  rö  s       r    Úadd_extensionz#SSHCertificateBuilder.add_extension„  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¶  rg  rN   rh  ri  rj  rk  rã  rm  rl  rn  Úsortro  rQ   rµ  rP  rQ  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Û  r{  r|  rd  rÏ  rX   )r‹   rÄ   r  rƒ  rP   Úcert_prefixry  rA  ÚfÚfprincipalsrÈ   ÚfcritrT   rÕ  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafrÌ  Úfsigr¦  r£  r¤  ÚfsigblobÚ	cert_datas                              r    r  zSSHCertificateBuilder.signš  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"   )rg  zSSHCertPublicKeyTypes | Nonerh  r/   ri  zSSHCertificateType | Nonerj  úbytes | Nonerk  r†   rã  r1   rm  r/   rl  r/   rn  úlist[tuple[bytes, bytes]]ro  r  )rC   r}  r±   rà  )r  r*   r±   rà  )r�  r`  r±   rà  )rƒ  rœ   r±   rà  )r…  r†   r±   rà  )rˆ  úint | floatr±   rà  )rŠ  r  r±   rà  )rT   rœ   rÕ  rœ   r±   rà  )rÄ   ÚSSHCertPrivateKeyTypesr±   rd  )r3   r4   r5   r�   rC   r  r�  rƒ  r…  rð  rˆ  rŠ  r÷  rú  r  r7   r"   r    rà  rà  ˜  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±   útuple[memoryview, memoryview])r}   r*   r±   rœ   )r±   r  )rP   rœ   r‰   )rZ   rœ   r   r  r8  ú
typing.Anyr±   ÚSSHPrivateKeyTypes)rÄ   r  r   rœ   rT  r   r±   rœ   )rS   rû   r±   zhashes.HashAlgorithm)rZ   rœ   r±   z"SSHCertificate | SSHPublicKeyTypes)rÑ  r�   r±   r©  )rZ   rœ   r8  r  r±   r¨  )rC   r¨  r±   rœ   )Ú
__future__r   r+  ÚenumrP  Úrer{  r5  Ú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   r  Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rµ  Ú_SK_SSH_ED25519Ú_SK_SSH_ECDSA_NISTP256rž  r   Úcompiler±  r-  Ú	_SK_STARTÚ_SK_ENDr/  r.  rM  rN  ÚDOTALLr(  r�   rž   Úranger4  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­  r¯  r   r  ÚUnionrA   rE   rH   rK   r  rJ  r^  rD   rF   rI   rL   r¨  r}  ÚEnumr`  rd  r›  rÍ  rÏ  r¸  rÙ  rÝ  r  rî  rà  r7   r"   r    ú<module>r5     sK  ðö
 #ã Û Û 	Û 	Û Û Ý 0Ý !å Ý 8Ý 1÷õ õ J÷ó ÷÷ ð9Ý)àÐð €Ø€Ø€Ø(€Ø(€Ø(€Ø'€ð 0€Ø>Ð ð "€Ø!€à�—‘Ð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E,ñ E,÷PCDñ CD÷LD8ñ D8÷N@%ñ @%óF
÷ ñ  ÷$ ñ  ð( ‰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
øðU# ò 
9ØÐð #(ð9Øð9àð9ð ð9ð ð	9ð
  ð9ð 
ö9ð
9ús   Á/N, Î,OÏO