§
    (ê[fƒÃ  ã                  óZ  — 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 Z3 ej4        d!¦  «        Z5d"Z6d#Z7d$Z8d%Z9d&Z:d'Z;d(Z< ej4        e7d)z   e8z   ej=        ¦  «        Z> e? e@ eAd*d+¦  «        ¦  «        ¦  «        ZBe G d,„ d-¦  «        ¦   «         ZC eCejD        d.ejE        d(d(dd¬/¦  «         eCejD        d.ejF        d(d(dd¬/¦  «         eCejD        d.ejG        d(d0d(d¬/¦  «        d1œZHd2eId3<   e.e/e0d4œZJd~d7„ZKdd:„ZLe7d;z   e8d;z   fd€d?„ZMd�dB„ZNd‚dC„ZOdƒdG„ZPd„dJ„ZQd„dK„ZRd…dM„ZSd„dN„ZTd†dP„ZU G dQ„ dR¦  «        ZV G dS„ dT¦  «        ZW G dU„ dV¦  «        ZX G dW„ dX¦  «        ZY G dY„ dZ¦  «        ZZe, eW¦   «         e- eX¦   «         e+ eZ¦   «         e. eYd[ ej[        ¦   «         ¦  «        e/ eYd\ ej\        ¦   «         ¦  «        e0 eYd] ej]        ¦   «         ¦  «        iZ^d‡d_„Z_ej`        eja        ejb        ejc        ejd        f         Ze	 dˆd‰dc„ZfdŠdg„Zgej`        ejh        eji        ejj        ejk        f         Zlej`        ejh        eji        ejk        f         Zm G dh„ diejn        ¦  «        Zo G dj„ dk¦  «        Zpd‹do„Zq	 d|dŒdq„ZrdŒdr„Zsd�du„Zt	 dˆdŽdw„Zud�dx„Zvej`        eja        ejb        ejd        f         ZwdyZx G dz„ d{¦  «        Zyd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        úd/var/www/piapp/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   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,   X   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   c                óV   — t          |¦  «        \  }}t          |¦  «        \  }}||f|fS )zRSA public fields©rˆ   )r—   r[   Úerƒ   s       r$   Ú
get_publicz_SSHFormatRSA.get_public6  s2   € å˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ø�1ˆv�tˆ|Ðr&   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_public<  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_privateE  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_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_privatec  s­   € ð &×5Ò5Ñ7Ô7ˆØ(Ô7ˆà×Ò˜Ô)Ñ*Ô*Ð*Ø×Ò˜Ô)Ñ*Ô*Ð*à×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô-Ñ.Ô.Ð.Ø×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô*Ñ+Ô+Ð+Ð+Ð+r&   N)r[   rp   )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¿   -  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ã   s  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"   rä   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É  sl   € å! $Ñ'Ô'‰ˆˆ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ø   )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"   rä   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_private.  sŸ   € ð !×+Ò+Ñ-Ô-ˆ
Ø%×3Ò3ÝŒL�-Ô+­\©^¬^ñ
ô 
ˆð $×0Ò0ÝŒL�,Ô*ñ
ô 
ˆõ ˜°Ð?Ñ@Ô@ˆ	à×Ò˜: vÑ.Ô.Ð.Ø×Ò˜)Ñ$Ô$Ð$Ð$Ð$r&   Nrø   )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  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$   Ú_lookup_kformatr'  I  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   Ú
startswithÚ	_SK_MAGICrd   r„   r{   r'  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_keyrT  Z  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   r.  Nr(   r   r)   r&   )%r   r1  rD   r
   rL   r@  rA  rB  rT   r'  r�   Ú_DEFAULT_CIPHERr<   r0   r:  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomrª   r¢   ro   r9  rÜ   rG   rà   rœ   r?  r©   r8  rp   r¨   r·   Ú	encryptorÚupdate_intora   )rÎ   r   rU  rS   rK  Úf_kdfoptionsri   rM  rF  r   r   rm   rH  ÚcheckvalÚcommentÚf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenrº   Úofss                         r$   Ú_serialize_ssh_private_keyrh  Â  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)   r-  N)r5   r6   r7   ÚUSERÚHOSTr9   r&   r$   rj  rj    s   € € € € € Ø€DØ€D€D€Dr&   rj  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)ro  rp  rr  rj  Ú_typerR   rt  ru  rv  rw  rx  rz  r{  r|  r}  r~  r€  r�  r  )r—   ro  rp  rr  rs  rt  ru  rv  rw  rx  rz  r{  r|  r}  r~  r  r€  r�  s                     r$   r˜   zSSHCertificate.__init__#  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   ro  r°   s    r$   ÚnoncezSSHCertificate.nonceL  s   € å�T”[Ñ!Ô!Ð!r&   ÚSSHCertPublicKeyTypesc                ó@   — t          j        t          | j        ¦  «        S r•   )ÚtypingÚcastr†  rp  r°   s    r$   rG   zSSHCertificate.public_keyP  s   € õ Œ{Õ0°$Ô2BÑCÔCÐCr&   c                ó   — | j         S r•   )rr  r°   s    r$   ÚserialzSSHCertificate.serialU  s
   € àŒ|Ðr&   rj  c                ó   — | j         S r•   )rƒ  r°   s    r$   ÚtypezSSHCertificate.typeY  s
   € àŒzÐr&   c                ó*   — t          | j        ¦  «        S r•   )r   rt  r°   s    r$   Úkey_idzSSHCertificate.key_id]  s   € å�T”\Ñ"Ô"Ð"r&   c                ó   — | j         S r•   )ru  r°   s    r$   Úvalid_principalszSSHCertificate.valid_principalsa  ó   € àÔ%Ð%r&   c                ó   — | j         S r•   )rw  r°   s    r$   Úvalid_beforezSSHCertificate.valid_beforee  s   € àÔ!Ð!r&   c                ó   — | j         S r•   )rv  r°   s    r$   Úvalid_afterzSSHCertificate.valid_afteri  s   € àÔ Ð r&   c                ó   — | j         S r•   )rx  r°   s    r$   Úcritical_optionszSSHCertificate.critical_optionsm  r’  r&   c                ó   — | j         S r•   )rz  r°   s    r$   Ú
