
    )Jf%                    N   U d dl m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mZ d dlmZ  G d d          Z G d	 d
ej                  Z G d dej                  Z G d dej                  ZeZe                    e
j        j                    G d dej                  ZeZe                    e
j        j                   e
j        j        Ze
j        j        Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d  d!e          Z% G d" d#e          Z& G d$ d%e          Z' G d& d'e          Z( G d( d)e          Z) G d* d+e          Z* G d, d-e          Z+ G d. d/e          Z, G d0 d1e          Z- G d2 d3e          Z. G d4 d5e          Z/ G d6 d7e          Z0i d8 e-            d9 e*            d: e-            d; e,            d< e*            d= e)            d> e(            d? e+            d@ e'            dA e&            dB e%            dC e$            dD e#            dE e"            dF e!            dG e             dH e             e             e.             e/             e0            dIZ1dJe2dK<    G dL dMe          Z3e
j        j4        Z4	 d[d\dTZ5 G dU dV          Z6i ej-        e-ej,        e,ej+        e+ej*        e*ej)        e)ej(        e(ej7        e.ej8        e/ej9        e0ej'        e'ej"        e"ej&        e&ej!        e!ej%        e%ej         e ej$        e$ej        eej#        e#ej        eiZ:d]dZZ;dS )^    )annotationsN)utils)ObjectIdentifier)openssl)_serializationhashesc                     e Zd Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z	 ed          Z
 ed          Z ed	          Z ed
          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          ZdS )EllipticCurveOIDz1.2.840.10045.3.1.1z1.3.132.0.33z1.3.132.0.10z1.2.840.10045.3.1.7z1.3.132.0.34z1.3.132.0.35z1.3.36.3.3.2.8.1.1.7z1.3.36.3.3.2.8.1.1.11z1.3.36.3.3.2.8.1.1.13z1.3.132.0.1z1.3.132.0.15z1.3.132.0.26z1.3.132.0.27z1.3.132.0.16z1.3.132.0.17z1.3.132.0.36z1.3.132.0.37z1.3.132.0.38z1.3.132.0.39N)__name__
__module____qualname__r   	SECP192R1	SECP224R1	SECP256K1	SECP256R1	SECP384R1	SECP521R1BRAINPOOLP256R1BRAINPOOLP384R1BRAINPOOLP512R1	SECT163K1	SECT163R2	SECT233K1	SECT233R1	SECT283K1	SECT283R1	SECT409K1	SECT409R1	SECT571K1	SECT571R1     o/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr
   r
      sC         !677I  00I  00I  !677I  00I  00I&&'=>>O&&'>??O&&'>??O  //I  00I  00I  00I  00I  00I  00I  00I  00I  00IIIr"   r
   c                  r    e Zd Zeej        dd                        Zeej        dd                        ZdS )	EllipticCurvereturnstrc                    dS )z8
        The name of the curve. e.g. secp256r1.
        Nr!   selfs    r#   namezEllipticCurve.name(         r"   intc                    dS z<
        Bit size of a secret scalar for the curve.
        Nr!   r)   s    r#   key_sizezEllipticCurve.key_size/   r,   r"   N)r&   r'   r&   r-   )r   r   r   propertyabcabstractmethodr+   r0   r!   r"   r#   r%   r%   '   sn            X
     X  r"   r%   )	metaclassc                  @    e Zd Zeej        dd                        ZdS )EllipticCurveSignatureAlgorithmr&   +asym_utils.Prehashed | hashes.HashAlgorithmc                    dS )z@
        The digest algorithm used with this signature.
        Nr!   r)   s    r#   	algorithmz)EllipticCurveSignatureAlgorithm.algorithm8   r,   r"   Nr&   r8   )r   r   r   r2   r3   r4   r:   r!   r"   r#   r7   r7   7   s@            X  r"   r7   c                     e Zd Zej        dd            Zej        dd            Zeej        dd
                        Zeej        dd                        Z	ej        dd            Z
