§
    ¥”jÒ  ã                  óÔ  — 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�dB„ZOdŽdE„ZPd�dF„ZQd�dJ„ZRd‘dM„ZSd‘dN„ZTd’dP„ZUd‘dQ„ZVd“dS„ZW G dT„ dU¦  «        ZX G dV„ dW¦  «        ZY G dX„ dY¦  «        ZZ G dZ„ d[¦  «        Z[ G d\„ d]¦  «        Z\d”d^„Z] G d_„ d`¦  «        Z^ G da„ db¦  «        Z_e, eY¦   «         e- eZ¦   «         e+ e\¦   «         e. e[dc ej`        ¦   «         ¦  «        e/ e[dd eja        ¦   «         ¦  «        e0 e[de ejb        ¦   «         ¦  «        e2 e^¦   «         e3 e_¦   «         iZcd•dg„Zdeje        ejf        ejg        ejh        eji        f         Zj	 d–ddhœd—dm„Zkd˜dq„Zleje        ejm        ejn        ejo        ejp        f         Zqeje        ejm        ejn        ejp        f         Zr G dr„ dsejs        ¦  «        Zt G dt„ du¦  «        Zud™dy„Zv	 d‰dšd{„Zwdšd|„Zxd›d„Zydœdƒ„Zz	 d–d�d„„Z{dž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        ú/var/www/finuniver-perm.ru/html/portfolio/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úutils.BufferÚprefixÚsuffixc                óL   — d                      |t          | ¦  «        |g¦  «        S )Nr&   )ÚjoinÚ_base64_encode)r[   r]   r^   s      r$   Ú_ssh_pem_encoderb   «   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_sizerf   ³   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_emptyri   ¹   s#   € àð 8ÝÐ6Ñ7Ô7Ð7ð8ð 8r&   Ú
ciphernameúbytes | Noneú)Cipher[modes.CBC | modes.CTR | modes.GCM]c                ó  — |st          d¦  «        ‚t          |          }t          |||j        |j        z   |d¦  «        }t          |                     |d|j        …         ¦  «        |                     ||j        d…         ¦  «        ¦  «        S )z$Generate key + iv and return cipher.z9Key is password-protected, but password was not provided.TN)Ú	TypeErrorr<   r%   r.   r1   r   r-   r/   )rj   r   r   r   ÚciphÚseeds         r$   Ú_init_cipherrq   ¿   s˜   € ð ð 
ÝØGñ
ô 
ð 	
õ ˜
Ô#€DÝØ�$˜œ t¤{Ñ2°F¸Dñô €Dõ Ø�Š��n˜œ�nÔ%Ñ&Ô&Ø�	Š	�$�t”|�~�~Ô&Ñ'Ô'ñô ð r&   Ú
memoryviewútuple[int, memoryview]c                ó¢   — t          | ¦  «        dk     rt          d¦  «        ‚t                               | dd…         d¬¦  «        | dd…         fS )ÚUint32é   úInvalid dataNÚbig©Ú	byteorder©re   rR   r   Ú
from_bytesrh   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é   rw   Nrx   ry   r{   rh   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 prefixrw   N)r}   re   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   é   rw   rx   )r†   rR   r   r|   )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.zlist[utils.Buffer]ÚflistNÚinitúlist[utils.Buffer] | Noner"   rc   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 uint32rv   rx   ©Úlengthrz   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�   rx   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   rr   Ú	bytearrayr£   re   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Úmapre   r’   ©r˜   s    r$   rª   z_FragList.size   s   € å•3•s˜DœJÑ'Ô'Ñ(Ô(Ð(r&   r   Údstbufrr   Úposc                óT   — | j         D ]}t          |¦  «        }|||z   }}||||…<   Œ |S )zWrite into bytearray)r’   re   )r˜   r²   r³   ÚfragÚflenÚstarts         r$   Úrenderz_FragList.render$  sA   € à”Jð 	%ð 	%ˆDÝ�t‘9”9ˆDØ˜c D™j�3ˆEØ $ˆF�5˜�9ÑÐØˆ
r&   r   c                ó°   — t          t          |                      ¦   «         ¦  «        ¦  «        }|                      |¦  «         |                     ¦   «         S )zReturn as bytes)rr   r©   rª   r¸   Útobytes)r˜   Úbufs     r$   rº   z_FragList.tobytes,  s?   € å� 4§9¢9¡;¤;Ñ/Ô/Ñ0Ô0ˆØ�Š�CÑÔÐØ�{Š{‰}Œ}Ðr&   r–   )r“   r”   r"   rc   )r‰   r\   r"   rc   )r‰   r   r"   rc   )r‰   r§   r"   rc   ©r"   r   )r   )r²   rr   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[   rr   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_publicD  sK   € ð —’ tÑ,Ô,‰‰ˆˆA�ÝÔ-¨a°Ñ3Ô3ˆØ#×.Ò.Ñ0Ô0ˆ
Ø˜4ÐÐr&   Úunsafe_skip_rsa_key_validationr!   ú$tuple[rsa.RSAPrivateKey, memoryview]c           	     óî  — t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }}t          |¦  «        \  }	}||f|k    rt          d¦  «        ‚t          j        ||¦  «        }
t          j        ||	¦  «        }t          j        ||¦  «        }t          j        ||	||
|||¦  «        }|                     |¬¦  «        }||fS )zMake RSA private key from data.z Corrupt data: rsa field mismatch©rË   )rŠ   rR   r   Úrsa_crt_dmp1Úrsa_crt_dmq1rÈ   ÚRSAPrivateNumbersÚprivate_key)r˜   r[   Ú	pubfieldsrË   r…   rÄ   ÚdÚiqmpÚpÚqÚdmp1Údmq1rÉ   Úprivate_numbersrÒ   s                  r$   Úload_privatez_SSHFormatRSA.load_privateM  s  € õ ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4Ý Ñ%Ô%‰
ˆˆdÝ˜TÑ"Ô"‰ˆˆ4Ý˜TÑ"Ô"‰ˆˆ4àˆqˆ6�YÒÐÝÐ?Ñ@Ô@Ð@ÝÔ  1Ñ%Ô%ˆÝÔ  1Ñ%Ô%ˆÝÔ-¨a°Ñ3Ô3ˆÝÔ/Øˆq�!�T˜4  ~ñ
ô 
ˆð &×1Ò1Ø+Ið 2ñ 
ô 
ˆð ˜DÐ Ð r&   rG   úrsa.RSAPublicKeyÚf_pubr‘   rc   c                ó–   — |                      ¦   «         }|                     |j        ¦  «         |                     |j        ¦  «         dS )zWrite RSA public keyN)rÉ   r­   rÄ   r…   )r˜   rG   rÝ   Úpubns       r$   Úencode_publicz_SSHFormatRSA.encode_publice  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_privatem  s­   € ð &×5Ò5Ñ7Ô7ˆØ(Ô7ˆà×Ò˜Ô)Ñ*Ô*Ð*Ø×Ò˜Ô)Ñ*Ô*Ð*à×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô-Ñ.Ô.Ð.Ø×Ò˜Ô*Ñ+Ô+Ð+Ø×Ò˜Ô*Ñ+Ô+Ð+Ð+Ð+r&   N)r[   rr   r"   rÁ   )r[   rr   r"   rÆ   )r[   rr   rË   r!   r"   rÌ   )rG   rÜ   rÝ   r‘   r"   rc   )rÒ   rá   râ   r‘   r"   rc   ©	r5   r6   r7   r¾   rÅ   rÊ   rÛ   rà   rä   r9   r&   r$   rÀ   rÀ   3  s‚   € € € € € ðð ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ð0 ð  ð  ð  ð,ð ,ð ,ð ,ð ,ð ,r&   rÀ   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zd d„Z	dS )!Ú_SSHFormatDSAzhFormat for DSA keys.

    Public:
        mpint p, q, g, y
    Private:
        mpint p, q, g, y, x
    r[   rr   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&   rË   r!   ú$tuple[dsa.DSAPrivateKey, memoryview]c                ól  — |                       |¦  «        \  \  }}}}}t          |¦  «        \  }}||||f|k    rt          d¦  «        ‚t          j        |||¦  «        }	t          j        ||	¦  «        }