extensionszSSHCertificate.extensionsq  s   € àÔÐr&   c                ó†   — t          | j        ¦  «        }|                     | j        ¦  «        \  }}t	          |¦  «         |S r•   )r'  r{  rÈ   r|  rh   )r—   Ú	sigformatÚsignature_keyÚsigkey_rests       r$   r�  zSSHCertificate.signature_keyu  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€  r5  Ú
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)"ro  rp   rp  rq  rr  r   rs  r   rt  rp   ru  r�   rv  r   rw  r   rx  ry  rz  ry  r{  rp   r|  rp   r}  rp   r~  rp   r  rp   r€  r   r�  rp   r¼   )r"   r†  r»   )r"   rj  )r"   r�   )r"   ry  )r"   rb   )r5   r6   r7   r˜   Úpropertyr…  rG   r‹  r�  r�  r‘  r”  r–  r˜  rš  r�  r  r³  r9   r&   r$   rn  rn  "  s�  € € € € € ð'-ð '-ð '-ð '-ðR ð"ð "ð "ñ „Xð"ðDð Dð Dð Dð
 ðð ð ñ „Xðð ðð ð ñ „Xðð ð#ð #ð #ñ „Xð#ð ð&ð &ð &ñ „Xð&ð ð"ð "ð "ñ „Xð"ð ð!ð !ð !ñ „Xð!ð ð&ð &ð &ñ „Xð&ð ð ð  ð  ñ „Xð ðð ð ð ð
