
    mg              	           d Z ddlZddlmZ ddlZddlmZmZmZ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mZmZ eeef   Zedeef   Zd	Zd
Z G d de      ZdedefdZdededee   dee   fdZy)zSSH keysign client    N)Path)IterableSequenceUnioncast   )FilePath)ByteStringUInt32PacketDecodeError	SSHPacket)SSHKey
SSHKeyPairSSHCertificate   )z/opt/local/libexecz/usr/local/libexecz/usr/libexecz/usr/libexec/opensshz/usr/lib/opensshc                   @     e Zd ZdZdededef fdZdedefdZ	 xZ
S )	SSHKeySignKeyPairz9Surrogate for a key where signing is done via ssh-keysignkeysign_pathsock_fdkey_or_certc                     |j                   }|j                  d d }|j                  }|j                         }t        |   ||||||       || _        || _        y )Nr   )	algorithmsig_algorithmspublic_dataget_comment_bytessuper__init___keysign_path_sock_fd)	selfr   r   r   r   r   r   comment	__class__s	           0lib/python3.12/site-packages/asyncssh/keysign.pyr   zSSHKeySignKeyPair.__init__/   sd    ))	$33BQ7!--//1I~~$g	/ *    datareturnc                   K   t        j                  | j                  t        j                  t        j                  t        j                  | j
                  g       d{   }t        t        t              t        | j
                        z   t        |      z         }|j                  |       d{   \  }}|r)|j                         j                         }t        |      	 t        |      }|j                         }|j!                          t        |      }|j#                         }	|j                         }
|j!                          |	t        k7  rt        d      |
S 7 7 # t$        $ r t        d      dw xY ww)z5Use ssh-keysign to sign a block of data with this key)stdinstdoutstderrpass_fdsNzunexpected versionzinvalid response)asynciocreate_subprocess_execr   
subprocessPIPEr    r   r
   KEYSIGN_VERSIONr   communicatedecodestrip
ValueErrorr   
get_string	check_endget_byter   )r!   r&   procrequestr*   r+   errorpacketrespversionsigs              r$   
sign_asynczSSHKeySignKeyPair.sign_async<   sA     33joojoo??dmm_> > o.1FF& '#//88MMO))+EU##	;v&F$$&Dt_Foo'G##%C/) !566J3> 9( ! 	;/0d:	;s>   AF E" AF 2E%32F &A;E' !F %F 'E==F )__name__
__module____qualname____doc__strint_KeySignKeyr   bytesr@   __classcell__)r#   s   @r$   r   r   ,   s4    C S  3  ) ;U ;u ;r%   r   pathr'   c                    | du r>t         D ]*  }t        |d      } | j                         s  t        |       S  t        d      | r't        t	        t
        |             j                         st        d      t        |       S )z%Return path to ssh-keysign executableTzssh-keysignzKeysign not found)_DEFAULT_KEYSIGN_DIRSr   existsr5   r   r	   rE   )rJ   keysign_dirs     r$   find_keysignrO   ]   sw     t|0K]3D{{} t9 1
 0114Xt 45<<>011t9r%   r   r   keysc                 B    |D cg c]  }t        | ||       c}S c c}w )z/Return keypair objects which invoke ssh-keysign)r   )r   r   rP   keys       r$   get_keysign_keysrS   n   s(    
 FJJTclGS9TJJJs   ) rD   r-   pathlibr   r/   typingr   r   r   r   miscr	   r<   r
   r   r   r   r   
public_keyr   r   r   rG   boolKeySignPathr1   rL   r   rE   rO   rF   rS    r%   r$   <module>r[      s   *     2 2  F F : : FN*+D$() - 
.;
 .;b{ s "K3 K K#K0K"#Kr%   