/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__
Edit: /usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-310.pyc (11680B)
o
Ri_8 @ s d dl mZ d dlmZmZmZ d dlmZmZm Z d dl
mZmZ d dl
mZmZmZ dejfddZd d
Zdd Zd#ddZd#ddZdd Zdd Zdd ZG dd deZG dd deZG dd d ejZG d!d" d"ejZdS )$ )utils)InvalidSignatureUnsupportedAlgorithm_Reasons)_calculate_digest_and_algorithm_check_not_prehashed_warn_sign_verify_deprecated)hashes
serialization)AsymmetricSignatureContextAsymmetricVerificationContextecsignature_algorithmc C s t | tjstdtjd S )Nz/Unsupported elliptic curve signature algorithm.)
isinstancer
ECDSAr r UNSUPPORTED_PUBLIC_KEY_ALGORITHM)r r I/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ec.py_check_signature_algorithm s r c C s | j |}| || jjk | j |}|| j jkrtd| j js/| j |dkr/td| j
|}| || jjk | j|d}|S )Nz;ECDSA keys with unnamed curves are unsupported at this timer ascii)
_libEC_KEY_get0_groupopenssl_assert_ffiNULLEC_GROUP_get_curve_name NID_undefNotImplementedErrorCRYPTOGRAPHY_IS_LIBRESSLEC_GROUP_get_asn1_flag
OBJ_nid2snstringdecode)backendec_keygroupnid
curve_namesnr r r _ec_key_curve_sn# s" r) c C s | 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 EC_KEY_set_asn1_flagOPENSSL_EC_NAMED_CURVE)r# ec_cdatar r r _mark_asn1_named_ec_curveA s r- r# BackendreturnNc C sV | j |}| || jjk | j |}| || jjk | j ||r)tdd 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_infinity
ValueError)r# r, pointr% r r r _check_key_infinityM s r4 c C s\ | j |}| || jjk | j |}| |}|dkr*| j |dkr,tdd S d S )N z1Invalid EC key (key out of range, infinity, etc.)) r r r r r EC_GROUP_get0_cofactor
_bn_to_intEC_KEY_check_keyr2 )r# r, r% bncofactorr r r _check_key_cofactorW s
r; c C s0 zt j| W S ty td|tjw )Nz${} is not a supported elliptic curve)r
_CURVE_TYPESKeyErrorr formatr UNSUPPORTED_ELLIPTIC_CURVE)r# r( r r r _sn_to_elliptic_curveb s r@ c C sz | j |j}| |dk | jd|}| jdd}| j d|t||||j}| |dk | j|d |d S )Nr zunsigned char[]zunsigned int[]r5 ) r
ECDSA_size_ec_keyr r new
ECDSA_signlenbuffer)r# private_keydatamax_sizesigbuf
siglen_ptrresr r r _ecdsa_sig_signl s rM c C s8 | j d|t||t||j}|dkr| td S )Nr r5 )r ECDSA_verifyrE rB _consume_errorsr )r#
public_key signaturerH rL r r r _ecdsa_sig_verifyy s rR c @ sB e Zd ZdejdejfddZdeddfdd Z defd
dZ
dS )_ECDSASignatureContextrG algorithmc C s || _ || _t||| _d S N)_backend_private_keyr Hash_digest)selfr# rG rT r r r __init__ s z_ECDSASignatureContext.__init__rH r/ Nc C | j | d S rU rY updaterZ rH r r r r^ z_ECDSASignatureContext.updatec C s | j }t| j| j|S rU )rY finalizerM rV rW rZ digestr r r ra s
z_ECDSASignatureContext.finalize)__name__
__module____qualname__r
EllipticCurvePrivateKeyr
HashAlgorithmr[ bytesr^ ra r r r r rS s
rS c @ sB e Zd ZdejdedejfddZdeddfd d
Z d
ddZ
dS )_ECDSAVerificationContextrP rQ rT c C s$ || _ || _|| _t||| _d S rU )rV _public_key
_signaturer rX rY )rZ r# rP rQ rT r r r r[ s z"_ECDSAVerificationContext.__init__rH r/ Nc C r\ rU r] r_ r r r r^ r` z _ECDSAVerificationContext.updatec C s" | j }t| j| j| j| d S rU )rY ra rR rV rk rl rb r r r verify s
z _ECDSAVerificationContext.verify)r/ N)rd re rf r
EllipticCurvePublicKeyri r rh r[ r^ rm r r r r rj s
rj c @ s e Zd Zdd ZedZedefddZ de
jdefdd Z
d
e
jde
jdefdd
Zde
jfddZde
jfddZdejdejdejdefddZdede
jdefddZdS )_EllipticCurvePrivateKeyc C s@ || _ || _|| _t||}t||| _t|| t|| d S rU )rV rB _evp_pkeyr) r@ _curver- r4 rZ r# ec_key_cdataevp_pkeyr( r r r r[ s
z!_EllipticCurvePrivateKey.__init__rq r/ c C | j jS rU curvekey_sizerZ r r r rx z!_EllipticCurvePrivateKey.key_sizer c C s: t t| t|j t|jtjsJ t| j| |jS rU ) r r r rT r r rh rS rV )rZ r r r r signer s
z_EllipticCurvePrivateKey.signerrT peer_public_keyc C s | j || jstdtj|jj| jjkrtd| j j | j
}| j j|d d }| j |dk | j j
d|}| j j|j
}| j j|||| j
| j j
j}| j |dk | j j
|d | S )Nz1This backend does not support the ECDH algorithm.z2peer_public_key and self are not on the same curve r z uint8_t[])rV +elliptic_curve_exchange_algorithm_supportedrw r r UNSUPPORTED_EXCHANGE_ALGORITHMnamer2 r r rB EC_GROUP_get_degreer r rC r0 ECDH_compute_keyr rF )rZ rT r| r% z_lenz_bufpeer_keyrr r r exchange s0 z!_EllipticCurvePrivateKey.exchangec C s | j j| j}| j || j jjk | j j|}| j |}| j j | j}| j || j jjk | j j
||}| j |dk | j |}t| j ||S )Nr5 )
rV r r rB r r r r _ec_key_new_by_curve_nidr0 EC_KEY_set_public_key_ec_cdata_to_evp_pkey_EllipticCurvePublicKey)rZ r% curve_nid
public_ec_keyr3 rL rt r r r rP s z#_EllipticCurvePrivateKey.public_keyc C s2 | j j| j}| j |}tj|| dS )N)
private_valuepublic_numbers) rV r EC_KEY_get0_private_keyrB r7 r
EllipticCurvePrivateNumbersrP r )rZ r9 r r r r private_numbers s
z(_EllipticCurvePrivateKey.private_numbersencodingr> encryption_algorithmc C s | j |||| | j| jS rU )rV _private_key_bytesrp rB )rZ r r> r r r r
private_bytes s z&_EllipticCurvePrivateKey.private_bytesrH