ð 
ð 
ð 
ðð ð ð ð ð r&   rn  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)   r-  FTz-DSA keys aren't supported in SSH certificateszInvalid formatzInvalid key formatz3DSA signatures aren't supported in SSH certificatesz!Signature key type does not match)r   r0  Ú_SSH_PUBKEY_RCÚmatchrR   ÚgroupÚendswithÚ_CERT_SUFFIXrd   rN   r   r'  rp   r5  r6  Ú	TypeErrorÚErrorr„   rÈ   r€   r{   rš   r   Ú_parse_exts_optsrh   rK   rª  r¬  rn  )"r[   Ú_legacy_dsa_allowedrC  rS   Úorig_key_typeÚkey_bodyÚ	with_certrK  Ú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Û    s   € õ % TÑ*Ô*Ð*r&   Ú	exts_optsry  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Ä    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&   rq  c                óö   — t          | d¬¦  «        }t          |t          ¦  «        r|                     ¦   «         }n|}t          |t          j        ¦  «        r!t          j        dt          j	        d¬¦  «         |S )NT)rÅ  r,  r-  r.  )
rÙ  rD   rn  rG   r
   rM   r@  rA  r   rB  )r[   r(  Úcert_or_keyrG   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 OpenSSHrW  rt   r.  r&   r   )rD   r
   rM   r@  rA  r   rB  rT   r'  r�   rª   rÜ   r5  r¢  r¹   Ústripr_   )rG   rS   rK  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 )<ÚSSHCertificateBuilderNFrp  úSSHCertPublicKeyTypes | Nonerr  r2   rƒ  úSSHCertificateType | Nonert  rj   ru  r�   Ú_valid_for_all_principalsr!   rw  rv  rx  úlist[tuple[bytes, bytes]]rz  c                ó’   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d S r•   ©
rp  rr  rƒ  rt  ru  rï  rw  rv  rx  rz  )r—   rp  rr  rƒ  rt  ru  rï  rw  rv  rx  rz  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Â  rp  rR   rì  rr  rƒ  rt  ru  rï  rw  rv  rx  rz  )r—   rG   s     r$   rG   z SSHCertificateBuilder.public_keys  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   rr  rì  rp  rƒ  rt  ru  rï  rw  rv  rx  rz  )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�  rj  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   rj  rÂ  rƒ  rR   rì  rp  rr  rt  ru  rï  rw  rv  rx  rz  )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Â  rt  rR   rì  rp  rr  rƒ  ru  rï  rw  rv  rx  rz  )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Â  ru  rd   Ú_SSHKEY_CERT_MAX_PRINCIPALSrì  rp  rr  rƒ  rt  rw  rv  rx  rz  )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ò  )ru  rR   rï  rì  rp  rr  rƒ  rt  rw  rv  rx  rz  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   rw  rì  rp  rr  rƒ  rt  ru  rï  rv  rx  rz  )r—   r”  s     r$   r”  z"SSHCertificateBuilder.valid_before  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   rv  rì  rp  rr  rƒ  rt  ru  rï  rw  rx  rz  )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&   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>6  s   € Ð?Ð?Ð?™W˜T 1�DÐ?Ð?Ð?r&   zDuplicate critical option namerò  )rD   r   rÂ  rx  rR   rì  rp  rr  rƒ  rt  ru  rï  rw  rv  rz  ©r—   rX   rá  s      r$   Úadd_critical_optionz)SSHCertificateBuilder.add_critical_option0  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>L  s   € Ð9Ð9Ð9™W˜T 1�DÐ9Ð9Ð9r&   zDuplicate extension namerò  )rD   r   rÂ  rz  rR   rì  rp  rr  rƒ  rt  ru  rï  rw  rv  rx  r	  s      r$   Úadd_extensionz#SSHCertificateBuilder.add_extensionF  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Î   ÚSSHCertPrivateKeyTypesrn  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Â  rp  rR   rr  rƒ  rt  ru  rï  rw  rv  rx  Úsortrz  rT   rÁ  r[  r\  r'  r�   rª   rÜ   r¥   r¢   rá  r¹   rd   rG   Úsignr§  rW   r¨  r¥  Údecode_dss_signaturer¬   r¬  r   r®  r	   r­  r5  r¢  rç  rˆ  r‰  rn  rÛ  r_   )r—   rÎ   r‹  r�  rS   Úcert_prefixr…  rK  Ú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&   )rp  rí  rr  r2   rƒ  rî  rt  rj   ru  r�   rï  r!   rw  r2   rv  r2   rx  rð  rz  rð  )rG   r†  r"   rì  )r‹  r   r"   rì  )r�  rj  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"   rn  )r5   r6   r7   r˜   rG   r‹  r�  r�  r‘  rÿ  r”  r–  r
  r  r  r9   r&   r$   rì  rì  Z  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   )rS   r   r•   )r[   r   r   rj   r(  r)  r"   r*  )rÎ   r*  r   r   rU  r   r"   r   )rW   rü   r"   rµ  )r[   r   r"   r»  )rÜ  rp   r"   ry  )r[   r   r(  r)  r"   rq  )rG   rq  r"   r   )zÚ
__future__r   r5  Úenumr[  Úrerˆ  r@  Ú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   Ú_ECDSA_NISTP256Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rÁ  rª  r¬  Úcompiler½  r8  Ú	_SK_STARTÚ_SK_ENDr:  r9  rX  rY  ÚDOTALLr2  rp   r¨   Úranger?  r,   ÚAESÚCTRÚCBCÚGCMr<   r8   rY   rT   rF   ra   re   rh   ro   r{   r€   r„   rˆ   r�   r�   r¿   rã   rú   r  r·  r¸  rº  r&  r'  ÚUnionrE   rI   rL   rO   r*  rT  rh  rH   rJ   rM   rP   rq  r†  ÚEnumrj  rn  r§  rÙ  rÛ  rÄ  rå  ré  r  rý  rì  r9   r&   r$   ú<module>rA     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øøøð €Ø€Ø€Ø(€Ø(€Ø(€Ø'€ð "€Ø!€à�”Ð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C,ð C,ð C,ð C,ð C,ñ C,ô C,ð C,ðLCDð CDð CDð CDð CDñ CDô CDð CDðLB8ð B8ð B8ð B8ð B8ñ B8ô B8ð B8ðJ>%ð >%ð >%ð >%ð >%ñ >%ô >%ð >%ðD ˆ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