Ë
    ±ŒjXÑ  ã                  ó€  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZ d d	lmZmZmZm Z m!Z!m"Z" 	 d d
l#m$Z% dZ&dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2 ejf                  d«      Z4dZ5dZ6dZ7dZ8dZ9dZ:d Z; ejf                  e6d!z   e7z   ejx                  «      Z= e> e? e@d"d#«      «      «      ZAe	 G d$„ d%«      «       ZB eBej†                  d&ejˆ                  d d dd¬'«       eBej†                  d&ejŠ                  d d dd¬'«       eBej†                  d&ejŒ                  d d(d d¬'«      d)œZGd*eHd+<   e+e,e-d,œZId]d-„ZJd^d.„ZKd_d/„ZLd`d0„ZM	 	 	 	 	 	 	 	 	 	 dad1„ZNdbd2„ZOdbd3„ZPdcd4„ZQdbd5„ZRddd6„ZS G d7„ d8«      ZT G d9„ d:«      ZU G d;„ d<«      ZV G d=„ d>«      ZW G d?„ d@«      ZXdedA„ZY G dB„ dC«      ZZ G dD„ dE«      Z[e) eU«       e* eV«       e( eX«       e+ eWdF ej¸                  «       «      e, eWdG ejº                  «       «      e- eWdH ej¼                  «       «      e/ eZ«       e0 e[«       iZ_dfdI„Z`ejÂ                  ejÄ                  ejÆ                  ejÈ                  ejÊ                  f   Zf	 dgddJœ	 	 	 	 	 	 	 	 	 dhdK„Zg	 	 	 	 	 	 	 	 didL„ZhejÂ                  ejÒ                  ejÔ                  ejÖ                  ejØ                  f   ZmejÂ                  ejÒ                  ejÔ                  ejØ                  f   Zn G dM„ dNejÞ                  «      Zp G dO„ dP«      ZqdjdQ„Zr	 d[	 	 	 dkdR„Zs	 	 	 	 dkdS„ZtdldT„Zu	 	 	 	 	 	 dmdU„Zv	 dg	 	 	 	 	 dndV„ZwdodW„ZxejÂ                  ejÄ                  ejÆ                  ejÊ                  f   ZydXZz G dY„ dZ«      Z{y# e'$ r dZ&	 d[	 	 	 	 	 	 	 	 	 	 	 d\d„Z%Y �ŒKw xY w)pé    )ÚannotationsN)Ú	dataclass)Úutils©ÚUnsupportedAlgorithm)Úhashes)ÚdsaÚecÚed25519ÚpaddingÚrsa)ÚAEADDecryptionContextÚCipherÚ
algorithmsÚmodes)ÚEncodingÚKeySerializationEncryptionÚNoEncryptionÚPrivateFormatÚPublicFormatÚ_KeySerializationEncryption)ÚkdfTFc                ó   — t        d«      ‚)NzNeed bcrypt moduler   )ÚpasswordÚsaltÚdesired_key_bytesÚroundsÚignore_few_roundss        úz/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization/ssh.pyÚ_bcrypt_kdfr    0   s   € ô #Ð#7Ó8Ð8ó    s   ssh-ed25519s   ssh-rsas   ssh-dsss   ecdsa-sha2-nistp256s   ecdsa-sha2-nistp384s   ecdsa-sha2-nistp521s   -cert-v01@openssh.coms   sk-ssh-ed25519@openssh.coms"   sk-ecdsa-sha2-nistp256@openssh.coms   rsa-sha2-256s   rsa-sha2-512s   \A(\S+)[ \t]+(\S+)s   openssh-key-v1 s#   -----BEGIN OPENSSH PRIVATE KEY-----s!   -----END OPENSSH PRIVATE KEY-----s   bcrypts   noneó
   aes256-ctré   s   (.*?)é   é   c                  óT   — 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<   y)Ú
_SSHCipherztype[algorithms.AES]ÚalgÚintÚkey_lenz3type[modes.CTR] | type[modes.CBC] | type[modes.GCM]ÚmodeÚ	block_lenÚiv_lenú
int | NoneÚtag_lenÚboolÚis_aeadN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r!   r   r'   r'   [   s(   … à	ÓØƒLØ
=Ó=ØƒNØƒKØÓØ„Mr!   r'   é    )r(   r*   r+   r,   r-   r/   r1   é   )r"   s
   aes256-cbcs   aes256-gcm@openssh.comzdict[bytes, _SSHCipher]Ú_SSH_CIPHERS)Ú	secp256r1Ú	secp384r1Ú	secp521r1c                óü  — t        | t        j                  «      rt        | j	                  «       «      }|S t        | t        j
                  «      rt        | «      }|S t        | t        j                  t        j                  f«      rt        }|S t        | t        j                  t        j                  f«      rt        }|S t        | t        j                  t        j                   f«      rt"        }|S t%        d«      ‚)NúUnsupported key type)Ú
isinstancer
   ÚEllipticCurvePrivateKeyÚ_ecdsa_key_typeÚ
public_keyÚEllipticCurvePublicKeyr   ÚRSAPrivateKeyÚRSAPublicKeyÚ_SSH_RSAr	   ÚDSAPrivateKeyÚDSAPublicKeyÚ_SSH_DSAr   ÚEd25519PrivateKeyÚEd25519PublicKeyÚ_SSH_ED25519Ú
ValueError)ÚkeyÚkey_types     r   Ú_get_ssh_key_typerP   �   sÛ   € Ü�#”r×1Ñ1Ô2Ü" 3§>¡>Ó#3Ó4ˆð €Oô 
�Cœ×2Ñ2Ô	3Ü" 3Ó'ˆð €Oô 
�Cœ#×+Ñ+¬S×-=Ñ-=Ð>Ô	?Üˆð €Oô 
�Cœ#×+Ñ+¬S×-=Ñ-=Ð>Ô	?Üˆð €Oô 
ØŒg×'Ñ'¬×)AÑ)AÐBô
ô  ˆð €Oô Ð/Ó0Ð0r!   c                ó”   — | 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_TYPErM   )rB   rR   s     r   rA   rA       sE   € à×Ñ€EØ‡z�zœÑ(ÜØ5°e·j±j°^ÐDó
ð 	
ô ˜5Ÿ:™:Ñ&Ð&r!   c                ó@   — | rt        | «      |z  dk7  rt        d«      ‚y)zRequire data to be full blocksr   zCorrupt data: missing paddingN)ÚlenrM   )Údatar,   s     r   Ú_check_block_sizerX   ª   s&   € á”3�t“9˜yÑ(¨AÒ-ÜÐ8Ó9Ð9ð .r!   c                ó   — | rt        d«      ‚y)z!All data should have been parsed.zCorrupt data: unparsed dataN)rM   ©rW   s    r   Ú_check_emptyr[   °   s   € áÜÐ6Ó7Ð7ð r!   c                ó  — |st        d«      ‚t        |    }t        |||j                  |j                  z   |d«      }t        |j                  |d|j                   «      |j                  ||j                  d «      «      S )z$Generate key + iv and return cipher.z9Key is password-protected, but password was not provided.TN)Ú	TypeErrorr9   r    r*   r-   r   r(   r+   )Ú
ciphernamer   r   r   ÚciphÚseeds         r   Ú_init_cipherra   ¶   s‚   € ñ ÜØGó
ð 	
ô ˜
Ñ#€DÜØ�$˜Ÿ™ t§{¡{Ñ2°F¸Dó€Dô Ø�‰��n˜Ÿ™Ð%Ó&Ø�	‰	�$�t—|‘|�~Ð&Ó'óð r!   c                ór   — t        | «      dk  rt        d«      ‚t        j                  | dd d¬«      | dd fS )ÚUint32é   úInvalid dataNÚbig©Ú	byteorder©rV   rM   r)   Ú
from_bytesrZ   s    r   Ú_get_u32rk   Ì   ó<   € ä
ˆ4ƒy�1‚}Ü˜Ó(Ð(Ü�>‰>˜$˜r ˜(¨eˆ>Ó4°d¸1¸2°hÐ>Ð>r!   c                ór   — t        | «      dk  rt        d«      ‚t        j                  | dd d¬«      | dd fS )ÚUint64é   re   Nrf   rg   ri   rZ   s    r   Ú_get_u64rp   Ó   rl   r!   c                ód   — t        | «      \  }} |t        | «      kD  rt        d«      ‚| d| | |d fS )zBytes with u32 length prefixre   N)rk   rV   rM   )rW   Úns     r   Ú_get_sshstrrs   Ú   s<   € ä�t‹n�G€A€tØŒ3ˆt‹9‚}Ü˜Ó(Ð(Ø��ˆ8�T˜!˜"�XÐÐr!   c                óx   — t        | «      \  }} |r|d   dkD  rt        d«      ‚t        j                  |d«      | fS )zBig integer.r   é   re   rf   )rs   rM   r)   rj   )rW   Úvals     r   Ú
_get_mpintrw   â   s>   € ä˜DÓ!�I€CˆÙ
ˆs�1‰v˜Š}Ü˜Ó(Ð(Ü�>‰>˜#˜uÓ% tÐ+Ð+r!   c                ó€   — | dk  rt        d«      ‚| sy| j                  «       dz   dz  }t        j                  | |«      S )z!Storage format for signed bigint.r   znegative mpint not allowedr!   ro   )rM   Ú
bit_lengthr   Úint_to_bytes)rv   Únbytess     r   Ú	_to_mpintr|   ê   sD   € à
ˆQ‚wÜÐ5Ó6Ð6ÙØØ�n‰nÓ Ñ" qÑ(€FÜ×Ñ˜c 6Ó*Ð*r!   c                  óh   — 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y)Ú	_FragListz,Build recursive structure without data copy.zlist[utils.Buffer]ÚflistNc                óN   — g | _         |r| j                   j                  |«       y y ©N)r   Úextend)ÚselfÚinits     r   Ú__init__z_FragList.__init__ù   s#   € ØˆŒ
ÙØ�J‰J×Ñ˜dÕ#ð r!   c                ó:   — | j                   j                  |«       y)zAdd plain bytesN)r   Úappend©rƒ   rv   s     r   Úput_rawz_FragList.put_rawþ   s   € à�
‰
×Ñ˜#Õr!   c                ó\   — | j                   j                  |j                  dd¬«      «       y)zBig-endian uint32rd   rf   ©Úlengthrh   N©r   r‡   Úto_bytesrˆ   s     r   Úput_u32z_FragList.put_u32  ó!   € à�
‰
×Ñ˜#Ÿ,™,¨a¸5˜,ÓAÕBr!   c                ó\   — | j                   j                  |j                  dd¬«      «       y)zBig-endian uint64ro   rf   r‹   Nr�   rˆ   s     r   Úput_u64z_FragList.put_u64  r�   r!   c                ó.  — t        |t        t        t        f«      r6| j	                  t        |«      «       | j                  j                  |«       y| j	                  |j                  «       «       | j                  j                  |j                  «       y)zBytes prefixed with u32 lengthN)
r?   ÚbytesÚ
memoryviewÚ	bytearrayr�   rV   r   r‡   Úsizer‚   rˆ   s     r   Ú
put_sshstrz_FragList.put_sshstr
  s]   € ä�cœE¤:¬yÐ9Ô:Ø�L‰Lœ˜S›Ô"Ø�J‰J×Ñ˜cÕ"à�L‰L˜Ÿ™›Ô$Ø�J‰J×Ñ˜cŸi™iÕ(r!   c                ó8   — | j                  t        |«      «       y)z*Big-endian bigint prefixed with u32 lengthN)r˜   r|   rˆ   s     r   Ú	put_mpintz_FragList.put_mpint  s   € à�‰œ	 #›Õ'r!   c                óH   — t        t        t        | j                  «      «      S )zCurrent number of bytes)ÚsumÚmaprV   r   ©rƒ   s    r   r—   z_FragList.size  s   € ä”3”s˜DŸJ™JÓ'Ó(Ð(r!   c                óV   — | j                   D ]  }t        |«      }|||z   }}|||| Œ |S )zWrite into bytearray)r   rV   )rƒ   ÚdstbufÚposÚfragÚflenÚstarts         r   Úrenderz_FragList.render  s9   € à—J”JˆDÜ�t“9ˆDØ˜c D™j�3ˆEØ $ˆF�5˜Ñð ð ˆ
