§
    Æ‡tjXÑ  ã                  ó®  — 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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&n# e'$ r dZ&	 d„d…d„Z%Y nw xY wdZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d!Z2 ej3        d"¦  «        Z4d#Z5d$Z6d%Z7d&Z8d'Z9d(Z:d)Z; ej3        e6d*z   e7z   ej<        ¦  «        Z= e> e? e@d+d,¦  «        ¦  «        ¦  «        ZAe	 G d-„ d.¦  «        ¦   «         ZB eBejC        d/ejD        d)d)dd¬0¦  «         eBejC        d/ejE        d)d)dd¬0¦  «         eBejC        d/ejF        d)d1d)d¬0¦  «        d2œZGd3eHd4<   e+e,e-d5œZId†d8„ZJd‡d;„ZKdˆd@„ZLd‰dA„ZMdŠdE„ZNd‹dH„ZOd‹dI„ZPdŒdK„ZQd‹dL„ZRd�dN„ZS G dO„ dP¦  «        ZT G dQ„ dR¦  «        ZU G dS„ dT¦  «        ZV G dU„ dV¦  «        ZW G dW„ dX¦  «        ZXdŽdY„ZY G dZ„ d[¦  «        ZZ G d\„ d]¦  «        Z[e) eU¦   «         e* eV¦   «         e( eX¦   «         e+ eWd^ ej\        ¦   «         ¦  «        e, eWd_ ej]        ¦   «         ¦  «        e- eWd` ej^        ¦   «         ¦  «        e/ eZ¦   «         e0 e[¦   «         iZ_d�db„Z`eja        ejb        ejc        ejd        eje        f         Zf	 d�ddcœd‘dh„Zgd’dl„Zheja        eji        ejj        ejk        ejl        f         Zmeja        eji        ejj        ejl        f         Zn G dm„ dnejo        ¦  «        Zp G do„ dp¦  «        Zqd“dt„Zr	 d„d”dv„Zsd”dw„Ztd•dz„Zud–d~„Zv	 d�d—d„Zwd˜d€„Zxeja        ejb        ejc        eje        f         Zyd�Zz G d‚„ dƒ¦  «        Z{dS )™é    )ÚannotationsN)Ú	dataclass)Úutils©ÚUnsupportedAlgorithm)Úhashes)ÚdsaÚecÚed25519ÚpaddingÚrsa)ÚAEADDecryptionContextÚCipherÚ
algorithmsÚmodes)ÚEncodingÚKeySerializationEncryptionÚNoEncryptionÚPrivateFormatÚPublicFormatÚ_KeySerializationEncryption)ÚkdfTFÚpasswordÚbytesÚsaltÚdesired_key_bytesÚintÚroundsÚignore_few_roundsÚboolÚreturnc                ó    — t          d¦  «        ‚)NzNeed bcrypt moduler   )r   r   r   r   r   s        ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/ssh.pyÚ_bcrypt_kdfr$   0   s   € õ #Ð#7Ñ8Ô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                  óV   — 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<   dS )Ú
_SSHCipherztype[algorithms.AES]Úalgr   Úkey_lenz3type[modes.CTR] | type[modes.CBC] | type[modes.GCM]ÚmodeÚ	block_lenÚiv_lenú
int | NoneÚtag_lenr    Úis_aeadN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r%   r#   r+   r+   [   sX   € € € € € € àÐÐÑØ€L€L�LØ=Ð=Ð=Ñ=Ø€N€N�NØ€K€K�KØÐÐÑØ€M€M�M€M€Mr%   r+   é    )r,   r-   r.   r/   r0   r2   r3   é   )r&   s
   aes256-cbcs   aes256-gcm@openssh.comzdict[bytes, _SSHCipher]Ú_SSH_CIPHERS)Ú	secp256r1Ú	secp384r1Ú	secp521r1Úkeyú&SSHPrivateKeyTypes | SSHPublicKeyTypesc                ó  — t          | t          j        ¦  «        r"t          |                      ¦   «         ¦  «        }nÃt          | t          j        ¦  «        rt          | ¦  «        }n™t          | t          j        t          j        f¦  «        rt          }nkt          | t          j        t          j        f¦  «        rt          }n=t          | t          j        t          j        f¦  «        rt"          }nt%          d¦  «        ‚|S )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)r?   Úkey_types     r#   Ú_get_ssh_key_typerS   �   sÛ   € Ý�#•rÔ1Ñ2Ô2ð 1Ý" 3§>¢>Ñ#3Ô#3Ñ4Ô4ˆˆÝ	�C�Ô2Ñ	3Ô	3ð 1Ý" 3Ñ'Ô'ˆˆÝ	�C�#Ô+­SÔ-=Ð>Ñ	?Ô	?ð 	1ÝˆˆÝ	�C�#Ô+­SÔ-=Ð>Ñ	?Ô	?ð 1ÝˆˆÝ	Ø�gÔ'­Ô)AÐBñ
ô 
ð 1õ  ˆˆåÐ/Ñ0Ô0Ð0à€Or%   rF   úec.EllipticCurvePublicKeyc                ó~   — | 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_TYPErQ   )rF   rV   s     r#   rE   rE       sE   € àÔ€EØ„z�Ð(Ð(ÝØD°e´jÐDÐDñ
ô 
ð 	
õ ˜5œ:Ô&Ð&r%   Údataúutils.Bufferr/   ÚNonec                óT   — | rt          | ¦  «        |z  dk    rt          d¦  «        ‚dS )zRequire data to be full blocksr   zCorrupt data: missing paddingN)ÚlenrQ   )rY   r/   s     r#   Ú_check_block_sizer^   ª   s6   € àð :•3�t‘9”9˜yÑ(¨AÒ-Ð-ÝÐ8Ñ9Ô9Ð9ð .Ð-r%   c                ó(   — | rt          d¦  «        ‚dS )z!All data should have been parsed.zCorrupt data: unparsed dataN)rQ   ©rY   s    r#   Ú_check_emptyra   °   s#   € àð 8ÝÐ6Ñ7Ô7Ð7ð8ð 8r%   Ú
ciphernameúbytes | Noneú)Cipher[modes.CBC | modes.CTR | modes.GCM]c                ó  — |st          d¦  «        ‚t          |          }t          |||j        |j        z   |d¦  «        }t          |                     |d|j        …         ¦  «        |                     ||j        d…         ¦  «        ¦  «        S )z$Generate key + iv and return cipher.z9Key is password-protected, but password was not provided.TN)Ú	TypeErrorr;   r$   r-   r0   r   r,   r.   )rb   r   r   r   ÚciphÚseeds         r#   Ú_init_cipherri   ¶   s˜   € ð ð 
ÝØGñ
ô 
ð 	
õ ˜
Ô#€DÝØ�$˜œ t¤{Ñ2°F¸Dñô €Dõ Ø�Š��n˜œ�nÔ%Ñ&Ô&Ø�	Š	�$�t”|�~�~Ô&Ñ'Ô'ñô ð r%   Ú
memoryviewútuple[int, memoryview]c                ó¢   — t          | ¦  «        dk     rt          d¦  «        ‚t                               | dd…         d¬¦  «        | dd…         fS )ÚUint32é   úInvalid dataNÚbig©Ú	byteorder©r]   rQ   r   Ú
from_bytesr`   s    r#   Ú_get_u32ru   Ì   óJ   € å
ˆ4�y„y�1‚}€}Ý˜Ñ(Ô(Ð(Ý�>Š>˜$˜r ˜rœ(¨eˆ>Ñ4Ô4°d¸1¸2¸2´hÐ>Ð>r%   c                ó¢   — t          | ¦  «        dk     rt          d¦  «        ‚t                               | dd…         d¬¦  «        | dd…         fS )ÚUint64é   ro   Nrp   rq   rs   r`   s    r#   Ú_get_u64rz   Ó   rv   r%   útuple[memoryview, memoryview]c                ó’   — t          | ¦  «        \  }} |t          | ¦  «        k    rt          d¦  «        ‚| d|…         | |d…         fS )zBytes with u32 length prefixro   N)ru   r]   rQ   )rY   Úns     r#   Ú_get_sshstrr~   Ú   sI   € å�t‰nŒn�G€A€tØ�3ˆt‰9Œ9‚}€}Ý˜Ñ(Ô(Ð(Ø���Œ8�T˜!˜"˜"”XÐÐr%   c                óš   — t          | ¦  «        \  }} |r|d         dk    rt          d¦  «        ‚t                               |d¦  «        | fS )zBig integer.r   é   ro   rp   )r~   rQ   r   rt   )rY   Úvals     r#   Ú
_get_mpintr‚   â   sN   € å˜DÑ!Ô!�I€CˆØ
ð )ˆs�1Œv˜Š}ˆ}Ý˜Ñ(Ô(Ð(Ý�>Š>˜#˜uÑ%Ô% tÐ+Ð+r%   r�   c                ó’   — | dk     rt          d¦  «        ‚| sdS |                      ¦   «         dz   dz  }t          j        | |¦  «        S )z!Storage format for signed bigint.r   znegative mpint not allowedr%   ry   )rQ   Ú
bit_lengthr   Úint_to_bytes)r�   Únbytess     r#   Ú	_to_mpintr‡   ê   sS   € à
ˆQ‚w€wÝÐ5Ñ6Ô6Ð6Øð ØˆsØ�nŠnÑÔ Ñ" qÑ(€FÝÔ˜c 6Ñ*Ô*Ð*r%   c                  ój   — 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dS )$Ú	_FragListz,Build recursive structure without data copy.zlist[utils.Buffer]ÚflistNÚinitúlist[utils.Buffer] | Noner!   r[   c                óP   — g | _         |r| j                              |¦  «         d S d S ©N)rŠ   Úextend)Úselfr‹   s     r#   Ú__init__z_FragList.__init__ù   s7   € ØˆŒ
Øð 	$ØŒJ×Ò˜dÑ#Ô#Ð#Ð#Ð#ð	$ð 	$r%   r�   rZ   c                ó:   — | j                              |¦  «         dS )zAdd plain bytesN)rŠ   Úappend©r�   r�   s     r#   Úput_rawz_FragList.put_rawþ   s   € àŒ
×Ò˜#ÑÔÐÐÐr%   r   c                ód   — | j                              |                     dd¬¦  «        ¦  «         dS )zBig-endian uint32rn   rp   ©Úlengthrr   N©rŠ   r“   Úto_bytesr”   s     r#   Úput_u32z_FragList.put_u32  ó.   € àŒ
×Ò˜#Ÿ,š,¨a¸5˜,ÑAÔAÑBÔBÐBÐBÐBr%   c                ód   — | j                              |                     dd¬¦  «        ¦  «         dS )zBig-endian uint64ry   rp   r—   Nr™   r”   s     r#   Úput_u64z_FragList.put_u64  rœ   r%   úbytes | _FragListc                óR  — t          |t          t          t          f¦  «        r>|                      t          |¦  «        ¦  «         | j                             |¦  «         dS |                      |                     ¦   «         ¦  «         | j         	                    |j        ¦  «         dS )zBytes prefixed with u32 lengthN)
rC   r   rj   Ú	bytearrayr›   r]   rŠ   r“   Úsizer�   r”   s     r#   Ú
put_sshstrz_FragList.put_sshstr
  s‡   € å�c�E¥:­yÐ9Ñ:Ô:ð 	)Ø�LŠL�˜S™œÑ"Ô"Ð"ØŒJ×Ò˜cÑ"Ô"Ð"Ð"Ð"à�LŠL˜Ÿš™œÑ$Ô$Ð$ØŒJ×Ò˜cœiÑ(Ô(Ð(Ð(Ð(r%   c                óJ   — |                       t          |¦  «        ¦  «         dS )z*Big-endian bigint prefixed with u32 lengthN)r£   r‡   r”   s     r#   Ú	put_mpintz_FragList.put_mpint  s    € à�Š�	 #™œÑ'Ô'Ð'Ð'Ð'r%   c                óP   — 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Ñ'Ô'Ñ(Ô(Ð(r%   r   Údstbufrj   Úposc                óT   — | j         D ]}t          |¦  «        }|||z   }}||||…<   Œ |S )zWrite into bytearray)rŠ   r]   )r�   rª   r«   ÚfragÚflenÚstarts         r#   Úrenderz_FragList.render  sA   € à”Jð 	%ð 	%ˆDÝ�t‘9”9ˆDØ˜c D™j�3ˆEØ $ˆF�5˜�9ÑÐØˆ
r%   r   c                ó°   — t          t          |                      ¦   «         ¦  «        ¦  «        }|                      |¦  «         |                     ¦   «         S )zReturn as bytes)rj   r¡   r¢   r°   Útobytes)r�   Úbufs     r#   r²   z_FragList.tobytes#  s?   € å� 4§9¢9¡;¤;Ñ/Ô/Ñ0Ô0ˆØ�Š�CÑÔÐØ�{Š{‰}Œ}Ðr%   rŽ   )r‹   rŒ   r!   r[   )r�   rZ   r!   r[   )r�   r   r!   r[   )r�   rŸ   r!   r[   ©r!   r   )r   )rª   rj   r«   r   r!   r   ©r!   r   )r4   r5   r6   Ú__doc__r7   r‘   r•   r›   rž   r£   r¥   r¢   r°   r²   r8   r%   r#   r‰   r‰   ô   sî   € € € € € € Ø6Ð6àÐÐÑð$ð $ð $ð $ð $ð
ð ð ð ðCð Cð Cð CðCð Cð Cð Cð)ð )ð )ð )ð(ð (ð (ð (ð)ð )ð )ð )ðð ð ð ð ðð ð ð ð ð r%   r‰   c                  ó:   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„ZdS )Ú_SSHFormatRSAzhFormat for RSA keys.

    Public:
        mpint e, n
    Private:
        mpint n, e, d, iqmp, p, q
    rY   rj   r!   ú"tuple[tuple[int, int], memoryview]c                óV   — t          |¦  «        \  }}t          |¦  «        \  }}||f|fS )zRSA public fields©r‚   )r�   rY   Úer}   s       r#   Ú
