
     h+              
       <   d dl Z d dlmZmZmZ d dlmZmZ d dlm	Z	 d dl
mZ e j        rd dlmZ dej        ddfd	Zd
ddefdZddZddZd
ddedej        fdZd
ddddedefdZd
ddddededdf
dZ G d dej                  Z G d dej                  ZdS )    N)InvalidSignatureUnsupportedAlgorithm_Reasons)_calculate_digest_and_algorithm_evp_pkey_derive)serialization)ec)Backendsignature_algorithmreturnc                 n    t          | t          j                  st          dt          j                  d S )Nz/Unsupported elliptic curve signature algorithm.)
isinstancer	   ECDSAr   r    UNSUPPORTED_PUBLIC_KEY_ALGORITHM)r   s    c/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/ec.py_check_signature_algorithmr      s>     )2844 
"=5
 
 	

 
    backendr
   c                 8   | j                             |          }|                     || j        j        k               | j                             |          }|| j         j        k    rt          d          | j         j        s-| j         	                    |          dk    rt          d          | j         
                    |          }|                     || j        j        k               | j                            |                              d          }|S )Nz@ECDSA keys with explicit parameters are unsupported at this timer   ascii)_libEC_KEY_get0_groupopenssl_assert_ffiNULLEC_GROUP_get_curve_name	NID_undef
ValueErrorCRYPTOGRAPHY_IS_LIBRESSLEC_GROUP_get_asn1_flag
OBJ_nid2snstringdecode)r   ec_keygroupnid
curve_namesns         r   _ec_key_curve_snr)   !   s   L**622E5GL$55666
,
.
.u
5
5C gl$$$N
 
 	
 L1
L//66!;;N
 
 	
 ((--J:)::;;;			Z	(	(	/	/	8	8BIr   c                 P    | j                             || j         j                   dS )z
    Set the named curve flag on the EC_KEY. This causes OpenSSL to
    serialize EC keys along with their curve OID which makes
    deserialization easier.
    N)r   EC_KEY_set_asn1_flagOPENSSL_EC_NAMED_CURVE)r   ec_cdatas     r   _mark_asn1_named_ec_curver.   ?   s2     L%%',5    r   c                 N   | j                             |          }|                     || j        j        k               | j                             |          }|                     || j        j        k               | j                             ||          rt          d          d S )Nz;Cannot load an EC public key where the point is at infinity)r   EC_KEY_get0_public_keyr   r   r   r   EC_POINT_is_at_infinityr   )r   r-   pointr%   s       r   _check_key_infinityr3   K   s    L//99E5GL$55666L**844E5GL$55666|++E599 
I
 
 	

 
r   r(   c                     	 t          j        |                     S # t          $ r t          | dt          j                  w xY w)Nz" is not a supported elliptic curve)r	   _CURVE_TYPESKeyErrorr   r   UNSUPPORTED_ELLIPTIC_CURVE)r   r(   s     r   _sn_to_elliptic_curver8   V   sY    
r"$$$ 
 
 
"555/
 
 	

s	    (Aprivate_key_EllipticCurvePrivateKeydatac                    | j                             |j                  }|                     |dk               | j                            d|          }| j                            dd          }| j                             d|t          |          |||j                  }|                     |dk               | j                            |          d |d                  S )Nr   zunsigned char[]zunsigned int[]   )	r   
ECDSA_size_ec_keyr   r   new
ECDSA_signlenbuffer)r   r9   r;   max_sizesigbuf
siglen_ptrress          r   _ecdsa_sig_signrH   `   s     |&&{':;;H8a<(((\/::F!!"2A66J
,
!
!	4TFJ0C C 3!8$$$<v&&A77r   
public_key_EllipticCurvePublicKey	signaturec           	          | j                             d|t          |          |t          |          |j                  }|dk    r|                                  t
          d S )Nr   r=   )r   ECDSA_verifyrB   r?   _consume_errorsr   )r   rI   rK   r;   rG   s        r   _ecdsa_sig_verifyrO   o   sa     ,
#
#	4TIs9~~z7I C axx!!! xr   c                       e Zd ZddZedej        fd            Zedefd            Z	dej
        dej        defd	Zdej        fd
Zdej        fdZdej        dej        dej        defdZdedej        defdZdS )r:   r   r
   c                     || _         || _        || _        t          ||          }t	          ||          | _        t          ||           t          ||           d S N_backendr?   	_evp_pkeyr)   r8   _curver.   r3   selfr   ec_key_cdataevp_pkeyr(   s        r   __init__z!_EllipticCurvePrivateKey.__init__~   ]    #!g|44+GR88!'<888G\22222r   r   c                     | j         S rR   rV   rX   s    r   curvez_EllipticCurvePrivateKey.curve   
    {r   c                     | j         j        S rR   r`   key_sizer_   s    r   rd   z!_EllipticCurvePrivateKey.key_size       z""r   	algorithmpeer_public_keyc                     | j                             || j                  st          dt          j                  |j        j        | j        j        k    rt          d          t          | j         | j	        |          S )Nz1This backend does not support the ECDH algorithm.z2peer_public_key and self are not on the same curve)