r!   c                óˆ   — t        t        | j                  «       «      «      }| j                  |«       |j	                  «       S )zReturn as bytes)r•   r–   r—   r¥   Útobytes)rƒ   Úbufs     r   r§   z_FragList.tobytes#  s/   € äœ 4§9¡9£;Ó/Ó0ˆØ�‰�CÔØ�{‰{‹}Ðr!   r�   )r„   zlist[utils.Buffer] | NoneÚreturnÚNone)rv   úutils.Bufferr©   rª   )rv   r)   r©   rª   )rv   zbytes | _FragListr©   rª   ©r©   r)   )r   )r    r•   r¡   r)   r©   r)   ©r©   r”   )r2   r3   r4   Ú__doc__r5   r…   r‰   r�   r’   r˜   rš   r—   r¥   r§   r6   r!   r   r~   r~   ô   s:   … Ù6àÓô$ó
óCóCó)ó(ó)ôôr!   r~   c                  ól   — e Zd ZdZ	 	 	 	 dd„Z	 	 	 	 d	d„Z	 	 	 	 	 	 d
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)Ú_SSHFormatRSAzhFormat for RSA keys.

    Public:
        mpint e, n
    Private:
        mpint n, e, d, iqmp, p, q
    c                óF   — t        |«      \  }}t        |«      \  }}||f|fS )zRSA public fields©rw   )rƒ   rW   Úerr   s       r   Ú
get_publicz_SSHFormatRSA.get_public3  s.   € ô ˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ø�1ˆv�tˆ|Ðr!   c                ó„   — | j                  |«      \  \  }}}t        j                  ||«      }|j                  «       }||fS )zMake RSA public key from data.)r´   r   ÚRSAPublicNumbersrB   )rƒ   rW   r³   rr   Úpublic_numbersrB   s         r   Úload_publicz_SSHFormatRSA.load_public;  sE   € ð —‘ tÓ,‰‰ˆˆA�Ü×-Ñ-¨a°Ó3ˆØ#×.Ñ.Ó0ˆ
Ø˜4ÐÐr!   c           	     ó´  — t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }	}||f|k7  rt        d«      ‚t        j                  ||«      }
t        j                  ||	«      }t        j
                  ||«      }t        j                  ||	||
|||«      }|j                  |¬«      }||fS )zMake RSA private key from data.z Corrupt data: rsa field mismatch©Úunsafe_skip_rsa_key_validation)rw   rM   r   Úrsa_crt_dmp1Úrsa_crt_dmq1r¶   ÚRSAPrivateNumbersÚprivate_key)rƒ   rW   Ú	pubfieldsr»   rr   r³   ÚdÚiqmpÚpÚqÚdmp1Údmq1r·   Úprivate_numbersr¿   s                  r   Úload_privatez_SSHFormatRSA.load_privateD  sì   € ô ˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü Ó%‰
ˆˆdÜ˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4àˆqˆ6�YÒÜÐ?Ó@Ð@Ü×Ñ  1Ó%ˆÜ×Ñ  1Ó%ˆÜ×-Ñ-¨a°Ó3ˆÜ×/Ñ/Øˆq�!�T˜4  ~ó
ˆð &×1Ñ1Ø+Ið 2ó 
ˆð ˜DÐ Ð r!   c                ó�   — |j                  «       }|j                  |j                  «       |j                  |j                  «       y)zWrite RSA public keyN)r·   rš   r³   rr   )rƒ   rB   Úf_pubÚpubns       r   Úencode_publicz_SSHFormatRSA.encode_public\  s2   € ð ×(Ñ(Ó*ˆØ�‰˜Ÿ™ÔØ�‰˜Ÿ™Õr!   c                ó€  — |j                  «       }|j                  }|j                  |j                  «       |j                  |j                  «       |j                  |j
                  «       |j                  |j                  «       |j                  |j                  «       |j                  |j                  «       y)zWrite RSA private keyN)	rÇ   r·   rš   rr   r³   rÁ   rÂ   rÃ   rÄ   )rƒ   r¿   Úf_privrÇ   r·   s        r   Úencode_privatez_SSHFormatRSA.encode_privated  s•   € ð &×5Ñ5Ó7ˆØ(×7Ñ7ˆà×Ñ˜×)Ñ)Ô*Ø×Ñ˜×)Ñ)Ô*à×Ñ˜×*Ñ*Ô+Ø×Ñ˜×-Ñ-Ô.Ø×Ñ˜×*Ñ*Ô+Ø×Ñ˜×*Ñ*Õ+r!   N)rW   r•   r©   z"tuple[tuple[int, int], memoryview])rW   r•   r©   z#tuple[rsa.RSAPublicKey, memoryview])rW   r•   r»   r0   r©   z$tuple[rsa.RSAPrivateKey, memoryview])rB   zrsa.RSAPublicKeyrÊ   r~   r©   rª   )r¿   zrsa.RSAPrivateKeyrÎ   r~   r©   rª   ©	r2   r3   r4   r®   r´   r¸   rÈ   rÌ   rÏ   r6   r!   r   r°   r°   *  sˆ   „ ñðØðà	+óð Øð à	,ó ð!Øð!ØKOð!à	-ó!ð0 Ø*ð Ø3<ð à	ó ð,Ø,ð,Ø6?ð,à	ô,r!   r°   c                  ól   — e Zd ZdZd	d„Z	 	 	 	 d
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zdd„Z	y)Ú_SSHFormatDSAzhFormat for DSA keys.

    Public:
        mpint p, q, g, y
    Private:
        mpint p, q, g, y, x
    c                ó‚   — t        |«      \  }}t        |«      \  }}t        |«      \  }}t        |«      \  }}||||f|fS )zDSA public fieldsr²   )rƒ   rW   rÃ   rÄ   ÚgÚys         r   r´   z_SSHFormatDSA.get_public}  sM   € ä˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ü˜TÓ"‰ˆˆ4Ø�1�a˜ˆ|˜TÐ!Ð!r!   c                óØ   — | j                  |«      \  \  }}}}}t        j                  |||«      }t        j                  ||«      }| j	                  |«       |j                  «       }||fS )zMake DSA public key from data.)r´   r	   ÚDSAParameterNumbersÚDSAPublicNumbersÚ	_validaterB   )	rƒ   rW   rÃ   rÄ   rÔ   rÕ   Úparameter_numbersr·   rB   s	            r   r¸   z_SSHFormatDSA.load_public…  sl   € ð "Ÿ_™_¨TÓ2Ñ‰ˆˆAˆq�!�dÜ×3Ñ3°A°q¸!Ó<ÐÜ×-Ñ-¨aÐ1BÓCˆØ�‰�~Ô&Ø#×.Ñ.Ó0ˆ
Ø˜4ÐÐr!   c                óH  — | j                  |«      \  \  }}}}}t        |«      \  }}||||f|k7  rt        d«      ‚t        j                  |||«      }	t        j
                  ||	«      }