|                      |
¦  «         t          j        ||
¦  «        }|                     ¦   «         }||fS )zMake DSA private key from data.z Corrupt data: dsa field mismatch)	rÅ   rŠ   rR   r
   rî   rï   rð   ÚDSAPrivateNumbersrÒ   )r˜   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‘   rc   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[   rr   r"   rè   )r[   rr   r"   rì   )r[   rr   rË   r!   r"   rò   )rG   rö   rÝ   r‘   r"   rc   )rÒ   rø   râ   r‘   r"   rc   )rÉ   rú   r"   rc   )
r5   r6   r7   r¾   rÅ   rÊ   rÛ   rà   rä   rð   r9   r&   r$   rç   rç   }  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[   rr   r"   ú0tuple[tuple[memoryview, memoryview], memoryview]c                ó  — t          |¦  «        \  }}t          |¦  «        \  }}|| j        k    rt          d¦  «        ‚t          |¦  «        dk    rt          d¦  «        ‚|d         dk    rt	          d¦  «        ‚||f|fS )zECDSA public fieldszCurve name mismatchr   zInvalid EC point: empty datarv   zNeed uncompressed point)r†   rþ   rR   re   ÚNotImplementedError)r˜   r[   rW   Úpoints       r$   rÅ   z_SSHFormatECDSA.get_publicÓ  sŒ   € õ " $Ñ'Ô'‰ˆˆtÝ! $Ñ'Ô'‰ˆˆtØ�DÔ'Ò'Ð'ÝÐ2Ñ3Ô3Ð3Ýˆu‰:Œ:˜Š?ˆ?ÝÐ;Ñ<Ô<Ð<Ø�Œ8�qŠ=ˆ=Ý%Ð&?Ñ@Ô@Ð@Ø�uˆ~˜tÐ#Ð#r&   ú,tuple[ec.EllipticCurvePublicKey, memoryview]c                ó®   — |                       |¦  «        \  \  }}}t          j                             | j        |                     ¦   «         ¦  «        }||fS ©z Make ECDSA public key from data.)rÅ   r   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&   rË   r!   ú-tuple[ec.EllipticCurvePrivateKey, memoryview]c                óÆ   — |                       |¦  «        \  \  }}}t          |¦  «        \  }}||f|k    rt          d¦  «        ‚t          j        || j        ¦  «        }||fS )z!Make ECDSA private key from data.z"Corrupt data: ecdsa field mismatch)rÅ   rŠ   rR   r   Úderive_private_keyrW   )r˜   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‘   rc   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[   rr   r"   r  ©r[   rr   r"   r  )r[   rr   rË   r!   r"   r
  )rG   rU   rÝ   r‘   r"   rc   )rÒ   r  râ   r‘   r"   rc   )
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[   rr   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&   rË   r!   ú,tuple[ed25519.Ed25519PrivateKey, memoryview]c                ó   — |                       |¦  «        \  \  }}t          |¦  «        \  }}|dd…         }|dd…         }||k    s|f|k    rt          d¦  «        ‚t          j                             |¦  «        }||fS )z#Make Ed25519 private key from data.Nr:   z$Corrupt data: ed25519 field mismatch)rÅ   r†   rR   r   rO   Úfrom_private_bytes)	r˜   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‘   rc   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_public5  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&   N)r[   rr   r"   r  ©r[   rr   r"   r  )r[   rr   rË   r!   r"   r  )rG   r$  rÝ   r‘   r"   rc   )rÒ   r(  râ   r‘   r"   rc   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_applicationr2  O  sn   € õ $ DÑ)Ô)Ñ€K�Ø×ÒÑ Ô ×+Ò+¨GÑ4Ô4ð 
ÝðØðð ð ñ
ô 
ð 	
ð ˜ÐÐr&   c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú_SSHFormatSKEd25519zÏ
    The format of a sk-ssh-ed25519@openssh.com public key is:

        string		"sk-ssh-ed25519@openssh.com"
        string		public key
        string		application (user-specified, but typically "ssh:")
    r[   rr   r"   r  c                ó‚   — t          t          ¦  «                             |¦  «        \  }}t          |¦  «        \  }}||fS r  )Ú_lookup_kformatrQ   rÊ   r2  ©r˜   r[   rG   r	  s       r$   rÊ   z_SSHFormatSKEd25519.load_publice  s@   € õ +­<Ñ8Ô8×DÒDÀTÑJÔJÑˆ
�DÝ" 4Ñ(Ô(‰ˆˆ4Ø˜4ÐÐr&   útyping.NoReturnc                ó    — t          d¦  «        ‚)Nz,sk-ssh-ed25519 private keys cannot be loadedr   ©r˜   r[   s     r$   rÅ   z_SSHFormatSKEd25519.get_publicm  s   € õ #Ø:ñ
ô 
ð 	
r&   Nr-  ©r[   rr   r"   r8  ©r5   r6   r7   r¾   rÊ   rÅ   r9   r&   r$   r4  r4  \  sF   € € € € € ðð ð ð  ð  ð  ð
ð 
ð 
ð 
ð 
ð 
r&   r4  c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú_SSHFormatSKECDSAzò
    The format of a sk-ecdsa-sha2-nistp256@openssh.com public key is:

        string		"sk-ecdsa-sha2-nistp256@openssh.com"
        string		curve name
        ec_point	Q
        string		application (user-specified, but typically "ssh:")
    r[   rr   r"   r  c                ó‚   — t          t          ¦  «                             |¦  «        \  }}t          |¦  «        \  }}||fS r  )r6  Ú_ECDSA_NISTP256rÊ   r2  r7  s       r$   rÊ   z_SSHFormatSKECDSA.load_public  s@   € õ +­?Ñ;Ô;×GÒGÈÑMÔMÑˆ
�DÝ" 4Ñ(Ô(‰ˆˆ4Ø˜4ÐÐr&   r8  c                ó    — t          d¦  «        ‚)Nz4sk-ecdsa-sha2-nistp256 private keys cannot be loadedr   r:  s     r$   rÅ   z_SSHFormatSKECDSA.get_public‡  s   € õ #ØBñ
ô 
ð 	
r&   Nr  r;  r<  r9   r&   r$   r>  r>  u  sF   € € € € € ðð ð ð  ð  ð  ð
ð 
ð 
ð 
ð 
ð 
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   rr   rº   Ú_KEY_FORMATSr   )rS   s    r$   r6  r6  ›  sZ   € å�h¥Ñ&Ô&ð 2Ý˜hÑ'Ô'×/Ò/Ñ1Ô1ˆØ•<ÐÐÝ˜HÔ%Ð%Ý
ÐD¸ÐDÐDÑ
EÔ
EÐEr&   rÎ   Úbackendú
typing.AnyrË   ÚSSHPrivateKeyTypesc               óÐ	  — t          j        d| ¦  «         |�t          j        d|¦  «         t                               | ¦  «        }|st          d¦  «        ‚|                     d¦  «        }|                     d¦  «        }t          j	        t          | ¦  «        ||…         ¦  «        } |                      t          ¦  «        st          d¦  «        ‚t          | ¦  «        t          t          ¦  «        d…         } t          | ¦  «        \  }} t          | ¦  «        \  }} t          | ¦  «        \  }	} t          | ¦  «        \  }
} |
dk    rt          d¦  «        ‚t          | ¦  «        \  }} t          |¦  «        \  }}t!          |¦  «        }|                     |¦  «        \  }}t%          |¦  «         |t&          k    s|t&          k    �rà|                     ¦   «         }|t*          vrt-          d|›�¦  «        ‚|t.          k    rt-          d|›�¦  «        ‚t*          |         j        }t*          |         j        }t          | ¦  «        \  }} t*          |         j        r2t7          | ¦  «        }t          |¦  «        |k    rt          d	¦  «        ‚nt%          | ¦  «         t9          ||¦  «         t          |	¦  «        \  }}t          |¦  «        \  }}t%          |¦  «         t;          |||                     ¦   «         |¦  «        }|                     ¦   «         }t          |                     |¦  «        ¦  «        }t*          |         j        r:tA          |tB          ¦  «        sJ ‚t%          | "                    |¦  «        ¦  «         nft%          | #                    ¦   «         ¦  «         nD|rtI          d
¦  «        ‚t          | ¦  «        \  }} t%          | ¦  «         d}t9          ||¦  «         t          |¦  «        \  }}t          |¦  «        \  }}||k    rt          d¦  «        ‚t          |¦  «        \  }}||k    rt          d¦  «        ‚| %                    |||¬¦  «        \  }}t          |¦  «        \  }}|tL          dt          |¦  «        …         k    rt          d¦  «        ‚tA          |tN          j(        ¦  «        r!tS          j*        dt           j+        d¬¦  «         |S )z.Load private key from OpenSSH custom encoding.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 cipherz4Password was given but private key is not encrypted.r�   zCorrupt data: broken checksumzCorrupt data: key type mismatchrÎ   zCorrupt data: invalid paddingúDSSH DSA keys are deprecated and will be removed in a future release.é   ©Ú
stacklevel),r   Ú_check_byteslikeÚ_check_bytesÚ_PEM_RCÚsearchrR   r·   ÚendÚbinasciiÚ
a2b_base64rr   r0  Ú	_SK_MAGICre   r†   r}   r6  rÅ   ri   Ú_NONErº   r<   r   Ú_BCRYPTr0   r3   r4   r   rf   rq   Ú	decryptorÚupdaterD   r   Úfinalize_with_tagÚfinalizern   rÛ   Ú_PADDINGr
   rL   ÚwarningsÚwarnÚDeprecatedIn40)r[   r   rD  rË   ÚmÚp1Úp2rj   ÚkdfnameÚ
kdfoptionsÚnkeysÚpubdataÚpub_key_typeÚkformatrÓ   Úciphername_bytesÚblklenr3   ÚedataÚtagr   Úkbufr   ro   ÚdecÚck1Úck2rS   rÒ   r	  s                                 r$   Úload_ssh_private_keyro  ¬  sÆ  € õ 
Ô˜6 4Ñ(Ô(Ð(ØÐÝÔ˜: xÑ0Ô0Ð0å�Š�tÑÔ€AØð ;ÝÐ9Ñ:Ô:Ð:Ø	
�Š�‰Œ€BØ	
�Šˆq‰Œ€BÝÔ�z¨$Ñ/Ô/°°2°Ô6Ñ7Ô7€DØ�?Š?�9Ñ%Ô%ð ;ÝÐ9Ñ:Ô:Ð:Ý�dÑÔ�C¥	™NœNÐ,Ð,Ô-€Dõ # 4Ñ(Ô(Ñ€J�Ý Ñ%Ô%�M€GˆTÝ" 4Ñ(Ô(Ñ€J�Ý˜4‘.”.�K€Eˆ4Ø�‚z€zÝÐ1Ñ2Ô2Ð2õ   Ñ%Ô%�M€GˆTÝ'¨Ñ0Ô0Ñ€L�'Ý˜lÑ+Ô+€GØ ×+Ò+¨GÑ4Ô4Ñ€IˆwÝ�ÑÔÐà•UÒÐ˜g­Ò.Ñ.Ø%×-Ò-Ñ/Ô/ÐØ¥<Ð/Ð/Ý&Ø;Ð'7Ð;Ð;ñô ð ð •gÒÐÝ&Ð'F¸7Ð'FÐ'FÑGÔGÐGÝÐ.Ô/Ô9ˆÝÐ/Ô0Ô8ˆå! $Ñ'Ô'‰ˆˆtõ Ð(Ô)Ô1ð 	Ý˜‘+”+ˆCÝ�3‰xŒx˜7Ò"Ð"Ý Ð!NÑOÔOÐOð #õ ˜ÑÔÐÝ˜% Ñ(Ô(Ð(Ý  Ñ,Ô,‰
ˆˆdÝ ‘~”~‰ˆ�Ý�TÑÔÐÝÐ,¨h¸¿º¹¼ÈÑOÔOˆØ�nŠnÑÔˆÝ˜3Ÿ:š: eÑ,Ô,Ñ-Ô-ˆÝÐ(Ô)Ô1ð 	)Ý˜cÕ#8Ñ9Ô9Ð9Ð9Ð9Ý˜×.Ò.¨sÑ3Ô3Ñ4Ô4Ð4Ð4õ ˜Ÿš™œÑ(Ô(Ð(Ð(àð 	ÝØFñô ð õ " $Ñ'Ô'‰ˆˆtÝ�TÑÔÐØˆÝ˜% Ñ(Ô(Ð(Ý˜%‘”�J€CˆÝ˜%‘”�J€CˆØ
ˆc‚z€zÝÐ8Ñ9Ô9Ð9õ " %Ñ(Ô(�O€HˆeØ�<ÒÐÝÐ:Ñ;Ô;Ð;Ø ×-Ò-ØØØ'Eð .ñ ô Ñ€K�õ ˜5Ñ!Ô!�H€A€uð •˜�3˜u™:œ:˜Ô&Ò&Ð&ÝÐ8Ñ9Ô9Ð9å�+�sÔ0Ñ1Ô1ð 
ÝŒðåÔ Øð		
ñ 	
ô 	
ð 	
ð Ðr&   rÒ   Úencryption_algorithmr   c                óÚ  — t          j        d|¦  «         t          | t          j        ¦  «        r!t          j        dt           j        d¬¦  «         t          | ¦  «        }t          |¦  «        }t          ¦   «         }|r›t          }t          |         j        }t          }t          }	t          |t           ¦  «        r|j        �|j        }	t%          j        d¦  «        }
|                     |
¦  «         |                     |	¦  «         t-          |||
|	¦  «        }nt.          x}}d}d}d}t%          j        d¦  «        }d	}t          ¦   «         }|                     |¦  «         |                     |                      ¦   «         |¦  «         t          ||g¦  «        }|                     |¦  «         |                     | |¦  «         |                     |¦  «         |                     t8          d||                     ¦   «         |z  z
  …         ¦  «         t          ¦   «         }|                     t<          ¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     ¦   «         }|                     ¦   «         }t?          tA          ||z   ¦  «        ¦  «        }| !                    |¦  «         ||z
  }|�8| "                    ¦   «          #                    |||…         ||d…         ¦  «         tI          |d|…         ¦  «        S )
