
    7g!                         d dl Z d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZ  G d d	e
          ZdS )
    N)default_backend)Cipher)Message)PKeyOPENSSH_AUTH_MAGIC_unpad_openssh)b)SSHExceptionPasswordRequiredExceptionc                   b    e Zd ZdZdZ	 ddZd Zd Zed             Z	d Z
d	 Zd
 ZddZd ZdS )
Ed25519Keya  
    Representation of an `Ed25519 <https://ed25519.cr.yp.to/>`_ key.

    .. note::
        Ed25519 key support was added to OpenSSH in version 6.5.

    .. versionadded:: 2.2
    .. versionchanged:: 2.3
        Added a ``file_obj`` parameter to match other key classes.
    zssh-ed25519Nc                    d | _         d x}}||t          |          }|O|                     || j        d           t          j                            |                                          }n_|Bt          |d          5 }| 	                    d|          \  }	}d d d            n# 1 swxY w Y   n|| 	                    d|          \  }	}|s|r| 
                    ||          }||t          d          || _        || _        d S )Nz ssh-ed25519-cert-v01@openssh.com)msgkey_type	cert_typerOPENSSHz
need a key)public_blobr   _check_type_and_load_certnamenaclsigning	VerifyKey
get_binaryopen_read_private_key_parse_signing_key_data
ValueError_signing_key_verifying_key)
selfr   datafilenamepasswordfile_objverifying_keysigning_keyfpkformats
             M/var/www/html/syslog/venv/lib/python3.11/site-packages/paramiko/ed25519key.py__init__zEd25519Key.__init__,   s     &**;4+$--C?**< +   
 !L223>>3C3CDDMM!h$$ F!%!7!7	1!E!E$F F F F F F F F F F F F F F F!!33IxHHNHd 	Gx 	G66tXFFK=#8\***'+s   B((B,/B,c                 \   ddl m} t          |          }|                    t	          t
                              t
          k    rt          d          |                                }|                                }|                                }|	                                }|dk    r|s|dk    rt          d          n^|dk    rI|st          d          t          |          }	|	                                }
|		                                }nt          d          |dk    r||j        vrt          d          g }t          |          D ]v}t          |                                          }|                                | j        k    rt          d          |                    |                                           w|                                }|dk    r|}n|j        |         }t          j        t#          |          |
|d         |d         z   |d	
          }t%           |d         |d |d                             |d         ||d         d                    t'                                                                }|                    |          |                                z   }t          t/          |                    }|	                                |	                                k    rt          d          g }t          |          D ]}|                                | j        k    rt          d          |                                }|                                }t0          j                            |d d                   }|j                                        |cxk    r||         cxk    r|dd          k    sn J |                    |           |                                 t	          |          dk    rt          d          |d         S )Nr   )	TransportzInvalid keynonebcryptzPrivate key file is encryptedzkey-sizez
block-sizeT)r$   saltdesired_key_bytesroundsignore_few_roundsclassmode)backend       )paramiko.transportr-   r   	get_byteslenr   r
   get_textr   get_intr   _cipher_inforanger   appendr/   kdfr	   r   r   	decryptorupdatefinalizer   r   r   
SigningKey
verify_keyencode)r!   r"   r$   r-   message
ciphernamekdfname
kdfoptionsnum_keysrA   bcrypt_saltbcrypt_roundspublic_keys_pubkeyprivate_ciphertextprivate_datacipherkeyrB   signing_keysipublickey_datar'   s                            r*   r   z"Ed25519Key._parse_signing_key_dataI   s]   000000 $--S!344559KKK}---%%''
""$$''))
??$$f  2Z611"=111 2   /3   *%%C..**KKKMMMM}---Ji6L$L$L}---x 	4 	4AW//1122F  DI--"=111v00223333$//11-LL+J7F*8 "("4vl7K"K$ #'  C w$8fZ&8$8 9::vs6*#5#7#7899'))   ikk	    !344y7I7I7K7KK  .6677?? 1 111}---x 	! 	!A!!TY.."=111''))F))++H ,11(3B3-@@K &--//! ! ! !q>! ! ! ! BCC=! ! ! ! ! !
 ,,,    |!!}---A    c                    |                                  r| j        j        }n| j        }t	                      }|                    | j                   |                    |                                           |                                S N)	can_signr   rF   r    r   
add_stringr   rG   asbytes)r!   vms      r*   r_   zEd25519Key.asbytes   sl    ==?? 	$!,AA#AII	TY	QXXZZ   yy{{rZ   c                 ~    |                                  r| j        j        }n| j        }|                                 |fS r\   )r]   r   rF   r    get_name)r!   r`   s     r*   _fieldszEd25519Key._fields   s:    ==?? 	$!,AA#A##rZ   c                     | j         S r\   )r   r!   s    r*   rc   zEd25519Key.get_name   s
    yrZ   c                     dS )N    rf   s    r*   get_bitszEd25519Key.get_bits   s    srZ   c                     | j         d uS r\   )r   rf   s    r*   r]   zEd25519Key.can_sign   s     ,,rZ   c                     t                      }|                    | j                   |                    | j                            |          j                   |S r\   )r   r^   r   r   sign	signature)r!   r"   	algorithmra   s       r*   sign_ssh_datazEd25519Key.sign_ssh_data   sJ    II	TY	T&++D11;<<<rZ   c                     |                                 | j        k    rdS 	 | j                            ||                                           dS # t
          j        j        $ r Y dS w xY w)NFT)r<   r   r    verifyr   r   
exceptionsBadSignatureError)r!   r"   r   s      r*   verify_ssh_sigzEd25519Key.verify_ssh_sig   st    <<>>TY&&5	&&tS^^-=-=>>> 4 0 	 	 	55	s   -A A('A()NNNNNr\   )__name__
__module____qualname____doc__r   r+   r   r_   propertyrd   rc   rj   r]   rp   ru   ri   rZ   r*   r   r      s        	 	 D KO, , , ,:^ ^ ^@   $ $ X$    - - -   	 	 	 	 	rZ   r   )r/   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   nacl.signingr   paramiko.messager   paramiko.pkeyr   r   r   paramiko.utilr	   paramiko.ssh_exceptionr
   r   r   ri   rZ   r*   <module>r      s   "  8 8 8 8 8 8 9 9 9 9 9 9     $ $ $ $ $ $ B B B B B B B B B B       J J J J J J J Jv v v v v v v v v vrZ   