Current File : //lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-39.pyc
a

�a.2�@s�ddlmZddlmZmZmZddlmZmZm	Z	m
Z
ddlmZm
Z
ddlmZmZmZejd�dd�Zd	d
�Zdd�Zd
d�Zdd�Zdd�ZGdd�de�ZGdd�de�ZGdd�dej�ZGdd�dej�ZdS)�)�utils)�InvalidSignature�UnsupportedAlgorithm�_Reasons)�_calculate_digest_and_algorithm�_check_not_prehashed�_evp_pkey_derive�_warn_sign_verify_deprecated)�hashes�
serialization)�AsymmetricSignatureContext�AsymmetricVerificationContext�ec��signature_algorithmcCst|tj�stdtj��dS)Nz/Unsupported elliptic curve signature algorithm.)�
isinstancerZECDSArrZ UNSUPPORTED_PUBLIC_KEY_ALGORITHMr�r�M/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/ec.py�_check_signature_algorithms
�rcCs�|j�|�}|�||jjk�|j�|�}||jjkr>td��|jjs^|j�	|�dkr^td��|j�
|�}|�||jjk�|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_nameZ	NID_undef�
ValueErrorZCRYPTOGRAPHY_IS_LIBRESSLZEC_GROUP_get_asn1_flagZ
OBJ_nid2sn�string�decode)�backendZec_key�groupZnidZ
curve_name�snrrr�_ec_key_curve_sn$s$����r"cCs|j�||jj�dS)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)rZEC_KEY_set_asn1_flagZOPENSSL_EC_NAMED_CURVE)rZec_cdatarrr�_mark_asn1_named_ec_curveBs�r#cCs8ztj|�WSty2td�|�tj��Yn0dS)Nz${} is not a supported elliptic curve)rZ_CURVE_TYPES�KeyErrorr�formatrZUNSUPPORTED_ELLIPTIC_CURVE)rr!rrr�_sn_to_elliptic_curveNs�r&cCsz|j�|j�}|�|dk�|j�d|�}|j�dd�}|j�d|t|�|||j�}|�|dk�|j�|�d|d�S)Nrzunsigned char[]zunsigned int[]�)	rZ
ECDSA_size�_ec_keyrr�newZ
ECDSA_sign�len�buffer)r�private_key�dataZmax_sizeZsigbufZ
siglen_ptr�resrrr�_ecdsa_sig_signXs�r/cCs8|j�d|t|�|t|�|j�}|dkr4|��t�dS)Nrr')rZECDSA_verifyr*r(Z_consume_errorsr)r�
public_key�	signaturer-r.rrr�_ecdsa_sig_verifyes�r2c@s>eZdZejejd�dd�Zedd�dd�Z	ed�d	d
�Z
dS)�_ECDSASignatureContext)r,�	algorithmcCs||_||_t�||�|_dS�N)�_backend�_private_keyr
�Hash�_digest)�selfrr,r4rrr�__init__osz_ECDSASignatureContext.__init__N�r-�returncCs|j�|�dSr5�r9�update�r:r-rrrr?ysz_ECDSASignatureContext.update�r=cCs|j��}t|j|j|�Sr5)r9�finalizer/r6r7�r:�digestrrrrB|s
z_ECDSASignatureContext.finalize)�__name__�
__module__�__qualname__r�EllipticCurvePrivateKeyr
�
HashAlgorithmr;�bytesr?rBrrrrr3ns
�
r3c@s@eZdZejeejd�dd�Zedd�dd�Z	dd�d	d
�Z
dS)�_ECDSAVerificationContext)r0r1r4cCs$||_||_||_t�||�|_dSr5)r6�_public_key�
_signaturer
r8r9)r:rr0r1r4rrrr;�sz"_ECDSAVerificationContext.__init__Nr<cCs|j�|�dSr5r>r@rrrr?�sz _ECDSAVerificationContext.updaterAcCs"|j��}t|j|j|j|�dSr5)r9rBr2r6rLrMrCrrr�verify�s
�z _ECDSAVerificationContext.verify)rErFrGr�EllipticCurvePublicKeyrJr
rIr;r?rNrrrrrK�s�rKc@s�eZdZdd�Ze�d�Zeed�dd��Z	e
jed�dd	�Z
e
je
jed
�dd�Ze
jd�d
d�Ze
jd�dd�Zejejejed�dd�Zee
jed�dd�ZdS)�_EllipticCurvePrivateKeycCs6||_||_||_t||�}t||�|_t||�dSr5�r6r(�	_evp_pkeyr"r&�_curver#�r:rZec_key_cdata�evp_pkeyr!rrrr;�s
z!_EllipticCurvePrivateKey.__init__rSrAcCs|jjSr5��curve�key_size�r:rrrrX�sz!_EllipticCurvePrivateKey.key_size)rr=cCs:t�t|�t|j�t|jtj�s*J�t|j||j�Sr5)	r	rrr4rr
rIr3r6)r:rrrr�signer�s

