Current File : //usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyo
�
�b�Xc@`smddlmZmZmZddlmZddlmZmZm	Z	ddl
mZmZddl
mZmZddlmZmZmZd�Zd�Zd	�Zd
�Zd�Zd�Zd
�Zeje�defd��Y�Zeje�defd��Y�Zejej�defd��Y�Z ejej!�defd��Y�Z"dS(i(tabsolute_importtdivisiontprint_function(tutils(tInvalidSignaturetUnsupportedAlgorithmt_Reasons(t_calculate_digest_and_algorithmt_truncate_digest(thashest
serialization(tAsymmetricSignatureContexttAsymmetricVerificationContexttecc
C`s�|j}|j}|j|�}|j��c}|j|�}|j||jk�|j|||�}|j|dk�|j|�}	WdQXt	||	�S(s�
    This function truncates digests that are longer than a given elliptic
    curve key's length so they can be signed. Since elliptic curve keys are
    much shorter than RSA keys many digests (e.g. SHA-512) may require
    truncation.
    iN(
t_libt_ffitEC_KEY_get0_groupt_tmp_bn_ctxt
BN_CTX_gettopenssl_asserttNULLtEC_GROUP_get_ordertBN_num_bitsR(
tec_key_cdatatdigesttbackendRRtgrouptbn_ctxtordertrest
order_bits((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_truncate_digest_for_ecdsas		cC`s+t|tj�s'tdtj��ndS(Ns/Unsupported elliptic curve signature algorithm.(t
isinstanceR
tECDSARRt UNSUPPORTED_PUBLIC_KEY_ALGORITHM(tsignature_algorithm((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_check_signature_algorithm-scC`s�|jj|�}|j||jjk�|jj|�}||jjkr^td��n|jj|�}|j||jjk�|jj	|�j
d�}|S(NsCECDSA certificates with unnamed curves are unsupported at this timetascii(RRRRRtEC_GROUP_get_curve_namet	NID_undeftNotImplementedErrort
OBJ_nid2sntstringtdecode(Rtec_keyRtnidt
curve_nametsn((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_ec_key_curve_sn4scC`s|jj||jj�dS(s�
    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(RtEC_KEY_set_asn1_flagtOPENSSL_EC_NAMED_CURVE(Rtec_cdata((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_mark_asn1_named_ec_curveHs	cC`sEytj|�SWn,tk
r@tdj|�tj��nXdS(Ns%{0} is not a supported elliptic curve(R
t_CURVE_TYPEStKeyErrorRtformatRtUNSUPPORTED_ELLIPTIC_CURVE(RR/((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_sn_to_elliptic_curveTs
cC`s�|jj|j�}|j|dk�|jjd|�}|jjdd�}|jjd|t|�|||j�}|j|dk�|jj|�|d S(Nisunsigned char[]sunsigned int[]i(	Rt
ECDSA_sizet_ec_keyRRtnewt
ECDSA_signtlentbuffer(Rtprivate_keytdatatmax_sizetsigbuft
siglen_ptrR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_ecdsa_sig_sign^s	!cC`sS|jjd|t|�|t|�|j�}|dkrO|j�t�ntS(Nii(RtECDSA_verifyR>R;t_consume_errorsRtTrue(Rt
public_keyt	signatureRAR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt_ecdsa_sig_verifyks	'
	t_ECDSASignatureContextcB`s#eZd�Zd�Zd�ZRS(cC`s+||_||_tj||�|_dS(N(t_backendt_private_keyR	tHasht_digest(tselfRR@t	algorithm((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt__init__ws		cC`s|jj|�dS(N(RPtupdate(RQRA((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRT|scC`s@|jj�}t|jj||j�}t|j|j|�S(N(RPtfinalizeRRNR;RMRE(RQR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRUs(t__name__t
__module__RSRTRU(((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRLus		t_ECDSAVerificationContextcB`s#eZd�Zd�Zd�ZRS(cC`s4||_||_||_tj||�|_dS(N(RMt_public_keyt
_signatureR	RORP(RQRRIRJRR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRS�s			cC`s|jj|�dS(N(RPRT(RQRA((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRT�scC`sF|jj�}t|jj||j�}t|j|j|j|�S(N(RPRURRYR;RMRKRZ(RQR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytverify�s
(RVRWRSRTR[(((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRX�s		t_EllipticCurvePrivateKeycB`sVeZd�Zejd�Zd�Zd�Zd�Zd�Z	d�Z
d�ZRS(cC`sM||_t||�||_||_t||�}t||�|_dS(N(RMR4R;t	_evp_pkeyR0R9t_curve(RQRRtevp_pkeyR/((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRS�s	
		R^cC`s t|�t|j||j�S(N(R$RLRMRR(RQR#((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytsigner�s
cC`s)|jj||j�s-tdtj��n|jj|jjkrTtd��n|jjj	|j
�}|jjj|�dd}|jj|dk�|jj
jd|�}|jjj|j
�}|jjj||||j
|jj
j�}|jj|dk�|jj
j|�| S(Ns1This backend does not support the ECDH algorithm.s2peer_public_key and self are not on the same curveiiis	uint8_t[](RMt+elliptic_curve_exchange_algorithm_supportedtcurveRRtUNSUPPORTED_EXCHANGE_ALGORITHMtnamet
ValueErrorRRR;tEC_GROUP_get_degreeRRR<tEC_KEY_get0_public_keytECDH_compute_keyRR?(RQRRtpeer_public_keyRtz_lentz_buftpeer_keytr((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytexchange�s$	!cC`s+|jjj|j�}|jj||jjjk�|jjj|�}|jjj|�}|jj||jjjk�|jjj	||jjj
�}|jjj|j�}|jj||jjjk�|jjj||�}|jj|dk�|jj
|�}t|j||�S(Ni(RMRRR;RRRR&tEC_KEY_new_by_curve_nametgctEC_KEY_freeRgtEC_KEY_set_public_keyt_ec_cdata_to_evp_pkeyt_EllipticCurvePublicKey(RQRt	curve_nidt
public_ec_keytpointRR_((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRI�scC`sL|jjj|j�}|jj|�}tjd|d|j�j��S(Nt
private_valuetpublic_numbers(	RMRtEC_KEY_get0_private_keyR;t
_bn_to_intR
tEllipticCurvePrivateNumbersRIRy(RQtbnRx((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytprivate_numbers�s
	cC`s"|jj||||j|j�S(N(RMt_private_key_bytesR]R;(RQtencodingR7tencryption_algorithm((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt
private_bytes�s	cC`sSt|�t|j||j�\}}t|j||j�}t|j||�S(N(R$RRMt
_algorithmRR;RE(RQRAR#RR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytsign�s
(RVRWRSRtread_only_propertyRbR`RnRIR~R�R�(((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyR\�s								RtcB`sDeZd�Zejd�Zd�Zd�Zd�Zd�Z	RS(cC`sM||_t||�||_||_t||�}t||�|_dS(N(RMR4R;R]R0R9R^(RQRRR_R/((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRSs	
		R^cC`sAt|t�std��nt|�t|j|||j�S(Nssignature must be bytes.(R tbytest	TypeErrorR$RXRMRR(RQRJR#((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytverifier
s

c
C`s|jj|j�\}}}|jjj|j�}|jj||jjjk�|jj���}|jjj	|�}|jjj	|�}||||||�}|jj|dk�|jj
|�}	|jj
|�}
WdQXtjd|	d|
d|j
�S(NitxtyRb(RMt%_ec_key_determine_group_get_set_funcsR;RRgRRRRRR{R
tEllipticCurvePublicNumbersR^(RQtset_functget_funcRRwRtbn_xtbn_yRR�R�((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRys	cC`s@|tjjkr!td��n|jj||||jd�S(Ns1EC public keys do not support PKCS1 serialization(R
tPublicFormattPKCS1ReRMt_public_key_bytesR]tNone(RQR�R7((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pytpublic_bytes-s	cC`sVt|�t|j||j�\}}t|j||j�}t|j|||�S(N(R$RRMR�RR;RK(RQRJRAR#RR((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyR[;s
(
RVRWRSRR�RbR�RyR�R[(((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyRts						N(#t
__future__RRRtcryptographyRtcryptography.exceptionsRRRt*cryptography.hazmat.backends.openssl.utilsRRtcryptography.hazmat.primitivesR	R
t)cryptography.hazmat.primitives.asymmetricRRR
RR$R0R4R9RERKtregister_interfacetobjectRLRXt(EllipticCurvePrivateKeyWithSerializationR\t'EllipticCurvePublicKeyWithSerializationRt(((sM/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.pyt<module>s(					
	
	
b