§
    cÒ³gËÊ  ã                  óÆ  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZmZmZmZ d d
lm Z m!Z!m"Z"m#Z#m$Z$m%Z% 	 d dl&m'Z( dZ)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Z0dZ1dZ2d Z3d!Z4d"Z5 ej6        d#¦  «        Z7d$Z8d%Z9d&Z:d'Z;d(Z<d)Z=d*Z> ej6        e9d+z   e:z   ej?        ¦  «        Z@ eA eB eCd,d-¦  «        ¦  «        ¦  «        ZDe G d.„ d/¦  «        ¦   «         ZE eEejF        d0ejG        d*d*dd¬1¦  «         eEejF        d0ejH        d*d*dd¬1¦  «         eEejF        d0ejI        d*d2d*d¬1¦  «        d3œZJd4eKd5<   e.e/e0d6œZLd…d9„ZMd†d<„ZNe9d=z   e:d=z   fd‡dA„ZOdˆdD„ZPd‰dE„ZQdŠdI„ZRd‹dL„ZSd‹dM„ZTdŒdO„ZUd‹dP„ZVd�dR„ZW G dS„ dT¦  «        ZX G dU„ dV¦  «        ZY G dW„ dX¦  «        ZZ G dY„ dZ¦  «        Z[ G d[„ d\¦  «        Z\dŽd]„Z] G d^„ d_¦  «        Z^ G d`„ da¦  «        Z_e, eY¦   «         e- eZ¦   «         e+ e\¦   «         e. e[db ej`        ¦   «         ¦  «        e/ e[dc eja        ¦   «         ¦  «        e0 e[dd ejb        ¦   «         ¦  «        e2 e^¦   «         e3 e_¦   «         iZcd�df„Zdeje        ejf        ejg        ejh        eji        f         Zj	 d�d‘dj„Zkd’dn„Zleje        ejm        ejn        ejo        ejp        f         Zqeje        ejm        ejn        ejp        f         Zr G do„ dpejs        ¦  «        Zt G dq„ dr¦  «        Zud“dv„Zv	 dƒd”dx„Zwd”dy„Zxd•d|„Zy	 d�d–d~„Zzd—d„Z{eje        ejf        ejg        eji        f         Z|d€Z} G d�„ d‚¦  «        Z~dS )˜é    )ÚannotationsN)Úencodebytes)Ú	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/mpstechhub/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/ssh.pyÚ_bcrypt_kdfr%   1   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/   r0   r1   r3   r4   é   )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_typerT   Ž   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&   rG   ú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_TYPErR   )rG   rW   s     r$   rF   rF   ¡   sE   € àÔ€EØ„z�Ð(Ð(ÝØD°e´jÐDÐDñ
ô 
ð 	
õ ˜5œ:Ô&Ð&r&   ó   
ÚdataÚprefixÚsuffixc                óL   — d                      |t          | ¦  «        |g¦  «        S )Nr&   )ÚjoinÚ_base64_encode)r[   r\   r]   s      r$   Ú_ssh_pem_encodera   «   s%   € ð
 �8Š8�V�^¨DÑ1Ô1°6Ð:Ñ;Ô;Ð;r&   r0   ÚNonec                óT   — | rt          | ¦  «        |z  dk    rt          d¦  «        ‚dS )zRequire data to be full blocksr   zCorrupt data: missing paddingN)ÚlenrR   )r[   r0   s     r$   Ú_check_block_sizere   ³   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)rR   ©r[   s    r$   Ú_check_emptyrh   ¹   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.zKey is password-protected.TN)rR   r<   r%   r.   r1   r   r-   r/   )ri   r   r   r   ÚciphÚseeds         r$   Ú_init_cipherro   ¿   s�   € ð ð 7ÝÐ5Ñ6Ô6Ð6å˜