z3Serialize private key with OpenSSH custom encoding.r   úISSH DSA key support is deprecated and will be removed in a future releaserv   rJ  Nr(   r�   r)   r&   )%r   rM  rD   r
   rL   r[  r\  r]  rT   r6  r‘   Ú_DEFAULT_CIPHERr<   r0   rU  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomr«   r£   rq   rT  rà   rG   rä   r�   rZ  rª   rS  rr   r©   r¸   Ú	encryptorÚupdate_intorb   )rÒ   r   rp  rS   rf  Úf_kdfoptionsrj   rh  ra  r   r   ro   rc  Ú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)   rI  N)r5   r6   r7   ÚUSERÚHOSTr9   r&   r$   r…  r…  y  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Ú_noncerr   Ú_public_keyÚSSHPublicKeyTypesÚ_serialr   Ú_cctypeÚ_key_idÚ_valid_principalsúlist[bytes]Ú_valid_afterÚ_valid_beforeÚ_critical_optionsúdict[bytes, bytes]Ú_extensionsÚ	_sig_typeÚ_sig_keyÚ_inner_sig_typeÚ
_signatureÚ_tbs_cert_bodyÚ_cert_key_typer   Ú
_cert_bodyc                óL  — || _         || _        || _        	 t          |¦  «        | _        n# t
          $ r t          d¦  «        ‚w xY w|| _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        || _        || _        || _        || _        d S )NzInvalid certificate type)rŠ  r‹  r�  r…  Ú_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__  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–   )r6  r—  rÊ   r˜  ri   )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œ  rQ  Ú