| j                  |
«       t        j                  ||
«      }|j                  «       }||fS )zMake DSA private key from data.z Corrupt data: dsa field mismatch)	r´   rw   rM   r	   r×   rØ   rÙ   ÚDSAPrivateNumbersr¿   )rƒ   rW   rÀ   r»   rÃ   rÄ   rÔ   rÕ   ÚxrÚ   r·   rÇ   r¿   s                r   rÈ   z_SSHFormatDSA.load_private�  s¨   € ð "Ÿ_™_¨TÓ2Ñ‰ˆˆAˆq�!�dÜ˜TÓ"‰ˆˆ4àˆq�!�Qˆ<˜9Ò$ÜÐ?Ó@Ð@Ü×3Ñ3°A°q¸!Ó<ÐÜ×-Ñ-¨aÐ1BÓCˆØ�‰�~Ô&Ü×/Ñ/°°>ÓBˆØ%×1Ñ1Ó3ˆØ˜DÐ Ð r!   c                ó6  — |j                  «       }|j                  }| j                  |«       |j                  |j                  «       |j                  |j
                  «       |j                  |j                  «       |j                  |j                  «       y)zWrite DSA public keyN)r·   rÚ   rÙ   rš   rÃ   rÄ   rÔ   rÕ   )rƒ   rB   rÊ   r·   rÚ   s        r   rÌ   z_SSHFormatDSA.encode_public   su   € ð $×2Ñ2Ó4ˆØ*×<Ñ<ÐØ�‰�~Ô&à�‰Ð)×+Ñ+Ô,Ø�‰Ð)×+Ñ+Ô,Ø�‰Ð)×+Ñ+Ô,Ø�‰˜×(Ñ(Õ)r!   c                ó–   — | j                  |j                  «       |«       |j                  |j                  «       j                  «       y)zWrite DSA private keyN)rÌ   rB   rš   rÇ   rÝ   )rƒ   r¿   rÎ   s      r   rÏ   z_SSHFormatDSA.encode_private­  s:   € ð 	×Ñ˜;×1Ñ1Ó3°VÔ<Ø×Ñ˜×4Ñ4Ó6×8Ñ8Õ9r!   c                ól   — |j                   }|j                  j                  «       dk7  rt        d«      ‚y )Ni   z#SSH supports only 1024 bit DSA keys)rÚ   rÃ   ry   rM   )rƒ   r·   rÚ   s      r   rÙ   z_SSHFormatDSA._validate´  s6   € Ø*×<Ñ<ÐØ×Ñ×)Ñ)Ó+¨tÒ3ÜÐBÓCÐCð 4r!   N)rW   r•   r©   ztuple[tuple, memoryview])rW   r•   r©   z#tuple[dsa.DSAPublicKey, memoryview])rW   r•   r»   r0   r©   z$tuple[dsa.DSAPrivateKey, memoryview])rB   zdsa.DSAPublicKeyrÊ   r~   r©   rª   )r¿   zdsa.DSAPrivateKeyrÎ   r~   r©   rª   )r·   zdsa.DSAPublicNumbersr©   rª   )
r2   r3   r4   r®   r´   r¸   rÈ   rÌ   rÏ   rÙ   r6   r!   r   rÒ   rÒ   t  s~   „ ñó"ð	 Øð	 à	,ó	 ð!Øð!ØKOð!à	-ó!ð *Ø*ð*Ø3<ð*à	ó*ð:Ø,ð:Ø6?ð:à	ó:ôDr!   rÒ   c                  ót   — e Zd ZdZd	d„Z	 	 	 	 d
d„Z	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	y)Ú_SSHFormatECDSAz–Format for ECDSA keys.

    Public:
        str curve
        bytes point
    Private:
        str curve
        bytes point
        mpint secret
    c                ó    — || _         || _        y r�   )Ússh_curve_namerR   )rƒ   rä   rR   s      r   r…   z_SSHFormatECDSA.__init__Æ  s   € Ø,ˆÔØˆ�
r!   c                óÒ   — t        |«      \  }}t        |«      \  }}|| j                  k7  rt        d«      ‚t        |«      dk(  rt        d«      ‚|d   dk7  rt	        d«      ‚||f|fS )zECDSA public fieldszCurve name mismatchr   zInvalid EC point: empty datard   zNeed uncompressed point)rs   rä   rM   rV   ÚNotImplementedError)rƒ   rW   rR   Úpoints       r   r´   z_SSHFormatECDSA.get_publicÊ  sw   € ô " $Ó'‰ˆˆtÜ! $Ó'‰ˆˆtØ�D×'Ñ'Ò'ÜÐ2Ó3Ð3Üˆu‹:˜Š?ÜÐ;Ó<Ð<Ø�‰8�qŠ=Ü%Ð&?Ó@Ð@Ø�uˆ~˜tÐ#Ð#r!   c                ó¨   — | j                  |«      \  \  }}}t        j                  j                  | j                  |j                  «       «      }||fS ©z Make ECDSA public key from data.)r´   r
   rC   Úfrom_encoded_pointrR   r§   )rƒ   rW   Ú_rç   rB   s        r   r¸   z_SSHFormatECDSA.load_publicØ  sM   € ð  Ÿ?™?¨4Ó0Ñ‰
ˆˆE�DÜ×.Ñ.×AÑAØ�J‰J˜Ÿ™›ó
ˆ
ð ˜4ÐÐr!   c                ó¸   — | j                  |«      \  \  }}}t        |«      \  }}||f|k7  rt        d«      ‚t        j                  || j
                  «      }||fS )z!Make ECDSA private key from data.z"Corrupt data: ecdsa field mismatch)r´   rw   rM   r
   Úderive_private_keyrR   )rƒ   rW   rÀ   r»   Ú
curve_namerç   Úsecretr¿   s           r   rÈ   z_SSHFormatECDSA.load_privateâ  sd   € ð %)§O¡O°DÓ$9Ñ!Ñˆ�U˜TÜ! $Ó'‰ˆ�à˜Ð )Ò+ÜÐAÓBÐBÜ×+Ñ+¨F°D·J±JÓ?ˆØ˜DÐ Ð r!   c                ó¸   — |j                  t        j                  t        j                  «      }|j                  | j                  «       |j                  |«       y)zWrite ECDSA public keyN)Úpublic_bytesr   ÚX962r   ÚUncompressedPointr˜   rä   )rƒ   rB   rÊ   rç   s       r   rÌ   z_SSHFormatECDSA.encode_publicî  sG   € ð ×'Ñ'Ü�M‰Mœ<×9Ñ9ó
ˆð 	×Ñ˜×,Ñ,Ô-Ø×Ñ˜Õr!   c                óž   — |j                  «       }|j                  «       }| j                  ||«       |j                  |j                  «       y)zWrite ECDSA private keyN)rB   rÇ   rÌ   rš   Úprivate_value)rƒ   r¿   rÎ   rB   rÇ   s        r   rÏ   z_SSHFormatECDSA.encode_privateø  sD   € ð !×+Ñ+Ó-ˆ
Ø%×5Ñ5Ó7ˆà×Ñ˜: vÔ.Ø×Ñ˜×6Ñ6Õ7r!   N)rä   r”   rR   úec.EllipticCurve)rW   r•   r©   z0tuple[tuple[memoryview, memoryview], memoryview]©rW   r•   r©   z,tuple[ec.EllipticCurvePublicKey, memoryview])rW   r•   r»   r0   r©   z-tuple[ec.EllipticCurvePrivateKey, memoryview])rB   úec.EllipticCurvePublicKeyrÊ   r~   r©   rª   )r¿   zec.EllipticCurvePrivateKeyrÎ   r~   r©   rª   )
r2   r3   r4   r®   r…   r´   r¸   rÈ   rÌ   rÏ   r6   r!   r   râ   râ   º  s�   „ ñ	óð$Øð$à	9ó$ð Øð à	5ó ð
!Øð
!ØKOð
!à	6ó
!ð Ø3ð Ø<Eð à	ó ð8Ø5ð8Ø?Hð8à	ô8r!   râ   c                  ól   — e Zd ZdZ	 	 	 	 dd„Z	 	 	 	 d	d„Z	 	 	 	 	 	 d
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)Ú_SSHFormatEd25519z~Format for Ed25519 keys.

    Public:
        bytes point
    Private:
        bytes point
        bytes secret_and_point
    c                ó(   — t        |«      \  }}|f|fS )zEd25519 public fields)rs   )rƒ   rW   rç   s      r   r´   z_SSHFormatEd25519.get_public  s   € ô " $Ó'‰ˆˆtØˆx˜ˆ~Ðr!   c                ó�   — | j                  |«      \  \  }}t        j                  j                  |j	                  «       «      }||fS ©z"Make Ed25519 public key from data.)r´   r   rK   Úfrom_public_bytesr§   )rƒ   rW   rç   rB   s       r   r¸   z_SSHFormatEd25519.load_public  sD   € ð Ÿ™¨Ó.‰‰ˆ�$Ü×-Ñ-×?Ñ?Ø�M‰M‹Oó