ej        d d            Zej        d!d            ZdS )"EllipticCurvePrivateKeyr:   ECDHpeer_public_keyEllipticCurvePublicKeyr&   bytesc                    dS )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr!   )r*   r:   r?   s      r#   exchangez EllipticCurvePrivateKey.exchangeC   r,   r"   c                    dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr!   r)   s    r#   
public_keyz"EllipticCurvePrivateKey.public_keyL   r,   r"   r%   c                    dS z8
        The EllipticCurve that this key is on.
        Nr!   r)   s    r#   curvezEllipticCurvePrivateKey.curveR   r,   r"   r-   c                    dS r/   r!   r)   s    r#   r0   z EllipticCurvePrivateKey.key_sizeY   r,   r"   datasignature_algorithmr7   c                    dS )z 
        Signs the data
        Nr!   )r*   rJ   rK   s      r#   signzEllipticCurvePrivateKey.sign`   r,   r"   EllipticCurvePrivateNumbersc                    dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr!   r)   s    r#   private_numbersz'EllipticCurvePrivateKey.private_numbersj   r,   r"   encoding_serialization.Encodingformat_serialization.PrivateFormatencryption_algorithm)_serialization.KeySerializationEncryptionc                    dS z6
        Returns the key serialized as bytes.
        Nr!   )r*   rQ   rS   rU   s       r#   private_bytesz%EllipticCurvePrivateKey.private_bytesp   r,   r"   N)r:   r>   r?   r@   r&   rA   )r&   r@   r&   r%   r1   )rJ   rA   rK   r7   r&   rA   )r&   rN   )rQ   rR   rS   rT   rU   rV   r&   rA   )r   r   r   r3   r4   rC   rE   r2   rH   r0   rM   rP   rY   r!   r"   r#   r=   r=   B   s"           	   
     X
     X
 	    	   
 	     r"   r=   c                     e Zd Zeej        dd                        Zeej        dd                        Zej        dd            Zej        dd            Z	ej        dd            Z
ed d            Zej        d!d            ZdS )"r@   r&   r%   c                    dS rG   r!   r)   s    r#   rH   zEllipticCurvePublicKey.curve   r,   r"   r-   c                    dS r/   r!   r)   s    r#   r0   zEllipticCurvePublicKey.key_size   r,   r"   EllipticCurvePublicNumbersc                    dS )z8
        Returns an EllipticCurvePublicNumbers.
        Nr!   r)   s    r#   public_numbersz%EllipticCurvePublicKey.public_numbers   r,   r"   rQ   rR   rS   _serialization.PublicFormatrA   c                    dS rX   r!   )r*   rQ   rS   s      r#   public_bytesz#EllipticCurvePublicKey.public_bytes   r,   r"   	signaturerJ   rK   r7   Nonec                    dS )z5
        Verifies the signature of the data.
        Nr!   )r*   rd   rJ   rK   s       r#   verifyzEllipticCurvePublicKey.verify   r,   r"   rH   c                    t          j        d|           t          |          dk    rt          d          |d         dvrt          d          t          j                            ||          S )NrJ   r   z%data must not be an empty byte string)         z%Unsupported elliptic curve point type)r   _check_byteslen