get_publicz_SSHFormatRSA.get_public3  s4   € õ ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ø�1ˆv�tˆ|Ðr%   ú#tuple[rsa.RSAPublicKey, memoryview]c                ó’   — |                       |¦  «        \  \  }}}t          j        ||¦  «        }|                     ¦   «         }||fS )zMake RSA public key from data.)r½   r   ÚRSAPublicNumbersrF   )r�   rY   r¼   r}   Úpublic_numbersrF   s         r#   Úload_publicz_SSHFormatRSA.load_public;  sK   € ð —’ tÑ,Ô,‰‰ˆˆA�ÝÔ-¨a°Ñ3Ô3ˆØ#×.Ò.Ñ0Ô0ˆ
Ø˜4ÐÐr%   Úunsafe_skip_rsa_key_validationr    ú$tuple[rsa.RSAPrivateKey, memoryview]c           	     óî  — t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }	}||f|k    rt          d¦  «        ‚t          j        ||¦  «        }
t          j        ||	¦  «        }t          j        ||¦  «        }t          j        ||	||
|||¦  «        }|                     |¬¦  «        }||fS )zMake RSA private key from data.z Corrupt data: rsa field mismatch©rÃ   )r‚   rQ   r   Úrsa_crt_dmp1Úrsa_crt_dmq1rÀ   ÚRSAPrivateNumbersÚprivate_key)r�   rY   Ú	pubfieldsrÃ   r}   r¼   ÚdÚiqmpÚpÚqÚdmp1Údmq1rÁ   Úprivate_numbersrÊ   s                  r#   Úload_privatez_SSHFormatRSA.load_privateD  s  € õ ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý Ñ%Ô%‰
ˆˆdÝ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4àˆqˆ6�YÒÐÝÐ?Ñ@Ô@Ð@ÝÔ  1Ñ%Ô%ˆÝÔ  1Ñ%Ô%ˆÝÔ-¨a°Ñ3Ô3ˆÝÔ/Øˆq�!�T˜4  ~ñ
ô 
ˆð &×1Ò1Ø+Ið 2ñ 
ô 
ˆð ˜DÐ Ð r%   rF   úrsa.RSAPublicKeyÚf_pubr‰   r[   c                ó–   — |                      ¦   «         }|                     |j        ¦  «         |                     |j        ¦  «         dS )zWrite RSA public keyN)rÁ   r¥   r¼   r}   )r�   rF   rÕ   Úpubns       r#   Úencode_publicz_SSHFormatRSA.encode_public\  sC   € ð ×(Ò(Ñ*Ô*ˆØ�Š˜œÑÔÐØ�Š˜œÑÔÐÐÐr%   rÊ   úrsa.RSAPrivateKeyÚf_privc                ót  — |                      ¦   «         }|j        }|                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         dS )zWrite RSA private keyN)	rÒ   rÁ   r¥   r}   r¼   rÌ   rÍ   rÎ   rÏ   )r�   rÊ   rÚ   rÒ   rÁ   s        r#   Úencode_privatez_SSHFormatRSA.encode_privated  s­   € ð &×5Ò5Ñ7Ô7ˆØ(Ô7ˆà×Ò˜Ô)Ñ*Ô*Ð*Ø×Ò˜Ô)Ñ*Ô*Ð*à×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô-Ñ.Ô.Ð.Ø×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô*Ñ+Ô+Ð+Ð+Ð+r%   N)rY   rj   r!   r¹   )rY   rj   r!   r¾   )rY   rj   rÃ   r    r!   rÄ   )rF   rÔ   rÕ   r‰   r!   r[   )rÊ   rÙ   rÚ   r‰   r!   r[   ©	r4   r5   r6   r¶   r½   rÂ   rÓ   rØ   rÜ   r8   r%   r#   r¸   r¸   *  s‚   € € € € € ðð ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ð0 ð  ð  ð  ð,ð ,ð ,ð ,ð ,ð ,r%   r¸   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zd d„Z	dS )!Ú_SSHFormatDSAzhFormat for DSA keys.

    Public:
        mpint p, q, g, y
    Private:
        mpint p, q, g, y, x
    rY   rj   r!   útuple[tuple, memoryview]c                ó¢   — t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}||||f|fS )zDSA public fieldsr»   )r�   rY   rÎ   rÏ   ÚgÚys         r#   r½   z_SSHFormatDSA.get_public}  sY   € å˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ø�1�a˜ˆ|˜TÐ!Ð!r%   ú#tuple[dsa.DSAPublicKey, memoryview]c                óì   — |                       |¦  «        \  \  }}}}}t          j        |||¦  «        }t          j        ||¦  «        }|                      |¦  «         |                     ¦   «         }||fS )zMake DSA public key from data.)r½   r	   ÚDSAParameterNumbersÚDSAPublicNumbersÚ	_validaterF   )	r�   rY   rÎ   rÏ   râ   rã   Úparameter_numbersrÁ   rF   s	            r#   rÂ   z_SSHFormatDSA.load_public…  sx   € ð "Ÿ_š_¨TÑ2Ô2Ñ‰ˆˆAˆq�!�dÝÔ3°A°q¸!Ñ<Ô<ÐÝÔ-¨aÐ1BÑCÔCˆØ�Š�~Ñ&Ô&Ð&Ø#×.Ò.Ñ0Ô0ˆ