b2a_base64r�  r±   s    r$   r  zSSHCertificate.public_bytes×  s@   € å�$Ô%Ñ&Ô&ØñåÔ!¥%¨¬Ñ"8Ô"8À%ÐHÑHÔHñIð	
r&   rc   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Š   ri   Ú
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Š  rr   r‹  rŒ  r�  r   rŽ  r   r�  rr   r�  r‘  r’  r   r“  r   r”  r•  r–  r•  r—  rr   r˜  rr   r™  rr   rš  rr   r›  rr   rœ  r   r�  rr   r½   )r"   r¢  r¼   )r"   r…  )r"   r‘  )r"   r•  )r"   rc   )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)   rI  FTz-DSA keys aren't supported in SSH certificateszInvalid formatzInvalid key formatz3DSA signatures aren't supported in SSH certificatesz!Signature key type does not match)r   rL  Ú_SSH_PUBKEY_RCÚmatchrR   ÚgroupÚendswithÚ_CERT_SUFFIXre   rN   r   r6  rr   rQ  rR  rn   ÚErrorr†   rÊ   r‚   r}   r›   r   Ú_parse_exts_optsri   rK   rÆ  rÈ  r‰  )"r[   Ú_legacy_dsa_allowedr^  rS   Úorig_key_typeÚkey_bodyÚ	with_certrf  Ú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ô  rh   s    r$   Úload_ssh_public_identityrö  h  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   re   )r÷  ÚresultÚ	last_namerX   ÚbnameÚvalueÚextras          r$   rß  rß  n  sÜ   € Ø!#€FØ€IØ
ð Ý% iÑ0Ô0‰ˆˆiÝ˜T‘{”{ˆØ�Fˆ?ˆ?ÝÐ-Ñ.Ô.Ð.ØÐ  U¨YÒ%6Ð%6ÝÐ:Ñ;Ô;Ð;Ý& yÑ1Ô1ÑˆˆyÝˆu‰:Œ:˜Š>ˆ>Ý& uÑ-Ô-‰LˆE�5Ý�5‰zŒz˜AŠ~ˆ~Ý Ð!DÑEÔEÐEÝ˜e™œˆˆu‰Øˆ	ð ð ð €Mr&   rŒ  Úhash_algorithmúhashes.MD5 | hashes.SHA256c                ó¼  — t          |t          j        t          j        f¦  «        st	          d¦  «        ‚t          | ¦  «        }t          |¦  «        }t          ¦   «         }|                     |¦  «         | 	                    | |¦  «         | 
                    ¦   «         }t          j        |¦  «        }|                     |¦  «         |                     ¦   «         S )Nz+hash_algorithm must be either MD5 or SHA256)rD   r	   ÚMD5rÇ  rn   rT   r6  r‘   r«   rà   rº   ÚHashrW  rY  )r@   rþ  rS   rf  rÝ   Ússh_binary_dataÚhash_objs          r$   Ússh_key_fingerprintr  ‚  s¾   € õ �n¥v¤zµ6´=Ð&AÑBÔBð GÝÐEÑFÔFÐFå  Ñ%Ô%€HÝ˜hÑ'Ô'€Gå‰KŒK€EØ	×Ò�XÑÔÐØ×Ò˜#˜uÑ%Ô%Ð%à—m’m‘o”o€Oõ Œ{˜>Ñ*Ô*€HØ‡O‚O�OÑ$Ô$Ð$Ø×ÒÑÔÐr&   c                óö   — t          | d¬¦  «        }t          |t          ¦  «        r|                     ¦   «         }n|}t          |t          j        ¦  «        r!t          j        dt          j	        d¬¦  «         |S )NT)rà  rH  rI  rJ  )
