
    af                         d dl mZmZ d dlmZmZ dgZer8	 d dlmZ d dl	m
Z
 d dlmZ dZe                    d           n# e$ r d	ZY nw xY wer$d d
lZd dlmZ d dl mZmZmZ  G d de          Zd
S d
S )    )HAS_CRYPTOSIGNCryptosignKey)inlineCallbacksreturnValueHAS_CRYPTOSIGN_SSHAGENT)Factory)UNIXClientEndpoint)SSHAgentClientTSSHAgentCryptosignKeyFN)signing)_read_ssh_ed25519_pubkey_unpack_packc                   8    e Zd ZdZddZedd            Zd ZdS )r   aA  
        A WAMP-cryptosign signing key that is a proxy to a private Ed25510 key
        actually held in SSH agent.

        An instance of this class must be create via the class method new().
        The instance only holds the public key part, whereas the private key
        counterpart is held in SSH agent.
        Nc                 P    t          j        | ||           |sddlm} || _        d S )Nr   reactor)r   __init__twisted.internetr   _reactor)selfkeycommentr   s       M/var/www/html/env/lib/python3.11/site-packages/autobahn/twisted/cryptosign.pyr   zSSHAgentCryptosignKey.__init__C   s<    "4g666 5444444#DMMM    c                     t           st          d          t                    \  }sddlm dt
          j        vrt          d          t                      }d|_        t          |_
        t          t
          j        d                   }|                    |          }t           fd            }|                    |          S )z
            Create a proxy for a key held in SSH agent.

            :param pubkey: A string with a public Ed25519 key in SSH format.
            :type pubkey: unicode
            z7SSH agent integration is not supported on this platformr   r   SSH_AUTH_SOCKno ssh-agent is running!Fc              3     K   |                                  V }d }d }|D ]Y\  }}t          |          }|d                             d          }|dk    r$|\  }}|k    r|}|                    d          } nZ| j                                         |r0t          j        |          }	t           
|	|                     d S t          d          )Nr   utf8ssh-ed25519z!Ed25519 key not held in ssh-agent)	requestIdentitiesr   decode	transportloseConnectionr   	VerifyKeyr   	Exception)agentkeyskey_datakey_commentblobr   rawalgo_pubkeyr   clspubkeyr   s             r   
on_connectz-SSHAgentCryptosignKey.new.<locals>.on_connectb   s      "446666  "%) " "MD'!$--Cq6==00D},,(+g"f,,'.H*1..*@*@K!E..000 I!+H55CCg > >?????#$GHHHr   )r   r'   r   r   r   osenvironr   noisyr
   protocolr	   connectr   addCallback)r0   r1   r   _factoryendpointdr2   s   ```     r   newzSSHAgentCryptosignKey.newI   s     + [ YZZZ088IFA 5444444bj00 :;;;iiG!GM-G)'2:o3NOOH  ))AI I I I I I _I4 ==,,,r   c                 F    dt           j        vrt          d          t                      }d|_        t
          |_        t           j        t           j        d                   }|	                    |          }t           fd            }|                    |          S )Nr   r   Fc              3     K   t          d                                                    d          g          }|                     |          V }t	          |          \  }}| j                                         t          |           d S )Nr!   T)binary)r   encode
public_keysignDatar   r$   r%   r   )r(   r,   signature_blobr.   	signature	challenger   s        r   r2   z.SSHAgentCryptosignKey.sign.<locals>.on_connect   s      
 m2244dooTo6R6RSTT (-~~dI'F'F!F!F")."9"9i..000I&&&&&r   )r3   r4   r'   r   r5   r
   r6   r	   r   r7   r   r8   )r   rF   r:   r;   r<   r2   s   ``    r   signzSSHAgentCryptosignKey.sign   s    bj00 :;;;iiG!GM-G)$-O9TUUH  ))A' ' ' ' ' _' ==,,,r   )NN)__name__
__module____qualname____doc__r   classmethodr=   rG    r   r   r   r   9   sb        	 		$ 	$ 	$ 	$ 
3	- 3	- 3	- 
3	-j	- 	- 	- 	- 	-r   )autobahn.wamp.cryptosignr   r   twisted.internet.deferr   r   __all__twisted.internet.protocolr   twisted.internet.endpointsr	   twisted.conch.ssh.agentr
   r   appendImportErrorr3   naclr   r   r   r   r   rM   r   r   <module>rW      s`  8 C B B B B B B B ? ? ? ? ? ? ? ?   00 	655555AAAAAA::::::
 #'.////  ( ( ("'(  e-IIIQQQQQQQQQQ_- _- _- _- _- _- _- _- _- _-e- e-s   A A
A