U q`E)@sddlmZmZddlmZddlmZddZddZGdd d ej Z e d d d Z Gd ddej ZGdddejZdS))UnsupportedAlgorithm_Reasons) serialization)dhcCs|j}|j}||}|||jk|||j}|jr|d}| ||j||j| |d}| ||j||j}||dk|SN BIGNUM **r) _lib_ffiZ DHparams_dupopenssl_assertNULLgcZDH_freeZCRYPTOGRAPHY_IS_LIBRESSLnew DH_get0_pqgBN_dupZ DH_set0_pqg)dh_cdatabackendlibffi param_cdataqZq_dupresrN/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/backends/openssl/dh.py_dh_params_dup s  rcCst||}t||SN)r _DHParameters)rrrrrr_dh_cdata_to_parameterss rc@sJeZdZddZejdddZejdddZe j e j e dd d Z d S) rcCs||_||_dSr)_backend _dh_cdata)selfrrrrr__init__#sz_DHParameters.__init__returncCs|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrd}n|j|d}t j |j|d|j|d|dS)Nrrpgr) rr rr rrr r _bn_to_intrDHParameterNumbers)r r%r&rq_valrrrparameter_numbers'sz_DHParameters.parameter_numberscCs |j|Sr)rZgenerate_dh_private_keyr rrrgenerate_private_key8sz"_DHParameters.generate_private_keyencodingformatr#cCs~|tjjk rtd|jjjsl|jjd}|jj |j |jjj ||jjj |d|jjj krlt dt j|j|||j S)Nz%Only PKCS3 serialization is supportedrr'DH X9.42 serialization is not supported)rParameterFormatZPKCS3 ValueErrorrr Cryptography_HAS_EVP_PKEY_DHXr rrrr rrUNSUPPORTED_SERIALIZATIONZ_parameter_bytesr r.r/rrrrparameter_bytes;s   z_DHParameters.parameter_bytesN)__name__ __module__ __qualname__r!rr(r* DHPrivateKeyr,rEncodingr1bytesr6rrrrr"srr"cCsL|jd}|j|||jj|jj||d|jjk|j|dS)Nrr)r rr rr r Z BN_num_bits)rrr%rrr_get_dh_num_bitsSs r=c@seZdZddZeedddZejdddZ ej e dd d Z ej dd d Z ejdd dZejejeje dddZdS) _DHPrivateKeycCs&||_||_||_|jj||_dSr)rr _evp_pkeyr ZDH_size_key_size_bytesr rrevp_pkeyrrrr![sz_DHPrivateKey.__init__r"cCst|j|jSr)r=rrr+rrrkey_sizeasz_DHPrivateKey.key_sizecCsT|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrd}n|j|d}|jjd}|jjd}|jj |j|||j|d|jjjk|j|d|jjjkt j t j t j |j|d|j|d|d|j|dd|j|ddS)Nrrr$r*y)public_numbersx)rr rr rrr r r' DH_get0_keyrDHPrivateNumbersDHPublicNumbersr()r r%r&rr)pub_keyZpriv_keyrrrprivate_numberses2z_DHPrivateKey.private_numbers)peer_public_keyr#cCs|jjd|j}|jjd}|jj|j||jjj|j|d|jjjk|jj ||d|j}|dkr|j }t d|nL|j|dk|jj |d|}|jt |}|dkrd||}|SdS)Nzunsigned char[]rrzKError computing shared key. Public key is likely invalid for this exchange.r)rr rr@r rHrr r ZDH_compute_keyZ_consume_errors_with_textr2bufferlen)r rMbufrKrZerrors_with_textkeypadrrrexchanges2  z_DHPrivateKey.exchangecCst|j|j}|jjd}|jj|j||jjj|j|d|jjjk|jj |d}|j||jjjk|jj |||jjj}|j|dk|j |}t |j||Sr) rrrr rr rHr r rZ DH_set0_keyZ_dh_cdata_to_evp_pkey _DHPublicKey)r rrKZ pub_key_duprrBrrr public_keys$ z_DHPrivateKey.public_keycCst|j|jSrrrrr+rrr parameterssz_DHPrivateKey.parameters)r.r/encryption_algorithmr#cCs|tjjk rtd|jjjsl|jjd}|jj |j |jjj ||jjj |d|jjj krlt dt j|j|||||j|j S)Nz0DH private keys support only PKCS8 serializationrrr0)r PrivateFormatZPKCS8r2rr r3r rrrr rrr4Z_private_key_bytesr?)r r.r/rZrrrr private_bytess2  z_DHPrivateKey.private_bytesN)r7r8r9r!propertyintrCrrIrL DHPublicKeyr<rUrW DHParametersrYrr;r[ZKeySerializationEncryptionr\rrrrr>Zsr>c@s\eZdZddZeedddZejdddZ ej ddd Z e j e jed d d Zd S)rVcCs&||_||_||_t|j|j|_dSr)rrr?r=_key_size_bitsrArrrr!sz_DHPublicKey.__init__r"cCs|jSr)rar+rrrrCsz_DHPublicKey.key_sizecCs|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrd}n|j|d}|jjd}|jj |j||jjj|j|d|jjjkt j t j |j|d|j|d|d|j|ddS)Nrrr$rD) rr rr rrr r r'rHrrJr()r r%r&rr)rKrrrrFs0z_DHPublicKey.public_numberscCst|j|jSrrXr+rrrrYsz_DHPublicKey.parametersr-cCs|tjjk rtd|jjjsl|jjd}|jj |j |jjj ||jjj |d|jjj krlt dt j|j||||jdS)Nz>DH public keys support only SubjectPublicKeyInfo serializationrrr0)r PublicFormatZSubjectPublicKeyInfor2rr r3r rrrr rrr4Z_public_key_bytesr?r5rrr public_bytess0  z_DHPublicKey.public_bytesN)r7r8r9r!r]r^rCrrJrFr`rYrr;rbr<rcrrrrrVsrVN)Zcryptography.exceptionsrrZcryptography.hazmat.primitivesrZ)cryptography.hazmat.primitives.asymmetricrrrr`rr^r=r:r>r_rVrrrrs  1|