ó
    Û°›jXÑ  ã                  ó¦  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJrJrJrJr  S SKJr  S SKJrJrJrJr  S S	KJrJrJrJ r J!r!J"r"   S S
K#J$r%  Sr&Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0Sr1Sr2\Rf                  " S5      r4Sr5Sr6Sr7Sr8Sr9Sr:S r;\Rf                  " \6S!-   \7-   \Rx                  5      r=\>" \?" \@" S"S#5      5      5      rA\	 " S$ S%5      5       rB\B" \R†                  S&\Rˆ                  S S SSS'9\B" \R†                  S&\RŠ                  S S SSS'9\B" \R†                  S&\RŒ                  S S(S SS'9S).rGS*\HS+'   \+\,\-S,.rIS]S- jrJS^S. jrKS_S/ jrLS`S0 jrM          SaS1 jrNSbS2 jrOSbS3 jrPScS4 jrQSbS5 jrRSdS6 jrS " S7 S85      rT " S9 S:5      rU " S; S<5      rV " S= S>5      rW " S? S@5      rXSeSA jrY " SB SC5      rZ " SD SE5      r[\)\U" 5       \*\V" 5       \(\X" 5       \+\W" SF\R¸                  " 5       5      \,\W" SG\Rº                  " 5       5      \-\W" SH\R¼                  " 5       5      \/\Z" 5       \0\[" 5       0r_SfSI jr`\RÂ                  \RÄ                  \RÆ                  \RÈ                  \RÊ                  4   rf SgSSJ.         ShSK jjjrg        SiSL jrh\RÂ                  \RÒ                  \RÔ                  \RÖ                  \RØ                  4   rm\RÂ                  \RÒ                  \RÔ                  \RØ                  4   rn " SM SN\RÞ                  5      rp " SO SP5      rqSjSQ jrr S[   SkSR jjrs    SkSS jrtSlST jru      SmSU jrv Sg     SnSV jjrwSoSW jrx\RÂ                  \RÄ                  \RÆ                  \RÊ                  4   rySXrz " SY SZ5      r{g! \' a    Sr& S[           S\S jjr% GN^f = f)pé    )ÚannotationsN)Ú	dataclass)Úutils©ÚUnsupportedAlgorithm)Úhashes)ÚdsaÚecÚed25519ÚpaddingÚrsa)ÚAEADDecryptionContextÚCipherÚ
algorithmsÚmodes)ÚEncodingÚKeySerializationEncryptionÚNoEncryptionÚPrivateFormatÚPublicFormatÚ_KeySerializationEncryption)ÚkdfTFc                ó   • [        S5      e)NzNeed bcrypt moduler   )ÚpasswordÚsaltÚdesired_key_bytesÚroundsÚignore_few_roundss        Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/ssh.pyÚ_bcrypt_kdfr    0   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                  ó\   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   Srg)Ú
_SSHCipheré[   z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_aead© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r3   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                ó.  • [        U [        R                  5      (       a  [        U R	                  5       5      nU$ [        U [        R
                  5      (       a  [        U 5      nU$ [        U [        R                  [        R                  45      (       a  [        nU$ [        U [        R                  [        R                  45      (       a  [        nU$ [        U [        R                  [        R                   45      (       a  ["        nU$ [%        S5      e)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_typerS   �   sì   € Ü�#”r×1Ñ1×2Ñ2Ü" 3§>¡>Ó#3Ó4ˆð €Oô 
�Cœ×2Ñ2×	3Ñ	3Ü" 3Ó'ˆð €Oô 
�Cœ#×+Ñ+¬S×-=Ñ-=Ð>×	?Ñ	?Üˆð €Oô 
�Cœ#×+Ñ+¬S×-=Ñ-=Ð>×	?Ñ	?Üˆð €Oô 
ØŒg×'Ñ'¬×)AÑ)AÐB÷
ñ 
ô  ˆð €Oô Ð/Ó0Ð0r!   c                óš   • U R                   nUR                  [        ;  a  [        SUR                  < 35      e[        UR                     $ )z3Return SSH key_type and curve_name for private key.z'Unsupported curve for ssh private key: )ÚcurveÚnameÚ_ECDSA_KEY_TYPErP   )rE   rU   s     r   rD   rD       sE   € à×Ñ€EØ‡z�zœÓ(ÜØ5°e·j±j±^ÐDó
ð 	
ô ˜5Ÿ:™:Ñ&Ð&r!   c                óL   • U (       a  [        U 5      U-  S:w  a  [        S5      eg)zRequire data to be full blocksr   zCorrupt data: missing paddingN)ÚlenrP   )Údatar-   s     r   Ú_check_block_sizer[   ª   s&   € æ”3�t“9˜yÑ(¨AÓ-ÜÐ8Ó9Ð9ð .r!   c                ó(   • U (       a  [        S5      eg)z!All data should have been parsed.zCorrupt data: unparsed dataN)rP   ©rZ   s    r   Ú_check_emptyr^   °   s   € æÜÐ6Ó7Ð7ð r!   c                ó  • U(       d  [        S5      e[        U    n[        XUR                  UR                  -   US5      n[        UR                  USUR                   5      UR                  XTR                  S 5      5      $ )z$Generate key + iv and return cipher.z9Key is password-protected, but password was not provided.TN)Ú	TypeErrorr<   r    r+   r.   r   r)   r,   )Ú
ciphernamer   r   r   ÚciphÚseeds         r   Ú_init_cipherrd   ¶   s~   € ö ÜØGó
ð 	
ô ˜
Ñ#€DÜØ˜Ÿ™ t§{¡{Ñ2°F¸Dó€Dô Ø�‰��n˜Ÿ™Ð%Ó&Ø�	‰	�$—|‘|�~Ð&Ó'óð r!   c                ón   • [        U 5      S:  a  [        S5      e[        R                  U SS SS9U SS 4$ )ÚUint32é   úInvalid dataNÚbig©Ú	byteorder©rY   rP   r*   Ú
from_bytesr]   s    r   Ú_get_u32rn   Ì   ó<   € ä
ˆ4ƒy�1ƒ}Ü˜Ó(Ð(Ü�>‰>˜$˜r ˜(¨eˆ>Ð4°d¸1¸2°hÐ>Ð>r!   c                ón   • [        U 5      S:  a  [        S5      e[        R                  U SS SS9U SS 4$ )ÚUint64é   rh   Nri   rj   rl   r]   s    r   Ú_get_u64rs   Ó   ro   r!   c                ób   • [        U 5      u  pU[        U 5      :”  a  [        S5      eU SU XS 4$ )zBytes with u32 length prefixrh   N)rn   rY   rP   )rZ   Úns     r   Ú_get_sshstrrv   Ú   s8   € ä�t‹n�G€AØŒ3ˆt‹9ƒ}Ü˜Ó(Ð(Ø��ˆ8�T˜"�XÐÐr!   c                ó‚   • [        U 5      u  pU(       a  US   S:”  a  [        S5      e[        R                  US5      U 4$ )zBig integer.r   é   rh   ri   )rv   rP   r*   rm   )rZ   Úvals     r   Ú
_get_mpintrz   â   s<   € ä˜DÓ!�I€CÞ
ˆs�1‰v˜‹}Ü˜Ó(Ð(Ü�>‰>˜#˜uÓ% tÐ+Ð+r!   c                óŒ   • U S:  a  [        S5      eU (       d  gU R                  5       S-   S-  n[        R                  " X5      $ )z!Storage format for signed bigint.r   znegative mpint not allowedr!   rr   )rP   Ú
bit_lengthr   Úint_to_bytes)ry   Únbytess     r   Ú	_to_mpintr   ê   sB   € à
ˆQƒwÜÐ5Ó6Ð6ÞØØ�n‰nÓ Ñ" qÑ(€FÜ×Ò˜cÓ*Ð*r!   c                  ó†   • \ rS rSr% SrS\S'   SSS jjrSS jrSS jrSS	 jr	SS
 jr
SS jrSS jrSSS jjrSS jrSrg)Ú	_FragListéô   z,Build recursive structure without data copy.zlist[utils.Buffer]ÚflistNc                óX   • / U l         U(       a  U R                   R                  U5        g g ©N)rƒ   Úextend)ÚselfÚinits     r   Ú__init__Ú_FragList.__init__ù   s#   € ØˆŒ
ÞØ�J‰J×Ñ˜dÕ#ð r!   c                ó:   • U R                   R                  U5        g)zAdd plain bytesN)rƒ   Úappend©r‡   ry   s     r   Úput_rawÚ_FragList.put_rawþ   s   € à�
‰
×Ñ˜#Õr!   c                óV   • U R                   R                  UR                  SSS95        g)zBig-endian uint32rg   ri   ©Úlengthrk   N©rƒ   rŒ   Úto_bytesr�   s     r   Úput_u32Ú_FragList.put_u32  ó!   € à�
‰
×Ñ˜#Ÿ,™,¨a¸5˜,ÐAÕBr!   c                óV   • U R                   R                  UR                  SSS95        g)zBig-endian uint64rr   ri   r‘   Nr“   r�   s     r   Úput_u64Ú_FragList.put_u64  r—   r!   c                ó8  • [        U[        [        [        45      (       a6  U R	                  [        U5      5        U R                  R                  U5        gU R	                  UR                  5       5        U R                  R                  UR                  5        g)zBytes prefixed with u32 lengthN)
rB   ÚbytesÚ
memoryviewÚ	bytearrayr•   rY   rƒ   rŒ   Úsizer†   r�   s     r   Ú
put_sshstrÚ_FragList.put_sshstr
  s`   € ä�cœE¤:¬yÐ9×:Ñ:Ø�L‰Lœ˜S›Ô"Ø�J‰J×Ñ˜cÕ"à�L‰L˜Ÿ™›Ô$Ø�J‰J×Ñ˜cŸi™iÕ(r!   c                ó8   • U R                  [        U5      5        g)z*Big-endian bigint prefixed with u32 lengthN)r    r   r�   s     r   Ú	put_mpintÚ_FragList.put_mpint  s   € à�‰œ	 #›Õ'r!   c                óH   • [        [        [        U R                  5      5      $ )zCurrent number of bytes)ÚsumÚmaprY   rƒ   ©r‡   s    r   rŸ   Ú_FragList.size  s   € ä”3”s˜DŸJ™JÓ'Ó(Ð(r!   c                óR   • U R                    H  n[        U5      nX"U-   p%X1XR& M     U$ )zWrite into bytearray)rƒ   rY   )r‡   ÚdstbufÚposÚfragÚflenÚstarts         r   ÚrenderÚ_FragList.render  s1   € à—J”JˆDÜ�t“9ˆDØ D™j�3Ø $�5Òñ ð ˆ
r!   c                óˆ   • [        [        U R                  5       5      5      nU R                  U5        UR	                  5       $ )zReturn as bytes)r�   rž   rŸ   r°   Útobytes)r‡   Úbufs     r   r³   Ú_FragList.tobytes#  s/   € äœ 4§9¡9£;Ó/Ó0ˆØ�‰�CÔØ�{‰{‹}Ðr!   )rƒ   r…   )rˆ   zlist[utils.Buffer] | NoneÚreturnÚNone)ry   úutils.Bufferr¶   r·   )ry   r*   r¶   r·   )ry   zbytes | _FragListr¶   r·   ©r¶   r*   )r   )r«   r�   r¬   r*   r¶   r*   ©r¶   rœ   )r4   r5   r6   r7   Ú__doc__r8   r‰   rŽ   r•   r™   r    r£   rŸ   r°   r³   r9   r3   r!   r   r�   r�   ô   s:   ‡ Ù6àÓö$ô
ôCôCô)ô(ô)ö÷r!   r�   c                  ó~   • \ rS rSrSr    S
S jr    SS jr      SS jr      SS jr      SS jr	Sr
g	)Ú_SSHFormatRSAi*  zTFormat for RSA keys.

Public:
    mpint e, n
Private:
    mpint n, e, d, iqmp, p, q
c                ó@   • [        U5      u  p![        U5      u  p1X#4U4$ )zRSA public fields©rz   )r‡   rZ   Úeru   s       r   Ú
get_publicÚ_SSHFormatRSA.get_public3  s(   € ô ˜TÓ"‰ˆÜ˜TÓ"‰ˆØˆv�tˆ|Ðr!   c                ó€   • U R                  U5      u  u  p#n[        R                  " X#5      nUR                  5       nXQ4$ )zMake RSA public key from data.)rÁ   r   ÚRSAPublicNumbersrE   )r‡   rZ   rÀ   ru   Úpublic_numbersrE   s         r   Úload_publicÚ_SSHFormatRSA.load_public;  s?   € ð —‘ tÓ,‰‰ˆ�Ü×-Ò-¨aÓ3ˆØ#×.Ñ.Ó0ˆ
ØÐÐr!   c           	     óœ  • [        U5      u  pA[        U5      u  pQ[        U5      u  pa[        U5      u  pq[        U5      u  p�[        U5      u  p‘XT4U:w  a  [        S5      e[        R                  " Xh5      n
[        R                  " Xi5      n[        R
                  " XT5      n[        R                  " X‰XjX·U5      nUR                  US9nXá4$ )zMake RSA private key from data.z Corrupt data: rsa field mismatch©Úunsafe_skip_rsa_key_validation)rz   rP   r   Úrsa_crt_dmp1Úrsa_crt_dmq1rÄ   ÚRSAPrivateNumbersÚprivate_key)r‡   rZ   Ú	pubfieldsrÊ   ru   rÀ   ÚdÚiqmpÚpÚqÚdmp1Údmq1rÅ   Úprivate_numbersrÎ   s                  r   Úload_privateÚ_SSHFormatRSA.load_privateD  sÐ   € ô ˜TÓ"‰ˆÜ˜TÓ"‰ˆÜ˜TÓ"‰ˆÜ Ó%‰
ˆÜ˜TÓ"‰ˆÜ˜TÓ"‰ˆàˆ6�YÓÜÐ?Ó@Ð@Ü×Ò Ó%ˆÜ×Ò Ó%ˆÜ×-Ò-¨aÓ3ˆÜ×/Ò/Ø�!˜4 ~ó
ˆð &×1Ñ1Ø+Ið 2ð 
ˆð Ð Ð r!   c                ó�   • UR                  5       nUR                  UR                  5        UR                  UR                  5        g)zWrite RSA public keyN)rÅ   r£   rÀ   ru   )r‡   rE   Úf_pubÚpubns       r   Úencode_publicÚ_SSHFormatRSA.encode_public\  s2   € ð ×(Ñ(Ó*ˆØ�‰˜Ÿ™ÔØ�‰˜Ÿ™Õr!   c                ó€  • UR                  5       nUR                  nUR                  UR                  5        UR                  UR                  5        UR                  UR
                  5        UR                  UR                  5        UR                  UR                  5        UR                  UR                  5        g)zWrite RSA private keyN)	rÖ   rÅ   r£   ru   rÀ   rÐ   rÑ   rÒ   rÓ   )r‡   rÎ   Úf_privrÖ   rÅ   s        r   Úencode_privateÚ_SSHFormatRSA.encode_privated  s•   € ð &×5Ñ5Ó7ˆØ(×7Ñ7ˆà×Ñ˜×)Ñ)Ô*Ø×Ñ˜×)Ñ)Ô*à×Ñ˜×*Ñ*Ô+Ø×Ñ˜×-Ñ-Ô.Ø×Ñ˜×*Ñ*Ô+Ø×Ñ˜×*Ñ*Õ+r!   r3   N)rZ   r�   r¶   z"tuple[tuple[int, int], memoryview])rZ   r�   r¶   z#tuple[rsa.RSAPublicKey, memoryview])rZ   r�   rÊ   r1   r¶   z$tuple[rsa.RSAPrivateKey, memoryview])rE   zrsa.RSAPublicKeyrÚ   r�   r¶   r·   )rÎ   zrsa.RSAPrivateKeyrß   r�   r¶   r·   ©r4   r5   r6   r7   r»   rÁ   rÆ   r×   rÜ   rà   r9   r3   r!   r   r½   r½   *  sˆ   † ñðØðà	+ôð Øð à	,ô ð!Øð!ØKOð!à	-ô!ð0 Ø*ð Ø3<ð à	ô ð,Ø,ð,Ø6?ð,à	÷,r!   r½   c                  ó€   • \ rS rSrSrSS jr    SS jr      SS jr      SS jr      SS jr	SS jr
S	rg
)Ú_SSHFormatDSAit  zTFormat for DSA keys.

Public:
    mpint p, q, g, y
Private:
    mpint p, q, g, y, x
c                óv   • [        U5      u  p![        U5      u  p1[        U5      u  pA[        U5      u  pQX#XE4U4$ )zDSA public fieldsr¿   )r‡   rZ   rÒ   rÓ   ÚgÚys         r   rÁ   Ú_SSHFormatDSA.get_public}  sA   € ä˜TÓ"‰ˆÜ˜TÓ"‰ˆÜ˜TÓ"‰ˆÜ˜TÓ"‰ˆØ�aˆ|˜TÐ!Ð!r!   c                óÒ   • U R                  U5      u  u  p#pEn[        R                  " X#U5      n[        R                  " XV5      nU R	                  U5        UR                  5       nX�4$ )zMake DSA public key from data.)rÁ   r	   ÚDSAParameterNumbersÚDSAPublicNumbersÚ	_validaterE   )	r‡   rZ   rÒ   rÓ   ræ   rç   Úparameter_numbersrÅ   rE   s	            r   rÆ   Ú_SSHFormatDSA.load_public…  sa   € ð "Ÿ_™_¨TÓ2Ñ‰ˆˆq�dÜ×3Ò3°A¸!Ó<ÐÜ×-Ò-¨aÓCˆØ�‰�~Ô&Ø#×.Ñ.Ó0ˆ
ØÐÐr!   c                ó>  • U R                  U5      u  u  pEpgn[        U5      u  p�XEXg4U:w  a  [        S5      e[        R                  " XEU5      n	[        R
                  " Xy5      n
U R                  U
5        [        R                  " XŠ5      nUR                  5       nXÁ4$ )zMake DSA private key from data.z Corrupt data: dsa field mismatch)	rÁ   rz   rP   r	   rê   rë   rì   ÚDSAPrivateNumbersrÎ   )r‡   rZ   rÏ   rÊ   rÒ   rÓ   ræ   rç   Úxrí   rÅ   rÖ   rÎ   s                r   r×   Ú_SSHFormatDSA.load_private�  s•   € ð "Ÿ_™_¨TÓ2Ñ‰ˆˆq�dÜ˜TÓ"‰ˆà�!ˆ<˜9Ó$ÜÐ?Ó@Ð@Ü×3Ò3°A¸!Ó<ÐÜ×-Ò-¨aÓCˆØ�‰�~Ô&Ü×/Ò/°ÓBˆØ%×1Ñ1Ó3ˆØÐ Ð r!   c                ó6  • UR                  5       nUR                  nU R                  U5        UR                  UR                  5        UR                  UR
                  5        UR                  UR                  5        UR                  UR                  5        g)zWrite DSA public keyN)rÅ   rí   rì   r£   rÒ   rÓ   ræ   rç   )r‡   rE   rÚ   rÅ   rí   s        r   rÜ   Ú_SSHFormatDSA.encode_public   su   € ð $×2Ñ2Ó4ˆØ*×<Ñ<ÐØ�‰�~Ô&à�‰Ð)×+Ñ+Ô,Ø�‰Ð)×+Ñ+Ô,Ø�‰Ð)×+Ñ+Ô,Ø�‰˜×(Ñ(Õ)r!   c                ó–   • U R                  UR                  5       U5        UR                  UR                  5       R                  5        g)zWrite DSA private keyN)rÜ   rE   r£   rÖ   rñ   )r‡   rÎ   rß   s      r   rà   Ú_SSHFormatDSA.encode_private­  s:   € ð 	×Ñ˜;×1Ñ1Ó3°VÔ<Ø×Ñ˜×4Ñ4Ó6×8Ñ8Õ9r!   c                ón   • UR                   nUR                  R                  5       S:w  a  [        S5      eg )Ni   z#SSH supports only 1024 bit DSA keys)rí   rÒ   r|   rP   )r‡   rÅ   rí   s      r   rì   Ú_SSHFormatDSA._validate´  s6   € Ø*×<Ñ<ÐØ×Ñ×)Ñ)Ó+¨tÓ3ÜÐBÓCÐCð 4r!   r3   N)rZ   r�   r¶   ztuple[tuple, memoryview])rZ   r�   r¶   z#tuple[dsa.DSAPublicKey, memoryview])rZ   r�   rÊ   r1   r¶   z$tuple[dsa.DSAPrivateKey, memoryview])rE   zdsa.DSAPublicKeyrÚ   r�   r¶   r·   )rÎ   zdsa.DSAPrivateKeyrß   r�   r¶   r·   )rÅ   zdsa.DSAPublicNumbersr¶   r·   )r4   r5   r6   r7   r»   rÁ   rÆ   r×   rÜ   rà   rì   r9   r3   r!   r   rä   rä   t  s~   † ñô"ð	 Øð	 à	,ô	 ð!Øð!ØKOð!à	-ô!ð *Ø*ð*Ø3<ð*à	ô*ð:Ø,ð:Ø6?ð:à	ô:÷Dr!   rä   c                  óˆ   • \ rS rSrSrSS jr    SS jr    SS jr      SS jr      SS jr	      SS jr
S	rg
)Ú_SSHFormatECDSAiº  zvFormat for ECDSA keys.

Public:
    str curve
    bytes point
Private:
    str curve
    bytes point
    mpint secret
c                ó   • Xl         X l        g r…   )Ússh_curve_namerU   )r‡   rü   rU   s      r   r‰   Ú_SSHFormatECDSA.__init__Æ  s   € Ø,ÔØ�
r!   c                óÐ   • [        U5      u  p![        U5      u  p1X R                  :w  a  [        S5      e[        U5      S:X  a  [        S5      eUS   S:w  a  [	        S5      eX#4U4$ )zECDSA public fieldszCurve name mismatchr   zInvalid EC point: empty datarg   zNeed uncompressed point)rv   rü   rP   rY   ÚNotImplementedError)r‡   rZ   rU   Úpoints       r   rÁ   Ú_SSHFormatECDSA.get_publicÊ  so   € ô " $Ó'‰ˆÜ! $Ó'‰ˆØ×'Ñ'Ó'ÜÐ2Ó3Ð3Üˆu‹:˜‹?ÜÐ;Ó<Ð<Ø�‰8�q‹=Ü%Ð&?Ó@Ð@Øˆ~˜tÐ#Ð#r!   c                ó¤   • U R                  U5      u  u  p#n[        R                  R                  U R                  UR                  5       5      nXA4$ ©z Make ECDSA public key from data.)rÁ   r
   rF   Úfrom_encoded_pointrU   r³   )r‡   rZ   Ú_r   rE   s        r   rÆ   Ú_SSHFormatECDSA.load_publicØ  sI   € ð  Ÿ?™?¨4Ó0Ñ‰
ˆ�DÜ×.Ñ.×AÑAØ�J‰J˜Ÿ™›ó
ˆ
ð ÐÐr!   c                ó²   • U R                  U5      u  u  pEn[        U5      u  paXE4U:w  a  [        S5      e[        R                  " X`R
                  5      nXq4$ )z!Make ECDSA private key from data.z"Corrupt data: ecdsa field mismatch)rÁ   rz   rP   r
   Úderive_private_keyrU   )r‡   rZ   rÏ   rÊ   Ú
curve_namer   ÚsecretrÎ   s           r   r×   Ú_SSHFormatECDSA.load_privateâ  sZ   € ð %)§O¡O°DÓ$9Ñ!Ñˆ˜TÜ! $Ó'‰ˆàÐ )Ó+ÜÐAÓBÐBÜ×+Ò+¨F·J±JÓ?ˆØÐ Ð r!   c                ó¸   • UR                  [        R                  [        R                  5      nUR                  U R                  5        UR                  U5        g)zWrite ECDSA public keyN)Úpublic_bytesr   ÚX962r   ÚUncompressedPointr    rü   )r‡   rE   rÚ   r   s       r   rÜ   Ú_SSHFormatECDSA.encode_publicî  sG   € ð ×'Ñ'Ü�M‰Mœ<×9Ñ9ó
ˆð 	×Ñ˜×,Ñ,Ô-Ø×Ñ˜Õr!   c                óœ   • UR                  5       nUR                  5       nU R                  X25        UR                  UR                  5        g)zWrite ECDSA private keyN)rE   rÖ   rÜ   r£   Úprivate_value)r‡   rÎ   rß   rE   rÖ   s        r   rà   Ú_SSHFormatECDSA.encode_privateø  sB   € ð !×+Ñ+Ó-ˆ
Ø%×5Ñ5Ó7ˆà×Ñ˜:Ô.Ø×Ñ˜×6Ñ6Õ7r!   )rU   rü   N)rü   rœ   rU   úec.EllipticCurve)rZ   r�   r¶   z0tuple[tuple[memoryview, memoryview], memoryview]©rZ   r�   r¶   z,tuple[ec.EllipticCurvePublicKey, memoryview])rZ   r�   rÊ   r1   r¶   z-tuple[ec.EllipticCurvePrivateKey, memoryview])rE   úec.EllipticCurvePublicKeyrÚ   r�   r¶   r·   )rÎ   zec.EllipticCurvePrivateKeyrß   r�   r¶   r·   )r4   r5   r6   r7   r»   r‰   rÁ   rÆ   r×   rÜ   rà   r9   r3   r!   r   rú   rú   º  s�   † ñ	ôð$Øð$à	9ô$ð Øð à	5ô ð
!Øð
!ØKOð
!à	6ô
!ð Ø3ð Ø<Eð à	ô ð8Ø5ð8Ø?Hð8à	÷8r!   rú   c                  ó~   • \ rS rSrSr    S
S jr    SS jr      SS jr      SS jr      SS jr	Sr
g	)Ú_SSHFormatEd25519i  zfFormat for Ed25519 keys.

Public:
    bytes point
Private:
    bytes point
    bytes secret_and_point
c                ó&   • [        U5      u  p!U4U4$ )zEd25519 public fields)rv   )r‡   rZ   r   s      r   rÁ   Ú_SSHFormatEd25519.get_public  s   € ô " $Ó'‰ˆØˆx˜ˆ~Ðr!   c                óŒ   • U R                  U5      u  u  p![        R                  R                  UR	                  5       5      nX14$ ©z"Make Ed25519 public key from data.)rÁ   r   rN   Úfrom_public_bytesr³   )r‡   rZ   r   rE   s       r   rÆ   Ú_SSHFormatEd25519.load_public  s@   € ð Ÿ™¨Ó.‰‰ˆÜ×-Ñ-×?Ñ?Ø�M‰M‹Oó
ˆ
ð ÐÐr!   c                óÌ   • U R                  U5      u  u  pA[        U5      u  pQUSS nUSS nXG:w  d  U4U:w  a  [        S5      e[        R                  R                  U5      nX�4$ )z#Make Ed25519 private key from data.Nr:   z$Corrupt data: ed25519 field mismatch)rÁ   rv   rP   r   rM   Úfrom_private_bytes)	r‡   rZ   rÏ   rÊ   r   Úkeypairr
  Úpoint2rÎ   s	            r   r×   Ú_SSHFormatEd25519.load_private  sq   € ð Ÿ™¨Ó.‰‰ˆÜ# DÓ)‰ˆà˜˜"�ˆØ˜˜�ˆØ‹?˜u˜h¨)Ó3ÜÐCÓDÐDÜ×/Ñ/×BÑBÀ6ÓJˆØÐ Ð r!   c                ó‚   • UR                  [        R                  [        R                  5      nUR	                  U5        g)zWrite Ed25519 public keyN)r  r   ÚRawr   r    )r‡   rE   rÚ   Úraw_public_keys       r   rÜ   Ú_SSHFormatEd25519.encode_public,  s3   € ð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆð 	×Ñ˜Õ(r!   c                óJ  • UR                  5       nUR                  [        R                  [        R                  [        5       5      nUR                  [        R                  [        R                  5      n[        XE/5      nU R                  X25        UR                  U5        g)zWrite Ed25519 private keyN)rE   Úprivate_bytesr   r%  r   r   r  r   r�   rÜ   r    )r‡   rÎ   rß   rE   Úraw_private_keyr&  Ú	f_keypairs          r   rà   Ú _SSHFormatEd25519.encode_private5  s�   € ð !×+Ñ+Ó-ˆ
Ø%×3Ñ3Ü�L‰Lœ-×+Ñ+¬\«^ó
ˆð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆô ˜Ð?Ó@ˆ	à×Ñ˜:Ô.Ø×Ñ˜)Õ$r!   r3   N)rZ   r�   r¶   z$tuple[tuple[memoryview], memoryview]©rZ   r�   r¶   z+tuple[ed25519.Ed25519PublicKey, memoryview])rZ   r�   rÊ   r1   r¶   z,tuple[ed25519.Ed25519PrivateKey, memoryview])rE   zed25519.Ed25519PublicKeyrÚ   r�   r¶   r·   )rÎ   zed25519.Ed25519PrivateKeyrß   r�   r¶   r·   râ   r3   r!   r   r  r    sˆ   † ñðØðà	-ôð Øð à	4ô ð!Øð!ØKOð!à	5ô!ð)Ø2ð)Ø;Dð)à	ô)ð%Ø4ð%Ø>Gð%à	÷%r!   r  c                óˆ   • [        U 5      u  pUR                  5       R                  S5      (       d  [        SU S35      eX4$ )z
U2F application strings
s   ssh:z4U2F application string does not start with b'ssh:' (Ú))rv   r³   Ú
startswithrP   )rZ   Úapplications     r   Úload_applicationr2  F  sT   € ô $ DÓ)Ñ€KØ×ÑÓ ×+Ñ+¨G×4Ñ4ÜðØˆ}˜Aðó
ð 	
ð ÐÐr!   c                  ó4   • \ rS rSrSr    SS jrSS jrSrg)	Ú_SSHFormatSKEd25519iS  zÓ
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                ób   • [        [        5      R                  U5      u  p![        U5      u  p1X!4$ r  )Ú_lookup_kformatrO   rÆ   r2  ©r‡   rZ   rE   r  s       r   rÆ   Ú_SSHFormatSKEd25519.load_public\  s1   € ô +¬<Ó8×DÑDÀTÓJÑˆ
Ü" 4Ó(‰ˆØÐÐr!   c                ó   • [        S5      e)Nz,sk-ssh-ed25519 private keys cannot be loadedr   ©r‡   rZ   s     r   rÁ   Ú_SSHFormatSKEd25519.get_publicd  s   € ô #Ø:ó
ð 	
r!   r3   Nr-  ©rZ   r�   r¶   ztyping.NoReturn©r4   r5   r6   r7   r»   rÆ   rÁ   r9   r3   r!   r   r4  r4  S  s!   † ñð Øð à	4ô ÷
r!   r4  c                  ó4   • \ rS rSrSr    SS jrSS jrSrg)	Ú_SSHFormatSKECDSAil  zù
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                ób   • [        [        5      R                  U5      u  p![        U5      u  p1X!4$ r  )r6  Ú_ECDSA_NISTP256rÆ   r2  r7  s       r   rÆ   Ú_SSHFormatSKECDSA.load_publicv  s1   € ô +¬?Ó;×GÑGÈÓMÑˆ
Ü" 4Ó(‰ˆØÐÐr!   c                ó   • [        S5      e)Nz4sk-ecdsa-sha2-nistp256 private keys cannot be loadedr   r:  s     r   rÁ   Ú_SSHFormatSKECDSA.get_public~  s   € ô #ØBó
ð 	
r!   r3   Nr  r<  r=  r3   r!   r   r?  r?  l  s!   † ñð Øð à	5ô ÷
r!   r?  s   nistp256s   nistp384s   nistp521c                ó¢   • [        U [        5      (       d  [        U 5      R                  5       n U [        ;   a	  [        U    $ [        SU < 35      e)z"Return valid format or throw errorzUnsupported key type: )rB   rœ   r�   r³   Ú_KEY_FORMATSr   )rR   s    r   r6  r6  ’  sH   € ä�h¤×&Ñ&Ü˜hÓ'×/Ñ/Ó1ˆØ”<ÓÜ˜HÑ%Ð%Ü
Ð!7¸±|ÐDÓ
EÐEr!   rÉ   c               óB  • [         R                  " SU 5        Ub  [         R                  " SU5        [        R	                  U 5      nU(       d  [        S5      eUR                  S5      nUR                  S5      n[        R                  " [        U 5      XV 5      n U R                  [        5      (       d  [        S5      e[        U 5      [        [        5      S n [        U 5      u  pp[        U 5      u  p€[        U 5      u  p�[        U 5      u  p U
S:w  a  [        S5      e[        U 5      u  p°[        U5      u  pË[!        U5      nUR#                  U5      u  pë[%        U5        U[&        :w  d  U[&        :w  Ga›  UR)                  5       nU[*        ;  a  [-        SU< 35      eU[.        :w  a  [-        SU< 35      e[*        U   R0                  n[*        U   R2                  n[        U 5      u  nn [*        U   R4                  (       a&  [7        U 5      n[        U5      U:w  a  [        S	5      eO[%        U 5        [9        UU5        [        U	5      u  nn[        U5      u  nn[%        U5        [;        XñUR)                  5       U5      nUR=                  5       n[        UR?                  U5      5      n[*        U   R4                  (       a2  [A        U[B        5      (       d   e[%        URE                  W5      5        OS[%        URG                  5       5        O9U(       a  [I        S
5      e[        U 5      u  nn [%        U 5        Sn[9        UU5        [        U5      u  nn[        U5      u  nnUU:w  a  [        S5      e[        U5      u  nnUU:w  a  [        S5      eURK                  UUUS9u  nn[        U5      u  nnU[L        S[        U5       :w  a  [        S5      e[A        U[N        RP                  5      (       a$  [R        RT                  " S[         RV                  SS9  U$ )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 cipherz4Password was given but private key is not encrypted.rr   zCorrupt data: broken checksumzCorrupt data: key type mismatchrÉ   z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ÚsearchrP   r¯   ÚendÚbinasciiÚ
a2b_base64r�   r0  Ú	_SK_MAGICrY   rv   rn   r6  rÁ   r^   Ú_NONEr³   r<   r   Ú_BCRYPTr-   r0   r2   rœ   r[   rd   Ú	decryptorÚupdaterB   r   Úfinalize_with_tagÚfinalizer`   r×   Ú_PADDINGr	   rJ   ÚwarningsÚwarnÚDeprecatedIn40)rZ   r   ÚbackendrÊ   ÚmÚp1Úp2ra   ÚkdfnameÚ
kdfoptionsÚnkeysÚpubdataÚpub_key_typeÚkformatrÏ   Úciphername_bytesÚblklenr0   ÚedataÚtagr   Úkbufr   rb   ÚdecÚck1Úck2rR   rÎ   r  s                                 r   Úload_ssh_private_keyrp  £  s½  € ô 
×Ò˜6 4Ô(ØÑÜ×Ò˜: xÔ0ä�‰�tÓ€AÞÜÐ9Ó:Ð:Ø	
�‰�‹€BØ	
�‰ˆq‹€BÜ×Òœz¨$Ó/°Ð6Ó7€DØ�?‰?œ9×%Ñ%ÜÐ9Ó:Ð:Ü�dÓœC¤	›NÐ,Ð-€Dô # 4Ó(Ñ€JÜ Ó%�M€GÜ" 4Ó(Ñ€JÜ˜4“.�K€EØ�ƒzÜÐ1Ó2Ð2ô   Ó%�M€GÜ'¨Ó0Ñ€LÜ˜lÓ+€GØ ×+Ñ+¨GÓ4Ñ€IÜ�Ôà”UÓ˜g¬Ô.Ø%×-Ñ-Ó/ÐØ¤<Ó/Ü&Ø&Ð'7Ñ&:Ð;óð ð ”gÓÜ&Ð):¸7¹+Ð'FÓGÐGÜÐ.Ñ/×9Ñ9ˆÜÐ/Ñ0×8Ñ8ˆä! $Ó'‰ˆˆtô Ð(Ñ)×1×1Ü˜“+ˆCÜ�3‹x˜7Ó"Ü Ð!NÓOÐOð #ô ˜ÔÜ˜% Ô(Ü  Ó,‰
ˆˆdÜ “~‰ˆ�Ü�TÔÜÐ,¸¿¹»ÈÓOˆØ�n‰nÓˆÜ˜3Ÿ:™: eÓ,Ó-ˆÜÐ(Ñ)×1×1Ü˜cÔ#8×9Ñ9Ð9Ð9Ü˜×.Ñ.¨sÓ3Õ4ô ˜Ÿ™›Õ(æÜØFóð ô " $Ó'‰ˆˆtÜ�TÔØˆÜ˜% Ô(Ü˜%“�J€CˆÜ˜%“�J€CˆØ
ˆcƒzÜÐ8Ó9Ð9ô " %Ó(�O€HˆeØ�<ÓÜÐ:Ó;Ð;Ø ×-Ñ-ØØØ'Eð .ð Ñ€K�ô ˜5Ó!�H€A€uð ”˜œ3˜u›:Ð&Ó&ÜÐ8Ó9Ð9ä�+œs×0Ñ0×1Ñ1Ü�Šðä× Ñ Øò		
ð Ðr!   c                óÞ  • [         R                  " SU5        [        U [        R                  5      (       a$  [
        R                  " S[         R                  SS9  [        U 5      n[        U5      n[        5       nU(       a˜  [        n[        U   R                  n[        n[        n	[        U[         5      (       a  UR"                  b  UR"                  n	[$        R&                  " S5      n
UR)                  U
5        UR+                  U	5        [-        XaX©5      nO[.        =phSnSnSn[$        R&                  " S5      nS	n[        5       nUR)                  U5        UR1                  U R3                  5       U5        [        XÝ/5      nUR)                  U5        UR5                  U U5        UR)                  U5        UR7                  [8        SUUR;                  5       U-  -
   5        [        5       nUR7                  [<        5        UR)                  U5        UR)                  U5        UR)                  U5        UR+                  U5        UR)                  U5        UR)                  U5        UR;                  5       nUR;                  5       n[?        [A        UU-   5      5      nURC                  U5        UU-
  nUb&  URE                  5       RG                  UUU UUS 5        [I        USU 5      $ )
z3Serialize private key with OpenSSH custom encoding.r   úISSH DSA key support is deprecated and will be removed in a future releaserg   rJ  Nr#   rr   r$   r!   )%r   rM  rB   r	   rJ   r[  r\  r]  rS   r6  r�   Ú_DEFAULT_CIPHERr<   r-   rU  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomr    r•   rd   rT  rÜ   rE   rà   rŽ   rZ  rŸ   rS  r�   rž   r°   Ú	encryptorÚupdate_intorœ   )rÎ   r   Úencryption_algorithmrR   rg  Úf_kdfoptionsra   ri  rb  r   r   rb   rd  ÚcheckvalÚcommentÚf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenr´   Úofss                         r   Ú_serialize_ssh_private_keyr„    s}  € ô 
×Ò�z 8Ô,Ü�+œs×0Ñ0×1Ñ1Ü�Šð*ä× Ñ Øò		
ô ! Ó-€HÜ˜hÓ'€Gô “;€LÞÜ$ˆ
Ü˜jÑ)×3Ñ3ˆÜˆÜ ˆäÐ+Ô-H×IÑIØ$×0Ñ0Ñ<à)×5Ñ5ˆFÜ�zŠz˜"‹~ˆØ×Ñ Ô%Ø×Ñ˜VÔ$Ü˜J°$Ó?‰ä$Ð$ˆ
ØˆØˆØ€EÜ�zŠz˜!‹}€HØ€Gô “;€LØ×Ñ˜HÔ%Ø×Ñ˜+×0Ñ0Ó2°LÔAä˜8Ð.Ó/€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Ô>ä��U�d�ÓÐr!   c                  ó   • \ rS rSrSrSrSrg)ÚSSHCertificateTypeip  r$   rI  r3   N)r4   r5   r6   r7   ÚUSERÚHOSTr9   r3   r!   r   r†  r†  p  s   † Ø€DØƒDr!   r†  c                  ó>  • \ rS rSr                                  SS jr\SS j5       rSS jr\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       r\SS
 j5       r\SS j5       r\SS j5       rSS jrSS jrSS jrSrg)ÚSSHCertificateiu  c                ó  • Xl         X l        X0l         [        U5      U l        XPl        X`l        Xpl        X€l	        X�l
        X l        X°l        XÀl        XÐl        Xàl        UU l        UU l        Xðl        g ! [
         a    [        S5      ef = f)NzInvalid certificate type)Ú_nonceÚ_public_keyÚ_serialr†  Ú_typerP   Ú_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‡   rŒ  r�  rŽ  Ú_cctyper�  r‘  r’  r“  r”  r•  r–  r—  r˜  r™  rœ  rš  r›  s                     r   r‰   ÚSSHCertificate.__init__v  s‘   € ð( ŒØ&ÔØŒð	9Ü+¨GÓ4ˆDŒJð ŒØ!2ÔØ(ÔØ*ÔØ!2ÔØ&ÔØ"ŒØ ŒØ.ÔØ$ŒØ,ˆÔØ$ˆŒØ,Õøô ó 	9ÜÐ7Ó8Ð8ð	9ús   ”A5 Á5Bc                ó,   • [        U R                  5      $ r…   )rœ   rŒ  r¨   s    r   ÚnonceÚSSHCertificate.nonceŸ  s   € ä�T—[‘[Ó!Ð!r!   c                óL   • [         R                  " [        U R                  5      $ r…   )ÚtypingÚcastÚSSHCertPublicKeyTypesr�  r¨   s    r   rE   ÚSSHCertificate.public_key£  s   € ô �{Š{Ô0°$×2BÑ2BÓCÐCr!   c                ó   • U R                   $ r…   )rŽ  r¨   s    r   ÚserialÚSSHCertificate.serial¨  s   € à�|‰|Ðr!   c                ó   • U R                   $ r…   )r�  r¨   s    r   ÚtypeÚSSHCertificate.type¬  s   € à�z‰zÐr!   c                ó,   • [        U R                  5      $ r…   )rœ   r�  r¨   s    r   Úkey_idÚSSHCertificate.key_id°  s   € ä�T—\‘\Ó"Ð"r!   c                ó   • U R                   $ r…   )r‘  r¨   s    r   Úvalid_principalsÚSSHCertificate.valid_principals´  ó   € à×%Ñ%Ð%r!   c                ó   • U R                   $ r…   )r“  r¨   s    r   Úvalid_beforeÚSSHCertificate.valid_before¸  s   € à×!Ñ!Ð!r!   c                ó   • U R                   $ r…   )r’  r¨   s    r   Úvalid_afterÚSSHCertificate.valid_after¼  s   € à× Ñ Ð r!   c                ó   • U R                   $ r…   )r”  r¨   s    r   Úcritical_optionsÚSSHCertificate.critical_optionsÀ  r³  r!   c                ó   • U R                   $ r…   )r•  r¨   s    r   Ú
extensionsÚSSHCertificate.extensionsÄ  s   € à×ÑÐr!   c                ó€   • [        U R                  5      nUR                  U R                  5      u  p#[	        U5        U$ r…   )r6  r–  rÆ   r—  r^   )r‡   Ú	sigformatÚsignature_keyÚsigkey_rests       r   rÂ  ÚSSHCertificate.signature_keyÈ  s5   € Ü# D§N¡NÓ3ˆ	Ø%.×%:Ñ%:¸4¿=¹=Ó%IÑ"ˆÜ�[Ô!ØÐr!   c                ó„   • [        U R                  5      S-   [        R                  " [        U R                  5      SS9-   $ )Nó    F)Únewline)rœ   rš  rQ  Ú
b2a_base64r›  r¨   s    r   r  ÚSSHCertificate.public_bytesÎ  s<   € ä�$×%Ñ%Ó&Øñä×!Ò!¤%¨¯©Ó"8À%ÑHñIð	
r!   c                ó  • U R                  5       n[        U[        R                  5      (       a9  UR	                  [        U R                  5      [        U R                  5      5        g [        U[        R                  5      (       a•  [        U R                  5      u  p#[        U5      u  pC[        U5        [        R                  " X$5      n[        UR                  5      nUR	                  U[        U R                  5      [        R                   " U5      5        g [        U["        R$                  5      (       d   eU R&                  [(        :X  a  [*        R,                  " 5       nOUU R&                  [.        :X  a  [*        R0                  " 5       nO+U R&                  [2        :X  d   e[*        R4                  " 5       nUR	                  [        U R                  5      [        U R                  5      [6        R8                  " 5       U5        g r…   )rÂ  rB   r   rN   Úverifyrœ   r™  rœ  r
   rF   rz   r^   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrU   ÚECDSAr   rH   r˜  rI   r   ÚSHA1Ú_SSH_RSA_SHA256ÚSHA256Ú_SSH_RSA_SHA512ÚSHA512r   ÚPKCS1v15)r‡   rÂ  ÚrrZ   ÚsÚcomputed_sigÚhash_algs          r   Úverify_cert_signatureÚ$SSHCertificate.verify_cert_signatureÕ  so  € Ø×*Ñ*Ó,ˆÜ�m¤W×%=Ñ%=×>Ñ>Ø× Ñ Ü�d—o‘oÓ&¬¨d×.AÑ.AÓ(Bõô ˜¤r×'@Ñ'@×AÑAä  §¡Ó1‰GˆAÜ  Ó&‰GˆAÜ˜ÔÜ%×:Ò:¸1Ó@ˆLÜ'¨×(;Ñ(;Ó<ˆHØ× Ñ Øœe D×$7Ñ$7Ó8¼"¿(º(À8Ó:Lõô ˜m¬S×-=Ñ-=×>Ñ>Ð>Ð>Ø×#Ñ#¤xÓ/Ü!Ÿ;š;›=‘Ø×%Ñ%¬Ó8Ü!Ÿ=š=›?‘à×+Ñ+¬Ó>Ð>Ð>Ü!Ÿ=š=›?�Ø× Ñ Ü�d—o‘oÓ&Ü�d×)Ñ)Ó*Ü× Ò Ó"Øõ	r!   )r›  rš  r”  r•  r˜  r�  rŒ  r�  rŽ  r—  r–  r™  rœ  r�  r’  r“  r‘  N)"rŒ  r�   r�  ÚSSHPublicKeyTypesrŽ  r*   r�  r*   r�  r�   r‘  úlist[bytes]r’  r*   r“  r*   r”  údict[bytes, bytes]r•  rÞ  r–  r�   r—  r�   r˜  r�   r™  r�   rœ  r�   rš  rœ   r›  r�   rº   )r¶   r¥  r¹   )r¶   r†  )r¶   rÝ  )r¶   rÞ  )r¶   r·   )r4   r5   r6   r7   r‰   Úpropertyr   rE   r¨  r«  r®  r±  rµ  r¸  r»  r¾  rÂ  r  rÚ  r9   r3   r!   r   rŠ  rŠ  u  sy  † ð'-àð'-ð 'ð'-ð ð	'-ð
 ð'-ð ð'-ð 'ð'-ð ð'-ð ð'-ð .ð'-ð (ð'-ð ð'-ð ð'-ð $ð'-ð ð'-ð  #ð!'-ð" ð#'-ð$ ô%'-ðR ó"ó ð"ôDð
 óó ðð óó ðð ó#ó ð#ð ó&ó ð&ð ó"ó ð"ð ó!ó ð!ð ó&ó ð&ð ó ó ð ôô
÷r!   rŠ  c                ó>  • [        U [        R                  5      (       a  [        R                  " 5       $ [        U [        R
                  5      (       a  [        R                  " 5       $ [        U [        R                  5      (       d   e[        R                  " 5       $ r…   )	rB   r
   Ú	SECP256R1r   rÒ  Ú	SECP384R1ÚSHA384Ú	SECP521R1rÔ  )rU   s    r   rÎ  rÎ  ö  s_   € Ü�%œŸ™×&Ñ&Ü�}Š}‹ÐÜ	�Eœ2Ÿ<™<×	(Ñ	(Ü�}Š}‹Ðä˜%¤§¡×.Ñ.Ð.Ð.Ü�}Š}‹Ðr!   c                ó  • [         R                  " SU 5        [        R                  U 5      nU(       d  [	        S5      eUR                  S5      =p4UR                  S5      nSnUR                  [        5      (       a  SnUS [        [        5      *  nU[        :X  a  U(       d  [        S5      e[        U5      n [        [        R                  " U5      5      nU(       a  Un	[#        U5      u  p¨X¤:w  a  [	        S	5      eU(       a  [#        U5      u  p¸UR%                  U5      u  pÈU(       Ga§  ['        U5      u  pØ[)        U5      u  pè[#        U5      u  pø[#        U5      u  nn/ nU(       a1  [#        U5      u  nnUR+                  [-        U5      5        U(       a  M1  ['        U5      u  nn['        U5      u  nn[#        U5      u  nn[/        U5      n[#        U5      u  nn[/        U5      n[#        U5      u  nn[#        U5      u  nn[#        U5      u  nnU[        :X  a  U(       d  [        S
5      eW	S [        U5      *  n[#        U5      u  nn[1        U5        [#        U5      u  nn U[2        :X  a  U[4        [6        [2        4;  d  U[2        :w  a  UU:w  a  [	        S5      e[#        U 5      u  n!n [1        U 5        [9        WUUUUUUUUUUUUU!UUU	5      $ [1        U5        U$ ! [        [        R                   4 a    [	        S5      ef = f)NrZ   zInvalid line formatr$   rI  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   rL  Ú_SSH_PUBKEY_RCÚmatchrP   ÚgroupÚendswithÚ_CERT_SUFFIXrY   rL   r   r6  r�   rQ  rR  r`   ÚErrorrv   rÆ   rs   rn   rŒ   rœ   Ú_parse_exts_optsr^   rI   rÑ  rÓ  rŠ  )"rZ   Ú_legacy_dsa_allowedr_  rR   Úorig_key_typeÚkey_bodyÚ	with_certrg  ÚrestÚ	cert_bodyÚinner_key_typer   rE   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ØÓ&ÜÐ-Ó.Ð.ÞÜ! $Ó'‰ˆØ×*Ñ*¨4Ó0Ñ€JßÜ “~‰ˆÜ “~‰ˆÜ" 4Ó(‰ˆÜ& tÓ,Ñˆ
�DØÐÞÜ$/°
Ó$;Ñ!ˆI�zØ×#Ñ#¤E¨)Ó$4Ô5÷ ˆjô % 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   Â;K# Ë#&L	c                ó   • [        U 5      $ r…   )r  r]   s    r   Úload_ssh_public_identityr  _  s   € ô % TÓ*Ð*r!   c                óH  • 0 nS nU (       a–  [        U 5      u  p0[        U5      nXA;   a  [        S5      eUb  XB:  a  [        S5      e[        U 5      u  pP[        U5      S:”  a'  [        U5      u  pV[        U5      S:”  a  [        S5      e[        U5      X'   UnU (       a  M–  U$ )NzDuplicate namezFields not lexically sortedr   z!Unexpected extra data after value)rv   rœ   rP   rY   )Ú	exts_optsÚresultÚ	last_namerV   ÚbnameÚvalueÚextras          r   rì  rì  e  s¥   € Ø!#€FØ€IÞ
Ü% iÓ0‰ˆÜ˜T“{ˆØ‹?ÜÐ-Ó.Ð.ØÑ  UÓ%6ÜÐ:Ó;Ð;Ü& yÓ1ÑˆÜˆu‹:˜‹>Ü& uÓ-‰LˆEÜ�5‹z˜A‹~Ü Ð!DÓEÐEÜ˜e›ˆ‰Øˆ	÷ ˆ)ð €Mr!   c                ó¦  • [        U[        R                  [        R                  [        R                  45      (       d  [        S5      e[        U 5      n[        U5      n[        5       nUR                  U5        UR                  X5        UR                  5       n[        R                  " U5      nUR                  U5        UR                  5       $ )Nz2hash_algorithm must be either MD5, SHA1, or SHA256)rB   r   ÚMD5rÐ  rÒ  r`   rS   r6  r�   r    rÜ   r³   ÚHashrW  rY  )rQ   Úhash_algorithmrR   rg  rÚ   Ússh_binary_dataÚhash_objs          r   Ússh_key_fingerprintr  y  s¥   € ô ØÜ	�‰”V—[‘[¤&§-¡-Ð0÷ñ ô ÐLÓMÐMä  Ó%€HÜ˜hÓ'€Gä‹K€EØ	×Ñ�XÔØ×Ñ˜#Ô%à—m‘m“o€Oô �{Š{˜>Ó*€HØ‡O�O�OÔ$Ø×ÑÓÐr!   c                óð   • [        U SS9n[        U[        5      (       a  UR                  5       nOUn[        U[        R
                  5      (       a$  [        R                  " S[        R                  SS9  U$ )NT)rí  rH  rI  rJ  )
r  rB   rŠ  rE   r	   rK   r[  r\  r   r]  )rZ   r^  Úcert_or_keyrE   s       r   Úload_ssh_public_keyr  ’  sh   € ô ,¨DÀdÑK€Kä�+œ~×.Ñ.Ø ×+Ñ+Ó-‰
à ˆ
ä�*œc×.Ñ.×/Ñ/Ü�Šðä× Ñ Øò		
ð Ðr!   c                ó˜  • [        U [        R                  5      (       a$  [        R                  " S[
        R                  SS9  [        U 5      n[        U5      n[        5       nUR                  U5        UR                  X5        [        R                  " UR                  5       5      R                  5       nSR!                  USU/5      $ )z&One-line public key format for OpenSSHrr  rg   rJ  r!   rÆ  )rB   r	   rK   r[  r\  r   r]  rS   r6  r�   r    rÜ   rQ  rÈ  r³   ÚstripÚjoin)rE   rR   rg  rÚ   Úpubs        r   Úserialize_ssh_public_keyr  ¦  s    € ä�*œc×.Ñ.×/Ñ/Ü�Šð*ä× Ñ Øò		
ô ! Ó,€HÜ˜hÓ'€Gä‹K€EØ	×Ñ�XÔØ×Ñ˜*Ô,ä
×
Ò
˜eŸm™m›oÓ
.×
4Ñ
4Ó
6€CØ�8‰8�X˜t SÐ)Ó*Ð*r!   é   c            
      óî   • \ rS rSrSSSS/ SSS/ / 4
                   SS jjr    SS jrSS jrSS jrSS jr    SS	 jr	S
 r
SS jrSS jr      SS jr      SS jrSS jrSrg)ÚSSHCertificateBuilderiÆ  NFc                ó|   • Xl         X l        X0l        X@l        XPl        X`l        Xpl        X€l        X�l        X l	        g r…   ©
r�  rŽ  r�  r�  r‘  Ú_valid_for_all_principalsr“  r’  r”  r•  )r‡   r�  rŽ  r�  r�  r‘  r  r“  r’  r”  r•  s              r   r‰   ÚSSHCertificateBuilder.__init__Ç  s=   € ð 'ÔØŒØŒ
ØŒØ!2ÔØ)BÔ&Ø*ÔØ(ÔØ!2ÔØ&Õr!   c                óœ  • [        U[        R                  [        R                  [
        R                  45      (       d  [        S5      eU R                  b  [        S5      e[        UU R                  U R                  U R                  U R                  U R                  U R                   U R"                  U R$                  U R&                  S9
$ )NrA   zpublic_key already setr  )rB   r
   rF   r   rH   r   rN   r`   r�  rP   r  rŽ  r�  r�  r‘  r  r“  r’  r”  r•  )r‡   rE   s     r   rE   Ú SSHCertificateBuilder.public_keyß  sµ   € ô Øä×)Ñ)Ü× Ñ Ü×(Ñ(ð÷
ñ 
ô Ð2Ó3Ð3Ø×ÑÑ'ÜÐ5Ó6Ð6ä$Ø"Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                ó~  • [        U[        5      (       d  [        S5      eSUs=::  a  S:  d  O  [        S5      eU R                  b  [        S5      e[        U R                  UU R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9
$ )Nzserial must be an integerr   ì            z"serial must be between 0 and 2**64zserial already setr  )rB   r*   r`   rP   rŽ  r  r�  r�  r�  r‘  r  r“  r’  r”  r•  )r‡   r¨  s     r   r¨  ÚSSHCertificateBuilder.serialû  s§   € Ü˜&¤#×&Ñ&ÜÐ7Ó8Ð8Ø�FÕ"˜UÕ"ÜÐAÓBÐBØ�<‰<Ñ#ÜÐ1Ó2Ð2ä$Ø×(Ñ(ØØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óJ  • [        U[        5      (       d  [        S5      eU R                  b  [	        S5      e[        U R                  U R                  UU R                  U R                  U R                  U R                  U R                  U R                  U R                  S9
$ )Nz"type must be an SSHCertificateTypeztype already setr  )rB   r†  r`   r�  rP   r  r�  rŽ  r�  r‘  r  r“  r’  r”  r•  )r‡   r«  s     r   r«  ÚSSHCertificateBuilder.type  s�   € Ü˜$Ô 2×3Ñ3ÜÐ@ÓAÐAØ�:‰:Ñ!ÜÐ/Ó0Ð0ä$Ø×(Ñ(Ø—L‘LØØ—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óJ  • [        U[        5      (       d  [        S5      eU R                  b  [	        S5      e[        U R                  U R                  U R                  UU R                  U R                  U R                  U R                  U R                  U R                  S9
$ )Nzkey_id must be byteszkey_id already setr  )rB   rœ   r`   r�  rP   r  r�  rŽ  r�  r‘  r  r“  r’  r”  r•  )r‡   r®  s     r   r®  ÚSSHCertificateBuilder.key_id#  sŽ   € Ü˜&¤%×(Ñ(ÜÐ2Ó3Ð3Ø�<‰<Ñ#ÜÐ1Ó2Ð2ä$Ø×(Ñ(Ø—L‘LØ—*‘*ØØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óØ  • U R                   (       a  [        S5      e[        S U 5       5      (       a  U(       d  [        S5      eU R                  (       a  [        S5      e[        U5      [        :”  a  [        S5      e[        U R                  U R                  U R                  U R                  UU R                   U R                  U R                  U R                  U R                  S9
$ )NzDPrincipals can't be set because the cert is valid for all principalsc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr…   )rB   rœ   )Ú.0rñ   s     r   Ú	<genexpr>Ú9SSHCertificateBuilder.valid_principals.<locals>.<genexpr>?  s   é € ÐCÒ2B¨Q”J˜q¤%×(Ð(Ò2Bù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  rP   Úallr`   r‘  rY   Ú_SSHKEY_CERT_MAX_PRINCIPALSr  r�  rŽ  r�  r�  r“  r’  r”  r•  )r‡   r±  s     r   r±  Ú&SSHCertificateBuilder.valid_principals6  sÙ   € ð ×)×)Üð%óð ô
 ÑCÑ2BÓC×CÑCÞ#äØGóð ð ×!×!ÜÐ;Ó<Ð<äÐÓ Ô#>Ó>ÜØLóð ô %Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ.Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óJ  • U R                   (       a  [        S5      eU R                  (       a  [        S5      e[        U R                  U R
                  U R                  U R                  U R                   SU R                  U R                  U R                  U R                  S9
$ )Nz@valid_principals already set, can't set valid_for_all_principalsz$valid_for_all_principals already setTr  )r‘  rP   r  r  r�  rŽ  r�  r�  r“  r’  r”  r•  r¨   s    r   Úvalid_for_all_principalsÚ.SSHCertificateBuilder.valid_for_all_principalsZ  s�   € Ø×!×!Üð+óð ð ×)×)ÜÐCÓDÐDä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*Ø×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óš  • [        U[        [        45      (       d  [        S5      e[        U5      nUS:  d  US:¼  a  [	        S5      eU R
                  b  [	        S5      e[        U R                  U R                  U R                  U R                  U R                  U R                  UU R                  U R                  U R                  S9
$ )Nz$valid_before must be an int or floatr   r$  zvalid_before must [0, 2**64)zvalid_before already setr  )rB   r*   Úfloatr`   rP   r“  r  r�  rŽ  r�  r�  r‘  r  r’  r”  r•  )r‡   rµ  s     r   rµ  Ú"SSHCertificateBuilder.valid_beforep  s·   € Ü˜,¬¬e¨×5Ñ5ÜÐBÓCÐCÜ˜<Ó(ˆØ˜!Ó˜|¨uÓ4ÜÐ;Ó<Ð<Ø×ÑÑ)ÜÐ7Ó8Ð8ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ&Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óš  • [        U[        [        45      (       d  [        S5      e[        U5      nUS:  d  US:¼  a  [	        S5      eU R
                  b  [	        S5      e[        U R                  U R                  U R                  U R                  U R                  U R                  U R                  UU R                  U R                  S9
$ )Nz#valid_after must be an int or floatr   r$  zvalid_after must [0, 2**64)zvalid_after already setr  )rB   r*   r6  r`   rP   r’  r  r�  rŽ  r�  r�  r‘  r  r“  r”  r•  )r‡   r¸  s     r   r¸  Ú!SSHCertificateBuilder.valid_after†  s¶   € Ü˜+¬¬U |×4Ñ4ÜÐAÓBÐBÜ˜+Ó&ˆØ˜‹?˜k¨UÓ2ÜÐ:Ó;Ð;Ø×ÑÑ(ÜÐ6Ó7Ð7ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø$Ø"×4Ñ4Ø×(Ñ(ñ
ð 	
r!   c                óÎ  • [        U[        5      (       a  [        U[        5      (       d  [        S5      eXR                   VVs/ s H  u  pUPM	     snn;   a  [	        S5      e[        U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  / U R                  QWU4PU R                  S9
$ s  snnf )Núname and value must be byteszDuplicate critical option namer  )rB   rœ   r`   r”  rP   r  r�  rŽ  r�  r�  r‘  r  r“  r’  r•  ©r‡   rV   r	  r  s       r   Úadd_critical_optionÚ)SSHCertificateBuilder.add_critical_optionœ  sÉ   € ô ˜$¤×&Ñ&¬j¸Ä×.FÑ.FÜÐ:Ó;Ð;à×(>Ò(>Ô?Ò(>™W˜T“DÑ(>Ò?Ó?ÜÐ=Ó>Ð>ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*ØF × 6Ñ 6ÐF¸¸u¸ÐFØ×(Ñ(ñ
ð 	
ùó @ó   ÁC!c                óÎ  • [        U[        5      (       a  [        U[        5      (       d  [        S5      eXR                   VVs/ s H  u  pUPM	     snn;   a  [	        S5      e[        U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  / U R                  QWU4PS9
$ s  snnf )Nr;  zDuplicate extension namer  )rB   rœ   r`   r•  rP   r  r�  rŽ  r�  r�  r‘  r  r“  r’  r”  r<  s       r   Úadd_extensionÚ#SSHCertificateBuilder.add_extension²  sÈ   € ô ˜$¤×&Ñ&¬j¸Ä×.FÑ.FÜÐ:Ó;Ð;à×(8Ò(8Ô9Ò(8™W˜T“DÑ(8Ò9Ó9ÜÐ7Ó8Ð8ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø:˜$×*Ñ*Ð:¨T°5¨MÐ:ñ
ð 	
ùó :r?  c           
     ó~  • [        U[        R                  [        R                  [
        R                  45      (       d  [        S5      eU R                  c  [        S5      eU R                  c  SOU R                  nU R                  c  [        S5      eU R                  c  SOU R                  nU R                  (       d  U R                  (       d  [        S5      eU R                  c  [        S5      eU R                   c  [        S5      eU R                   U R                  :”  a  [        S	5      eU R"                  R%                  S
 S9  U R&                  R%                  S S9  [)        U R                  5      nU[*        -   n[,        R.                  " S5      n[1        U5      n[3        5       nUR5                  U5        UR5                  U5        UR7                  U R                  U5        UR9                  U5        UR;                  U R                  R<                  5        UR5                  U5        [3        5       n	U R                   H  n
U	R5                  U
5        M     UR5                  U	R?                  5       5        UR9                  U R                   5        UR9                  U R                  5        [3        5       nU R"                   Hr  u  pÍUR5                  U5        [A        U5      S:”  a<  [3        5       nUR5                  U5        UR5                  UR?                  5       5        Ma  UR5                  U5        Mt     UR5                  UR?                  5       5        [3        5       nU R&                   Hr  u  pÍUR5                  U5        [A        U5      S:”  a<  [3        5       nUR5                  U5        UR5                  UR?                  5       5        Ma  UR5                  U5        Mt     UR5                  UR?                  5       5        UR5                  S5        [)        U5      n[1        U5      n[3        5       nUR5                  U5        UR7                  URC                  5       U5        UR5                  UR?                  5       5        [        U[
        R                  5      (       al  URE                  UR?                  5       5      n[3        5       nUR5                  U5        UR5                  U5        UR5                  UR?                  5       5        GO¾[        U[        R                  5      (       aè  [G        URH                  5      nURE                  UR?                  5       [        RJ                  " U5      5      n[L        RN                  " U5      u  nn[3        5       nUR5                  U5        [3        5       nURQ                  U5        URQ                  U5        UR5                  UR?                  5       5        UR5                  UR?                  5       5        O·[        U[        R                  5      (       d   e[3        5       nUR5                  [R        5        URE                  UR?                  5       [T        RV                  " 5       [X        RZ                  " 5       5      nUR5                  U5        UR5                  UR?                  5       5        [\        R^                  " UR?                  5       5      Ra                  5       n[b        Rd                  " [f        [i        SRk                  USU/5      5      5      $ )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                ó   • U S   $ ©Nr   r3   ©rñ   s    r   Ú<lambda>Ú,SSHCertificateBuilder.sign.<locals>.<lambda>ó  s   € °!°A²$r!   )rQ   c                ó   • U S   $ rE  r3   rF  s    r   rG  rH  ô  s   € ¨A¨aªDr!   r:   rÆ  )6rB   r
   rC   r   rG   r   rM   r`   r�  rP   rŽ  r�  r�  r‘  r  r“  r’  r”  Úsortr•  rS   rê  rv  rw  r6  r�   r    rÜ   r™   r•   r	  r³   rY   rE   ÚsignrÎ  rU   rÏ  rÌ  Údecode_dss_signaturer£   rÓ  r   rÕ  r   rÔ  rQ  rÈ  r  r£  r¤  rŠ  r  r  )r‡   rÎ   r¨  r®  rR   Úcert_prefixr   rg  ÚfÚfprincipalsrÒ   ÚfcritrV   r	  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafr   ÚfsigrÙ  rÖ  r×  ÚfsigblobÚ	cert_datas                              r   rK  ÚSSHCertificateBuilder.signÈ  sc  € ÜØä×*Ñ*Ü×!Ñ!Ü×)Ñ)ð÷
ñ 
ô Ð:Ó;Ð;à×ÑÑ#ÜÐ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à× Ñ  Ö'ñ 2ð 	
�‰�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!   )
r”  r•  r�  r�  rŽ  r�  r’  r“  r  r‘  )r�  zSSHCertPublicKeyTypes | NonerŽ  r/   r�  zSSHCertificateType | Noner�  úbytes | Noner‘  rÝ  r  r1   r“  r/   r’  r/   r”  úlist[tuple[bytes, bytes]]r•  r\  )rE   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  )rV   rœ   r	  rœ   r¶   r  )rÎ   ÚSSHCertPrivateKeyTypesr¶   rŠ  )r4   r5   r6   r7   r‰   rE   r¨  r«  r®  r±  r3  rµ  r¸  r=  rA  rK  r9   r3   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œ   )rQ   z&SSHPrivateKeyTypes | SSHPublicKeyTypesr¶   rœ   )rE   r  r¶   rœ   )rZ   r¸   r-   r*   r¶   r·   )rZ   r¸   r¶   r·   )
ra   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])ry   r*   r¶   rœ   )r¶   r_  )rR   r¸   r…   )
rZ   r¸   r   r[  r^  ú
typing.AnyrÊ   r1   r¶   ÚSSHPrivateKeyTypes)rÎ   ra  r   rœ   rz  r   r¶   rœ   )rU   r  r¶   zhashes.HashAlgorithm)rZ   r¸   r¶   z"SSHCertificate | SSHPublicKeyTypes)r  r�   r¶   rÞ  )rQ   rÜ  r  z(hashes.MD5 | hashes.SHA1 | hashes.SHA256r¶   rœ   )rZ   r¸   r^  r`  r¶   rÜ  )rE   rÜ  r¶   rœ   )|Ú
__future__r   rQ  Úenumrv  Úrer£  r[  Ú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ÚImportErrorrO   rI   rL   rA  Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rê  Ú_SK_SSH_ED25519Ú_SK_SSH_ECDSA_NISTP256rÑ  rÓ  Úcompileræ  rS  Ú	_SK_STARTÚ_SK_ENDrU  rT  rs  rt  ÚDOTALLrN  r�   rž   ÚrangerZ  r'   ÚAESÚCTRÚCBCÚGCMr<   r8   rW   rS   rD   r[   r^   rd   rn   rs   rv   rz   r   r�   r½   rä   rú   r  r2  r4  r?  rá  râ  rä  rF  r6  ÚUnionrC   rG   rJ   rM   ra  rp  r„  rF   rH   rK   rN   rÜ  r¥  ÚEnumr†  rŠ  rÎ  r  r  rì  r  r  r  r^  r0  r  r3   r!   r   Ú<module>r~     s>  ðö
 #ã Û Û 	Û 	Û Û Ý !å Ý 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ØØØØñ ñ')€Ð%ó ð@ !Ø Ø ñ€ôô&'ô:ô8ðØðàðð ðð ð	ð
 /ôô,?ô?ôô,ô+÷3ñ 3÷lG,ñ G,÷TCDñ CD÷LF8ñ F8÷R@%ñ @%ôF
÷
ñ 
÷2
ñ 
ð6 ‰m‹oØ‰m‹oØÑ#Ó%Ø‘_ [°"·,²,³.ÓAØ‘_ [°"·,²,³.ÓAØ‘_ [°"·,²,³.ÓAØÑ(Ó*ØÑ-Ó/ð	€ôFð —\‘\Ø×ÑØ×ÑØ×ÑØ×ÑðñÐ ð ðoð
 ,1ñoØ
ðoàðoð ðoð
 %)ðoð öoðdJØ#ðJàðJð 5ðJð ô	JðZ —L‘LØ×ÑØ×ÑØ×ÑØ×ÑðñÐ ð Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ô˜Ÿ™ô ÷
~ñ ~ôBð ð\Ø
ð\ð (õ\ð~+Ø
ð+à'ô+ôð(Ø	ðà<ðð ôð4 /3ðØ
ðØ!+ðàõô(+ð(  Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ð "Ð ÷I
ò I
øðs$ ó 
9ØÐð #(ð9Øð9àð9ð ð9ð ð	9ð
  ð9ð 
÷9ð 9ð
9ús   Á)N1 Î1OÏO