ˆ
ð ˜4ÐÐr!   c                óÐ   — | j                  |«      \  \  }}t        |«      \  }}|dd }|dd }||k7  s|f|k7  rt        d«      ‚t        j                  j                  |«      }||fS )z#Make Ed25519 private key from data.Nr7   z$Corrupt data: ed25519 field mismatch)r´   rs   rM   r   rJ   Úfrom_private_bytes)	rƒ   rW   rÀ   r»   rç   Úkeypairrï   Úpoint2r¿   s	            r   rÈ   z_SSHFormatEd25519.load_private  sy   € ð Ÿ™¨Ó.‰‰ˆ�$Ü# DÓ)‰ˆ�à˜˜"�ˆØ˜˜�ˆØ�FŠ?˜u˜h¨)Ò3ÜÐCÓDÐDÜ×/Ñ/×BÑBÀ6ÓJˆØ˜DÐ Ð r!   c                ó‚   — |j                  t        j                  t        j                  «      }|j	                  |«       y)zWrite Ed25519 public keyN)rñ   r   ÚRawr   r˜   )rƒ   rB   rÊ   Úraw_public_keys       r   rÌ   z_SSHFormatEd25519.encode_public,  s3   € ð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆð 	×Ñ˜Õ(r!   c                óN  — |j                  «       }|j                  t        j                  t        j                  t        «       «      }|j                  t        j                  t        j                  «      }t        ||g«      }| j                  ||«       |j                  |«       y)zWrite Ed25519 private keyN)rB   Úprivate_bytesr   r  r   r   rñ   r   r~   rÌ   r˜   )rƒ   r¿   rÎ   rB   Úraw_private_keyr  Ú	f_keypairs          r   rÏ   z _SSHFormatEd25519.encode_private5  s…   € ð !×+Ñ+Ó-ˆ
Ø%×3Ñ3Ü�L‰Lœ-×+Ñ+¬\«^ó
ˆð $×0Ñ0Ü�L‰Lœ,×*Ñ*ó
ˆô ˜°Ð?Ó@ˆ	à×Ñ˜: vÔ.Ø×Ñ˜)Õ$r!   N)rW   r•   r©   z$tuple[tuple[memoryview], memoryview]©rW   r•   r©   z+tuple[ed25519.Ed25519PublicKey, memoryview])rW   r•   r»   r0   r©   z,tuple[ed25519.Ed25519PrivateKey, memoryview])rB   zed25519.Ed25519PublicKeyrÊ   r~   r©   rª   )r¿   zed25519.Ed25519PrivateKeyrÎ   r~   r©   rª   rÐ   r6   r!   r   rú   rú     sˆ   „ ñðØðà	-óð Øð à	4ó ð!Øð!ØKOð!à	5ó!ð)Ø2ð)Ø;Dð)à	ó)ð%Ø4ð%Ø>Gð%à	ô%r!   rú   c                ó‚   — t        | «      \  }} |j                  «       j                  d«      st        d|› d�«      ‚|| fS )z!
    U2F application strings
    s   ssh:z4U2F application string does not start with b'ssh:' (Ú))rs   r§   Ú
startswithrM   )rW   Úapplications     r   Úload_applicationr  F  sU   € ô $ DÓ)Ñ€K�Ø×ÑÓ ×+Ñ+¨GÔ4ÜðØˆ}˜Aðó
ð 	
ð ˜ÐÐr!   c                  ó(   — e Zd ZdZ	 	 	 	 dd„Zdd„Zy)Ú_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:")
    c                óh   — t        t        «      j                  |«      \  }}t        |«      \  }}||fS rý   )Ú_lookup_kformatrL   r¸   r  ©rƒ   rW   rB   rë   s       r   r¸   z_SSHFormatSKEd25519.load_public\  s7   € ô +¬<Ó8×DÑDÀTÓJÑˆ
�DÜ" 4Ó(‰ˆˆ4Ø˜4ÐÐr!   c                ó   — t        d«      ‚)Nz,sk-ssh-ed25519 private keys cannot be loadedr   ©rƒ   rW   s     r   r´   z_SSHFormatSKEd25519.get_publicd  s   € ô #Ø:ó
ð 	
r!   Nr
  ©rW   r•   r©   ztyping.NoReturn©r2   r3   r4   r®   r¸   r´   r6   r!   r   r  r  S  s!   „ ñð Øð à	4ó ô
r!   r  c                  ó(   — e Zd ZdZ	 	 	 	 dd„Zdd„Zy)Ú_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:")
    c                óh   — t        t        «      j                  |«      \  }}t        |«      \  }}||fS ré   )r  Ú_ECDSA_NISTP256r¸   r  r  s       r   r¸   z_SSHFormatSKECDSA.load_publicv  s7   € ô +¬?Ó;×GÑGÈÓMÑˆ
�DÜ" 4Ó(‰ˆˆ4Ø˜4ÐÐr!   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  r6   r!   r   r  r  l  s!   „ ñð Øð à	5ó ô
r!   r  s   nistp256s   nistp384s   nistp521c                ó’   — t        | t        «      st        | «      j                  «       } | t        v r	t        |    S t        d| ›�«      ‚)z"Return valid format or throw errorzUnsupported key type: )r?   r”   r•   r§   Ú_KEY_FORMATSr   )rO   s    r   r  r  ’  sE   € ä�h¤Ô&Ü˜hÓ'×/Ñ/Ó1ˆØ”<ÑÜ˜HÑ%Ð%Ü
Ð!7¸°|ÐDÓ
EÐEr!   rº   c               óö  — t        j                  d| «       |�t        j                  d|«       t        j	                  | «      }|st        d«      ‚|j                  d«      }|j                  d«      }t        j                  t        | «      || «      } | j                  t        «      st        d«      ‚t        | «      t        t        «      d } t        | «      \  }} t        | «      \  }} t        | «      \  }	} t        | «      \  }
} |
dk7  rt        d«      ‚t        | «      \  }} t        |«      \  }}t!        |«      }|j#                  |«      \  }}t%        |«       |t&        k7  s
|t&        k7  �r†|j)                  «       }|t*        vrt-        d|›�«      ‚|t.        k7  rt-        d|›�«      ‚t*        |   j0                  }t*        |   j2                  }t        | «      \  }} t*        |   j4                  r$t7        | «      }t        |«      |k7  rt        d	«      ‚t%        | «       t9        ||«       t        |	«      \  }}t        |«      \  }}t%        |«       t;        |||j)                  «       |«      }|j=                  «       }t        |j?                  |«      «      }t*        |   j4                  r-tA        |tB        «      sJ ‚t%        |jE                  «      «       nNt%        |jG                  «       «       n4|rtI        d
«      ‚t        | «      \  }} t%        | «       d}t9        ||«       t        |«      \  }}t        |«      \  }}||k7  rt        d«      ‚t        |«      \  }}||k7  rt        d«      ‚|jK                  |||¬«      \  }}t        |«      \  }}|tL        dt        |«       k7  rt        d«      ‚tA        |tN        jP                  «      r&tS        jT                  dt         jV                  d¬«       |S )z.Load private key from OpenSSH custom encoding.rW   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.ro   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ÚsearchrM   r¤   ÚendÚbinasciiÚ
a2b_base64r•   r  Ú	_SK_MAGICrV   rs   rk   r  r´   r[   Ú_NONEr§   r9   r   Ú_BCRYPTr,   r/   r1   r”   rX   ra   Ú	decryptorÚupdater?   r   Úfinalize_with_tagÚfinalizer]   rÈ   Ú_PADDINGr	   rG   ÚwarningsÚwarnÚDeprecatedIn40)rW   r   Úbackendr»   ÚmÚp1Úp2r^   ÚkdfnameÚ
kdfoptionsÚnkeysÚpubdataÚpub_key_typeÚkformatrÀ   Úciphername_bytesÚblklenr/   ÚedataÚtagr   Úkbufr   r_   ÚdecÚck1Úck2rO   r¿   rë   s                                 r   Úload_ssh_private_keyrI  £  s¿  € ô 
×Ñ˜6 4Ô(ØÐÜ×Ñ˜: xÔ0ä�‰�tÓ€AÙÜÐ9Ó:Ð:Ø	
�‰�‹€BØ	
�‰ˆq‹€BÜ×Ñœz¨$Ó/°°2Ð6Ó7€DØ�?‰?œ9Ô%ÜÐ9Ó:Ð:Ü�dÓœC¤	›NÐ,Ð-€Dô # 4Ó(Ñ€J�Ü Ó%�M€GˆTÜ" 4Ó(Ñ€J�Ü˜4“.�K€Eˆ4Ø�‚zÜÐ1Ó2Ð2ô   Ó%�M€GˆTÜ'¨Ó0Ñ€L�'Ü˜lÓ+€GØ ×+Ñ+¨GÓ4Ñ€IˆwÜ�Ôà”UÒ˜g¬Ó.Ø%×-Ñ-Ó/ÐØ¤<Ñ/Ü&Ø&Ð'7Ð&:Ð;óð ð ”gÒÜ&Ð):¸7¸+Ð'FÓGÐGÜÐ.Ñ/×9Ñ9ˆÜÐ/Ñ0×8Ñ8ˆä! $Ó'‰ˆˆtô Ð(Ñ)×1Ò1Ü˜“+ˆCÜ�3‹x˜7Ò"Ü Ð!NÓOÐOä˜ÔÜ˜% Ô(Ü  Ó,‰
ˆˆdÜ “~‰ˆ�Ü�TÔÜÐ,¨h¸¿¹»ÈÓOˆØ�n‰nÓˆÜ˜3Ÿ:™: eÓ,Ó-ˆÜÐ(Ñ)×1Ò1Ü˜cÔ#8Ô9Ð9Ð9Ü˜×.Ñ.¨sÓ3Õ4ô ˜Ÿ™›Õ(áÜØFóð ô " $Ó'‰ˆˆtÜ�TÔØˆÜ˜% Ô(Ü˜%“�J€CˆÜ˜%“�J€CˆØ
ˆc‚zÜÐ8Ó9Ð9ô " %Ó(�O€HˆeØ�<ÒÜÐ:Ó;Ð;Ø ×-Ñ-ØØØ'Eð .ó Ñ€K�ô ˜5Ó!�H€A€uð ”˜œ3˜u›:Ð&Ò&ÜÐ8Ó9Ð9ä�+œs×0Ñ0Ô1Ü�‰ðä× Ñ Øõ		
ð Ðr!   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«      }
|j)                  |
«       |j+                  |	«       t-        |||
|	«      }nt.        x}}d}d}d}t%        j&                  d«      }d	}t        «       }|j)                  |«       |j1                  | j3                  «       |«       t        ||g«      }|j)                  |«       |j5                  | |«       |j)                  |«       |j7                  t8        d||j;                  «       |z  z
   «       t        «       }|j7                  t<        «       |j)                  |«       |j)                  |«       |j)                  |«       |j+                  |«       |j)                  |«       |j)                  |«       |j;                  «       }|j;                  «       }t?        tA        ||z   «      «      }|jC                  |«       ||z
  }|�&|jE                  «       jG                  ||| ||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 releaserd   r#  Nr#   ro   r$   r!   )%r   r&  r?   r	   rG   r4  r5  r6  rP   r  r~   Ú_DEFAULT_CIPHERr9   r,   r.  Ú_DEFAULT_ROUNDSr   Ú_kdf_roundsÚosÚurandomr˜   r�   ra   r-  rÌ   rB   rÏ   r‰   r3  r—   r,  r•   r–   r¥   Ú	encryptorÚupdate_intor”   )r¿   r   Úencryption_algorithmrO   r@  Úf_kdfoptionsr^   rB  r;  r   r   r_   r=  ÚcheckvalÚcommentÚf_public_keyÚ	f_secretsÚf_mainÚslenÚmlenr¨   Úofss                         r   Ú_serialize_ssh_private_keyr]    s  € ô 