Ô#€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©rd   rR   r   Ú
from_bytesrg   s    r$   Ú_get_u32r{   Ó   ó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é   ru   Nrv   rw   ry   rg   s    r$   Ú_get_u64r€   Ú   r|   r&   útuple[memoryview, memoryview]c                ó’   — t          | ¦  «        \  }} |t          | ¦  «        k    rt          d¦  «        ‚| d|…         | |d…         fS )zBytes with u32 length prefixru   N)r{   rd   rR   )r[   Ú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   é   ru   rv   )r„   rR   r   rz   )r[   Ú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&   r   )rR   Ú
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.úlist[bytes]ÚflistNÚinitúlist[bytes] | Noner"   rb   c                óP   — g | _         |r| j                              |¦  «         d S d S ©N)r‘   Úextend)Úselfr’   s     r$   Ú__init__z_FragList.__init__   s7   € ØˆŒ
Øð 	$ØŒJ×Ò˜dÑ#Ô#Ð#Ð#Ð#ð	$ð 	$r&   r‡   r   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 uint32rt   rv   ©Úlengthrx   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 uint64r   rv   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)
rD   r   rp   Ú	bytearrayr¢   rd   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Úmaprd   r‘   ©r—   s    r$   r©   z_FragList.size  s   € å•3•s˜DœJÑ'Ô'Ñ(Ô(Ð(r&   r   Údstbufrp   Úposc                óT   — | j         D ]}t          |¦  «        }|||z   }}||||…<   Œ |S )zWrite into bytearray)r‘   rd   )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&   c                ó°   — t          t          |                      ¦   «         ¦  «        ¦  «        }|                      |¦  «         |                     ¦   «         S )zReturn as bytes)rp   r¨   r©   r·   Útobytes)r—   Úbufs     r$   r¹   z_FragList.tobytes*  s?   € å� 4§9¢9¡;¤;Ñ/Ô/Ñ0Ô0ˆØ�Š�CÑÔÐØ�{Š{‰}Œ}Ðr&   r•   )r’   r“   r"   rb   )r‡   r   r"   rb   )r‡   r   r"   rb   )r‡   r¦   r"   rb   ©r"   r   )r   )r±   rp   r²   r   r"   r   ©r"   r   )r5   r6   r7   Ú__doc__r8   r˜   rœ   r¢   r¥   rª   r¬   r©   r·   r¹   r9   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
    r[   rp   r"   ú"tuple[tuple[int, int], memoryview]c                óV   — t          |¦  «        \  }}t          |¦  «        \  }}||f|fS )zRSA public fields©rˆ   )r—   r[   Úerƒ   s       r$   Ú
get_publicz_SSHFormatRSA.get_public:  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   ÚRSAPublicNumbersrG   )r—   r[   rÃ   rƒ   Úpublic_numbersrG   s         r$   Úload_publicz_SSHFormatRSA.load_publicB  sK   € ð —’ tÑ,Ô,‰‰ˆˆA�ÝÔ-¨a°Ñ3Ô3ˆØ#×.Ò.Ñ0Ô0ˆ
Ø˜4ÐÐr&   ú$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ˆ   rR   r   Úrsa_crt_dmp1Úrsa_crt_dmq1rÇ   ÚRSAPrivateNumbersÚprivate_key)r—   r[   Ú	pubfieldsrƒ   rÃ   ÚdÚiqmpÚpÚqÚdmp1Údmq1rÈ   Úprivate_numbersrÏ   s                 r$   Úload_privatez_SSHFormatRSA.load_privateK  sý   € õ ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý Ñ%Ô%‰
ˆˆdÝ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4àˆqˆ6�YÒÐÝÐ?Ñ@Ô@Ð@ÝÔ  1Ñ%Ô%ˆÝÔ  1Ñ%Ô%ˆÝÔ-¨a°Ñ3Ô3ˆÝÔ/Øˆq�!�T˜4  ~ñ
ô 
ˆð &×1Ò1Ñ3Ô3ˆØ˜DÐ Ð r&   rG   úrsa.RSAPublicKeyÚf_pubr�   rb   c                ó–   — |                      ¦   «         }|                     |j        ¦  «         |                     |j        ¦  «         dS )zWrite RSA public keyN)rÈ   r¬   rÃ   rƒ   )r—   rG   rÚ   Úpubns       r$   Úencode_publicz_SSHFormatRSA.encode_publica  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_privatei  s­   € ð &×5Ò5Ñ7Ô7ˆØ(Ô7ˆà×Ò˜Ô)Ñ*Ô*Ð*Ø×Ò˜Ô)Ñ*Ô*Ð*à×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô-Ñ.Ô.Ð.Ø×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô*Ñ+Ô+Ð+Ð+Ð+r&   N)r[   rp   r"   rÀ   )r[   rp   r"   rÅ   )r[   rp   r"   rÊ   )rG   rÙ   rÚ   r�   r"   rb   )rÏ   rÞ   rß   r�   r"   rb   ©	r5   r6   r7   r½   rÄ   rÉ   rØ   rÝ   rá   r9   r&   r$   r¿   r¿   1  s‚   € € € € € ðð ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ð, ð  ð  ð  ð,ð ,ð ,ð ,ð ,ð ,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
    r[   rp   r"   útuple[tuple, memoryview]c                ó¢   — t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}||||f|fS )zDSA public fieldsrÂ   )r—   r[   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Ú	_validaterG   )	r—   r[   rÓ   rÔ   rç   rè   Úparameter_numbersrÈ   rG   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&   ú$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ˆ   rR   r
   rë   rì   rí   ÚDSAPrivateNumbersrÏ   )r—   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&   rG   údsa.DSAPublicKeyrÚ   r�   rb   c                ó6  — |                      ¦   «         }|j        }|                      |¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         |                     |j        ¦  «         dS )zWrite DSA public keyN)rÈ   rî   rí   r¬   rÓ   rÔ   rç   rè   )r—   rG   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Ý   rG   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Š   rR   )r—   rÈ   rî   s      r$   rí   z_SSHFormatDSA._validate¹  s<   € Ø*Ô<ÐØÔ×)Ò)Ñ+Ô+¨tÒ3Ð3ÝÐBÑCÔCÐCð 4Ð3r&   N)r[   rp   r"   rå   )r[   rp   r"   ré   )r[   rp   r"   rï   )rG   ró   rÚ   r�   r"   rb   )rÏ   rõ   rß   r�   r"   rb   )rÈ   r÷   r"   rb   )