rT   +elliptic_curve_exchange_algorithm_supportedr`   r   r   UNSUPPORTED_EXCHANGE_ALGORITHMnamer   r   rU   )rX   rf   rg   s      r   exchangez!_EllipticCurvePrivateKey.exchange   s     MEE4: 	
 'C7  
  %88D    t~OOOr   c                    | j         j                            | j                  }| j                             || j         j        j        k               | j         j                            |          }| j                             |          }| j         j        	                    | j                  }| j                             || j         j        j        k               | j         j        
                    ||          }| j                             |dk               | j                             |          }t          | j         ||          S )Nr=   )rT   r   r   r?   r   r   r   r   _ec_key_new_by_curve_nidr0   EC_KEY_set_public_key_ec_cdata_to_evp_pkeyrJ   )rX   r%   	curve_nidpublic_ec_keyr2   rG   rZ   s          r   rI   z#_EllipticCurvePrivateKey.public_key   s   "44T\BB$$Udm.@.E%EFFFM&>>uEE	>>yII"99$,GG$$Udm.@.E%EFFFm 66}eLL$$SAX...=66}EE&t}mXNNNr   c                     | j         j                            | j                  }| j                             |          }t          j        ||                                                                           S )N)private_valuepublic_numbers)	rT   r   EC_KEY_get0_private_keyr?   
_bn_to_intr	   EllipticCurvePrivateNumbersrI   ru   )rX   bnrt   s      r   private_numbersz(_EllipticCurvePrivateKey.private_numbers   sg    ]77EE0044-'??,,;;==
 
 
 	
r   encodingformatencryption_algorithmc                 T    | j                             |||| | j        | j                  S rR   )rT   _private_key_bytesrU   r?   )rX   r{   r|   r}   s       r   private_bytesz&_EllipticCurvePrivateKey.private_bytes   s4     }// NL
 
 	
r   r;   r   c                 |    t          |           t          ||j                  \  }}t          | j        | |          S rR   )r   r   rf   rH   rT   )rX   r;   r   _s       r   signz_EllipticCurvePrivateKey.sign   sE    
 	##67771)
 
a t}dD999r   Nr   r
   )__name__
__module____qualname__r[   propertyr	   EllipticCurver`   intrd   ECDHEllipticCurvePublicKeybytesrl   rI   rx   rz   r   EncodingPrivateFormatKeySerializationEncryptionr   EllipticCurveSignatureAlgorithmr    r   r   r:   r:   }   sh       3 3 3 3 r'    X ## # # # X#PP353LP	P P P P(OB5 O O O O"
!? 
 
 
 

(
 +
 ,F	

 

 
 
 

:
:  ?
: 
	
: 
: 
: 
: 
: 
:r   c                       e Zd ZddZedej        fd            Zedefd            Z	dej
        fdZdej        defd	Zd
ej        dej        defdZdededej        ddfdZdS )rJ   r   r
   c                     || _         || _        || _        t          ||          }t	          ||          | _        t          ||           t          ||           d S rR   rS   rW   s        r   r[   z _EllipticCurvePublicKey.__init__   r\   r   r   c                     | j         S rR   r^   r_   s    r   r`   z_EllipticCurvePublicKey.curve   ra   r   c                     | j         j        S rR   rc   r_   s    r   rd   z _EllipticCurvePublicKey.key_size   re   r   c                 F   | j         j                            | j                  }| j                             || j         j        j        k               | j         j                            | j                  }| j                             || j         j        j        k               | j                                         5 }| j         j        	                    |          }| j         j        	                    |          }| j         j        
                    |||||          }| j                             |dk               | j                             |          }| j                             |          }d d d            n# 1 swxY w Y   t          j        ||| j                  S )Nr=   )xyr`   )rT   r   r   r?   r   r   r   r0   _tmp_bn_ctx