×Ñ�z 8Ô,Ü�+œs×0Ñ0Ô1Ü�‰ð*ä× Ñ Øõ		
ô ! Ó-€HÜ˜hÓ'€Gô “;€LÙÜ$ˆ
Ü˜jÑ)×3Ñ3ˆÜˆÜ ˆäÐ+Ô-HÔIØ$×0Ñ0Ð<à)×5Ñ5ˆFÜ�z‰z˜"‹~ˆØ×Ñ Ô%Ø×Ñ˜VÔ$Ü˜J¨°$¸Ó?‰ä$Ð$ˆ
�WØˆØˆØ€EÜ�z‰z˜!‹}€HØ€Gô “;€LØ×Ñ˜HÔ%Ø×Ñ˜+×0Ñ0Ó2°LÔAä˜8 XÐ.Ó/€IØ×Ñ˜Ô"Ø×Ñ˜;¨	Ô2Ø×Ñ˜Ô!Ø×Ñ”hÐE ¨9¯>©>Ó+;¸fÑ+DÑ!EÐFÔGô ‹[€FØ
‡N�N”9ÔØ
×Ñ�jÔ!Ø
×Ñ�gÔØ
×Ñ�lÔ#Ø
‡N�N�5ÔØ
×Ñ�lÔ#Ø
×Ñ�iÔ ð �>‰>Ó€DØ�;‰;‹=€DÜ
”Y˜t f™}Ó-Ó
.€CØ
‡M�M�#ÔØ
�‰+€Cð ÐØ�‰Ó×$Ñ$ S¨¨T ]°C¸¸°IÔ>ä��U�d�ÓÐr!   c                  ó   — e Zd ZdZdZy)ÚSSHCertificateTyper$   r"  N)r2   r3   r4   ÚUSERÚHOSTr6   r!   r   r_  r_  p  s   „ Ø€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dd„«       Z
edd„«       Zedd	„«       Zedd
„«       Zedd„«       Zdd„Zdd„Zdd„Zy)ÚSSHCertificatec                ó6  — || _         || _        || _        	 t        |«      | _        || _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        || _        || _        || _        || _        y # t
        $ r t        d«      ‚w xY w)NzInvalid certificate type)Ú_nonceÚ_public_keyÚ_serialr_  Ú_typerM   Ú_key_idÚ_valid_principalsÚ_valid_afterÚ_valid_beforeÚ_critical_optionsÚ_extensionsÚ	_sig_typeÚ_sig_keyÚ_inner_sig_typeÚ
