3 y_5/ @ s d dl mZmZmZ d dlmZ d dlmZmZm Z d dl mZmZm Z d dlmZmZ d dlmZmZmZ dd Zd d Zdd Zd d Zdd Zdd ZejeG dd deZejeG dd deZejejG dd deZ ejej!G dd deZ"dS ) )absolute_importdivisionprint_function)utils)InvalidSignatureUnsupportedAlgorithm_Reasons)_calculate_digest_and_algorithm_check_not_prehashed_warn_sign_verify_deprecated)hashes serialization)AsymmetricSignatureContextAsymmetricVerificationContextecc C s t | tjstdtjd S )Nz/Unsupported elliptic curve signature algorithm.) isinstancer ZECDSAr r Z UNSUPPORTED_PUBLIC_KEY_ALGORITHM)signature_algorithm r /usr/lib64/python3.6/ec.py_check_signature_algorithm s r c C s | j j|}| j|| jjk | j j|}|| j jkr>td| j jr^| j j |dkr^td| j j |}| j|| jjk | jj|jd}|S )Nz;ECDSA keys with unnamed curves are unsupported at this timer ascii) _libEC_KEY_get0_groupopenssl_assert_ffiNULLEC_GROUP_get_curve_nameZ NID_undefNotImplementedErrorZ$CRYPTOGRAPHY_OPENSSL_102U_OR_GREATERZEC_GROUP_get_asn1_flagZ OBJ_nid2snstringdecode)backendZec_keygroupZnidZ curve_namesnr r r _ec_key_curve_sn" s r# c C s | j j|| j j 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)r ZEC_KEY_set_asn1_flagZOPENSSL_EC_NAMED_CURVE)r Zec_cdatar r r _mark_asn1_named_ec_curve@ s r$ c C s8 yt j| S tk r2 tdj|tjY nX d S )Nz${} is not a supported elliptic curve)r Z_CURVE_TYPESKeyErrorr formatr ZUNSUPPORTED_ELLIPTIC_CURVE)r r" r r r _sn_to_elliptic_curveL s r' c C sz | j j|j}| j|dk | jjd|}| jjdd}| j jd|t||||j}| j|dk | jj|d |d S )Nr zunsigned char[]zunsigned int[] ) r Z ECDSA_size_ec_keyr r newZ ECDSA_signlenbuffer)r private_keydataZmax_sizeZsigbufZ siglen_ptrresr r r _ecdsa_sig_signV s r0 c C s8 | j jd|t||t||j}|dkr4| j td S )Nr r( )r ZECDSA_verifyr+ r) Z_consume_errorsr )r public_key signaturer. r/ r r r _ecdsa_sig_verifyc s r3 c @ s$ e Zd Zdd Zdd Zdd ZdS )_ECDSASignatureContextc C s || _ || _tj||| _d S )N)_backend_private_keyr Hash_digest)selfr r- algorithmr r r __init__n s z_ECDSASignatureContext.__init__c C s | j j| d S )N)r8 update)r9 r. r r r r<