r5   r6   r7   r½   rÄ   rÉ   rØ   rÝ   rá   rí   r9   r&   r$   rä   rä   y  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   rW   úec.EllipticCurvec                ó"   — || _         || _        d S r•   )rû   rW   )r—   rû   rW   s      r$   r˜   z_SSHFormatECDSA.__init__Ë  s   € Ø,ˆÔØˆŒ
ˆ
ˆ
r&   r[   rp   r"   ú0tuple[tuple[memoryview, memoryview], memoryview]c                óÀ   — t          |¦  «        \  }}t          |¦  «        \  }}|| j        k    rt          d¦  «        ‚|d         dk    rt          d¦  «        ‚||f|fS )zECDSA public fieldszCurve name mismatchr   rt   zNeed uncompressed point)r„   rû   rR   ÚNotImplementedError)r—   r[   rW   Úpoints       r$   rÄ   z_SSHFormatECDSA.get_publicÏ  sn   € õ " $Ñ'Ô'‰ˆˆtÝ! $Ñ'Ô'‰ˆˆtØ�DÔ'Ò'Ð'ÝÐ2Ñ3Ô3Ð3Ø�Œ8�qŠ=ˆ=Ý%Ð&?Ñ@Ô@Ð@Ø�uˆ~˜tÐ#Ð#r&   ú,tuple[ec.EllipticCurvePublicKey, memoryview]c                ó®   — |                       |¦  «        \  \  }}}t          j                             | j        |                     ¦   «         ¦  «        }||fS ©z Make ECDSA public key from data.)rÄ   r   rH   Úfrom_encoded_pointrW   r¹   )r—   r[   Ú_r  rG   s        r$   rÉ   z_SSHFormatECDSA.load_publicÛ  sR   € ð  Ÿ?š?¨4Ñ0Ô0Ñ‰
ˆˆE�DÝÔ.×AÒAØŒJ˜Ÿš™œñ
ô 
ˆ
ð ˜4ÐÐ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ˆ   rR   r   Úderive_private_keyrW   )r—   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&   rG   rU   rÚ   r�   rb   c                ó¸   — |                      t          j        t          j        ¦  «        }|                     | j        ¦  «         |                     |¦  «         dS )zWrite ECDSA public keyN)Úpublic_bytesr   ÚX962r   ÚUncompressedPointrª   rû   )r—   rG   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)rG   r×   rÝ   r¬   Úprivate_value)r—   rÏ   rß   rG   r×   s        r$   rá   z_SSHFormatECDSA.encode_privateû  sY   € ð !×+Ò+Ñ-Ô-ˆ
Ø%×5Ò5Ñ7Ô7ˆà×Ò˜: vÑ.Ô.Ð.Ø×Ò˜Ô6Ñ7Ô7Ð7Ð7Ð7r&   N)rû   r   rW   rü   )r[   rp   r"   rþ   ©r[   rp   r"   r  )r[   rp   r"   r  )rG   rU   rÚ   r�   r"   rb   )rÏ   r  rß   r�   r"   rb   )
r5   r6   r7   r½   r˜   rÄ   rÉ   rØ   rÝ   rá   r9   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
    r[   rp   r"   ú$tuple[tuple[memoryview], memoryview]c                ó0   — t          |¦  «        \  }}|f|fS )zEd25519 public fields)r„   )r—   r[   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   rP   Úfrom_public_bytesr¹   )r—   r[   r  rG   s       r$   rÉ   z_SSHFormatEd25519.load_public  sK   € ð Ÿš¨Ñ.Ô.‰‰ˆ�$ÝÔ-×?Ò?Ø�MŠM‰OŒOñ
ô 
ˆ
ð ˜4ÐÐ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.Nr:   z$Corrupt data: ed25519 field mismatch)rÄ   r„   rR   r   rO   Úfrom_private_bytes)r—   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&   rG   úed25519.Ed25519PublicKeyrÚ   r�   rb   c                ó„   — |                      t          j        t          j        ¦  «        }|                     |¦  «         dS )zWrite Ed25519 public keyN)r  r   ÚRawr   rª   )r—   rG   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)rG   Úprivate_bytesr   r#  r   r   r  r   r�   rÝ   rª   )r—   rÏ   rß   rG   Úraw_private_keyr$  Ú	f_keypairs          r$   rá   z _SSHFormatEd25519.encode_private8  sŸ   € ð !×+Ò+Ñ-Ô-ˆ
Ø%×3Ò3ÝŒL�-Ô+­\©^¬^ñ
ô 
ˆð $×0Ò0ÝŒL�,Ô*ñ
ô 
ˆõ ˜°Ð?Ñ@Ô@ˆ	à×Ò˜: vÑ.Ô.Ð.Ø×Ò˜)Ñ$Ô$Ð$Ð$Ð$r&   N)r[   rp   r"   r  ©r[   rp   r"   r  )r[   rp   r"   r  )rG   r!  rÚ   r�   r"   rb   )rÏ   r%  rß   r�   r"   rb   râ   r9   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¹   Ú
startswithrR   )r[   Úapplications     r$   Úload_applicationr/  I  sn   € õ $ DÑ)Ô)Ñ€K�Ø×ÒÑ Ô ×+Ò+¨GÑ4Ô4ð 
ÝðØðð ð ñ
ô 
ð 	
ð ˜ÐÐr&   c                  ó   — e Zd Z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:")
    r[   rp   r"   r  c                ó‚   — t          t          ¦  «                             |¦  «        \  }}t          |¦  «        \  }}||fS r  )Ú_lookup_kformatrQ   rÉ   r/  ©r—   r[   rG   r  s       r$   rÉ   z_SSHFormatSKEd25519.load_public_  s@   € õ +­<Ñ8Ô8×DÒDÀTÑJÔJÑˆ
�DÝ" 4Ñ(Ô(‰ˆˆ4Ø˜4ÐÐr&   Nr*  ©r5   r6   r7   r½   rÉ   r9   r&   r$   r1  r1  V  s2   € € € € € ðð ð ð  ð  ð  ð  ð  r&   r1  c                  ó   — e Zd Z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:")
    r[   rp   r"   r  c                ó‚   — t          t          ¦  «                             |¦  «        \  }}t          |¦  «        \  }}||fS r  )r3  Ú_ECDSA_NISTP256rÉ   r/  r4  s       r$   rÉ   z_SSHFormatSKECDSA.load_publicr  s@   € õ +­?Ñ;Ô;×GÒGÈÑMÔMÑˆ
�DÝ" 4Ñ(Ô(‰ˆˆ4Ø˜4ÐÐr&   Nr  r5  r9   r&   r$   r7  r7  h  s2   € € € € € ðð ð ð  ð  ð  ð  ð  r&   r7  s   nistp256s   nistp384s   nistp521rS   c                ó¾   — t          | t          ¦  «        s!t          | ¦  «                             ¦   «         } | t          v rt          |          S t          d| ›�¦  «        ‚)z"Return valid format or throw errorzUnsupported key type: )rD   r   rp   r¹   Ú_KEY_FORMATSr   )rS   s    r$   r3  r3  ‡  sZ   € å�h¥Ñ&Ô&ð 2Ý˜hÑ'Ô'×/Ò/Ñ1Ô1ˆØ•<ÐÐÝ˜HÔ%Ð%Ý
ÐD¸ÐDÐDÑ
EÔ
EÐEr&   Úbackendú
typing.AnyÚ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%          |
¦  «         ||ft&          t&          f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%          | "                    |¦  «        ¦  «         nUt%          | #                    ¦   «         ¦  «         n3t          | ¦  «        \  }} t%          | ¦  «         d
}t9          ||¦  «         t          |¦  «        \  }}t          |¦  «        \  }}||k    rt          d¦  «        ‚t          |¦  «        \  }}||k    rt          d¦  «        ‚| $                    ||¦  «        \  }}t          |¦  «        \  }}|tJ          dt          |¦  «        …         k    rt          d¦  «        ‚tA          |tL          j'        ¦  «        r!tQ          j)        dt           j*        d¬¦  «         |S )z.Load private key from OpenSSH custom encoding.r[   Nr   zNot OpenSSH private key formatr)   zOnly one key supportedzUnsupported cipher: zUnsupported KDF: z+Corrupt data: invalid tag length for cipherr   zCorrupt data: broken checksumzCorrupt data: key type mismatchzCorrupt data: invalid paddingúDSSH DSA keys are deprecated and will be removed in a future release.é   ©Ú
stacklevel)+r   Ú_check_byteslikeÚ_check_bytesÚ_PEM_RCÚsearchrR   r¶   ÚendÚbinasciiÚ
a2b_base64rp   r-  Ú	_SK_MAGICrd   r„   r{   r3  rÄ   rh   Ú_NONEr¹   r<   r   Ú_BCRYPTr0   r3   r4   r   re   ro   Ú	decryptorÚupdaterD   r   Úfinalize_with_tagÚfinalizerØ   Ú_PADDINGr
   rL   ÚwarningsÚwarnÚDeprecatedIn40)r[   r   r<  ÚmÚp1Úp2ri   ÚkdfnameÚ
kdfoptionsÚnkeysÚpubdataÚpub_key_typeÚkformatrÐ   Úciphername_bytesÚblklenr3   ÚedataÚtagr   Úkbufr   rm   ÚdecÚck1Úck2rS   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Ý�ÑÔÐà�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õ ˜Ÿš™œÑ(Ô(Ð(Ð(õ " $Ñ'Ô'‰ˆˆtÝ�TÑÔÐØˆÝ˜% Ñ(Ô(Ð(Ý˜%‘”�J€CˆÝ˜%‘”�J€CˆØ
ˆc‚z€zÝÐ8Ñ9Ô9Ð9õ " %Ñ(Ô(�O€HˆeØ�<ÒÐÝÐ:Ñ;Ô;Ð;Ø ×-Ò-¨e°YÑ?Ô?Ñ€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 releasert   rB  Nr(   r   r)   r&   )%r   rE  rD   r
   rL   rS  rT  rU  rT   r3  r�   Ú_DEFAULT_CIPHERr<   r0   rM  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomrª   r¢   ro   rL  rÝ   rG   rá   rœ   rR  r©   rK  rp   r¨   r·   Ú	encryptorÚupdate_intora   )rÏ   r   rh  rS   r^  Úf_kdfoptionsri   r`  rY  r   r   rm   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Ñ>Ô>Ð>å˜3˜u ˜uœ:Ñ&Ô&Ð&r&   c                  ó   — e Zd ZdZdZdS )ÚSSHCertificateTyper)   rA  N)r5   r6   r7   ÚUSERÚHOSTr9   r&   r$   r}  r}  [  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Ú_noncerp   Ú_public_keyÚSSHPublicKeyTypesÚ_serialr   Ú_cctypeÚ_key_idÚ_valid_principalsr�   Ú_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}  Ú_typerR   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__a  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$   rG   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•   )r3  rŽ  rÉ   r�  rh   )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&   rb   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°  rD   r   rP   Úverifyr   r‘  r’  r   rH   rˆ   rh   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrW   ÚECDSAr   rJ   r�  rK   r	   ÚSHA1Ú_SSH_RSA_SHA256ÚSHA256Ú_SSH_RSA_SHA512ÚSHA512r   ÚPKCS1v15)r—   r°  Úrr[   Ú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‚  rp   rƒ  r„  r…  r   r†  r   r‡  rp   rˆ  r�   r‰  r   rŠ  r   r‹  rŒ  r�  rŒ  rŽ  rp   r�  rp   r�  rp   r‘  rp   r’  rp   r“  r   r”  rp   r¼   )r"   r™  r»   )r"   r}  )r"   r�   )r"   rŒ  )r"   rb   )r5   r6   r7   r˜   Úpropertyr˜  rG   rž  r   r¢  r¤  r§  r©  r«  r­  r°  r  rÆ  r9   r&   r$   r�  r�  `  s�  € € € € € ð'-ð '-ð '-ð '-ðR ð"ð "ð "ñ „Xð"ðDð Dð Dð Dð
 ðð ð ñ „Xðð ðð ð ñ „Xðð ð#ð #ð #ñ „Xð#ð ð&ð &ð &ñ „Xð&ð ð"ð "ð "ñ „Xð"ð ð!ð !ð !ñ „Xð!ð ð&ð &ð &ñ „Xð&ð ð ð  ð  ñ „Xð ðð ð ð ð
ð 
ð 
ð 
ðð ð ð ð ð r&   r�  rW   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•   )	rD   r   Ú	SECP256R1r	   r¾  Ú	SECP384R1ÚSHA384Ú	SECP521R1rÀ  )rW   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 )Nr[   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ÚmatchrR   ÚgroupÚendswithÚ_CERT_SUFFIXrd   rN   r   r3  rp   rI  rJ  Ú	TypeErrorÚErrorr„   rÉ   r€   r{   rš   r   Ú_parse_exts_optsrh   rK   r½  r¿  r�  )"r[   Ú_legacy_dsa_allowedrV  rS   Úorig_key_typeÚkey_bodyÚ	with_certr^  ÚrestÚ	cert_bodyÚinner_key_typer˜  rG   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ì  rg   s    r$   Úload_ssh_public_identityrî  J  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   rR   rd   )rï  ÚresultÚ	last_namerX   ÚbnameÚvalueÚextras          r$   r×  r×  P  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„  c                óö   — t          | d¬¦  «        }t          |t          ¦  «        r|                     ¦   «         }n|}t          |t          j        ¦  «        r!t          j        dt          j	        d¬¦  «         |S )NT)rØ  r@  rA  rB  )
rì  rD   r�  rG   r
   rM   rS  rT  r   rU  )r[   r<  Úcert_or_keyrG   s       r$   Úload_ssh_public_keyrø  d  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  rt   rB  r&   r³  )rD   r
   rM   rS  rT  r   rU  rT   r3  r�   rª   rÝ   rI  rµ  r¹   Ústripr_   )rG   rS   r^  rÚ   Úpubs        r$   Úserialize_ssh_public_keyrü  x  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…  r2   r–  úSSHCertificateType | Noner‡  rj   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&   rG   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 )NrC   zpublic_key already setr  )rD   r   rH   r   rJ   r   rP   rÕ  rƒ  rR   rÿ  r…  r–  r‡  rˆ  r  rŠ  r‰  r‹  r�  )r—   rG   s     r$   rG   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  )rD   r   rÕ  rR   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  )rD   r}  rÕ  r–  rR   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  )rD   r   rÕ  r‡  rR   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•   )rD   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  rR   ÚallrÕ  rˆ  rd   Ú_SSHKEY_CERT_MAX_PRINCIPALSrÿ  rƒ  r…  r–  r‡  rŠ  r‰  r‹  r�  )r—   r¤  s     r$   r¤  z&SSHCertificateBuilder.valid_principals  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ˆ  rR   r  rÿ  rƒ  r…  r–  r‡  rŠ  r‰  r‹  r�  r°   s    r$   Úvalid_for_all_principalsz.SSHCertificateBuilder.valid_for_all_principals,  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  )rD   r   ÚfloatrÕ  rR   rŠ  rÿ  rƒ  r…  r–  r‡  rˆ  r  r‰  r‹  r�  )r—   r§  s     r$   r§  z"SSHCertificateBuilder.valid_beforeB  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  )rD   r   r  rÕ  rR   r‰  rÿ  rƒ  r…  r–  r‡  rˆ  r  rŠ  r‹  r�  )r—   r©  s     r$   r©  z!SSHCertificateBuilder.valid_afterX  s¼   € Ý˜+­­U |Ñ4Ô4ð 	CÝÐAÑBÔBÐBÝ˜+Ñ&Ô&ˆØ˜Š?ˆ?˜k¨UÒ2Ð2ÝÐ:Ñ;Ô;Ð;ØÔÐ(ÝÐ6Ñ7Ô7Ð7å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,Ø$Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r&   rX   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 r9   r9   ©r  rX   r  s      r$   ú