_signatureÚ_cert_key_typeÚ
_cert_bodyÚ_tbs_cert_body)rƒ   re  rf  rg  Ú_cctyperi  rj  rk  rl  rm  rn  ro  rp  rq  rr  ru  rs  rt  s                     r   r…   zSSHCertificate.__init__v  s­   € ð( ˆŒØ&ˆÔØˆŒð	9Ü+¨GÓ4ˆDŒJð ˆŒØ!2ˆÔØ(ˆÔØ*ˆÔØ!2ˆÔØ&ˆÔØ"ˆŒØ ˆŒØ.ˆÔØ$ˆŒØ,ˆÔØ$ˆŒØ,ˆÕøô ò 	9ÜÐ7Ó8Ð8ð	9ús   —B ÂBc                ó,   — t        | j                  «      S r�   )r”   re  rž   s    r   ÚnoncezSSHCertificate.nonceŸ  s   € ä�T—[‘[Ó!Ð!r!   c                óJ   — t        j                  t        | j                  «      S r�   )ÚtypingÚcastÚSSHCertPublicKeyTypesrf  rž   s    r   rB   zSSHCertificate.public_key£  s   € ô �{‰{Ô0°$×2BÑ2BÓCÐCr!   c                ó   — | j                   S r�   )rg  rž   s    r   ÚserialzSSHCertificate.serial¨  s   € à�|‰|Ðr!   c                ó   — | j                   S r�   )rh  rž   s    r   ÚtypezSSHCertificate.type¬  s   € à�z‰zÐr!   c                ó,   — t        | j                  «      S r�   )r”   ri  rž   s    r   Úkey_idzSSHCertificate.key_id°  s   € ä�T—\‘\Ó"Ð"r!   c                ó   — | j                   S r�   )rj  rž   s    r   Úvalid_principalszSSHCertificate.valid_principals´  ó   € à×%Ñ%Ð%r!   c                ó   — | j                   S r�   )rl  rž   s    r   Úvalid_beforezSSHCertificate.valid_before¸  s   € à×!Ñ!Ð!r!   c                ó   — | j                   S r�   )rk  rž   s    r   Úvalid_afterzSSHCertificate.valid_after¼  s   € à× Ñ Ð r!   c                ó   — | j                   S r�   )rm  rž   s    r   Úcritical_optionszSSHCertificate.critical_optionsÀ  r…  r!   c                ó   — | j                   S r�   )rn  rž   s    r   Ú
extensionszSSHCertificate.extensionsÄ  s   € à×ÑÐr!   c                ó‚   — t        | j                  «      }|j                  | j                  «      \  }}t	        |«       |S r�   )r  ro  r¸   rp  r[   )rƒ   Ú	sigformatÚsignature_keyÚsigkey_rests       r   r�  zSSHCertificate.signature_keyÈ  s7   € Ü# D§N¡NÓ3ˆ	Ø%.×%:Ñ%:¸4¿=¹=Ó%IÑ"ˆ�{Ü�[Ô!ØÐr!   c                óˆ   — t        | j                  «      dz   t        j                  t        | j                  «      d¬«      z   S )Nó    F)Únewline)r”   rs  r*  Ú
b2a_base64rt  rž   s    r   rñ   zSSHCertificate.public_bytesÎ  s<   € ä�$×%Ñ%Ó&Øñä×!Ñ!¤%¨¯©Ó"8À%ÔHñIð	
r!   c                óì  — | j                  «       }t        |t        j                  «      r9|j	                  t        | j                  «      t        | j                  «      «       y t        |t        j                  «      r–t        | j                  «      \  }}t        |«      \  }}t        |«       t        j                  ||«      }t        |j                  «      }|j	                  |t        | j                  «      t        j                   |«      «       y t        |t"        j$                  «      sJ ‚| j&                  t(        k(  rt+        j,                  «       }nQ| j&                  t.        k(  rt+        j0                  «       }n)| j&                  t2        k(  sJ ‚t+        j4                  «       }|j	                  t        | j                  «      t        | j                  «      t7        j8                  «       |«       y r�   )r�  r?   r   rK   Úverifyr”   rr  ru  r
   rC   rw   r[   Ú
asym_utilsÚencode_dss_signatureÚ_get_ec_hash_algrR   ÚECDSAr   rE   rq  rF   r   ÚSHA1Ú_SSH_RSA_SHA256ÚSHA256Ú_SSH_RSA_SHA512ÚSHA512r   ÚPKCS1v15)rƒ   r�  ÚrrW   ÚsÚcomputed_sigÚhash_algs          r   Úverify_cert_signaturez$SSHCertificate.verify_cert_signatureÕ  sl  € Ø×*Ñ*Ó,ˆÜ�m¤W×%=Ñ%=Ô>Ø× Ñ Ü�d—o‘oÓ&¬¨d×.AÑ.AÓ(Bõô ˜¤r×'@Ñ'@ÔAä  §¡Ó1‰GˆAˆtÜ  Ó&‰GˆAˆtÜ˜ÔÜ%×:Ñ:¸1¸aÓ@ˆLÜ'¨×(;Ñ(;Ó<ˆHØ× Ñ Øœe D×$7Ñ$7Ó8¼"¿(¹(À8Ó:Lõô ˜m¬S×-=Ñ-=Ô>Ð>Ð>Ø×#Ñ#¤xÒ/Ü!Ÿ;™;›=‘Ø×%Ñ%¬Ò8Ü!Ÿ=™=›?‘à×+Ñ+¬Ò>Ð>Ð>Ü!Ÿ=™=›?�Ø× Ñ Ü�d—o‘oÓ&Ü�d×)Ñ)Ó*Ü× Ñ Ó"Øõ	r!   N)"re  r•   rf  ÚSSHPublicKeyTypesrg  r)   rv  r)   ri  r•   rj  úlist[bytes]rk  r)   rl  r)   rm  údict[bytes, bytes]rn  r©  ro  r•   rp  r•   rq  r•   rr  r•   ru  r•   rs  r”   rt  r•   r­   )r©   r|  r¬   )r©   r_  )r©   r¨  )r©   r©  )r©   rª   )r2   r3   r4   r…   Úpropertyrx  rB   r~  r€  r‚  r„  r‡  r‰  r‹  r�  r�  rñ   r¦  r6   r!   r   rc  rc  u  sy  „ ð'-àð'-ð 'ð'-ð ð	'-ð
 ð'-ð ð'-ð 'ð'-ð ð'-ð ð'-ð .ð'-ð (ð'-ð ð'-ð ð'-ð $ð'-ð ð'-ð  #ð!'-ð" ð#'-ð$ ó%'-ðR ò"ó ð"óDð
 òó ðð òó ðð ò#ó ð#ð ò&ó ð&ð ò"ó ð"ð ò!ó ð!ð ò&ó ð&ð ò ó ð óó
ôr!   rc  c                ó  — t        | t        j                  «      rt        j                  «       S t        | t        j
                  «      rt        j                  «       S t        | t        j                  «      sJ ‚t        j                  «       S r�   )	r?   r
   Ú	SECP256R1r   rž  Ú	SECP384R1ÚSHA384Ú	SECP521R1r   )rR   s    r   rš  rš  ö  sV   € Ü�%œŸ™Ô&Ü�}‰}‹ÐÜ	�Eœ2Ÿ<™<Ô	(Ü�}‰}‹Ðä˜%¤§¡Ô.Ð.Ð.Ü�}‰}‹Ðr!   c                ó¶  — t        j                  d| «       t        j                  | «      }|st	        d«      ‚|j                  d«      x}}|j                  d«      }d}|j                  t        «      rd}|d t        t        «        }|t        k(  r|st        d«      ‚t        |«      }	 t        t        j                  |«      «      }|r|}	t#        |«      \  }
}|
|k7  rt	        d	«      ‚|rt#        |«      \  }}|j%                  |«      \  }}|�r”t'        |«      \  }}t)        |«      \  }}t#        |«      \  }}t#        |«      \  }}g }|r+t#        |«      \  }}|j+                  t-        |«      «       |rŒ+t'        |«      \  }}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        k7  r||k7  rt	        d«      ‚t#        | «      \  }!} t1        | «       t9        |||||||||||||!|||	«      S t1        |«       |S # t        t        j                   f$ r t	        d«      ‚w xY w)NrW   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   r%  Ú_SSH_PUBKEY_RCÚmatchrM   ÚgroupÚendswithÚ_CERT_SUFFIXrV   rI   r   r  r•   r*  r+  r]   ÚErrorrs   r¸   rp   rk   r‡   r”   Ú_parse_exts_optsr[   rF   r�  rŸ  rc  )"rW   Ú_legacy_dsa_allowedr8  rO   Úorig_key_typeÚkey_bodyÚ	with_certr@  ÚrestÚ	cert_bodyÚinner_key_typerx  rB   r~  Úcctyper‚  Ú
principalsr„  Ú	principalr‰  r‡  Úcrit_optionsr‹  Úextsr�  rë   Úsig_key_rawÚsig_typeÚsig_keyÚtbs_cert_bodyÚsignature_rawÚinner_sig_typeÚsig_restÚ	signatures"                                     r   Ú_load_ssh_public_identityrÌ     s  € ô 
×Ñ˜6 4Ô(ä×Ñ˜TÓ"€AÙÜÐ.Ó/Ð/Ø Ÿw™w q›zÐ)€Hˆ}Ø�w‰w�q‹z€HØ€IØ×ÑœÔ&Øˆ	ØÐ0œs¤<Ó0Ð0Ð1ˆØ”8ÒÑ$7Ü"Ø;ó
ð 	
ô ˜hÓ'€Gð+Üœ(×-Ñ-¨hÓ7Ó8ˆñ Øˆ	Ü& tÓ,Ñ€N�DØ˜Ò&ÜÐ-Ó.Ð.ÙÜ! $Ó'‰ˆˆtØ×*Ñ*¨4Ó0Ñ€J�ÚÜ “~‰ˆ�Ü “~‰ˆ�Ü" 4Ó(‰ˆ�Ü& tÓ,Ñˆ
�DØÐÙÜ$/°
Ó$;Ñ!ˆI�zØ×#Ñ#¤E¨)Ó$4Ô5ò ô % T›NÑˆ�TÜ% d›^Ñˆ�dÜ(¨Ó.Ñˆ�dÜ+¨LÓ9ÐÜ  Ó&‰
ˆˆdÜ% dÓ+ˆ
ä˜dÓ#‰ˆˆ4Ü'¨Ó-Ñˆ�TÜ'¨Ó4Ñˆ�'Ø”xÒÑ(;Ü&ØEóð ð " ,¤S¨£Y JÐ/ˆÜ)¨$Ó/Ñˆ�tÜ�TÔÜ#.¨}Ó#=Ñ ˆ˜ð œÒ ØÜ#¤_´hÐ?ñ@àœ(Ò" ~¸Ò'AÜÐ@ÓAÐAÜ)¨(Ó3Ñˆ	�8Ü�XÔÜØØØØØØØØØØØØØØØØØó#
ð 	
ô( 	�TÔØÐøôK ”x—~‘~Ð&ò +ÜÐ)Ó*Ð*ð+ús   Â+J3 Ê3%Kc                ó   — t        | «      S r�   )rÌ  rZ   s    r   Úload_ssh_public_identityrÎ  _  s   € ô % TÓ*Ð*r!   c                ó2  — i }d }| r�t        | «      \  }} t        |«      }||v rt        d«      ‚|�||k  rt        d«      ‚t        | «      \  }} t        |«      dkD  r't        |«      \  }}t        |«      dkD  rt        d«      ‚t        |«      ||<   |}| rŒ�|S )NzDuplicate namezFields not lexically sortedr   z!Unexpected extra data after value)rs   r”   rM   rV   )Ú	exts_optsÚresultÚ	last_namerS   ÚbnameÚvalueÚextras          r   r·  r·  e  s¯   € Ø!#€FØ€IÙ
Ü% iÓ0‰ˆˆiÜ˜T“{ˆØ�F‰?ÜÐ-Ó.Ð.ØÐ  U¨YÒ%6ÜÐ:Ó;Ð;Ü& yÓ1ÑˆˆyÜˆu‹:˜Š>Ü& uÓ-‰LˆE�5Ü�5‹z˜AŠ~Ü Ð!DÓEÐEÜ˜e›ˆˆu‰Øˆ	ò ð €Mr!   c                óœ  — t        |t        j                  t        j                  t        j                  f«      st        d«      ‚t        | «      }t        |«      }t        «       }|j                  |«       |j                  | |«       |j                  «       }t        j                  |«      }|j                  |«       |j                  «       S )Nz2hash_algorithm must be either MD5, SHA1, or SHA256)r?   r   ÚMD5rœ  rž  r]   rP   r  r~   r˜   rÌ   r§   ÚHashr0  r2  )rN   Úhash_algorithmrO   r@  rÊ   Ússh_binary_dataÚhash_objs          r   Ússh_key_fingerprintrÜ  y  s¢   € ô ØÜ	�‰”V—[‘[¤&§-¡-Ð0ôô ÐLÓMÐMä  Ó%€HÜ˜hÓ'€Gä‹K€EØ	×Ñ�XÔØ×Ñ˜#˜uÔ%à—m‘m“o€Oô �{‰{˜>Ó*€HØ‡O�O�OÔ$Ø×ÑÓÐr!   c                óæ   — t        | d¬«      }t        |t        «      r|j                  «       }n|}t        |t        j
                  «      r&t        j                  dt        j                  d¬«       |S )NT)r¸  r!  r"  r#  )
rÌ  r?   rc  rB   r	   rH   r4  r5  r   r6  )rW   r7  Úcert_or_keyrB   s       r   Úload_ssh_public_keyrß  ’  sb   € ô ,¨DÀdÔK€Kä�+œ~Ô.Ø ×+Ñ+Ó-‰
à ˆ
ä�*œc×.Ñ.Ô/Ü�‰ðä× Ñ Øõ		
ð Ðr!   c                ó’  — t        | t        j                  «      r&t        j                  dt
        j                  d¬«       t        | «      }t        |«      }t        «       }|j                  |«       |j                  | |«       t        j                  |j                  «       «      j                  «       }dj!                  |d|g«      S )z&One-line public key format for OpenSSHrK  rd   r#  r!   r“  )r?   r	   rH   r4  r5  r   r6  rP   r  r~   r˜   rÌ   r*  r•  r§   ÚstripÚjoin)rB   rO   r@  rÊ   Úpubs        r   Úserialize_ssh_public_keyrä  ¦  sŸ   € ä�*œc×.Ñ.Ô/Ü�‰ð*ä× Ñ Øõ		