�z_EllipticCurvePrivateKey.signer)r4�peer_public_keyr=cCsD|j�||j�stdtj��|jj|jjkr4td��t|j|j	|�S)Nz1This backend does not support the ECDH algorithm.z2peer_public_key and self are not on the same curve)
r6Z+elliptic_curve_exchange_algorithm_supportedrWrrZUNSUPPORTED_EXCHANGE_ALGORITHM�namerrrR)r:r4r[rrr�exchange�s����z!_EllipticCurvePrivateKey.exchangecCs�|jj�|j�}|j�||jjjk�|jj�|�}|j�|�}|jj�	|j�}|j�||jjjk�|jj�
||�}|j�|dk�|j�|�}t|j||�S)Nr')
r6rrr(rrrrZ_ec_key_new_by_curve_nid�EC_KEY_get0_public_keyZEC_KEY_set_public_keyZ_ec_cdata_to_evp_pkey�_EllipticCurvePublicKey)r:r Z	curve_nidZ
public_ec_key�pointr.rUrrrr0�sz#_EllipticCurvePrivateKey.public_keycCs2|jj�|j�}|j�|�}tj||����d�S)N)�
private_value�public_numbers)	r6rZEC_KEY_get0_private_keyr(�
_bn_to_intr�EllipticCurvePrivateNumbersr0rb)r:Zbnrarrr�private_numbers�s
�z(_EllipticCurvePrivateKey.private_numbers)�encodingr%�encryption_algorithmr=cCs|j�|||||j|j�Sr5)r6Z_private_key_bytesrRr()r:rfr%rgrrr�
private_bytes�s�z&_EllipticCurvePrivateKey.private_bytes)r-rr=cCs*t|�t|j||j�\}}t|j||�Sr5)rrr6�
_algorithmr/)r:r-rr4rrr�sign�s�z_EllipticCurvePrivateKey.signN)rErFrGr;r�read_only_propertyrW�property�intrXr�EllipticCurveSignatureAlgorithmrrZZECDHrOrJr]r0rdrer�EncodingZ
PrivateFormatZKeySerializationEncryptionrhrjrrrrrP�s*	
�
�
��rPc@s�eZdZdd�Ze�d�Zeed�dd��Z	e
eje
d�dd	�Zejd�d
d�Zeje
d�d
d�Zejeje
d�dd�Ze
e
ejdd�dd�ZdS)r_cCs6||_||_||_t||�}t||�|_t||�dSr5rQrTrrrr;s
z _EllipticCurvePublicKey.__init__rSrAcCs|jjSr5rVrYrrrrXsz _EllipticCurvePublicKey.key_size)r1rr=cCsHt�t�d|�t|�t|j�t|jtj�s6J�t	|j
|||j�S)Nr1)r	r�_check_bytesrrr4rr
rIrKr6)r:r1rrrr�verifiers
�z _EllipticCurvePublicKey.verifierc
Cs�|j�|j�\}}|jj�|j�}|j�||jjjk�|j���d}|jj�	|�}|jj�	|�}||||||�}|j�|dk�|j�
|�}|j�
|�}	Wd�n1s�0Ytj||	|j
d�S)Nr')�x�yrW)r6Z _ec_key_determine_group_get_funcr(rr^rrr�_tmp_bn_ctxZ
BN_CTX_getrcr�EllipticCurvePublicNumbersrS)
r:Zget_funcr r`�bn_ctxZbn_xZbn_yr.rrrsrrrrbs�*z&_EllipticCurvePublicKey.public_numbers)r%r=c		Cs&|tjjur|jjj}n|tjjus(J�|jjj}|jj�|j	�}|j�
||jjjk�|jj�
|j	�}|j�
||jjjk�|j���v}|jj�||||jjjd|�}|j�
|dk�|jj�d|�}|jj�||||||�}|j�
||k�Wd�n1�s0Y|jj�|�dd�S)Nrzchar[])r�PublicFormat�CompressedPointr6rZPOINT_CONVERSION_COMPRESSED�UncompressedPointZPOINT_CONVERSION_UNCOMPRESSEDrr(rrrr^rtZEC_POINT_point2octr)r+)	r:r%�
conversionr r`rv�buflen�bufr.rrr�
_encode_point2s&
��0z%_EllipticCurvePublicKey._encode_point)rfr%r=cCsp|tjjus$|tjjus$|tjjurV|tjjusD|tjjtjjfvrLtd��|�|�S|j�	||||j
d�SdS)NzKX962 encoding must be used with CompressedPoint or UncompressedPoint format)rroZX962rwrxryrr}r6Z_public_key_bytesrR)r:rfr%rrr�public_bytesJs"
�
�
���
�z$_EllipticCurvePublicKey.public_bytesN)r1r-rr=cCs0t|�t|j||j�\}}t|j|||�dSr5)rrr6rir2)r:r1r-rr4rrrrNcs�z_EllipticCurvePublicKey.verify)rErFrGr;rrkrWrlrmrXrJrrnr
rqrurbrrwr}ror~rNrrrrr_�s&	
���r_N)ZcryptographyrZcryptography.exceptionsrrrZ*cryptography.hazmat.backends.openssl.utilsrrrr	Zcryptography.hazmat.primitivesr
rZ)cryptography.hazmat.primitives.asymmetricrr
rrnrr"r#r&r/r2r3rKrHrPrOr_rrrr�<module>s�


	f