
    _f,                        d dl mZ 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!dZd"dZd#dZd$dZd%dZd&dZd'dZ G d dej                  Z G d  dej                  ZdS )(    )annotationsN)InvalidSignatureUnsupportedAlgorithm_Reasons)_calculate_digest_and_algorithm_evp_pkey_derive)serialization)ec)Backendsignature_algorithm"ec.EllipticCurveSignatureAlgorithmreturnNonec                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    Y/var/www/html/env/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/ec.py_check_signature_algorithmr      s>     )2844 
"=5
 
 	

 
    backendr   strc                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_curver2   A   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   r1   pointr)   s       r   _check_key_infinityr7   M   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,   ec.EllipticCurvec                    	 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_curver=   X   sY    
r"$$$ 
 
 
"555/
 
 	

s	    (Aprivate_key_EllipticCurvePrivateKeydatabytesc                   | 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   r>   r@   max_sizesigbuf
siglen_ptrress          r   _ecdsa_sig_signrN   b   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   rC   )r   ECDSA_verifyrH   rE   _consume_errorsr   )r   rO   rQ   r@   rM   s        r   _ecdsa_sig_verifyrU   q   sa     ,
#
#	4TIs9~~z7I C axx!!! xr   c                  n    e Zd ZddZedd            Zed d            Zd!dZd"dZd#dZ	d$dZ
d%dZdS )&r?   r   r   c                    || _         || _        || _        t          ||          }t	          ||          | _        t          ||           t          ||           d S N_backendrE   	_evp_pkeyr-   r=   _curver2   r7   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   r8   c                    | j         S rX   r\   r^   s    r   curvez_EllipticCurvePrivateKey.curve   
    {r   intc                    | j         j        S rX   rf   key_sizere   s    r   rk   z!_EllipticCurvePrivateKey.key_size       z""r   	algorithmec.ECDHpeer_public_keyec.EllipticCurvePublicKeyrA   c                    | 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)
rZ   +elliptic_curve_exchange_algorithm_supportedrf   r   r   UNSUPPORTED_EXCHANGE_ALGORITHMnamer"   r   r[   )r^   rm   ro   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 NrC   )rZ   r   r   rE   r   r   r   r    _ec_key_new_by_curve_nidr4   EC_KEY_set_public_key_ec_cdata_to_evp_pkeyrP   )r^   r)   	curve_nidpublic_ec_keyr6   rM   r`   s          r   rO   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   ec.EllipticCurvePrivateNumbersc                    | j         j                            | j                  }| j                             |          }t          j        ||                                                                           S )N)private_valuepublic_numbers)	rZ   r   EC_KEY_get0_private_keyrE   
_bn_to_intr
   EllipticCurvePrivateNumbersrO   r   )r^   bnr   s      r   private_numbersz(_EllipticCurvePrivateKey.private_numbers   sg    ]77EE0044-'??,,;;==
 
 
 	
r   encodingserialization.Encodingformatserialization.PrivateFormatencryption_algorithm(serialization.KeySerializationEncryptionc                T    | j                             |||| | j        | j                  S rX   )rZ   _private_key_bytesr[   rE   )r^   r   r   r   s       r   private_bytesz&_EllipticCurvePrivateKey.private_bytes   s4     }// NL
 
 	
r   r@   r   r   c                |    t          |           t          ||j                  \  }}t          | j        | |          S rX   )r   r   rm   rN   rZ   )r^   r@   r   _s       r   signz_EllipticCurvePrivateKey.sign   sE    
 	##67771)
 
a t}dD999r   Nr   r   r   r8   r   rh   )rm   rn   ro   rp   r   rA   )r   rp   )r   r}   )r   r   r   r   r   r   r   rA   )r@   rA   r   r   r   rA   )__name__
__module____qualname__ra   propertyrf   rk   ru   rO   r   r   r    r   r   r?   r?      s        3 3 3 3    X # # # X#P P P P(O O O O"
 
 
 

 
 
 

: 
: 
: 
: 
: 
:r   c                  n    e Zd ZddZedd            Zedd            Zd dZd!dZd"dZ	d#dZ
d$dZdS )%rP   r   r   c                    || _         || _        || _        t          ||          }t	          ||          | _        t          ||           t          ||           d S rX   rY   r]   s        r   ra   z _EllipticCurvePublicKey.__init__   rb   r   r   r8   c                    | j         S rX   rd   re   s    r   rf   z_EllipticCurvePublicKey.curve   rg   r   rh   c                    | j         j        S rX   rj   re   s    r   rk   z _EllipticCurvePublicKey.key_size   rl   r   otherobjectboolc                    t          |t                    st          S | j        j                            | j        |j                  dk    S rw   )r   rP   NotImplementedrZ   r   EVP_PKEY_cmpr[   )r^   r   s     r   __eq__z_EllipticCurvePublicKey.__eq__   sF    %!899 	"!! M++DNEOLL	
r   ec.EllipticCurvePublicNumbersc                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 )NrC   )xyrf   )rZ   r   r   rE   r   r   r   r4   _tmp_bn_ctx
BN_CTX_getEC_POINT_get_affine_coordinatesr   r
   EllipticCurvePublicNumbersr\   )	r^   r)   r6   bn_ctxbn_xbn_yrM   r   r   s	            r   r   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   serialization.PublicFormatrA   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CompressedPointrZ   r   POINT_CONVERSION_COMPRESSEDUncompressedPointPOINT_CONVERSION_UNCOMPRESSEDr   rE   r   r   r   r4   r   EC_POINT_point2octrF   rI   )	r^   r   
conversionr)   r6   r   buflenbufrM   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   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	   EncodingX962r   r   r   r"   r   rZ   _public_key_bytesr[   )r^   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   rQ   r@   r   r   r   c                    t          |           t          ||j                  \  }}t          | j        | ||           d S rX   )r   r   rm   rU   rZ   )r^   rQ   r@   r   r   s        r   verifyz_EllipticCurvePublicKey.verify=  sM     	##67771)
 
a 	$-y$?????r   Nr   r   r   )r   r   r   r   )r   r   )r   r   r   rA   )r   r   r   r   r   rA   )rQ   rA   r@   rA   r   r   r   r   )r   r   r   ra   r   rf   rk   r   r   r   r   r   r   r   r   rP   rP      s        3 3 3 3    X # # # X#
 
 
 
J J J J*1 1 1 10   2@ @ @ @ @ @r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   )r   r   r,   r   r   r8   )r   r   r>   r?   r@   rA   r   rA   )
r   r   rO   rP   rQ   rA   r@   rA   r   r   )
__future__r   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-   r2   r7   r=   rN   rU   EllipticCurvePrivateKeyr?   EllipticCurvePublicKeyrP   r   r   r   <module>r      s  
 # " " " " "          
        9 8 8 8 8 8 8 8 8 8 8 8	 EDDDDDD
 
 
 
   <	 	 	 	
 
 
 

 
 
 
8 8 8 8   Y: Y: Y: Y: Y:r9 Y: Y: Y:xm@ m@ m@ m@ m@b7 m@ m@ m@ m@ m@r   