ô ! Ó,€HÜ˜hÓ'€Gä‹K€EØ	×Ñ�XÔØ×Ñ˜* eÔ,ä
×
Ñ
˜eŸm™m›oÓ
.×
4Ñ
4Ó
6€CØ�8‰8�X˜t SÐ)Ó*Ð*r!   é   c            
      óÎ   — e Zd Zddddg dddg g f
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 dd„Zdd„Zdd„Zdd„Z	 	 	 	 dd„Zd	„ Z	dd
„Z
dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zdd„Zy)ÚSSHCertificateBuilderNFc                ó�   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        y r�   ©
rf  rg  rh  ri  rj  Ú_valid_for_all_principalsrl  rk  rm  rn  )rƒ   rf  rg  rh  ri  rj  rê  rl  rk  rm  rn  s              r   r…   zSSHCertificateBuilder.__init__Ç  sQ   € ð 'ˆÔØˆŒØˆŒ
ØˆŒØ!2ˆÔØ)BˆÔ&Ø*ˆÔØ(ˆÔØ!2ˆÔØ&ˆÕ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 )Nr>   zpublic_key already setré  )r?   r
   rC   r   rE   r   rK   r]   rf  rM   rç  rg  rh  ri  rj  rê  rl  rk  rm  rn  )rƒ   rB   s     r   rB   z SSHCertificateBuilder.public_keyß  s°   € ô Øä×)Ñ)Ü× Ñ Ü×(Ñ(ðô
ô Ð2Ó3Ð3Ø×ÑÐ'ÜÐ5Ó6Ð6ä$Ø"Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                óˆ  — t        |t        «      st        d«      ‚d|cxk  rdk  st        d«      ‚ 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é  )r?   r)   r]   rM   rg  rç  rf  rh  ri  rj  rê  rl  rk  rm  rn  )rƒ   r~  s     r   r~  zSSHCertificateBuilder.serialû  sµ   € Ü˜&¤#Ô&ÜÐ7Ó8Ð8Ø�FÔ"˜UÒ"ÜÐAÓBÐBð #ÜÐAÓBÐBØ�<‰<Ð#ÜÐ1Ó2Ð2ä$Ø×(Ñ(ØØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                óD  — 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é  )r?   r_  r]   rh  rM   rç  rf  rg  ri  rj  rê  rl  rk  rm  rn  )rƒ   r€  s     r   r€  zSSHCertificateBuilder.type  sŒ   € Ü˜$Ô 2Ô3ÜÐ@ÓAÐAØ�:‰:Ð!ÜÐ/Ó0Ð0ä$Ø×(Ñ(Ø—L‘LØØ—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                óD  — 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é  )r?   r”   r]   ri  rM   rç  rf  rg  rh  rj  rê  rl  rk  rm  rn  )rƒ   r‚  s     r   r‚  zSSHCertificateBuilder.key_id#  s‹   € Ü˜&¤%Ô(ÜÐ2Ó3Ð3Ø�<‰<Ð#ÜÐ1Ó2Ð2ä$Ø×(Ñ(Ø—L‘LØ—*‘*ØØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                ó´  — | j                   rt        d«      ‚t        d„ |D «       «      r|st        d«      ‚| j                  rt        d«      ‚t        |«      t        kD  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        «      –— Œ y ­wr�   )r?   r”   )Ú.0rÝ   s     r   Ú	<genexpr>z9SSHCertificateBuilder.valid_principals.<locals>.<genexpr>?  s   è ø€ ÐCÑ2B¨Q”J˜q¤%×(Ñ2Bùs   ‚z5principals must be a list of bytes and can't be emptyzvalid_principals already setz:Reached or exceeded the maximum number of valid_principalsré  )rê  rM   Úallr]   rj  rV   Ú_SSHKEY_CERT_MAX_PRINCIPALSrç  rf  rg  rh  ri  rl  rk  rm  rn  )rƒ   r„  s     r   r„  z&SSHCertificateBuilder.valid_principals6  sÖ   € ð ×)Ò)Üð%óð ô
 ÑCÑ2BÓCÔCÙ#äØGóð ð ×!Ò!ÜÐ;Ó<Ð<äÐÓ Ô#>Ò>ÜØLóð ô %Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ.Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ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é  )rj  rM   rê  rç  rf  rg  rh  ri  rl  rk  rm  rn  rž   s    r   Úvalid_for_all_principalsz.SSHCertificateBuilder.valid_for_all_principalsZ  s�   € Ø×!Ò!Üð+óð ð ×)Ò)ÜÐCÓDÐDä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*Ø×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                ó�  — 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é  )r?   r)   Úfloatr]   rM   rl  rç  rf  rg  rh  ri  rj  rê  rk  rm  rn  )rƒ   r‡  s     r   r‡  z"SSHCertificateBuilder.valid_beforep  s´   € Ü˜,¬¬e¨Ô5ÜÐBÓCÐCÜ˜<Ó(ˆØ˜!Ò˜|¨uÒ4ÜÐ;Ó<Ð<Ø×ÑÐ)ÜÐ7Ó8Ð8ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ&Ø×*Ñ*Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                ó�  — 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é  )r?   r)   rù  r]   rM   rk  rç  rf  rg  rh  ri  rj  rê  rl  rm  rn  )rƒ   r‰  s     r   r‰  z!SSHCertificateBuilder.valid_after†  s³   € Ü˜+¬¬U |Ô4ÜÐAÓBÐBÜ˜+Ó&ˆØ˜Š?˜k¨UÒ2ÜÐ:Ó;Ð;Ø×ÑÐ(ÜÐ6Ó7Ð7ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø$Ø"×4Ñ4Ø×(Ñ(ô
ð 	
r!   c                óº  — t        |t        «      rt        |t        «      st        d«      ‚|| j                  D ��cg c]  \  }}|‘Œ	 c}}v rt	        d«      ‚t        | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  g | j                  ¢|f‘| j                  ¬«
      S c c}}w )Núname and value must be byteszDuplicate critical option nameré  )r?   r”   r]   rm  rM   rç  rf  rg  rh  ri  rj  rê  rl  rk  rn  ©rƒ   rS   rÔ  rë   s       r   Úadd_critical_optionz)SSHCertificateBuilder.add_critical_optionœ  sÇ   € ô ˜$¤Ô&¬j¸ÄÔ.FÜÐ:Ó;Ð;à¨×(>Ò(>Ô?Ñ(>™W˜T 1’DÐ(>Ò?Ñ?ÜÐ=Ó>Ð>ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*ØF × 6Ñ 6ÐF¸¸u¸ÐFØ×(Ñ(ô
ð 	
ùó @ó   ¼Cc                óº  — t        |t        «      rt        |t        «      st        d«      ‚|| j                  D ��cg c]  \  }}|‘Œ	 c}}v rt	        d«      ‚t        | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  g | j                  ¢|f‘¬«
      S c c}}w )Nrü  zDuplicate extension nameré  )r?   r”   r]   rn  rM   rç  rf  rg  rh  ri  rj  rê  rl  rk  rm  rý  s       r   Úadd_extensionz#SSHCertificateBuilder.add_extension²  sÆ   € ô ˜$¤Ô&¬j¸ÄÔ.FÜÐ:Ó;Ð;à¨×(8Ò(8Ô9Ñ(8™W˜T 1’DÐ(8Ò9Ñ9ÜÐ7Ó8Ð8ä$Ø×(Ñ(Ø—L‘LØ—*‘*Ø—L‘LØ"×4Ñ4Ø&*×&DÑ&DØ×,Ñ,Ø×*Ñ*Ø"×4Ñ4Ø:˜$×*Ñ*Ð:¨T°5¨MÐ:ô
ð 	
ùó :rÿ  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                  kD  rt        d	«      ‚| j"                  j%                  d
„ ¬«       | j&                  j%                  d„ ¬«       t)        | j                  «      }|t*        z   }t-        j.                  d«      }t1        |«      }t3        «       }|j5                  |«       |j5                  |«       |j7                  | j                  |«       |j9                  |«       |j;                  | j                  j<                  «       |j5                  |«       t3        «       }	| j                  D ]  }
|	j5                  |
«       Œ |j5                  |	j?                  «       «       |j9                  | j                   «       |j9                  | j                  «       t3        «       }| j"                  D ]p  \  }}|j5                  |«       tA        |«      dkD  r;t3        «       }|j5                  |«       |j5                  |j?                  «       «       Œ`|j5                  |«       Œr |j5                  |j?                  «       «       t3        «       }| j&                  D ]p  \  }}|j5                  |«       tA        |«      dkD  r;t3        «       }|j5                  |«       |j5                  |j?                  «       «       Œ`|j5                  |«       Œr |j5                  |j?                  «       «       |j5                  d«       t)        |«      }t1        |«      }t3        «       }|j5                  |«       |j7                  |jC                  «       |«       |j5                  |j?                  «       «       t        |t
        j                  «      rl|jE                  |j?                  «       «      }t3        «       }|j5                  |«       |j5                  |«       |j5                  |j?                  «       «       �n°t        |t        j                  «      rætG        |jH                  «      }|jE                  |j?                  «       t        jJ                  |«      «      }tM        jN                  |«      \  }}t3        «       }|j5                  |«       t3        «       }|jQ                  |«       |jQ                  |«       |j5                  |j?                  «       «       |j5                  |j?                  «       «       n°t        |t        j                  «      sJ ‚t3        «       }|j5                  tR        «       |jE                  |j?                  «       tU        jV                  «       tY        jZ                  «       «      }|j5                  |«       |j5                  |j?                  «       «       t]        j^                  |j?                  «       «      ja                  «       }tc        jd                  tf        ti        djk                  |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   r6   ©rÝ   s    r   Ú<lambda>z,SSHCertificateBuilder.sign.<locals>.<lambda>ó  s   € °!°A²$r!   )rN   c                ó   — | d   S r  r6   r  s    r   r  z,SSHCertificateBuilder.sign.<locals>.<lambda>ô  s   € ¨A¨aªDr!   r7   r“  )6r?   r
   r@   r   rD   r   rJ   r]   rf  rM   rg  rh  ri  rj  rê  rl  rk  rm  Úsortrn  rP   rµ  rO  rP  r  r~   r˜   rÌ   r’   r�   rÔ  r§   rV   rB   Úsignrš  rR   r›  r˜  Údecode_dss_signaturerš   rŸ  r   r¡  r   r   r*  r•  rá  rz  r{  rc  rÎ  râ  )rƒ   r¿   r~  r‚  rO   Úcert_prefixrx  r@  ÚfÚfprincipalsrÃ   ÚfcritrS   rÔ  ÚfoptvalÚfextÚfextvalÚca_typeÚcaformatÚcafrË  Úfsigr¥  r¢  r£  ÚfsigblobÚ	cert_datas                              r   r	  zSSHCertificateBuilder.signÈ  sY  € ÜØä×*Ñ*Ü×!Ñ!Ü×)Ñ)ðô
