
    .Ph                       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)	 ddd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ZLdd9ZMdd<ZNe9d=z   e:d=z   fddBZOddEZPddFZQddJZRddMZSddNZTddPZUddQZVddSZW G dT dU          ZX G dV dW          ZY G dX dY          ZZ G dZ d[          Z[ G d\ d]          Z\dd^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ZcddgZdeje        ejf        ejg        ejh        eji        f         Zj	 dddhddmZkddq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          ZuddyZv	 ddd{Zwdd|ZxddZyddZz	 dddZ{ddZ|eje        ejf        ejg        eji        f         Z}dZ~ 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        p/var/www/html/test/jupyter/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         LLL====NNNKKKMMMMMr&   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          |                                           }nt          | t          j                  rt          |           }nt          | 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((Dej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%    
 88V^D116:;;;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     :3t99y(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{2FD 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    
4yy1}}(((>>$rr(e>44d122h>>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    tnnGAt3t99}}(((8T!""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!!IC
 )s1v}}(((>>#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    
Qww5666 snn"q(Fc6***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  .    
#,,a5,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    cE:y9:: 	)LLS"""Jc"""""LL$$$Jci(((((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    3sDJ''(((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t99DcDj3E $F59
r&   r   c                    t          t          |                                                     }|                     |           |                                S )zReturn as bytes)rr   r   r   r   tobytes)r   bufs     r$   r   z_FragList.tobytes,  s?    499;;//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1vt|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q6Y?@@@1%%1%%-a33/q!T4~
 
 &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1a|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Aq!d3Aq!<<-a1B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Aq!dT""4q!Q<9$$?@@@3Aq!<<-a1B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3V<<<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 )#_SSHFormatECDSAzFormat 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          |d         dk    rt          d          ||f|fS )zECDSA public fieldszCurve name mismatchr   rv   zNeed uncompressed point)r   r   rR   NotImplementedError)r   r[   rW   points       r$   r   z_SSHFormatECDSA.get_public  sn     "$''t!$''tD'''23338q==%&?@@@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
ED.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     %)OOD$9$9!UT!$'')++ABBB+FDJ??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     ..$-??MMOO
 

 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??uh)33CDDD/BB6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_public3  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  M  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_publicc  s@     +<88DDT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_publick  s     #:
 
 	
r&   Nr-  r[   rr   r"   r8  r5   r6   r7   r   r   r   r9   r&   r$   r4  r4  Z  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>  s  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 paddingDSSH 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    
64(((:x000tA ;9:::	
B	
qBz$//2677D??9%% ;9:::dC	NN,,-D #4((J%%MGT"4((J4..KE4zz1222  %%MGT'00L'l++G ++G44IwUg..%--//<//&;'7;;   g&'F7'F'FGGG./9/08!$''t ()1 	++C3xx7"" !NOOO # %((( ,,
d~~T,hOOnn3::e,,--()1 	)c#899999..s334444 (((( 	F   "$''tT%(((%JC%JC
czz8999 "%((OHe<:;;; --'E .  K 5!!HAu 3u::&&&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                      }|rt          }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/    
z8,,,+s011 
* 		
 	
 	
 	
 !--Hh''G ;;L $
j)3 +-HII	6$0<)5Fz"~~%%%V$$$J$??$$
WEz!}}HG ;;LH%%%+0022LAAA8X.//I""";	222!!!hE9>>+;+;f+D!EEFGGG [[F
NN9
j!!!
g
l###
NN5
l###
i    >>D;;==D
Ytf}--
.
.C
MM#
+C $$ST]CI>>>3u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  w  s        DDDDr&   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4DJJ 	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?    #DN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	                  rt          | 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   **,,mW%=>> 	  do&&d.A(B(B     r'@AA 	 11GAt &&GAt%:1a@@L'(;<<H  eD$788"(8:L:L     mS-=>>>>>#x//!;==%88!=??+>>>>!=??  do&&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    %&& }	E2<	(	( }%.....}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    
64(((T""A 0./// wwqzz)H}wwqzzHI&& 2	0s<000018$7";
 
 	
 h''G+(-h7788x~& + + +)***+  	&t,,ND&&-... (!$''t**400J :~~~~"4((&t,,
D 	6$/
$;$;!Iz##E)$4$4555  	6 %TNNT%d^^d(..d+L99 &&
d%d++
d##4'--T'44'x(;&E   ",SYYJ,/)$//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  f  s     %T***r&   	exts_optsr  c                   i }d }| rt          |           \  }} 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  l  s    !#FI
 %i00iT{{F??-... UY%6%6:;;;&y11yu::>>&u--LE55zzA~~ !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     nvz6=&ABB GEFFF %%Hh''GKKE	X#u%%%mmooO {>**HOOO$$$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     ,DdKKKK+~.. ! ++--

 
*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KKE	X*e,,,

emmoo
.
.
4
4
6
6C88XtS)***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>C  s,      CCQJq%((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C2B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_beforet  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+&&??kU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    ???WT1D???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9WT1D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:$*:T5M:
 
 
 	
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                      }|                    |           |                    |           |                    |                                           nt          |t          j                  rtG          |j$                  }|"                    |                                t          j%        |                    }tM          j'        |          \  }}t3                      }|                    |           t3                      }|(                    |           |(                    |           |                    |                                           |                    |                                           nt          |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
    AaD 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!(++KK	[!!!	Ud.222			&			$*"###	Vkk' 	& 	&A""1%%%%	[((**+++			$#$$$			$$%%%1 	( 	(KD%T"""5zzA~~#++""5)))  !2!23333  ''''	U]]__%%%{{+ 	' 	'KD%OOD!!!5zzA~~#++""5))) 1 12222&&&&	T\\^^$$$	S#K00"7++kkw{5577===	S[[]]### k7#<== 	)#((55I;;DOOG$$$OOI&&&LL((((R%?@@ 	)'(9::H#((bhx6H6HIII29==DAq;;DOOG$$$ {{Hq!!!q!!!OOH,,..///LL(((( k3+<=====
 ;;DOOO,,,#((		W-// I OOI&&&LL((('		44::<<	 {$SXX{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"+/ $)+*/$(#'7913' ' ' ' '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[   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3RY
?
? :iia 0 01122         :NY   :NY    *zNY     ') )    @ !      &' ' ' ' %eO< < < < <: : : :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D8 D8 D8 D8 D8 D8 D8 D8N@% @% @% @% @% @% @% @%F
 
 
 

 
 
 
 
 
 
 
2
 
 
 
 
 
 
 
6 mmoommoo##%%__[,",..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