rô  rD   r‰  rG   r
   rM   r[  r\  r   r]  )r[   rD  Ú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 OpenSSHrr  rv   rJ  r&   r¼  )rD   r
   rM   r[  r\  r   r]  rT   r6  r‘   r«   rà   rQ  r¾  rº   Ústripr`   )rG   rS   rf  rÝ   Úpubs        r$   Úserialize_ssh_public_keyr  ¬  sÊ   € å�*�cÔ.Ñ/Ô/ð 
ÝŒð*åÔ Øð		
ñ 	
ô 	
ð 	
õ ! Ñ,Ô,€HÝ˜hÑ'Ô'€Gå‰KŒK€EØ	×Ò�XÑÔÐØ×Ò˜* eÑ,Ô,Ð,å
Ô
˜eŸmšm™oœoÑ
.Ô
.×
4Ò
4Ñ
6Ô
6€CØ�8Š8�X˜t SÐ)Ñ*Ô*Ð*r&   é   c            
      ó‚   — e Zd Zddddg dddg g f
d2d„Zd3d„Zd4d„Zd5d„Zd6d!„Zd7d#„Zd$„ Z	d8d'„Z
d9d)„Zd:d,„Zd:d-„Zd;d1„ZdS )<ÚSSHCertificateBuilderNFr‹  úSSHCertPublicKeyTypes | Noner�  r2   rŸ  úSSHCertificateType | Noner�  rk   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   rn   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   rn   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…  rn   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   rn   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>E  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   Úallrn   r�  re   Ú_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   Úfloatrn   rR   r“  r  r‹  r�  rŸ  r�  r�  r  r’  r”  r–  )r˜   r°  s     r$   r°  z"SSHCertificateBuilder.valid_beforev  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%  rn   rR   r’  r  r‹  r�  rŸ  r�  r�  r  r“  r”  r–  )r˜   r²  s     r$   r²  z!SSHCertificateBuilder.valid_afterŒ  s¼   € Ý˜+­­U |Ñ4Ô4ð 	CÝÐAÑBÔBÐBÝ˜+Ñ&Ô&ˆØ˜Š?ˆ?˜k¨UÒ2Ð2ÝÐ:Ñ;Ô;Ð;ØÔÐ(ÝÐ6Ñ7Ô7Ð7å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,Ø$Ø"Ô4ØÔ(ð
ñ 
ô 
ð 	
r&   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>¨  s   € Ð?Ð?Ð?™W˜T 1�DÐ?Ð?Ð?r&   zDuplicate critical option namer  )rD   r   rn   r”  rR   r  r‹  r�  rŸ  r�  r�  r  r“  r’  r–  ©r˜   rX   rü  s      r$   Úadd_critical_optionz)SSHCertificateBuilder.add_critical_option¢  sÀ   € õ ˜$¥Ñ&Ô&ð 	<­j¸ÅÑ.FÔ.Fð 	<ÝÐ:Ñ;Ô;Ð;àÐ?Ð?¨Ô(>Ð?Ñ?Ô?Ð?Ð?ÝÐ=Ñ>Ô>Ð>å$ØÔ(Ø”LØ”*Ø”LØ"Ô4Ø&*Ô&DØÔ,ØÔ*ØF Ô 6ÐF¸¸u¸ÐFØÔ(ð
ñ 
ô 
ð 	
r&   c                óZ  — t          |t          ¦  «        rt          |t          ¦  «        st          d¦  «        ‚|d„ | j        D ¦   «         v rt	          d¦  «        ‚t          | j        | j        | j        | j	        | j
        | j        | j        | j        | j        g | j        ¢||f‘¬¦
  «
        S )Nr(  c                ó   — g | ]\  }}|‘ŒS 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   rn   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 r4  r9   r5  s    r$   r6  z,SSHCertificateBuilder.sign.<locals>.<lambda>ú  s
   € ¨A¨a¬D€ r&   r:   r¼  )6rD   r   rE   r   rI   r   rO   rn   r‹  rR   r�  rŸ  r�  r�  r  r“  r’  r”  Úsortr–  rT   rÝ  rv  rw  r6  r‘   r«   rà   r¦   r£   rü  rº   re   rG   ÚsignrÃ  rW   rÄ  rÁ  Údecode_dss_signaturer­   rÈ  r   rÊ  r	   rÉ  rQ  r¾  r
  r¤  r¥  r‰  rö  r`   )r˜   rÒ   r§  r«  rS   Úcert_prefixr¡  rf  ÚfÚfprincipalsrÖ   ÚfcritrX   rü  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafró  ÚfsigrÎ  rË  rÌ  ÚfsigblobÚ	cert_datas                              r$   r9  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�  rk   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Ò   r1  r"   r‰  )r5   r6   r7   r™   rG   r§  r©  r«  r­  r"  r°  r²  r-  r0  r9  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"   rc   )r[   r\   r"   rc   )