<listcomp>z=SSHCertificateBuilder.add_critical_option.<locals>.<listcomp>t  s   € Ð?Ð?Ð?™W˜T 1�DÐ?Ð?Ð?r&   zDuplicate critical option namer  )rD   r   rÕ  r‹  rR   rÿ  rƒ  r…  r–  r‡  rˆ  r  rŠ  r‰  r�  ©r—   rX   rô  s      r$   Úadd_critical_optionz)SSHCertificateBuilder.add_critical_optionn  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 r9   r9   r  s      r$   r  z7SSHCertificateBuilder.add_extension.<locals>.<listcomp>Š  s   € Ð9Ð9Ð9™W˜T 1�DÐ9Ð9Ð9r&   zDuplicate extension namer  )rD   r   rÕ  r�  rR   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   r9   ©rò   s    r$   ú<lambda>z,SSHCertificateBuilder.sign.<locals>.<lambda>Å  s
   € °!°A´$€ r&   )r@   c                ó   — | d         S r$  r9   r%  s    r$   r&  z,SSHCertificateBuilder.sign.<locals>.<lambda>Æ  s
   € ¨A¨a¬D€ r&   r:   r³  )6rD   r   rE   r   rI   r   rO   rÕ  rƒ  rR   r…  r–  r‡  rˆ  r  rŠ  r‰  r‹  Úsortr�  rT   rÔ  rn  ro  r3  r�   rª   rÝ   r¥   r¢   rô  r¹   rd   rG   Úsignrº  rW   r»  r¸  Údecode_dss_signaturer¬   r¿  r   rÁ  r	   rÀ  rI  rµ  rú  r›  rœ  r�  rî  r_   )r—   rÏ   rž  r¢  rS   Úcert_prefixr˜  r^  ÚfÚfprincipalsrÓ   ÚfcritrX   rô  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafrë  ÚfsigrÅ  rÂ  rÃ  ÚfsigblobÚ	cert_datas                              r$   r)  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…  r2   r–  r  r‡  rj   rˆ  r�   r  r!   rŠ  r2   r‰  r2   r‹  r  r�  r  )rG   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ÿ  )rX   r   rô  r   r"   rÿ  )rÏ   r!  r"   r�  )r5   r6   r7   r˜   rG   rž  r   r¢  r¤  r  r§  r©  r  r   r)  r9   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@   rA   r"   r   )rG   rU   r"   r   )r[   r   r\   r   r]   r   r"   r   )r[   r   r0   r   r"   rb   )r[   r   r"   rb   )
ri   r   r   rj   r   r   r   r   r"   rk   )r[   rp   r"   rq   )r[   rp   r"   r�   )r‡   r   r"   r   )r"   r�   )rS   r   r•   )r[   r   r   rj   r<  r=  r"   r>  )rÏ   r>  r   r   rh  r   r"   r   )rW   rü   r"   rÈ  )r[   r   r"   rÎ  )rï  rp   r"   rŒ  )r[   r   r<  r=  r"   r„  )rG   r„  r"   r   )Ú
__future__r   rI  Úenumrn  Úrer›  rS  Úbase64r   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ÚImportErrorrQ   rK   rN   r9  Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rÔ  Ú_SK_SSH_ED25519Ú_SK_SSH_ECDSA_NISTP256r½  r¿  ÚcompilerÐ  rK  Ú	_SK_STARTÚ_SK_ENDrM  rL  rk  rl  ÚDOTALLrF  rp   r¨   ÚrangerR  r,   ÚAESÚCTRÚCBCÚGCMr<   r8   rY   rT   rF   ra   re   rh   ro   r{   r€   r„   rˆ   r�   r�   r¿   rä   rú   r  r/  r1  r7  rÊ  rË  rÍ  r;  r3  ÚUnionrE   rI   rL   rO   r>  rg  r{  rH   rJ   rM   rP   r„  r™  ÚEnumr}  r�  rº  rì  rî  r×  rø  rü  r!  r  rÿ  r9   r&   r$   ú<module>rU     s¾  ðð
 #Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø 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ØØØØð ñ  ô  ð')ð )€ð ð ð ñ ð@ !Ø Ø ðð €ðð ð ð ð&'ð 'ð 'ð 'ð  Ñ%Ø˜e‘Oð<ð <ð <ð <ð <ð:ð :ð :ð :ð8ð 8ð 8ð 8ðð ð ð ð(?ð ?ð ?ð ?ð?ð ?ð ?ð ?ðð ð ð ð,ð ,ð ,ð ,ð+ð +ð +ð +ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ðlE,ð E,ð E,ð E,ð E,ñ E,ô E,ð E,ðPCDð CDð CDð CDð CDñ CDô CDð CDðLD8ð D8ð D8ð D8ð D8ñ D8ô D8ð D8ðN@%ð @%ð @%ð @%ð @%ñ @%ô @%ð @%ðF
ð 
ð 
ð 
ð ð  ð  ð  ð  ñ  ô  ð  ð$ ð  ð  ð  ð  ñ  ô  ð  ð( ˆmˆm‰oŒoØˆmˆm‰oŒoØÐ#Ð#Ñ%Ô%Ø�_�_ [°,°"´,±.´.ÑAÔAØ�_�_ [°,°"´,±.´.ÑAÔAØ�_�_ [°,°"´,±.´.ÑAÔAØÐ(Ð(Ñ*Ô*ØÐ-Ð-Ñ/Ô/ð	€ðFð Fð Fð Fð ”\ØÔØÔØÔØÔðôÐ ð ðeð eð eð eð eðPJ'ð J'ð J'ð J'ðZ ”LØÔØÔØÔØÔðôÐ ð œØÔØÔØÔðôÐ ðð ð ð ð ˜œñ ô ð ð
~ð ~ð ~ð ~ð ~ñ ~ô ~ð ~ðBð ð ð ð ð\ð \ð \ð \ð \ð~+ð +ð +ð +ðð ð ð ð* (,ðð ð ð ð ð(+ð +ð +ð +ð(  œØÔØÔØÔðôÐ ð "Ð ðI
ð I
ð I
ð I
ð I
ñ I
ô I
ð I
ð I
ð I
s   Á/A8 Á8BÂB