BN_CTX_getEC_POINT_get_affine_coordinatesrw   r	   EllipticCurvePublicNumbersrV   )	rX   r%   r2   bn_ctxbn_xbn_yrG   r   r   s	            r   ru   z&_EllipticCurvePublicKey.public_numbers   s   "44T\BB$$Udm.@.E%EFFF"99$,GG$$Udm.@.E%EFFF]&&(( 
	/F=%0088D=%0088D-$DDudD& C M((222((..A((..A
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ ,qAT[IIIIs   <B4E<<F F r|   c           	         |t           j        j        u r| j        j        j        }n&|t           j        j        u sJ | j        j        j        }| j        j                            | j	                  }| j        
                    || j        j        j        k               | j        j                            | j	                  }| j        
                    || j        j        j        k               | j                                        5 }| j        j                            |||| j        j        j        d|          }| j        
                    |dk               | j        j                            d|          }| j        j                            ||||||          }| j        
                    ||k               d d d            n# 1 swxY w Y   | j        j                            |          d d          S )Nr   zchar[])r   PublicFormatCompressedPointrT   r   POINT_CONVERSION_COMPRESSEDUncompressedPointPOINT_CONVERSION_UNCOMPRESSEDr   r?   r   r   r   r0   r   EC_POINT_point2octr@   rC   )	rX   r|   
conversionr%   r2   r   buflenbufrG   s	            r   _encode_pointz%_EllipticCurvePublicKey._encode_point  s   ]/???+GJJ]7IIIII+IJ"44T\BB$$Udm.@.E%EFFF"99$,GG$$Udm.@.E%EFFF]&&(( 		8F]'::uj$-*<*A1f F M((!444-$((6::C-$77uj#vv C M((3777		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 }!((--aaa00s   B4GGGr{   c                 p   |t           j        j        u s&|t           j        j        u s|t           j        j        u r[|t           j        j        us$|t           j        j        t           j        j        fvrt          d          |                     |          S | j        	                    ||| | j
        d           S )NzKX962 encoding must be used with CompressedPoint or UncompressedPoint format)r   r   X962r   r   r   r   r   rT   _public_key_bytesrU   )rX   r{   r|   s      r   public_bytesz$_EllipticCurvePublicKey.public_bytes  s     .3333CCC3EEE}5:::f*:*<M ? ? !/  
 %%f---=22&$  r   rK   r;   r   Nc                     t          |           t          ||j                  \  }}t          | j        | ||           d S rR   )r   r   rf   rO   rT   )rX   rK   r;   r   r   s        r   verifyz_EllipticCurvePublicKey.verify2  sM     	##67771)
 
a 	$-y$?????r   r   )r   r   r   r[   r   r	   r   r`   r   rd   r   ru   r   r   r   r   r   r   r   r   r   r   r   rJ   rJ      s>       3 3 3 3 r'    X ## # # # X#J = J J J J*1M$> 15 1 1 1 10( * 
	   2@@ @  ?	@
 
@ @ @ @ @ @r   r   )r   r
   r   N)typingcryptography.exceptionsr   r   r   *cryptography.hazmat.backends.openssl.utilsr   r   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr	   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr
   r   r   strr)   r.   r3   r   r8   r   rH   rO   EllipticCurvePrivateKeyr:   r   rJ   r   r   r   <module>r      sB  
          
        9 8 8 8 8 8 8 8 8 8 8 8	 EDDDDDD
;
	
 
 
 
i C    <	 	 	 	
 
 
 

9 
# 
":J 
 
 
 
88%?8GL8
8 8 8 8)  	
 
   Y: Y: Y: Y: Y:r9 Y: Y: Y:xd@ d@ d@ d@ d@b7 d@ d@ d@ d@ d@r   