rj   r   r   rk   r   r   r   r   r"   rl   )r[   rr   r"   rs   )r[   rr   r"   rƒ   )r‰   r   r"   r   )r"   rƒ   )rS   r\   r–   )
r[   r\   r   rk   rD  rE  rË   r!   r"   rF  )rÒ   rF  r   r   rp  r   r"   r   )rW   rÿ   r"   rÑ  )r[   r\   r"   r×  )r÷  rr   r"   r•  )r@   rŒ  rþ  rÿ  r"   r   )r[   r\   rD  rE  r"   rŒ  )rG   rŒ  r"   r   )€Ú
__future__r   rQ  Úenumrv  Úrer¤  r[  Úbase64r   ra   Ú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   r@  Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rÝ  Ú_SK_SSH_ED25519Ú_SK_SSH_ECDSA_NISTP256rÆ  rÈ  ÚcompilerÙ  rS  Ú	_SK_STARTÚ_SK_ENDrU  rT  rs  rt  ÚDOTALLrN  rr   r©   ÚrangerZ  r,   ÚAESÚCTRÚCBCÚGCMr<   r8   rY   rT   rF   rb   rf   ri   rq   r}   r‚   r†   rŠ   r�   r‘   rÀ   rç   rý   r  r2  r4  r>  rÓ  rÔ  rÖ  rC  r6  ÚUnionrE   rI   rL   rO   rF  ro  rƒ  rH   rJ   rM   rP   rŒ  r¢  ÚEnumr…  r‰  rÃ  rô  rö  rß  r  r  r  r1  r   r  r9   r&   r$   ú<module>re     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G,ð G,ð G,ð G,ð G,ñ G,ô G,ð G,ðTCDð CDð CDð CDð CDñ CDô CDð CDðLF8ð F8ð F8ð F8ð F8ñ F8ô F8ð F8ðR@%ð @%ð @%ð @%ð @%ñ @%ô @%ð @%ðF
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð2
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð6 ˆmˆm‰oŒoØˆmˆm‰oŒoØÐ#Ð#Ñ%Ô%Ø�_�_ [°,°"´,±.´.ÑAÔAØ�_�_ [°,°"´,±.´.ÑAÔAØ�_�_ [°,°"´,±.´.ÑAÔAØÐ(Ð(Ñ*Ô*ØÐ-Ð-Ñ/Ô/ð	€ðFð Fð Fð Fð ”\ØÔØÔØÔØÔðôÐ ð ðoð
 ,1ðoð oð oð oð oð oðdJ'ð J'ð J'ð J'ðZ ”LØÔØÔØÔØÔðôÐ ð œØÔØÔØÔðôÐ ðð ð ð ð ˜œñ ô ð ð
~ð ~ð ~ð ~ð ~ñ ~ô ~ð ~ðBð ð ð ð ð\ð \ð \ð \ð \ð~+ð +ð +ð +ðð ð ð ð(ð ð ð ð. /3ðð ð ð ð ð(+ð +ð +ð +ð(  œØÔØÔØÔðôÐ ð "Ð ðI
ð I
ð I
ð I
ð I
ñ I
ô I
ð I
ð I
ð I
s   Á/A8 Á8BÂB