ó 9(Zc@`sddlmZmZmZddlmZddlmZmZddl m Z ddl m Z d„Z d„Zeje jƒdefd „ƒYƒZd „Zd „Zeje jƒd efd „ƒYƒZeje jƒdefd„ƒYƒZdS(i(tabsolute_importtdivisiontprint_function(tutils(tUnsupportedAlgorithmt_Reasons(t serialization(tdhcC`sÚ|j}|j}|j|ƒ}|j||jkƒ|j||jƒ}|jdksd|jrÖ|j dƒ}|j ||j||jƒ|j |dƒ}|j ||j||jƒ}|j|dkƒn|S(Ni s BIGNUM **ii( t_libt_ffit DHparams_duptopenssl_asserttNULLtgctDH_freetOPENSSL_VERSION_NUMBERtCRYPTOGRAPHY_IS_LIBRESSLtnewt DH_get0_pqgtBN_dupt DH_set0_pqg(tdh_cdatatbackendtlibtffit param_cdatatqtq_duptres((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt_dh_params_dup s  cC`st||ƒ}t||ƒS(N(Rt _DHParameters(RRR((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt_dh_cdata_to_parameterssRcB`s,eZd„Zd„Zd„Zd„ZRS(cC`s||_||_dS(N(t_backendt _dh_cdata(tselfRR((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt__init__&s cC`s|jjjdƒ}|jjjdƒ}|jjjdƒ}|jjj|j|||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒ|d|jjjkrÆd}n|jj |dƒ}t j d|jj |dƒd|jj |dƒd|ƒS(Ns BIGNUM **itptgR( R R RRRR!R R tNonet _bn_to_intRtDHParameterNumbers(R"R$R%Rtq_val((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pytparameter_numbers*s##  cC`s|jj|ƒS(N(R tgenerate_dh_private_key(R"((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pytgenerate_private_key;scC`sÀ|tjjk r!tdƒ‚n|jjjs§|jjjdƒ}|jjj |j |jjj ||jjj ƒ|d|jjj kr§t dt jƒ‚q§n|jj|||j ƒS(Ns%Only PKCS3 serialization is supporteds BIGNUM **is'DH X9.42 serialization is not supported(RtParameterFormattPKCS3t ValueErrorR RtCryptography_HAS_EVP_PKEY_DHXR RRR!R RRtUNSUPPORTED_SERIALIZATIONt_parameter_bytes(R"tencodingtformatR((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pytparameter_bytes>s"   (t__name__t __module__R#R*R,R5(((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyR$s   cC`s<|j}|j|dj|j|jƒƒtdƒ‚dS(Nis.Public key value is invalid for this exchange.(RR t_lib_reason_matcht ERR_LIB_DHtDH_R_INVALID_PUBKEYR/(terrorsRR((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt_handle_dh_compute_key_errorUs   cC`sh|jjdƒ}|jj|||jj|jjƒ|j|d|jjkƒ|jj|dƒS(Ns BIGNUM **i(R RRRR R t BN_num_bits(RRR$((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt_get_dh_num_bitsas   t _DHPrivateKeycB`sMeZd„Zed„ƒZd„Zd„Zd„Zd„Zd„Z RS(cC`s7||_||_||_|jjj|ƒ|_dS(N(R R!t _evp_pkeyRtDH_sizet_key_size_bytes(R"RRtevp_pkey((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyR#ls   cC`st|j|jƒS(N(R>R R!(R"((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pytkey_sizersc C`sè|jjjdƒ}|jjjdƒ}|jjjdƒ}|jjj|j|||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒ|d|jjjkrÆd}n|jj |dƒ}|jjjdƒ}|jjjdƒ}|jjj |j||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒt j dt j dt jd|jj |dƒd|jj |dƒd|ƒd|jj |dƒƒd |jj |dƒƒS( Ns BIGNUM **itpublic_numbersR*R$R%Rtytx(R R RRRR!R R R&R't DH_get0_keyRtDHPrivateNumberstDHPublicNumbersR((R"R$R%RR)tpub_keytpriv_key((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pytprivate_numbersvs,## ##    cC`s,|jjjd|jƒ}|jjjdƒ}|jjj|j||jjjƒ|jj|d|jjjkƒ|jjj ||d|jƒ}|dkrÅ|jj ƒ}t ||jƒS|jj|dkƒ|jjj |ƒ| }|jt |ƒ}|dkr$d||}n|SdS(Nsunsigned char[]s BIGNUM **iiÿÿÿÿit(R R RRBRRHR!R R tDH_compute_keyt_consume_errorsR<tbuffertlen(R"tpeer_public_keytbufRKRR;tkeytpad((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pytexchange’s$#    cC`s t|j|jƒ}|jjjdƒ}|jjj|j||jjjƒ|jj|d|jjjkƒ|jjj |dƒ}|jj||jjjkƒ|jjj |||jjjƒ}|jj|dkƒ|jj |ƒ}t |j||ƒS(Ns BIGNUM **ii( RR!R R RRRHR R Rt DH_set0_keyt_dh_cdata_to_evp_pkeyt _DHPublicKey(R"RRKt pub_key_dupRRC((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt public_key­s#cC`st|j|jƒS(N(RR!R (R"((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt parameters½scC`sÉ|tjjk r!tdƒ‚n|jjjs§|jjjdƒ}|jjj |j |jjj ||jjj ƒ|d|jjj kr§t dt jƒ‚q§n|jj||||j|j ƒS(Ns0DH private keys support only PKCS8 serializations BIGNUM **is'DH X9.42 serialization is not supported(Rt PrivateFormattPKCS8R/R RR0R RRR!R RRR1t_private_key_bytesR@(R"R3R4tencryption_algorithmR((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt private_bytesÀs&   ( R6R7R#tpropertyRDRMRWR\R]Rb(((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyR?js     RZcB`s;eZd„Zed„ƒZd„Zd„Zd„ZRS(cC`s7||_||_||_t|j|jƒ|_dS(N(R R!R@R>t_key_size_bits(R"RRRC((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyR#Ûs   cC`s|jS(N(Rd(R"((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyRDásc C`s—|jjjdƒ}|jjjdƒ}|jjjdƒ}|jjj|j|||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒ|d|jjjkrÆd}n|jj |dƒ}|jjjdƒ}|jjj |j||jjjƒ|jj|d|jjjkƒt j dt j d|jj |dƒd|jj |dƒd|ƒd|jj |dƒƒS(Ns BIGNUM **iR*R$R%RRF(R R RRRR!R R R&R'RHRRJR((R"R$R%RR)RK((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyREås&## #   cC`st|j|jƒS(N(RR!R (R"((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyR]ýscC`sÆ|tjjk r!tdƒ‚n|jjjs§|jjjdƒ}|jjj |j |jjj ||jjj ƒ|d|jjj kr§t dt jƒ‚q§n|jj||||jdƒS(Ns>DH public keys support only SubjectPublicKeyInfo serializations BIGNUM **is'DH X9.42 serialization is not supported(Rt PublicFormattSubjectPublicKeyInfoR/R RR0R RRR!R RRR1t_public_key_bytesR@R&(R"R3R4R((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyt public_bytess&   (R6R7R#RcRDRER]Rh(((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyRZÙs    N(t __future__RRRt cryptographyRtcryptography.exceptionsRRtcryptography.hazmat.primitivesRt)cryptography.hazmat.primitives.asymmetricRRRtregister_interfacetDHParametersWithSerializationtobjectRR<R>tDHPrivateKeyWithSerializationR?tDHPublicKeyWithSerializationRZ(((sM/tmp/pip-build-wDUJoH/cryptography/cryptography/hazmat/backends/openssl/dh.pyts  0 n