Ø˜4ÐÐr%   rÃ   r    ú$tuple[dsa.DSAPrivateKey, memoryview]c                ól  — |                       |¦  «        \  \  }}}}}t          |¦  «        \  }}||||f|k    rt          d¦  «        ‚t          j        |||¦  «        }	t          j        ||	¦  «        }
|                      |
¦  «         t          j        ||
¦  «        }|                     ¦   «         }||fS )zMake DSA private key from data.z Corrupt data: dsa field mismatch)	r½   r‚   rQ   r	   ræ   rç   rè   ÚDSAPrivateNumbersrÊ   )r�   rY   rË   rÃ   rÎ   rÏ   râ   rã   Úxré   rÁ   rÒ   rÊ   s                r#   rÓ   z_SSHFormatDSA.load_private�  s½   € ð "Ÿ_š_¨TÑ2Ô2Ñ‰ˆˆAˆq�!�dÝ˜TÑ"Ô"‰ˆˆ4àˆq�!�Qˆ<˜9Ò$Ð$ÝÐ?Ñ@Ô@Ð@ÝÔ3°A°q¸!Ñ<Ô<ÐÝÔ-¨aÐ1BÑCÔCˆØ�Š�~Ñ&Ô&Ð&ÝÔ/°°>ÑBÔBˆØ%×1Ò1Ñ3Ô3ˆØ˜DÐ Ð r%   rF   údsa.DSAPublicKeyrÕ   r‰   r[   c                ó6  — |                      ¦   «         }|j        }|                      |¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         dS )zWrite DSA public keyN)rÁ   ré   rè   r¥   rÎ   rÏ   râ   rã   )r�   rF   rÕ   rÁ   ré   s        r#   rØ   z_SSHFormatDSA.encode_public   s�   € ð $×2Ò2Ñ4Ô4ˆØ*Ô<ÐØ�Š�~Ñ&Ô&Ð&à�ŠÐ)Ô+Ñ,Ô,Ð,Ø�ŠÐ)Ô+Ñ,Ô,Ð,Ø�ŠÐ)Ô+Ñ,Ô,Ð,Ø�Š˜Ô(Ñ)Ô)Ð)Ð)Ð)r%   rÊ   údsa.DSAPrivateKeyrÚ   c                ó®   — |                       |                     ¦   «         |¦  «         |                     |                     ¦   «         j        ¦  «         dS )zWrite DSA private keyN)rØ   rF   r¥   rÒ   rí   )r�   rÊ   rÚ   s      r#   rÜ   z_SSHFormatDSA.encode_private­  sO   € ð 	×Ò˜;×1Ò1Ñ3Ô3°VÑ<Ô<Ð<Ø×Ò˜×4Ò4Ñ6Ô6Ô8Ñ9Ô9Ð9Ð9Ð9r%   rÁ   údsa.DSAPublicNumbersc                ól   — |j         }|j                             ¦   «         dk    rt          d¦  «        ‚d S )Ni   z#SSH supports only 1024 bit DSA keys)ré   rÎ   r„   rQ   )r�   rÁ   ré   s      r#   rè   z_SSHFormatDSA._validate´  s<   € Ø*Ô<ÐØÔ×)Ò)Ñ+Ô+¨tÒ3Ð3ÝÐBÑCÔCÐCð 4Ð3r%   N)rY   rj   r!   rà   )rY   rj   r!   rä   )rY   rj   rÃ   r    r!   rê   )rF   rî   rÕ   r‰   r!   r[   )rÊ   rð   rÚ   r‰   r!   r[   )rÁ   rò   r!   r[   )
r4   r5   r6   r¶   r½   rÂ   rÓ   rØ   rÜ   rè   r8   r%   r#   rß   rß   t  sœ   € € € € € ðð ð"ð "ð "ð "ð	 ð 	 ð 	 ð 	 ð!ð !ð !ð !ð *ð *ð *ð *ð:ð :ð :ð :ðDð Dð Dð Dð Dð Dr%   rß   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zd d„Zd!d„Zd"d„Z	dS )#Ú_SSHFormatECDSAz–Format for ECDSA keys.

    Public:
        str curve
        bytes point
    Private:
        str curve
        bytes point
        mpint secret
    Ússh_curve_namer   rV   úec.EllipticCurvec                ó"   — || _         || _        d S rŽ   )rö   rV   )r�   rö   rV   s      r#   r‘   z_SSHFormatECDSA.__init__Æ  s   € Ø,ˆÔØˆŒ
ˆ
ˆ
r%   rY   rj   r!   ú0tuple[tuple[memoryview, memoryview], memoryview]c                ó  — t          |¦  «        \  }}t          |¦  «        \  }}|| j        k    rt          d¦  «        ‚t          |¦  «        dk    rt          d¦  «        ‚|d         dk    rt	          d¦  «        ‚||f|fS )zECDSA public fieldszCurve name mismatchr   zInvalid EC point: empty datarn   zNeed uncompressed point)r~   rö   rQ   r]   ÚNotImplementedError)r�   rY   rV   Úpoints       r#   r½   z_SSHFormatECDSA.get_publicÊ  sŒ   € õ " $Ñ'Ô'‰ˆˆtÝ! $Ñ'Ô'‰ˆˆtØ�DÔ'Ò'Ð'ÝÐ2Ñ3Ô3Ð3Ýˆu‰:Œ:˜Š?ˆ?ÝÐ;Ñ<Ô<Ð<Ø�Œ8�qŠ=ˆ=Ý%Ð&?Ñ@Ô@Ð@Ø�uˆ~˜tÐ#Ð#r%   ú,tuple[ec.EllipticCurvePublicKey, memoryview]c                ó®   — |                       |¦  «        \  \  }}}t          j                             | j        |                     ¦   «         ¦  «        }||fS ©z Make ECDSA public key from data.)r½   r
   rG   Úfrom_encoded_pointrV   r²   )r�   rY   Ú_rü   rF   s        r#   rÂ   z_SSHFormatECDSA.load_publicØ  sR   € ð  Ÿ?š?¨4Ñ0Ô0Ñ‰
ˆˆE�DÝÔ.×AÒAØŒJ˜Ÿš™œñ
ô 
ˆ
ð ˜4ÐÐr%   rÃ   r    ú-tuple[ec.EllipticCurvePrivateKey, memoryview]c                óÆ   — |                       |¦  «        \  \  }}}t          |¦  «        \  }}||f|k    rt          d¦  «        ‚t          j        || j        ¦  «        }||fS )z!Make ECDSA private key from data.z"Corrupt data: ecdsa field mismatch)r½   r‚   rQ   r
   Úderive_private_keyrV   )r�   rY   rË   rÃ   Ú
curve_namerü   ÚsecretrÊ   s           r#   rÓ   z_SSHFormatECDSA.load_privateâ  sn   € ð %)§O¢O°DÑ$9Ô$9Ñ!Ñˆ�U˜TÝ! $Ñ'Ô'‰ˆ�à˜Ð )Ò+Ð+ÝÐAÑBÔBÐBÝÔ+¨F°D´JÑ?Ô?ˆØ˜DÐ Ð r%   rF   rT   rÕ   r‰   r[   c                ó¸   — |                      t          j        t          j        ¦  «        }|                     | j        ¦  «         |                     |¦  «         dS )zWrite ECDSA public keyN)Úpublic_bytesr   ÚX962r   ÚUncompressedPointr£   rö   )r�   rF   rÕ   rü   s       r#   rØ   z_SSHFormatECDSA.encode_publicî  sV   € ð ×'Ò'ÝŒM�<Ô9ñ
ô 
ˆð 	×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ÑÔÐÐÐr%   rÊ   úec.EllipticCurvePrivateKeyrÚ   c                ó¶   — |                      ¦   «         }|                     ¦   «         }|                      ||¦  «         |                     |j        ¦  «         dS )zWrite ECDSA private keyN)rF   rÒ   rØ   r¥   Úprivate_value)r�   rÊ   rÚ   rF   rÒ   s        r#   rÜ   z_SSHFormatECDSA.encode_privateø  sY   € ð !×+Ò+Ñ-Ô-ˆ
Ø%×5Ò5Ñ7Ô7ˆà×Ò˜: vÑ.Ô.Ð.Ø×Ò˜Ô6Ñ7Ô7Ð7Ð7Ð7r%   N)rö   r   rV   r÷   )rY   rj   r!   rù   ©rY   rj   r!   rý   )rY   rj   rÃ   r    r!   r  )rF   rT   rÕ   r‰   r!   r[   )rÊ   r  rÚ   r‰   r!   r[   )
r4   r5   r6   r¶   r‘   r½   rÂ   rÓ   rØ   rÜ   r8   r%   r#   rõ   rõ   º  s–   € € € € € ð	ð 	ðð ð ð ð$ð $ð $ð $ð ð  ð  ð  ð
!ð 
!ð 
!ð 
!ð ð  ð  ð  ð8ð 8ð 8ð 8ð 8ð 8r%   rõ   c                  ó:   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„ZdS )Ú_SSHFormatEd25519z~Format for Ed25519 keys.

    Public:
        bytes point
    Private:
        bytes point
        bytes secret_and_point
    rY   rj   r!   ú$tuple[tuple[memoryview], memoryview]c                ó0   — t          |¦  «        \  }}|f|fS )zEd25519 public fields)r~   )r�   rY   rü   s      r#   r½   z_SSHFormatEd25519.get_public  s!   € õ " $Ñ'Ô'‰ˆˆtØˆx˜ˆ~Ðr%   ú+tuple[ed25519.Ed25519PublicKey, memoryview]c                ó    — |                       |¦  «        \  \  }}t          j                             |                     ¦   «         ¦  «        }||fS ©z"Make Ed25519 public key from data.)r½   r   rO   Úfrom_public_bytesr²   )r�   rY   rü   rF   s       r#   rÂ   z_SSHFormatEd25519.load_public  sK   € ð Ÿš¨Ñ.Ô.‰‰ˆ�$ÝÔ-×?Ò?Ø�MŠM‰OŒOñ
ô 
ˆ
ð ˜4ÐÐr%   rÃ   r    ú,tuple[ed25519.Ed25519PrivateKey, memoryview]c                ó   — |                       |¦  «        \  \  }}t          |¦  «        \  }}|dd…         }|dd…         }||k    s|f|k    rt          d¦  «        ‚t          j                             |¦  «        }||fS )z#Make Ed25519 private key from data.Nr9   z$Corrupt data: ed25519 field mismatch)r½   r~   rQ   r   rN   Úfrom_private_bytes)	r�   rY   rË   rÃ   rü   Úkeypairr  Úpoint2rÊ   s	            r#   rÓ   z_SSHFormatEd25519.load_private  s‹   € ð Ÿš¨Ñ.Ô.‰‰ˆ�$Ý# DÑ)Ô)‰ˆ�à˜˜"˜”ˆØ˜˜˜”ˆØ�FŠ?ˆ?˜u˜h¨)Ò3Ð3ÝÐCÑDÔDÐDÝÔ/×BÒBÀ6ÑJÔJˆØ˜DÐ Ð r%   rF   úed25519.Ed25519PublicKeyrÕ   r‰   r[   c                ó„   — |                      t          j        t          j        ¦  «        }|                     |¦  «         dS )zWrite Ed25519 public keyN)r  r   ÚRawr   r£   )r�   rF   rÕ   Úraw_public_keys       r#   rØ   z_SSHFormatEd25519.encode_public,  s?   € ð $×0Ò0ÝŒL�,Ô*ñ
ô 
ˆð 	×Ò˜Ñ(Ô(Ð(Ð(Ð(r%   rÊ   úed25519.Ed25519PrivateKeyrÚ   c                óh  — |                      ¦   «         }|                     t          j        t          j        t          ¦   «         ¦  «        }|                     t          j        t          j        ¦  «        }t          ||g¦  «        }|  	                    ||¦  «         | 
                    |¦  «         dS )zWrite Ed25519 private keyN)rF   Úprivate_bytesr   r  r   r   r  r   r‰   rØ   r£   )r�   rÊ   rÚ   rF   Úraw_private_keyr  Ú	f_keypairs          r#   rÜ   z _SSHFormatEd25519.encode_private5  sŸ   € ð !×+Ò+Ñ-Ô-ˆ