ô Ð:Ó;Ð;à×ÑÐ#ÜÐ5Ó6Ð6ð —l‘lÐ*‘°·±ˆà�:‰:ÐÜÐ/Ó0Ð0ð Ÿ™Ð,‘°$·,±,ˆð ×%Ò%¨d×.LÒ.LÜðóð ð
 ×ÑÐ%ÜÐ7Ó8Ð8à×ÑÐ$ÜÐ6Ó7Ð7à×Ñ˜t×1Ñ1Ò1ÜÐLÓMÐMð 	×Ñ×#Ñ#©Ð#Ô7Ø×Ñ×Ñ¡.ÐÔ1ä$ T×%5Ñ%5Ó6ˆØ¤Ñ-ˆô —
‘
˜2“ˆÜ! (Ó+ˆÜ‹KˆØ	�‰�[Ô!Ø	�‰�UÔØ×Ñ˜d×.Ñ.°Ô2Ø	�	‰	�&ÔØ	�	‰	�$—*‘*×"Ñ"Ô#Ø	�‰�VÔÜ“kˆØ×'Ô'ˆAØ×"Ñ" 1Õ%ð (à	�‰�[×(Ñ(Ó*Ô+Ø	�	‰	�$×#Ñ#Ô$Ø	�	‰	�$×$Ñ$Ô%Ü“ˆØ×1Ô1‰KˆD�%Ø×Ñ˜TÔ"Ü�5‹z˜AŠ~Ü#›+�Ø×"Ñ" 5Ô)Ø× Ñ  §¡Ó!2Õ3à× Ñ  Õ'ð 2ð 	
�‰�U—]‘]“_Ô%Ü‹{ˆØ×+Ô+‰KˆD�%Ø�O‰O˜DÔ!Ü�5‹z˜AŠ~Ü#›+�Ø×"Ñ" 5Ô)Ø—‘ §¡Ó 1Õ2à—‘ Õ&ð ,ð 	
�‰�T—\‘\“^Ô$Ø	�‰�SÔä# KÓ0ˆÜ" 7Ó+ˆÜ‹kˆØ�‰�wÔØ×Ñ˜{×5Ñ5Ó7¸Ô=Ø	�‰�S—[‘[“]Ô#ô �k¤7×#<Ñ#<Ô=Ø#×(Ñ(¨¯©«Ó5ˆIÜ“;ˆDØ�O‰O˜GÔ$Ø�O‰O˜IÔ&Ø�L‰L˜Ÿ™›Ö(Ü˜¤R×%?Ñ%?Ô@Ü'¨×(9Ñ(9Ó:ˆHØ#×(Ñ(¨¯©«´b·h±h¸xÓ6HÓIˆIÜ×2Ñ2°9Ó=‰DˆAˆqÜ“;ˆDØ�O‰O˜GÔ$Ü “{ˆHØ×Ñ˜qÔ!Ø×Ñ˜qÔ!Ø�O‰O˜H×,Ñ,Ó.Ô/Ø�L‰L˜Ÿ™›Õ(ô ˜k¬3×+<Ñ+<Ô=Ð=Ð=ô
 “;ˆDØ�O‰OœOÔ,Ø#×(Ñ(Ø—	‘	“œW×-Ñ-Ó/´·±³óˆIð �O‰O˜IÔ&Ø�L‰L˜Ÿ™›Ô(ä×'Ñ'¨¯	©	«Ó4×:Ñ:Ó<ˆ	ô �{‰{ÜÜ$ S§X¡X¨{¸DÀ)Ð.LÓ%MÓNó
ð 	
r!   )rf  zSSHCertPublicKeyTypes | Nonerg  r.   rh  zSSHCertificateType | Noneri  úbytes | Nonerj  r¨  rê  r0   rl  r.   rk  r.   rm  úlist[tuple[bytes, bytes]]rn  r  )rB   r|  r©   rç  )r~  r)   r©   rç  )r€  r_  r©   rç  )r‚  r”   r©   rç  )r„  r¨  r©   rç  )r‡  úint | floatr©   rç  )r‰  r  r©   rç  )rS   r”   rÔ  r”   r©   rç  )r¿   ÚSSHCertPrivateKeyTypesr©   rc  )r2   r3   r4   r…   rB   r~  r€  r‚  r„  r÷  r‡  r‰  rþ  r  r	  r6   r!   r   rç  rç  Æ  s  „ ð 59Ø"Ø+/Ø $Ø)+Ø*/Ø$(Ø#'Ø79Ø13ð'à1ð'ð ð'ð )ð	'ð
 ð'ð 'ð'ð $(ð'ð "ð'ð !ð'ð 5ð'ð /ó'ð0
Ø/ð
à	ó
ó8
ó*
ó&
ð&"
Ø +ð"
à	ó"
òH
ó,
ó,
ð,
Øð
Ø"'ð
à	ó
ð,
Øð
Ø"'ð
à	ó
ô,G
r!   rç  )F)r   r”   r   r”   r   r)   r   r)   r   r0   r©   r”   )rN   z&SSHPrivateKeyTypes | SSHPublicKeyTypesr©   r”   )rB   rø   r©   r”   )rW   r«   r,   r)   r©   rª   )rW   r«   r©   rª   )
r^   r”   r   r  r   r”   r   r)   r©   z)Cipher[modes.CBC | modes.CTR | modes.GCM])rW   r•   r©   ztuple[int, memoryview])rW   r•   r©   útuple[memoryview, memoryview])rv   r)   r©   r”   )r©   r  )rO   r«   r�   )
rW   r«   r   r  r7  ú
typing.Anyr»   r0   r©   ÚSSHPrivateKeyTypes)r¿   r  r   r”   rS  r   r©   r”   )rR   rö   r©   zhashes.HashAlgorithm)rW   r«   r©   z"SSHCertificate | SSHPublicKeyTypes)rÐ  r•   r©   r©  )rN   r§  rÙ  z(hashes.MD5 | hashes.SHA1 | hashes.SHA256r©   r”   )rW   r«   r7  r  r©   r§  )rB   r§  r©   r”   )|Ú
__future__r   r*  ÚenumrO  Úrerz  r4  Ú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ÚImportErrorrL   rF   rI   r  Ú_ECDSA_NISTP384Ú_ECDSA_NISTP521rµ  Ú_SK_SSH_ED25519Ú_SK_SSH_ECDSA_NISTP256r�  rŸ  Úcompiler±  r,  Ú	_SK_STARTÚ_SK_ENDr.  r-  rL  rM  ÚDOTALLr'  r•   r–   Úranger3  r'   ÚAESÚCTRÚCBCÚGCMr9   r5   rT   rP   rA   rX   r[   ra   rk   rp   rs   rw   r|   r~   r°   rÒ   râ   rú   r  r  r  r¬  r­  r¯  r  r  ÚUnionr@   rD   rG   rJ   r  rI  r]  rC   rE   rH   rK   r§  r|  ÚEnumr_  rc  rš  rÌ  rÎ  r·  rÜ  rß  rä  r  rõ  rç  r6   r!   r   Ú<module>r;     sC  ðö
 #ã Û Û 	Û 	Û Û Ý !å Ý 8Ý 1÷õ õ J÷ó ÷÷ ð9Ý)àÐð €Ø€Ø€Ø(€Ø(€Ø(€Ø'€ð 0€Ø>Ð ð "€Ø!€à�—‘Ð2Ó3€Ø€	Ø2€	Ø
.€Ø
€Ø€Ø€Ø€ð ˆ"�*‰*�Y Ñ)¨GÑ3°R·Y±YÓ
?€ñ ‘i¡ a¨Ó 0Ó1Ó2€ð ÷ð ó ðñ Ø�N‰NØØ�Y‰YØØØØôñ Ø�N‰NØØ�Y‰YØØØØôñ  *Ø�N‰NØØ�Y‰YØØØØô ñ')€Ð%ó ð@ !Ø Ø ñ€óó&'ó:ó8ðØðàðð ðð ð	ð
 /óó,?ó?óó,ó+÷3ñ 3÷lG,ñ G,÷TCDñ CD÷LF8ñ F8÷R@%ñ @%óF
÷
ñ 
÷2
ñ 
ð6 ‰m‹oØ‰m‹oØÑ#Ó%Ø‘_ [°,°"·,±,³.ÓAØ‘_ [°,°"·,±,³.ÓAØ‘_ [°,°"·,±,³.ÓAØÑ(Ó*ØÑ-Ó/ð	€óFð —\‘\Ø×ÑØ×ÑØ×ÑØ×ÑðñÐ ð ðoð
 ,1ñoØ
ðoàðoð ðoð
 %)ðoð óoðdJØ#ðJàðJð 5ðJð ó	JðZ —L‘LØ×ÑØ×ÑØ×ÑØ×ÑðñÐ ð Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ô˜Ÿ™ô ÷
~ñ ~óBð ð\Ø
ð\ð (ó\ð~+Ø
ð+à'ó+óð(Ø	ðà<ðð óð4 /3ðØ
ðØ!+ðàóó(+ð(  Ÿ™Ø×ÑØ×ÑØ×ÑðñÐ ð "Ð ÷I
ò I
øðs$ ò 
9ØÐð #(ð9Øð9àð9ð ð9ð ð	9ð
  ð9ð 
ö9ð
9ús   Á)N! Î!N=Î<N=