📂 FileMgr
📍
/
usr
/
lib
/
python3
/
dist-packages
/
cryptography
/
hazmat
/
backends
/
openssl
/
__pycache__
✏️ /usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc
✕ Tutup
� �Q�i�. � �8 � d dl mZ d dlZd dlmZmZmZ d dlmZm Z d dl mZ d dlm Z ej rd dlmZ dd�Zdd �Zdd �Zdd�Zdd�Zdd �Z dd�Z dd�Z G d� de j2 � Z G d� de j6 � Zy)� )�annotationsN)�InvalidSignature�UnsupportedAlgorithm�_Reasons)�_calculate_digest_and_algorithm�_evp_pkey_derive)� serialization)�ec)�Backendc �l � t | t j � st dt j � �y )Nz/Unsupported elliptic curve signature algorithm.)� isinstancer �ECDSAr r � UNSUPPORTED_PUBLIC_KEY_ALGORITHM)�signature_algorithms �I/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ec.py�_check_signature_algorithmr s1 � � �)�2�8�8�4�"�=��5�5� � � 5� c �b � | j j |� }| j || j j k7 � | j j |� }|| j j k( rt d� �| j j s)| j j |� dk( rt d� �| j j |� }| j || j j k7 � | j j |� 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)�backend�ec_key�group�nid� curve_name�sns r �_ec_key_curve_snr) # s� � ��L�L�*�*�6�2�E����5�G�L�L�$5�$5�5�6� �,�,� .� .�u� 5�C� �g�l�l�$�$�$��N� � � �L�L�1�1��L�L�/�/��6�!�;��N� � � ���(�(��-�J����:����):�):�:�;� ��� � �Z� (� /� /�� 8�B� �Ir c �d � | j j || j j � y)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. A s% � � �L�L�%�%��'�,�,�5�5�r c �^ � | j j |� }| j || j j k7 � | j j |� }| j || j j k7 � | j j ||� rt d� �y )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 M s� � ��L�L�/�/��9�E����5�G�L�L�$5�$5�5�6��L�L�*�*�8�4�E����5�G�L�L�$5�$5�5�6��|�|�+�+�E�5�9��I� � � :r c �@ � | j j |� }| j || j j k7 � | j j |� }| j |� }|dk7 r*| j j |� dk7 rt d� �y y )N� z1Invalid EC key (key out of range, infinity, etc.)) r r r r r �EC_GROUP_get0_cofactor� _bn_to_int�EC_KEY_check_keyr )r# r- r% �bn�cofactors r �_check_key_cofactorr; W s� � ��L�L�*�*�8�4�E����5�G�L�L�$5�$5�5�6� ��� ,� ,�U� 3�B��!�!�"�%�H��1�}��<�<�(�(��2�a�7��C�� � 8� r c � � t j | � S # t $ r t |� d�t j � �w xY w)Nz" is not a supported elliptic curve)r �_CURVE_TYPES�KeyErrorr r �UNSUPPORTED_ELLIPTIC_CURVE)r# r( s r �_sn_to_elliptic_curver@ b sI � � ����r�"�$�$��� �"��d�4�5��/�/� � � �s � �'A �_EllipticCurvePrivateKeyc � � | j j |j � }| j |dkD � | j j d|� }| j j dd� }| j j d|t |� |||j � }| j |dk( � | j j |� d |d S )Nr zunsigned char[]zunsigned int[]r5 ) r � ECDSA_size�_ec_keyr r �new� ECDSA_sign�len�buffer)r# �private_key�data�max_size�sigbuf� siglen_ptr�ress r �_ecdsa_sig_signrO l s� � � �|�|�&�&�{�':�':�;�H����8�a�<�(� �\�\� � �/�� :�F����!�!�"2�A�6�J� �,�,� !� !� �4��T��F�J��0C�0C��C� ���3�!�8�$��<�<���v�&���A��7�7r �_EllipticCurvePublicKeyc � � | j j d|t |� |t |� |j � }|dk7 r| j � t �y )Nr r5 )r �ECDSA_verifyrG rD �_consume_errorsr )r# � public_key� signaturerJ rN s r �_ecdsa_sig_verifyrV { sS � � �,�,� #� #� �4��T��I�s�9�~�z�7I�7I��C� �a�x����!��� r c � � e Zd Zd d�Zedd�� Zedd�� Z d d�Zdd�Zdd�Z dd�Z dd�Zy )rA c � � || _ || _ || _ t ||� }t ||� | _ t ||� t ||� y �N)�_backendrD � _evp_pkeyr) r@ �_curver. r3 ��selfr# �ec_key_cdata�evp_pkeyr( s r �__init__z!_EllipticCurvePrivateKey.__init__� sE � ��� �#���!��� �g�|� 4��+�G�R�8���!�'�<�8��G�\�2r c � � | j S rY �r\ �r^ s r �curvez_EllipticCurvePrivateKey.curve� � � ��{�{�r c �. � | j j S rY �re �key_sizerd s r ri z!_EllipticCurvePrivateKey.key_size� � � ��z�z�"�"�"r c �4 � | j j || j � st dt j � �|j j | j j k7 rt 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_supportedre r r �UNSUPPORTED_EXCHANGE_ALGORITHM�namer r r[ )r^ � algorithm�peer_public_keys r �exchangez!_EllipticCurvePrivateKey.exchange� s� � � �M�M�E�E��4�:�:� � '�C��7�7�� � � � �%�%������8��D�� � �� � �t�~�~��O�Or c � � | j j j | j � }| j j || j j j k7 � | j j j |� }| j j |� }| j j j | j � }| j j || j j j k7 � | j j j ||� }| j j |dk( � | j j |� }t | j ||� S �Nr5 ) rZ r r rD r r r r �_ec_key_new_by_curve_nidr0 �EC_KEY_set_public_key�_ec_cdata_to_evp_pkeyrP )r^ r% � curve_nid� public_ec_keyr2 rN r` s r rT z#_EllipticCurvePrivateKey.public_key� s � �� � �"�"�4�4�T�\�\�B��� � �$�$�U�d�m�m�.@�.@�.E�.E�%E�F��M�M�&�&�>�>�u�E� �� � �>�>�y�I� �� � �"�"�9�9�$�,�,�G��� � �$�$�U�d�m�m�.@�.@�.E�.E�%E�F��m�m� � �6�6�}�e�L��� � �$�$�S�A�X�.��=�=�6�6�}�E��&�t�}�}�m�X�N�Nr c � � | j j j | j � }| j j |� }t j || j � j � �� S )N)� private_value�public_numbers) rZ r �EC_KEY_get0_private_keyrD r7 r �EllipticCurvePrivateNumbersrT r{ )r^ r9 rz s r �private_numbersz(_EllipticCurvePrivateKey.private_numbers� s] � � �]�]� � � 7� 7���� E��� � �0�0��4� ��-�-�'��?�?�,�;�;�=� � r c �j � | j j |||| | j | j � S rY )rZ �_private_key_bytesr[ rD )r^ �encoding�format�encryption_algorithms r � private_bytesz&_EllipticCurvePrivateKey.private_bytes� s5 � � �}�}�/�/��� ���N�N��L�L� � r c �x � t |� t ||j � \ }}t | j | |� S rY )r r ro rO rZ )r^ rJ r �_s r �signz_EllipticCurvePrivateKey.sign� s<