Ø%×3Ò3ÝŒL�-Ô+­\©^¬^ñ
ô 
ˆð $×0Ò0ÝŒL�,Ô*ñ
ô 
ˆõ ˜°Ð?Ñ@Ô@ˆ	à×Ò˜: vÑ.Ô.Ð.Ø×Ò˜)Ñ$Ô$Ð$Ð$Ð$r%   N)rY   rj   r!   r  ©rY   rj   r!   r  )rY   rj   rÃ   r    r!   r  )rF   r  rÕ   r‰   r!   r[   )rÊ   r   rÚ   r‰   r!   r[   rÝ   r8   r%   r#   r  r    s‚   € € € € € ðð ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ð)ð )ð )ð )ð%ð %ð %ð %ð %ð %r%   r  c                ó¢   — t          | ¦  «        \  }} |                     ¦   «                              d¦  «        st          d|› d�¦  «        ‚|| fS )z!
    U2F application strings
    s   ssh:z4U2F application string does not start with b'ssh:' (ú))r~   r²   Ú
startswithrQ   )rY   Úapplications     r#   Úload_applicationr*  F  sn   € õ $ DÑ)Ô)Ñ€K�Ø×ÒÑ Ô ×+Ò+¨GÑ4Ô4ð 
ÝðØðð ð ñ
ô 
ð 	
ð ˜ÐÐr%   c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú_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:")
    rY   rj   r!   r  c                ó‚   — t          t          ¦  «                             |¦  «        \  }}t          |¦  «        \  }}||fS r  )Ú_lookup_kformatrP   rÂ   r*  ©r�   rY   rF   r  s       r#   rÂ   z_SSHFormatSKEd25519.load_public\  s@   € õ +­<Ñ8Ô8×DÒDÀTÑJÔJÑˆ
�DÝ" 4Ñ(Ô(‰ˆˆ4Ø˜4ÐÐr%   útyping.NoReturnc                ó    — t          d¦  «        ‚)Nz,sk-ssh-ed25519 private keys cannot be loadedr   ©r�   rY   s     r#   r½   z_SSHFormatSKEd25519.get_publicd  s   € õ #Ø:ñ
ô 
ð 	
r%   Nr%  ©rY   rj   r!   r0  ©r4   r5   r6   r¶   rÂ   r½   r8   r%   r#   r,  r,  S  sF   € € € € € ðð ð ð  ð  ð  ð
ð 
ð 
ð 
ð 
ð 
r%   r,  c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú_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:")
    rY   rj   r!   rý   c                ó‚   — t          t          ¦  «                             |¦  «        \  }}t          |¦  «        \  }}||fS rÿ   )r.  Ú_ECDSA_NISTP256rÂ   r*  r/  s       r#   rÂ   z_SSHFormatSKECDSA.load_publicv  s@   € õ +­?Ñ;Ô;×GÒGÈÑMÔMÑˆ
�DÝ" 4Ñ(Ô(‰ˆˆ4Ø˜4ÐÐr%   r0  c                ó    — t          d¦  «        ‚)Nz4sk-ecdsa-sha2-nistp256 private keys cannot be loadedr   r2  s     r#   r½   z_SSHFormatSKECDSA.get_public~  s   € õ #ØBñ
ô 
ð 	
r%   Nr  r3  r4  r8   r%   r#   r6  r6  l  sF   € € € € € ðð ð ð  ð  ð  ð
ð 
ð 
ð 
ð 
ð 
r%   r6  s   nistp256s   nistp384s   nistp521rR   c                ó¾   — t          | t          ¦  «        s!t          | ¦  «                             ¦   «         } | t          v rt          |          S t          d| ›�¦  «        ‚)z"Return valid format or throw errorzUnsupported key type: )rC   r   rj   r²   Ú_KEY_FORMATSr   )rR   s    r#   r.  r.  ’  sZ   € å�h¥Ñ&Ô&ð 2Ý˜hÑ'Ô'×/Ò/Ñ1Ô1ˆØ•<ÐÐÝ˜HÔ%Ð%Ý
ÐD¸ÐDÐDÑ
EÔ
EÐEr%   rÆ   Úbackendú
typing.AnyrÃ   ÚSSHPrivateKeyTypesc               óÐ	  — t          j        d| ¦  «         |�t          j        d|¦  «         t                               | ¦  «        }|st          d¦  «        ‚|                     d¦  «        }|                     d¦  «        }t          j	        t          | ¦  «        ||…         ¦  «        } |                      t          ¦  «        st          d¦  «        ‚t          | ¦  «        t          t          ¦  «        d…         } t          | ¦  «        \  }} t          | ¦  «        \  }} t          | ¦  «        \  }	} t          | ¦  «        \  }
} |
dk    rt          d¦  «        ‚t          | ¦  «        \  }} t          |¦  «        \  }}t!          |¦  «        }|                     |¦  «        \  }}t%          |¦  «         |t&          k    s|t&          k    �rà|                     ¦   «         }|t*          vrt-          d|›�¦  «        ‚|t.          k    rt-          d|›�¦  «        ‚t*          |         j        }t*          |         j        }t          | ¦  «        \  }} t*          |         j        r2t7          | ¦  «        }t          |¦  «        |k    rt          d	¦  «        ‚nt%          | ¦  «         t9          ||¦  «         t          |	¦  «        \  }}t          |¦  «        \  }}t%          |¦  «         t;          |||                     ¦   «         |¦  «        }|                     ¦   «         }t          |                     |¦  «        ¦  «        }t*          |         j        r:tA          |tB          ¦  «        sJ ‚t%          | "                    |¦  «        ¦  «         nft%          | #                    ¦   «         ¦  «         nD|rtI          d
¦  «        ‚t          | ¦  «        \  }} t%          | ¦  «         d}t9          ||¦  «         t          |¦  «        \  }}t          |¦  «        \  }}||k    rt          d¦  «        ‚t          |¦  «        \  }}||k    rt          d¦  «        ‚| %                    |||¬¦  «        \  }}t          |¦  «        \  }}|tL          dt          |¦  «        …         k    rt          d¦  «        ‚tA          |tN          j(        ¦  «        r!tS          j*        dt           j+        d¬¦  «         |S )z.Load private key from OpenSSH custom encoding.rY   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.ry   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ÚsearchrQ   r¯   ÚendÚbinasciiÚ
a2b_base64rj   r(  Ú	_SK_MAGICr]   r~   ru   r.  r½   ra   Ú_NONEr²   r;   r   Ú_BCRYPTr/   r2   r3   r   r^   ri   Ú	decryptorÚupdaterC   r   Úfinalize_with_tagÚfinalizerf   rÓ   Ú_PADDINGr	   rK   ÚwarningsÚwarnÚDeprecatedIn40)rY   r   r<  rÃ   ÚmÚp1Úp2rb   ÚkdfnameÚ
kdfoptionsÚnkeysÚpubdataÚpub_key_typeÚkformatrË   Úciphername_bytesÚblklenr2   ÚedataÚtagr   Úkbufr   rg   ÚdecÚck1Úck2rR   rÊ   r  s                                 r#   Úload_ssh_private_keyrg  £  sÆ  € õ 
Ô˜6 4Ñ(Ô(Ð(ØÐÝÔ˜: xÑ0Ô0Ð0å�Š�tÑÔ€AØð ;ÝÐ9Ñ:Ô:Ð:Ø	
�Š�‰Œ€BØ	
�Šˆq‰Œ€BÝÔ�z¨$Ñ/Ô/°°2°Ô6Ñ7Ô7€DØ�?Š?�9Ñ%Ô%ð ;ÝÐ9Ñ:Ô:Ð:Ý�dÑÔ�C¥	™NœNÐ,Ð,Ô-€Dõ # 4Ñ(Ô(Ñ€J�Ý Ñ%Ô%�M€GˆTÝ" 4Ñ(Ô(Ñ€J�Ý˜4‘.”.�K€Eˆ4Ø�‚z€zÝÐ1Ñ2Ô2Ð2õ   Ñ%Ô%�M€GˆTÝ'¨Ñ0Ô0Ñ€L�'Ý˜lÑ+Ô+€GØ ×+Ò+¨GÑ4Ô4Ñ€IˆwÝ�ÑÔÐà•UÒÐ˜g­Ò.Ñ.Ø%×-Ò-Ñ/Ô/ÐØ¥<Ð/Ð/Ý&Ø;Ð'7Ð;Ð;ñô ð ð •gÒÐÝ&Ð'F¸7Ð'FÐ'FÑGÔGÐGÝÐ.Ô/Ô9ˆÝÐ/Ô0Ô8ˆå! $Ñ'Ô'‰ˆˆtõ Ð(Ô)Ô1ð 	Ý˜‘+”+ˆCÝ�3‰xŒx˜7Ò"Ð"Ý Ð!NÑOÔOÐOð #õ ˜ÑÔÐÝ˜% Ñ(Ô(Ð(Ý  Ñ,Ô,‰
ˆˆdÝ ‘~”~‰ˆ�Ý�TÑÔÐÝÐ,¨h¸¿º¹¼ÈÑOÔOˆØ�nŠnÑÔˆÝ˜3Ÿ:š: eÑ,Ô,Ñ-Ô-ˆÝÐ(Ô)Ô1ð 	)Ý˜cÕ#8Ñ9Ô9Ð9Ð9Ð9Ý˜×.Ò.¨sÑ3Ô3Ñ4Ô4Ð4Ð4õ ˜Ÿš™œÑ(Ô(Ð(Ð(àð 	ÝØFñô ð õ " $Ñ'Ô'‰ˆˆtÝ�TÑÔÐØˆÝ˜% Ñ(Ô(Ð(Ý˜%‘”�J€CˆÝ˜%‘”�J€CˆØ
ˆc‚z€zÝÐ8Ñ9Ô9Ð9õ " %Ñ(Ô(�O€HˆeØ�<ÒÐÝÐ:Ñ;Ô;Ð;Ø ×-Ò-ØØØ'Eð .ñ ô Ñ€K�õ ˜5Ñ!Ô!�H€A€uð •˜�3˜u™:œ:˜Ô&Ò&Ð&ÝÐ8Ñ9Ô9Ð9å�+�sÔ0Ñ1Ô1ð 
ÝŒðåÔ Øð		
ñ 	
ô 	
ð 	
ð Ðr%   rÊ   Úencryption_algorithmr   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¦  «        }
|                     |
¦  «         |                     |	¦  «         t-          |||
|	¦  «        }nt.          x}}d}d}d}t%          j        d¦  «        }d	}t          ¦   «         }|                     |¦  «         |                     |                      ¦   «         |¦  «         t          ||g¦  «        }|                     |¦  «         |                     | |¦  «         |                     |¦  «         |                     t8          d||                     ¦   «         |z  z
  …         ¦  «         t          ¦   «         }|                     t<          ¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     ¦   «         }|                     ¦   «         }t?          tA          ||z   ¦  «        ¦  «        }| !                    |¦  «         ||z
  }|�8| "                    ¦   «          #                    |||…         ||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 releasern   rB  Nr'   ry   r(   r%   )%r   rE  rC   r	   rK   rS  rT  rU  rS   r.  r‰   Ú_DEFAULT_CIPHERr;   r/   rM  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomr£   r›   ri   rL  rØ   rF   rÜ   r•   rR  r¢   rK  rj   r¡   r°   Ú	encryptorÚupdate_intor   )rÊ   r   rh  rR   r^  Úf_kdfoptionsrb   r`  rY  r   r   rg   r[  ÚcheckvalÚcommentÚf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenr³   Úofss                         r#   Ú_serialize_ssh_private_keyr{    s/  € õ 