ValueErrorrust_opensslecfrom_public_bytes)clsrH   rJ   s      r#   from_encoded_pointz)EllipticCurvePublicKey.from_encoded_point   sl     	64(((t99>>DEEE7,,,DEEE00===r"   otherobjectboolc                    dS )z"
        Checks equality.
        Nr!   )r*   rt   s     r#   __eq__zEllipticCurvePublicKey.__eq__   r,   r"   NrZ   r1   )r&   r^   )rQ   rR   rS   ra   r&   rA   )rd   rA   rJ   rA   rK   r7   r&   re   )rH   r%   rJ   rA   r&   r@   )rt   ru   r&   rv   )r   r   r   r2   r3   r4   rH   r0   r`   rc   rg   classmethodrs   rx   r!   r"   r#   r@   r@      s           X
     X
 	   
 	    	    > > > [> 	     r"   r@   c                      e Zd ZdZdZdS )r    	sect571r1i:  Nr   r   r   r+   r0   r!   r"   r#   r    r               DHHHr"   r    c                      e Zd ZdZdZdS )r   	sect409r1  Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect283r1  Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect233r1   Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect163r2   Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect571k1i;  Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect409k1r   Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect283k1r   Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect233k1r   Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	sect163k1r   Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	secp521r1i	  Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	secp384r1  Nr|   r!   r"   r#   r   r      r}   r"   r   c                      e Zd ZdZdZdS )r   	secp256r1   Nr|   r!   r"   r#   r   r     r}   r"   r   c                      e Zd ZdZdZdS )r   	secp256k1r   Nr|   r!   r"   r#   r   r     r}   r"   r   c                      e Zd ZdZdZdS )r   	secp224r1   Nr|   r!   r"   r#   r   r     r}   r"   r   c                      e Zd ZdZdZdS )r   	secp192r1   Nr|   r!   r"   r#   r   r     r}   r"   r   c                      e Zd ZdZdZdS )BrainpoolP256R1brainpoolP256r1r   Nr|   r!   r"   r#   r   r             DHHHr"   r   c                      e Zd ZdZdZdS )BrainpoolP384R1brainpoolP384r1r   Nr|   r!   r"   r#   r   r     r   r"   r   c                      e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   Nr|   r!   r"   r#   r   r      r   r"   r   
prime192v1
prime256v1r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r{   r   r   r   zdict[str, EllipticCurve]_CURVE_TYPESc                  .    e Zd ZddZedd            ZdS )	ECDSAr:   r8   c                    || _         d S N
_algorithm)r*   r:   s     r#   __init__zECDSA.__init__?  s     $r"   r&   c                    | j         S r   r   r)   s    r#   r:   zECDSA.algorithmE  s     r"   N)r:   r8   r;   )r   r   r   r   r2   r:   r!   r"   r#   r   r   >  sH        $ $ $ $    X  r"   r   private_valuer-   rH   backend
typing.Anyr&   c                    t          | t                    st          d          | dk    rt          d          t          j                            | |          S )Nz&private_value must be an integer type.r   z)private_value must be a positive integer.)
isinstancer-   	TypeErrorrn   ro   rp   derive_private_key)r   rH   r   s      r#   r   r   O  sX    
 mS)) B@AAADEEE?--mUCCCr"   c                      e Zd ZdS )r>   N)r   r   r   r!   r"   r#   r>   r>   ]  s        Dr"   r>   oidr   type[EllipticCurve]c                X    	 t           |          S # t          $ r t          d          w xY w)NzCThe provided object identifier has no matching elliptic curve class)_OID_TO_CURVEKeyErrorLookupError)r   s    r#   get_curve_for_oidr   x  sD    
S!! 
 
 

 
 	

s    )r   )r   r-   rH   r%   r   r   r&   r=   )r   r   r&   r   )<
__future__r   r3   typingcryptographyr   cryptography.hazmat._oidr   "cryptography.hazmat.bindings._rustr   ro   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetric
asym_utilsr
   ABCMetar%   r7   r=   (EllipticCurvePrivateKeyWithSerializationregisterrp   ECPrivateKeyr@   'EllipticCurvePublicKeyWithSerializationECPublicKeyrN   r^   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __annotations__r   generate_private_keyr   r>   r   r   r   r   r   r!   r"   r#   <module>r      s7  
 # " " " " " " 



        5 5 5 5 5 5 F F F F F F A A A A A A A A I I I I I I1 1 1 1 1 1 1 1,    ck             7 7 7 7 7 7 7 7 7t ,C (     != > > >< < < < <s{ < < < <~ +A '    ; < < <*oI )_G        
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
    m   
    m   
    m   
*))++*))++* * 	*
 * * * * * * * * * * *  !*" #*$ &((&((&((+* * *    2    +    $;  D D D D D	 	 	 	 	 	 	 			 	 		
 	 	 $o $o $o 	 	 	 	 	 	  	!" 	#$ 		' .
 
 
 
 
 
r"   