
    oh!                     ~    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y)
    N)default_backend)Cipher)Message)PKeyOPENSSH_AUTH_MAGIC_unpad_openssh)b)SSHExceptionPasswordRequiredExceptionc                   Z    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y)
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        |      }|L| j                  || j                  d       t        j
                  j                  |j                               }nD|+t        |d      5 }| j                  d|      \  }	}d d d        n|| j                  d|      \  }	}|s|r| j                  ||      }||t        d      || _        || _        y # 1 sw Y   =xY w)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
             e/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/paramiko/ed25519key.py__init__zEd25519Key.__init__,   s     &**;4+$-C?**< + 
 !LL223>>3CDM!h$ F!%!7!7	1!E$F F!!33IxHNHdx66tXFK=#8\**'+F Fs   7C!!C*c                    ddl m} t        |      }|j                  t	        t
                    t
        k7  rt        d      |j                         }|j                         }|j                         }|j                         }|dk(  r|s|dk7  rTt        d      |dk(  r9|st        d      t        |      }	|	j                         }
|	j                         }nt        d      |dk7  r||j                  vrt        d      g }t        |      D ]b  }t        |j                               }|j                         | j                  k7  rt        d      |j                  |j                                d |j                         }|dk(  r|}n|j                  |   }t        j                   t#        |      
|d   |d   z   d	
      }t%         |d   |d |d           |d   ||d   d        t'                     j)                         }|j+                  |      |j-                         z   }t        t/        |            }|j                         |j                         k7  rt        d      g }t        |      D ]  }|j                         | j                  k7  rt        d      |j                         }|j                         }t0        j2                  j5                  |d d       }|j6                  j9                         |cxk(  r||   cxk(  r	|dd  k(  sJ  J |j                  |       |j                           t	        |      dk7  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   sY   0 $-S!3459KK}--%%'
""$'')
??$f Z61"=11 /3  *%C..*KKKMM}--Ji6L6L$L}--x 	4AW//12F DII-"=11v0023		4 %//1-L++J7F**8 "("4vl7K"K$ #'C w$8fZ&8 9:vs6*#5#789') ik	    !34y7I7I7KK  .67?? 11}--x 	!A!TYY."=11'')F))+H ,,11(3B-@K &&--/!q>! BC=!!!
 , %	!( |!}--A    c                    | j                         r| j                  j                  }n| j                  }t	               }|j                  | j                         |j                  |j                                |j                         S N)	can_signr   rF   r    r   
add_stringr   rG   asbytes)r!   vms      r*   r_   zEd25519Key.asbytes   s\    ==?!!,,A##AI	TYY	QXXZ yy{rZ   c                     | j                         r| j                  j                  }n| j                  }| j	                         |fS r\   )r]   r   rF   r    get_name)r!   r`   s     r*   _fieldszEd25519Key._fields   s8    ==?!!,,A##A##rZ   c                     | j                   S r\   )r   r!   s    r*   rc   zEd25519Key.get_name   s    yyrZ   c                      y)N    rf   s    r*   get_bitszEd25519Key.get_bits   s    rZ   c                     | j                   d uS r\   )r   rf   s    r*   r]   zEd25519Key.can_sign   s      ,,rZ   c                     t               }|j                  | j                         |j                  | j                  j	                  |      j
                         |S r\   )r   r^   r   r   sign	signature)r!   r"   	algorithmra   s       r*   sign_ssh_datazEd25519Key.sign_ssh_data   sA    I	TYY	T&&++D1;;<rZ   c                     |j                         | j                  k7  ry	 | j                  j                  ||j	                                y# t
        j                  j                  $ r Y yw xY w)NFT)r<   r   r    verifyr   r   
exceptionsBadSignatureError)r!   r"   r   s      r*   verify_ssh_sigzEd25519Key.verify_ssh_sig   s\    <<>TYY&	&&tS^^-=>  00 		s   *A A+*A+)NNNNNr\   )__name__
__module____qualname____doc__r   r+   r   r_   propertyrd   rc   rj   r]   rp   ru   ri   rZ   r*   r   r      sS    	 D KO,:^@ $ $-	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      s0   "  8 9  $ B B  Jv vrZ   