Ô�z 8Ñ,Ô,Ð,Ý�+�sÔ0Ñ1Ô1ð 
ÝŒð*åÔ Øð		
ñ 	
ô 	
ð 	
õ ! Ñ-Ô-€HÝ˜hÑ'Ô'€Gõ ‘;”;€LØð Ý$ˆ
Ý˜jÔ)Ô3ˆÝˆÝ ˆåÐ+Õ-HÑIÔIð	6à$Ô0Ð<à)Ô5ˆFÝŒz˜"‰~Œ~ˆØ×Ò Ñ%Ô%Ð%Ø×Ò˜VÑ$Ô$Ð$Ý˜J¨°$¸Ñ?Ô?ˆˆå$Ð$ˆ
�WØˆØˆØ€EÝŒz˜!‰}Œ}€HØ€Gõ ‘;”;€LØ×Ò˜HÑ%Ô%Ð%Ø×Ò˜+×0Ò0Ñ2Ô2°LÑAÔAÐAå˜8 XÐ.Ñ/Ô/€IØ×Ò˜Ñ"Ô"Ð"Ø×Ò˜;¨	Ñ2Ô2Ð2Ø×Ò˜Ñ!Ô!Ð!Ø×Ò•hÐE ¨9¯>ª>Ñ+;Ô+;¸fÑ+DÑ!EÐEÔFÑGÔGÐ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�U”ÑÔÐr%   c                  ó   — e Zd ZdZdZdS )ÚSSHCertificateTyper(   rA  N)r4   r5   r6   ÚUSERÚHOSTr8   r%   r#   r}  r}  p  s   € € € € € Ø€DØ€D€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d0d!„¦   «         Z
ed.d"„¦   «         Zed.d#„¦   «         Zed1d$„¦   «         Zed1d%„¦   «         Zd-d&„Zd,d'„Zd2d)„Zd*S )3ÚSSHCertificateÚ_noncerj   Ú_public_keyÚSSHPublicKeyTypesÚ_serialr   Ú_cctypeÚ_key_idÚ_valid_principalsúlist[bytes]Ú_valid_afterÚ_valid_beforeÚ_critical_optionsúdict[bytes, bytes]Ú_extensionsÚ	_sig_typeÚ_sig_keyÚ_inner_sig_typeÚ
_signatureÚ_tbs_cert_bodyÚ_cert_key_typer   Ú
_cert_bodyc                óL  — || _         || _        || _        	 t          |¦  «        | _        n# t
          $ r t          d¦  «        ‚w xY w|| _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        || _        || _        || _        || _        d S )NzInvalid certificate type)r‚  rƒ  r…  r}  Ú_typerQ   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’  r“  r”  r•  s                     r#   r‘   zSSHCertificate.__init__v  sÃ   € ð( ˆŒØ&ˆÔØˆŒð	9Ý+¨GÑ4Ô4ˆDŒJˆJøÝð 	9ð 	9ð 	9ÝÐ7Ñ8Ô8Ð8ð	9øøøàˆŒØ!2ˆÔØ(ˆÔØ*ˆÔØ!2ˆÔØ&ˆÔØ"ˆŒØ ˆŒØ.ˆÔØ$ˆŒØ,ˆÔØ$ˆŒØ,ˆÔÐÐs	   —, ¬Ar!   c                ó*   — t          | j        ¦  «        S rŽ   )r   r‚  r©   s    r#   ÚnoncezSSHCertificate.nonceŸ  s   € å�T”[Ñ!Ô!Ð!r%   ÚSSHCertPublicKeyTypesc                ó@   — t          j        t          | j        ¦  «        S rŽ   )ÚtypingÚcastrš  rƒ  r©   s    r#   rF   zSSHCertificate.public_key£  s   € õ Œ{Õ0°$Ô2BÑCÔCÐCr%   c                ó   — | j         S rŽ   )r…  r©   s    r#   ÚserialzSSHCertificate.serial¨  s
   € àŒ|Ðr%   r}  c                ó   — | j         S rŽ   )r—  r©   s    r#   ÚtypezSSHCertificate.type¬  s
   € àŒzÐr%   c                ó*   — t          | j        ¦  «        S rŽ   )r   r‡  r©   s    r#   Úkey_idzSSHCertificate.key_id°  s   € å�T”\Ñ"Ô"Ð"r%   c                ó   — | j         S rŽ   )rˆ  r©   s    r#   Úvalid_principalszSSHCertificate.valid_principals´  ó   € àÔ%Ð%r%   c                ó   — | j         S rŽ   )r‹  r©   s    r#   Úvalid_beforezSSHCertificate.valid_before¸  s   € àÔ!Ð!r%   c                ó   — | j         S rŽ   )rŠ  r©   s    r#   Úvalid_afterzSSHCertificate.valid_after¼  s   € àÔ Ð r%   c                ó   — | j         S rŽ   )rŒ  r©   s    r#   Úcritical_optionszSSHCertificate.critical_optionsÀ  r¦  r%   c                ó   — | j         S rŽ   )rŽ  r©   s    r#   Ú
extensionszSSHCertificate.extensionsÄ  s   € àÔÐr%   c                ó†   — t          | j        ¦  «        }|                     | j        ¦  «        \  }}t	          |¦  «         |S rŽ   )r.  r�  rÂ   r�  ra   )r�   Ú	sigformatÚsignature_keyÚsigkey_rests       r#   r±  zSSHCertificate.signature_keyÈ  s?   € Ý# D¤NÑ3Ô3ˆ	Ø%.×%:Ò%:¸4¼=Ñ%IÔ%IÑ"ˆ�{Ý�[Ñ!Ô!Ð!ØÐr%   c                ó‚   — t          | j        ¦  «        dz   t          j        t          | j        ¦  «        d¬¦  «        z   S )Nó    F)Únewline)r   r”  rI  Ú
b2a_base64r•  r©   s    r#   r  zSSHCertificate.public_bytesÎ  s@   € å�$Ô%Ñ&Ô&ØñåÔ!¥%¨¬Ñ"8Ô"8À%ÐHÑHÔHñIð	
r%   r[   c                óö  — |                       ¦   «         }t          |t          j        ¦  «        r<|                     t          | j        ¦  «        t          | j        ¦  «        ¦  «         d S t          |t          j	        ¦  «        ržt          | j        ¦  «        \  }}t          |¦  «        \  }}t          |¦  «         t          j        ||¦  «        }t          |j        ¦  «        }|                     |t          | j        ¦  «        t          j        |¦  «        ¦  «         d S t          |t"          j        ¦  «        sJ ‚| j        t(          k    rt+          j        ¦   «         }nI| j        t.          k    rt+          j        ¦   «         }n%| j        t2          k    sJ ‚t+          j        ¦   «         }|                     t          | j        ¦  «        t          | j        ¦  «        t7          j        ¦   «         |¦  «         d S rŽ   )r±  rC   r   rO   Úverifyr   r’  r“  r
   rG   r‚   ra   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrV   ÚECDSAr   rI   r‘  rJ   r   ÚSHA1Ú_SSH_RSA_SHA256ÚSHA256Ú_SSH_RSA_SHA512ÚSHA512r   ÚPKCS1v15)r�   r±  ÚrrY   ÚsÚcomputed_sigÚhash_algs          r#   Úverify_cert_signaturez$SSHCertificate.verify_cert_signatureÕ  sÉ  € Ø×*Ò*Ñ,Ô,ˆÝ�m¥WÔ%=Ñ>Ô>ð 	Ø× Ò Ý�d”oÑ&Ô&­¨dÔ.AÑ(BÔ(Bñô ð ð ð õ ˜¥rÔ'@ÑAÔAð 	å  ¤Ñ1Ô1‰GˆAˆtÝ  Ñ&Ô&‰GˆAˆtÝ˜ÑÔÐÝ%Ô:¸1¸aÑ@Ô@ˆLÝ'¨Ô(;Ñ<Ô<ˆHØ× Ò Ø�e DÔ$7Ñ8Ô8½"¼(À8Ñ:LÔ:Lñô ð ð ð õ ˜m­SÔ-=Ñ>Ô>Ð>Ð>Ð>ØÔ#¥xÒ/Ð/Ý!œ;™=œ=��ØÔ%­Ò8Ð8Ý!œ=™?œ?��àÔ+­Ò>Ð>Ð>Ð>Ý!œ=™?œ?�Ø× Ò Ý�d”oÑ&Ô&Ý�dÔ)Ñ*Ô*ÝÔ Ñ"Ô"Øñ	ô ð ð ð r%   N)"r‚  rj   rƒ  r„  r…  r   r†  r   r‡  rj   rˆ  r‰  rŠ  r   r‹  r   rŒ  r�  rŽ  r�  r�  rj   r�  rj   r‘  rj   r’  rj   r“  rj   r”  r   r•  rj   rµ   )r!   rš  r´   )r!   r}  )r!   r‰  )r!   r�  )r!   r[   )r4   r5   r6   r‘   Úpropertyr™  rF   rŸ  r¡  r£  r¥  r¨  rª  r¬  r®  r±  r  rÇ  r8   r%   r#   r�  r�  u  s�  € € € € € ð'-ð '-ð '-ð '-ðR ð"ð "ð "ñ „Xð"ðDð Dð Dð Dð
 ðð ð ñ „Xðð ðð ð ñ „Xðð ð#ð #ð #ñ „Xð#ð ð&ð &ð &ñ „Xð&ð ð"ð "ð "ñ „Xð"ð ð!ð !ð !ñ „Xð!ð ð&ð &ð &ñ „Xð&ð ð ð  ð  ñ „Xð ðð ð ð ð
ð 
ð 
ð 
ðð ð ð ð ð r%   r�  rV   r÷   úhashes.HashAlgorithmc                ó  — t          | t          j        ¦  «        rt          j        ¦   «         S t          | t          j        ¦  «        rt          j        ¦   «         S t          | t          j        ¦  «        sJ ‚t          j        ¦   «         S rŽ   )	rC   r
   Ú	SECP256R1r   r¿  Ú	SECP384R1ÚSHA384Ú	SECP521R1rÁ  )rV   s    r#   r»  r»  ö  sf   € Ý�%�œÑ&Ô&ð ÝŒ}‰ŒÐÝ	�E�2œ<Ñ	(Ô	(ð ÝŒ}‰ŒÐå˜%¥¤Ñ.Ô.Ð.Ð.Ð.ÝŒ}‰ŒÐr%   ú"SSHCertificate | SSHPublicKeyTypesc                ó   — t          j        d| ¦  «         t                               | ¦  «        }|st	          d¦  «        ‚|                     d¦  «        x}}|                     d¦  «        }d}|                     t          ¦  «        rd}|d t          t          ¦  «         …         }|t          k    r|st          d¦  «        ‚t          |¦  «        }	 t          t          j        |¦  «        ¦  «        }n)# t          t          j        f$ r t	          d¦  «        ‚w xY w|r|}	t#          |¦  «        \  }
}|
|k    rt	          d	¦  «        ‚|rt#          |¦  «        \  }}|                     |¦  «        \  }}|�rt'          |¦  «        \  }}t)          |¦  «        \  }}t#          |¦  «        \  }}t#          |¦  «        \  }}g }|r6t#          |¦  «        \  }}|                     t-          |¦  «        ¦  «         |°6t'          |¦  «        \  }}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          k    r||k    rt	          d¦  «        ‚t#          | ¦  «        \  }!} t1          | ¦  «         t9          ||||||||||||||!|||	¦  «        S t1          |¦  «         |S )NrY   zInvalid line formatr(   rA  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   rD  Ú_SSH_PUBKEY_RCÚmatchrQ   ÚgroupÚendswithÚ_CERT_SUFFIXr]   rM   r   r.  rj   rI  rJ  rf   ÚErrorr~   rÂ   rz   ru   r“   r   Ú_parse_exts_optsra   rJ   r¾  rÀ  r�  )"rY   Ú_legacy_dsa_allowedrV  rR   Úorig_key_typeÚkey_bodyÚ	with_certr^  ÚrestÚ	cert_bodyÚinner_key_typer™  rF   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Øð 0ÝÐ.Ñ/Ô/Ð/Ø Ÿwšw q™zœzÐ)€Hˆ}Ø�wŠw�q‰zŒz€HØ€IØ×Ò�Ñ&Ô&ð 2Øˆ	ØÐ0�s¥<Ñ0Ô0Ð0Ð0Ô1ˆØ•8ÒÐÐ$7ÐÝ"Ø;ñ
ô 
ð 	
õ ˜hÑ'Ô'€Gð+Ý�(Ô-¨hÑ7Ô7Ñ8Ô8ˆˆøÝ•x”~Ð&ð +ð +ð +ÝÐ)Ñ*Ô*Ð*ð+øøøð ð Øˆ	Ý& tÑ,Ô,Ñ€N�DØ˜Ò&Ð&ÝÐ-Ñ.Ô.Ð.Øð (Ý! $Ñ'Ô'‰ˆˆtØ×*Ò*¨4Ñ0Ô0Ñ€J�Øñ :Ý ‘~”~‰ˆ�Ý ‘~”~‰ˆ�Ý" 4Ñ(Ô(‰ˆ�Ý& tÑ,Ô,Ñˆ
�DØÐØð 	6Ý$/°
Ñ$;Ô$;Ñ!ˆI�zØ×#Ò#¥E¨)Ñ$4Ô$4Ñ5Ô5Ð5ð ð 	6õ % T™NœNÑˆ�TÝ% d™^œ^Ñˆ�dÝ(¨Ñ.Ô.Ñˆ�dÝ+¨LÑ9Ô9ÐÝ  Ñ&Ô&‰
ˆˆdÝ% dÑ+Ô+ˆ
å˜dÑ#Ô#‰ˆˆ4Ý'¨Ñ-Ô-Ñˆ�TÝ'¨Ñ4Ô4Ñˆ�'Ø•xÒÐÐ(;ÐÝ&ØEñô ð ð " ,¥S¨¡Y¤Y J ,Ô/ˆÝ)¨$Ñ/Ô/Ñˆ�tÝ�TÑÔÐÝ#.¨}Ñ#=Ô#=Ñ ˆ˜ð �Ò Ð ØÝ#¥_µhÐ?ð@ð @à�(Ò"Ð" ~¸Ò'AÐ'AÝÐ@ÑAÔAÐAÝ)¨(Ñ3Ô3Ñˆ	�8Ý�XÑÔÐÝØØØØØØØØØØØØØØØØØñ#
ô 
ð 	
õ( 	�TÑÔÐØÐs   Ã!C6 Ã6&Dc                ó    — t          | ¦  «        S rŽ   )rì  r`   s    r#   Úload_ssh_public_identityrî  _  s   € õ % TÑ*Ô*Ð*r%   Ú	exts_optsr�  c                ó†  — i }d }| rºt          | ¦  «        \  }} t          |¦  «        }||v rt          d¦  «        ‚|�||k     rt          d¦  «        ‚t          | ¦  «        \  }} t          |¦  «        dk    r4t          |¦  «        \  }}t          |¦  «        dk    rt          d¦  «        ‚t          |¦  «        ||<   |}| °º|S )NzDuplicate namezFields not lexically sortedr   z!Unexpected extra data after value)r~   r   rQ   r]   )rï  ÚresultÚ	last_namerW   ÚbnameÚvalueÚextras          r#   r×  r×  e  sÜ   € Ø!#€FØ€IØ
ð Ý% iÑ0Ô0‰ˆˆiÝ˜T‘{”{ˆØ�Fˆ?ˆ?ÝÐ-Ñ.Ô.Ð.ØÐ  U¨YÒ%6Ð%6ÝÐ:Ñ;Ô;Ð;Ý& yÑ1Ô1ÑˆˆyÝˆu‰:Œ:˜Š>ˆ>Ý& uÑ-Ô-‰LˆE�5Ý�5‰zŒz˜AŠ~ˆ~Ý Ð!DÑEÔEÐEÝ˜e™œˆˆu‰Øˆ	ð ð ð €Mr%   r„  Úhash_algorithmú(hashes.MD5 | hashes.SHA1 | hashes.SHA256c                óÒ  — t          |t          j        t          j        t          j        f¦  «        st          d¦  «        ‚t          | ¦  «        }t          |¦  «        }t          ¦   «         }| 	                    |¦  «         | 
                    | |¦  «         |                     ¦   «         }t          j        |¦  «        }|                     |¦  «         |                     ¦   «         S )Nz2hash_algorithm must be either MD5, SHA1, or SHA256)rC   r   ÚMD5r½  r¿  rf   rS   r.  r‰   r£   rØ   r²   ÚHashrO  rQ  )r?   rö  rR   r^  rÕ   Ússh_binary_dataÚhash_objs          r#   Ússh_key_fingerprintrý  y  sÊ   € õ ØÝ	Œ•V”[¥&¤-Ð0ñô ð Nõ ÐLÑMÔMÐMå  Ñ%Ô%€HÝ˜hÑ'Ô'€Gå‰KŒK€EØ	×Ò�XÑÔÐØ×Ò˜#˜uÑ%Ô%Ð%à—m’m‘o”o€Oõ Œ{˜>Ñ*Ô*€HØ‡O‚O�OÑ$Ô$Ð$Ø×ÒÑÔÐr%   c                óö   — t          | d¬¦  «        }t          |t          ¦  «        r|                     ¦   «         }n|}t          |t          j        ¦  «        r!t          j        dt          j	        d¬¦  «         |S )NT)rØ  r@  rA  rB  )
rì  rC   r�  rF   r	   rL   rS  rT  r   rU  )rY   r<  Úcert_or_keyrF   s       r#   Úload_ssh_public_keyr   ’  s„   € õ ,¨DÀdÐKÑKÔK€Kå�+�~Ñ.Ô.ð !Ø ×+Ò+Ñ-Ô-ˆ
ˆ
à ˆ
å�*�cÔ.Ñ/Ô/ð 
ÝŒðåÔ Øð		
ñ 	
ô 	
ð 	
ð Ðr%   c                óÆ  — t          | t          j        ¦  «        r!t          j        dt
          j        d¬¦  «         t          | ¦  «        }t          |¦  «        }t          ¦   «         }| 
                    |¦  «         |                     | |¦  «         t          j        |                     ¦   «         ¦  «                             ¦   «         }d                     |d|g¦  «        S )z&One-line public key format for OpenSSHrj  rn   rB  r%   r´  )rC   r	   rL   rS  rT  r   rU  rS   r.  r‰   r£   rØ   rI  r¶  r²   ÚstripÚjoin)rF   rR   r^  rÕ   Úpubs        r#   Úserialize_ssh_public_keyr  ¦  sÊ   € å�*�cÔ.Ñ/Ô/ð 
ÝŒð*åÔ Øð		
ñ 	
ô 	
ð 	
õ ! Ñ,Ô,€HÝ˜hÑ'Ô'€Gå‰KŒK€EØ	×Ò�XÑÔÐØ×Ò˜* eÑ,Ô,Ð,å
Ô
˜eŸmšm™oœoÑ
.Ô
.×
4Ò
4Ñ
6Ô
6€CØ�8Š8�X˜t SÐ)Ñ*Ô*Ð*r%   é   c            
      ó‚   — e Zd Zddddg dddg g f
d2d„Zd3d„Zd4d„Zd5d„Zd6d!„Zd7d#„Zd$„ Z	d8d'„Z
d9d)„Zd:d,„Zd:d-„Zd;d1„ZdS )<ÚSSHCertificateBuilderNFrƒ  úSSHCertPublicKeyTypes | Noner…  r1   r—  úSSHCertificateType | Noner‡  rc   rˆ  r‰  Ú_valid_for_all_principalsr    r‹  rŠ  rŒ  úlist[tuple[bytes, bytes]]rŽ  c                ó’   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d S rŽ   ©
rƒ  r…  r—  r‡  rˆ  r  r‹  rŠ  rŒ  rŽ  )r�   rƒ  r…  r—  r‡  rˆ  r  r‹  rŠ  rŒ  rŽ  s              r#   r‘   zSSHCertificateBuilder.__init__Ç  sW   € ð 'ˆÔØˆŒØˆŒ
ØˆŒØ!2ˆÔØ)BˆÔ&Ø*ˆÔØ(ˆÔØ!2ˆÔØ&ˆÔÐÐr%   rF   rš  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 )NrB   zpublic_key already setr  )rC   r
   rG   r   rI   r   rO   rf   rƒ  rQ   r  r…  r—  r‡  rˆ  r  r‹  rŠ  rŒ  rŽ  )r�   rF   s     r#   rF   z SSHCertificateBuilder.public_keyß  s¦   € õ ØåÔ)ÝÔ ÝÔ(ðñ
ô 
ð 	4õ Ð2Ñ3Ô3Ð3ØÔÐ'ÝÐ5Ñ6Ô6Ð6å$Ø"Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   rŸ  r   c                ó>  — t          |t          ¦  «        st          d¦  «        ‚d|cxk    rdk     sn 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  )rC   r   rf   rQ   r…  r  rƒ  r—  r‡  rˆ  r  r‹  rŠ  rŒ  rŽ  )r�   rŸ  s     r#   rŸ  zSSHCertificateBuilder.serialû  s¶   € Ý˜&¥#Ñ&Ô&ð 	9ÝÐ7Ñ8Ô8Ð8Ø�FÐ"Ð"Ò"Ð"˜UÒ"Ð"Ð"Ð"ÝÐAÑBÔBÐBØŒ<Ð#ÝÐ1Ñ2Ô2Ð2å$ØÔ(ØØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   r¡  r}  c                ó  — 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  )rC   r}  rf   r—  rQ   r  rƒ  r…  r‡  rˆ  r  r‹  rŠ  rŒ  rŽ  )r�   r¡  s     r#   r¡  zSSHCertificateBuilder.type  sŠ   € Ý˜$Õ 2Ñ3Ô3ð 	BÝÐ@ÑAÔAÐAØŒ:Ð!ÝÐ/Ñ0Ô0Ð0å$ØÔ(Ø”LØØ”LØ"Ô4Ø&*Ô&DØÔ,ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   r£  r   c                ó  — 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  )rC   r   rf   r‡  rQ   r  rƒ  r…  r—  rˆ  r  r‹  rŠ  rŒ  rŽ  )r�   r£  s     r#   r£  zSSHCertificateBuilder.key_id#  sˆ   € Ý˜&¥%Ñ(Ô(ð 	4ÝÐ2Ñ3Ô3Ð3ØŒ<Ð#ÝÐ1Ñ2Ô2Ð2å$ØÔ(Ø”LØ”*ØØ"Ô4Ø&*Ô&DØÔ,ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   r¥  c                óˆ  — | j         rt          d¦  «        ‚t          d„ |D ¦   «         ¦  «        r|st          d¦  «        ‚| j        rt          d¦  «        ‚t          |¦  «        t          k    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          ¦  «        V — Œd S rŽ   )rC   r   )Ú.0rí   s     r#   ú	<genexpr>z9SSHCertificateBuilder.valid_principals.<locals>.<genexpr>?  s,   è è € ÐCÐC¨Q•J˜q¥%Ñ(Ô(ÐCÐCÐCÐCÐCÐCr%   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  rQ   Úallrf   rˆ  r]   Ú_SSHKEY_CERT_MAX_PRINCIPALSr  rƒ  r…  r—  r‡  r‹  rŠ  rŒ  rŽ  )r�   r¥  s     r#   r¥  z&SSHCertificateBuilder.valid_principals6  sü   € ð Ô)ð 	Ýð%ñô ð õ
 ÐCÐCÐ2BÐCÑCÔCÑCÔCð	à#ð	õ ØGñô ð ð Ô!ð 	=ÝÐ;Ñ<Ô<Ð<åÐÑ Ô Õ#>Ò>Ð>ÝØLñô ð õ %ØÔ(Ø”LØ”*Ø”LØ.Ø&*Ô&DØÔ,ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   c                óæ   — | j         rt          d¦  «        ‚| j        rt          d¦  «        ‚t          | j        | j        | j        | j        | j         d| j        | j	        | j
        | j        ¬¦
  «
        S )Nz@valid_principals already set, can't set valid_for_all_principalsz$valid_for_all_principals already setTr  )rˆ  rQ   r  r  rƒ  r…  r—  r‡  r‹  rŠ  rŒ  rŽ  r©   s    r#   Úvalid_for_all_principalsz.SSHCertificateBuilder.valid_for_all_principalsZ  sŽ   € ØÔ!ð 	Ýð+ñô ð ð Ô)ð 	EÝÐCÑDÔDÐDå$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*ØÔ,ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   r¨  úint | floatc                ód  — 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  )rC   r   Úfloatrf   rQ   r‹  r  rƒ  r…  r—  r‡  rˆ  r  rŠ  rŒ  rŽ  )r�   r¨  s     r#   r¨  z"SSHCertificateBuilder.valid_beforep  s¾   € Ý˜,­­e¨Ñ5Ô5ð 	DÝÐBÑCÔCÐCÝ˜<Ñ(Ô(ˆØ˜!ÒÐ˜|¨uÒ4Ð4ÝÐ;Ñ<Ô<Ð<ØÔÐ)ÝÐ7Ñ8Ô8Ð8å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØ&ØÔ*Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   rª  c                ód  — 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  )rC   r   r  rf   rQ   rŠ  r  rƒ  r…  r—  r‡  rˆ  r  r‹  rŒ  rŽ  )r�   rª  s     r#   rª  z!SSHCertificateBuilder.valid_after†  s¼   € Ý˜+­­U |Ñ4Ô4ð 	CÝÐAÑBÔBÐBÝ˜+Ñ&Ô&ˆØ˜Š?ˆ?˜k¨UÒ2Ð2ÝÐ:Ñ;Ô;Ð;ØÔÐ(ÝÐ6Ñ7Ô7Ð7å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,Ø$Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r%   rW   rô  c                óZ  — t          |t          ¦  «        rt          |t          ¦  «        st          d¦  «        ‚|d„ | j        D ¦   «         v rt	          d¦  «        ‚t          | j        | j        | j        | j	        | j
        | j        | j        | j        g | j        ¢||f‘| j        ¬¦
  «
        S )Núname and value must be bytesc                ó   — g | ]\  }}|‘ŒS r8   r8   ©r  rW   r  s      r#   ú
<listcomp>z=SSHCertificateBuilder.add_critical_option.<locals>.<listcomp>¢  s   € Ð?Ð?Ð?™W˜T 1�DÐ?Ð?Ð?r%   zDuplicate critical option namer  )rC   r   rf   rŒ  rQ   r  rƒ  r…  r—  r‡  rˆ  r  r‹  rŠ  rŽ  ©r�   rW   rô  s      r#   Úadd_critical_optionz)SSHCertificateBuilder.add_critical_optionœ  sÀ   € õ ˜$¥Ñ&Ô&ð 	<­j¸ÅÑ.FÔ.Fð 	<ÝÐ:Ñ;Ô;Ð;àÐ?Ð?¨Ô(>Ð?Ñ?Ô?Ð?Ð?ÝÐ=Ñ>Ô>Ð>å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,ØÔ*ØF Ô 6ÐF¸¸u¸ÐFØÔ(ð
ñ 
ô 
ð 	
r%   c                óZ  — t          |t          ¦  «        rt          |t          ¦  «        st          d¦  «        ‚|d„ | j        D ¦   «         v rt	          d¦  «        ‚t          | j        | j        | j        | j	        | j
        | j        | j        | j        | j        g | j        ¢||f‘¬¦
  «
        S )Nr!  c                ó   — g | ]\  }}|‘ŒS r8   r8   r#  s      r#   r$  z7SSHCertificateBuilder.add_extension.<locals>.<listcomp>¸  s   € Ð9Ð9Ð9™W˜T 1�DÐ9Ð9Ð9r%   zDuplicate extension namer  )rC   r   rf   rŽ  rQ   r  rƒ  r…  r—  r‡  rˆ  r  r‹  rŠ  rŒ  r%  s      r#   Úadd_extensionz#SSHCertificateBuilder.add_extension²  sÀ   € õ ˜$¥Ñ&Ô&ð 	<­j¸ÅÑ.FÔ.Fð 	<ÝÐ:Ñ;Ô;Ð;àÐ9Ð9¨Ô(8Ð9Ñ9Ô9Ð9Ð9ÝÐ7Ñ8Ô8Ð8å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,ØÔ*Ø"Ô4Ø:˜$Ô*Ð:¨T°5¨MÐ:ð
ñ 
ô 
ð 	
r%   rÊ   ÚSSHCertPrivateKeyTypesr�  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        k    rt          d	¦  «        ‚| j                             d
„ ¬¦  «         | j                             d„ ¬¦  «         t)          | j        ¦  «        }|t*          z   }t-          j        d¦  «        }t1          |¦  «        }t3          ¦   «         }|                     |¦  «         |                     |¦  «         |                     | j        |¦  «         |                     |¦  «         |                     | j        j        ¦  «         |                     |¦  «         t3          ¦   «         }	| j        D ]}
|	                     |
¦  «         Œ|                     |	                     ¦   «         ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         t3          ¦   «         }| j        D ]�\  }}|                     |¦  «         tA          |¦  «        dk    rKt3          ¦   «         }|                     |¦  «         |                     |                     ¦   «         ¦  «         Œx|                     |¦  «         ŒŽ|                     |                     ¦   «         ¦  «         t3          ¦   «         }| j        D ]�\  }}|                     |¦  «         tA          |¦  «        dk    rKt3          ¦   «         }|                     |¦  «         |                     |                     ¦   «         ¦  «         Œx|                     |¦  «         ŒŽ|                     |                     ¦   «         ¦  «         |                     d¦  «         t)          |¦  «        }t1          |¦  «        }t3          ¦   «         }|                     |¦  «         |                     | !                    ¦   «         |¦  «         |                     |                     ¦   «         ¦  «         t          |t
          j        ¦  «        rˆ| "                    |                     ¦   «         ¦  «        }t3          ¦   «         }|                     |¦  «         |                     |¦  «         |                     |                     ¦   «         ¦  «         �nõt          |t          j        ¦  «        �rtG          |j$        ¦  «        }| "                    |                     ¦   «         t          j%        |¦  «        ¦  «        }tM          j'        |¦  «        \  }}t3          ¦   «         }|                     |¦  «         t3          ¦   «         }| (                    |¦  «         | (                    |¦  «         |                     |                     ¦   «         ¦  «         |                     |                     ¦   «         ¦  «         nËt          |t          j        ¦  «        sJ ‚t3          ¦   «         }|                     tR          ¦  «         | "                    |                     ¦   «         tU          j+        ¦   «         tY          j-        ¦   «         ¦  «        }|                     |¦  «         |                     |                     ¦   «         ¦  «         t]          j/        |                     ¦   «         ¦  «         0                    ¦   «         }tc          j2        tf          ti          d 5                    |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   r8   ©rí   s    r#   ú<lambda>z,SSHCertificateBuilder.sign.<locals>.<lambda>ó  s
   € °!°A´$€ r%   )r?   c                ó   — | d         S r-  r8   r.  s    r#   r/  z,SSHCertificateBuilder.sign.<locals>.<lambda>ô  s
   € ¨A¨a¬D€ r%   r9   r´  )6rC   r
   rD   r   rH   r   rN   rf   rƒ  rQ   r…  r—  r‡  rˆ  r  r‹  rŠ  rŒ  ÚsortrŽ  rS   rÕ  rn  ro  r.  r‰   r£   rØ   rž   r›   rô  r²   r]   rF   Úsignr»  rV   r¼  r¹  Údecode_dss_signaturer¥   rÀ  r   rÂ  r   rÁ  rI  r¶  r  rœ  r�  r�  rî  r  )r�   rÊ   rŸ  r£  rR   Úcert_prefixr™  r^  ÚfÚfprincipalsrÎ   ÚfcritrW   rô  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafrë  ÚfsigrÆ  rÃ  rÄ  ÚfsigblobÚ	cert_datas                              r#   r2  zSSHCertificateBuilder.signÈ  s·  € ÝØåÔ*ÝÔ!ÝÔ)ðñ
ô 
ð 	<õ Ð:Ñ;Ô;Ð;àÔÐ#ÝÐ5Ñ6Ô6Ð6ð ”lÐ*��°´ˆàŒ:ÐÝÐ/Ñ0Ô0Ð0ð œÐ,��°$´,ˆð Ô%ð 	¨dÔ.Lð 	Ýðñô ð ð
 ÔÐ%ÝÐ7Ñ8Ô8Ð8àÔÐ$ÝÐ6Ñ7Ô7Ð7àÔ˜tÔ1Ò1Ð1ÝÐLÑMÔMÐMð 	Ô×#Ò#¨¨Ð#Ñ7Ô7Ð7ØÔ×Ò . .ÐÑ1Ô1Ð1å$ TÔ%5Ñ6Ô6ˆØ¥Ñ-ˆõ ”
˜2‘”ˆÝ! (Ñ+Ô+ˆÝ‰KŒKˆØ	�Š�[Ñ!Ô!Ð!Ø	�Š�UÑÔÐØ×Ò˜dÔ.°Ñ2Ô2Ð2Ø	�	Š	�&ÑÔÐØ	�	Š	�$”*Ô"Ñ#Ô#Ð#Ø	�Š�VÑÔÐÝ‘k”kˆØÔ'ð 	&ð 	&ˆAØ×"Ò" 1Ñ%Ô%Ð%Ð%Ø	�Š�[×(Ò(Ñ*Ô*Ñ+Ô+Ð+Ø	�	Š	�$Ô#Ñ$Ô$Ð$Ø	�	Š	�$Ô$Ñ%Ô%Ð%Ý‘”ˆØÔ1ð 	(ð 	(‰KˆD�%Ø×Ò˜TÑ"Ô"Ð"Ý�5‰zŒz˜AŠ~ˆ~Ý#™+œ+�Ø×"Ò" 5Ñ)Ô)Ð)Ø× Ò  §¢Ñ!2Ô!2Ñ3Ô3Ð3Ð3à× Ò  Ñ'Ô'Ð'Ð'Ø	�Š�U—]’]‘_”_Ñ%Ô%Ð%Ý‰{Œ{ˆØÔ+ð 	'ð 	'‰KˆD�%Ø�OŠO˜DÑ!Ô!Ð!Ý�5‰zŒz˜AŠ~ˆ~Ý#™+œ+�Ø×"Ò" 5Ñ)Ô)Ð)Ø—’ §¢Ñ 1Ô 1Ñ2Ô2Ð2Ð2à—’ Ñ&Ô&Ð&Ð&Ø	�Š�T—\’\‘^”^Ñ$Ô$Ð$Ø	�Š�SÑÔÐå# KÑ0Ô0ˆÝ" 7Ñ+Ô+ˆÝ‰kŒkˆØ�Š�wÑÔÐØ×Ò˜{×5Ò5Ñ7Ô7¸Ñ=Ô=Ð=Ø	�Š�S—[’[‘]”]Ñ#Ô#Ð#õ �k¥7Ô#<Ñ=Ô=ð 	)Ø#×(Ò(¨¯ª©¬Ñ5Ô5ˆIÝ‘;”;ˆDØ�OŠO˜GÑ$Ô$Ð$Ø�OŠO˜IÑ&Ô&Ð&Ø�LŠL˜Ÿš™œÑ(Ô(Ð(Ñ(Ý˜¥RÔ%?Ñ@Ô@ñ 	)Ý'¨Ô(9Ñ:Ô:ˆHØ#×(Ò(¨¯ª©¬µb´h¸xÑ6HÔ6HÑIÔIˆIÝÔ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Ô4×:Ò:Ñ<Ô<ˆ	õ Œ{ÝÝ$ S§X¢X¨{¸DÀ)Ð.LÑ%MÔ%MÑNÔNñ
ô 
ð 	
r%   )rƒ  r	  r…  r1   r—  r
  r‡  rc   rˆ  r‰  r  r    r‹  r1   rŠ  r1   rŒ  r  rŽ  r  )rF   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  )rW   r   rô  r   r!   r  )rÊ   r*  r!   r�  )r4   r5   r6   r‘   rF   rŸ  r¡  r£  r¥  r  r¨  rª  r&  r)  r2  r8   r%   r#   r  r  Æ  s+  € € € € € ð 59Ø"Ø+/Ø $Ø)+Ø*/Ø$(Ø#'Ø79Ø13ð'ð 'ð 'ð 'ð 'ð0
ð 
ð 
ð 
ð8
ð 
ð 
ð 
ð*
ð 
ð 
ð 
ð&
ð 
ð 
ð 
ð&"
ð "
ð "
ð "
ðH
ð 
ð 
ð,
ð 
ð 
ð 
ð,
ð 
ð 
ð 
ð,
ð 
ð 
ð 
ð,
ð 
ð 
ð 
ð,G
ð G
ð G
ð G
ð G
ð G
r%   r  )F)r   r   r   r   r   r   r   r   r   r    r!   r   )r?   r@   r!   r   )rF   rT   r!   r   )rY   rZ   r/   r   r!   r[   )rY   rZ   r!   r[   )
rb   r   r   rc   r   r   r   r   r!   rd   )rY   rj   r!   rk   )rY   rj   r!   r{   )r�   r   r!   r   )r!   r{   )rR   rZ   rŽ   )
rY   rZ   r   rc   r<  r=  rÃ   r    r!   r>  )rÊ   r>  r   r   rh  r   r!   r   )rV   r÷   r!   rÉ  )rY   rZ   r!   rÏ  )rï  rj   r!   r�  )r?   r„  rö  r÷  r!   r   )rY   rZ   r<  r=  r!   r„  )rF   r„  r!   r   )|Ú
__future__r   rI  Úenumrn  Úrerœ  rS  Ú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ÚImportErrorrP   rJ   rM   r8  Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rÕ  Ú_SK_SSH_ED25519Ú_SK_SSH_ECDSA_NISTP256r¾  rÀ  ÚcompilerÑ  rK  Ú	_SK_STARTÚ_SK_ENDrM  rL  rk  rl  ÚDOTALLrF  rj   r¡   ÚrangerR  r+   ÚAESÚCTRÚCBCÚGCMr;   r7   rX   rS   rE   r^   ra   ri   ru   rz   r~   r‚   r‡   r‰   r¸   rß   rõ   r  r*  r,  r6  rË  rÌ  rÎ  r;  r.  ÚUnionrD   rH   rK   rN   r>  rg  r{  rG   rI   rL   rO   r„  rš  ÚEnumr}  r�  r»  rì  rî  r×  rý  r   r  r*  r  r  r8   r%   r#   ú<module>r]     s§  ðð
 #Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð JÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð9Ø)Ð)Ð)Ð)Ð)Ð)àÐÐøØð 
9ð 
9ð 
9ØÐð #(ð9ð 9ð 9ð 9ð 9ð 9ð 9ð
9øøøð €Ø€Ø€Ø(€Ø(€Ø(€Ø'€ð 0€Ø>Ð ð "€Ø!€à�”Ð2Ñ3Ô3€Ø€	Ø2€	Ø
.€Ø
€Ø€Ø€Ø€ð ˆ"Œ*�Y Ñ)¨GÑ3°R´YÑ
?Ô
?€ð ˆ:�i�i   a¨Ñ 0Ô 0Ñ1Ô1Ñ2Ô2€ð ðð ð ð ð ñ ô ñ „ðð �:ØŒNØØŒYØØØØðñ ô ð �:ØŒNØØŒYØØØØðñ ô ð  *˜zØŒNØØŒYØØØØð ñ  ô  ð')ð )€ð ð ð ñ ð@ !Ø Ø ðð €ðð ð ð ð&'ð 'ð 'ð 'ð:ð :ð :ð :ð8ð 8ð 8ð 8ðð ð ð ð,?ð ?ð ?ð ?ð?ð ?ð ?ð ?ðð ð ð ð,ð ,ð ,ð ,ð+ð +ð +ð +ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ðlG,ð G,ð G,ð G,ð G,ñ G,ô G,ð G,ðTCDð CDð CDð CDð CDñ CDô CDð CDðLF8ð F8ð F8ð F8ð F8ñ F8ô F8ð F8ðR@%ð @%ð @%ð @%ð @%ñ @%ô @%ð @%ðF
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð2
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð6 ˆmˆm‰oŒoØˆmˆm‰oŒoØÐ#Ð#Ñ%Ô%Ø�_�_ [°,°"´,±.´.ÑAÔAØ�_�_ [°,°"´,±.´.ÑAÔAØ�_�_ [°,°"´,±.´.ÑAÔAØÐ(Ð(Ñ*Ô*ØÐ-Ð-Ñ/Ô/ð	€ðFð Fð Fð Fð ”\ØÔØÔØÔØÔðôÐ ð ðoð
 ,1ðoð oð oð oð oð oðdJð Jð Jð JðZ ”LØÔØÔØÔØÔðôÐ ð œØÔØÔØÔðôÐ ðð ð ð ð ˜œñ ô ð ð
~ð ~ð ~ð ~ð ~ñ ~ô ~ð ~ðBð ð ð ð ð\ð \ð \ð \ð \ð~+ð +ð +ð +ðð ð ð ð(ð ð ð ð4 /3ðð ð ð ð ð(+ð +ð +ð +ð(  œØÔØÔØÔðôÐ ð "Ð ðI
ð I
ð I
ð I
ð I
ñ I
ô I
ð I
ð I
ð I
s   Á)A2 Á2BÂB