o ge+@sddlmZmZddlmZddlmZddZddZGdd d ej Z d e fd d Z Gd ddej ZGdddejZdS))UnsupportedAlgorithm_Reasons) serialization)dhcCs|j}|j}||}|||jk|||j}|jrD|d}| ||j||j| |d}| ||j||j}||dk|SN BIGNUM **r) _lib_ffi DHparams_dupopenssl_assertNULLgcDH_freeCRYPTOGRAPHY_IS_LIBRESSLnew DH_get0_pqgBN_dup DH_set0_pqg)dh_cdatabackendlibffi param_cdataqq_dupresrI/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/dh.py_dh_params_dup s  rcCst||}t||SN)r _DHParameters)rrrrrr_dh_cdata_to_parameterss  r"c@sNeZdZddZdejfddZdejfddZde j d e j de fd d Z d S) r!cCs||_||_dSr )_backend _dh_cdata)selfrrrrr__init__#s z_DHParameters.__init__returncCs|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrFd}n|j|d}t j |j|d|j|d|dS)Nrrpgr) r#r rr rr$r r _bn_to_intrDHParameterNumbers)r%r)r*rq_valrrrparameter_numbers'sz_DHParameters.parameter_numberscCs |j|Sr )r#generate_dh_private_keyr%rrrgenerate_private_key8s z"_DHParameters.generate_private_keyencodingformatcCs~|tjjur td|jjjs6|jjd}|jj |j |jjj ||jjj |d|jjj kr6t dt j|j|||j S)Nz%Only PKCS3 serialization is supportedrr'DH X9.42 serialization is not supported)rParameterFormatPKCS3 ValueErrorr#r Cryptography_HAS_EVP_PKEY_DHXr rrr$r rrUNSUPPORTED_SERIALIZATION_parameter_bytesr%r2r3rrrrparameter_bytes;s  z_DHParameters.parameter_bytesN)__name__ __module__ __qualname__r&rr,r. DHPrivateKeyr1rEncodingr5bytesr<rrrrr!"sr!r'cCsL|jd}|j|||jj|jj||d|jjk|j|dS)Nrr)r rr rr r BN_num_bits)rrr)rrr_get_dh_num_bitsSs rDc@seZdZddZedefddZdejfddZ dej de fd d Z d d Z dej fd dZdejfddZdejdejdejde fddZdS) _DHPrivateKeycCs&||_||_||_|jj||_dSr )r#r$ _evp_pkeyr DH_size_key_size_bytesr%rrevp_pkeyrrrr&[z_DHPrivateKey.__init__r'cCt|j|jSr )rDr#r$r0rrrkey_sizeasz_DHPrivateKey.key_sizecCsT|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrFd}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)r#r rr rr$r r r+ DH_get0_keyrDHPrivateNumbersDHPublicNumbersr,)r%r)r*rr-pub_keypriv_keyrrrprivate_numberses2z_DHPrivateKey.private_numberspeer_public_keycCsTt|ts td|jj|j|jjj}|j ||jjjk|jj ||jjj }|jj |}|j |dk|jj ||j}||dk|jjd}|jj||jjj|}||dk|j |ddk|jjd|d}|jj|||}|j |dk|jj||ddd}|jt|}|dkrd||}|S)Nz%peer_public_key must be a DHPublicKeyrzsize_t *rzunsigned char[]) isinstance _DHPublicKey TypeErrorr#r EVP_PKEY_CTX_newrFr r r rEVP_PKEY_CTX_freeEVP_PKEY_derive_initEVP_PKEY_derive_set_peer_exchange_assertrEVP_PKEY_derivebufferrHlen)r%rXctxrkeylenbufkeypadrrrexchanges6    z_DHPrivateKey.exchangecCs|s |j}td|dS)NzError computing shared key.)r#_consume_errors_with_textr7)r%okerrors_with_textrrrras z_DHPrivateKey._exchange_assertcCst|j|j}|jjd}|jj|j||jjj|j|d|jjjk|jj |d}|j||jjjk|jj |||jjj}|j|dk|j |}t |j||Sr) rr$r#r rr rRr r r DH_set0_key_dh_cdata_to_evp_pkeyr[)r%rrU pub_key_duprrJrrr public_keys  z_DHPrivateKey.public_keycCrLr r"r$r#r0rrr parametersz_DHPrivateKey.parametersr2r3encryption_algorithmcCs|tjjur td|jjjs6|jjd}|jj |j |jjj ||jjj |d|jjj kr6t dt j|j|||||j|j S)Nz0DH private keys support only PKCS8 serializationrrr4)r PrivateFormatPKCS8r7r#r r8r rrr$r rrr9_private_key_bytesrF)r%r2r3rurrrr private_bytess2  z_DHPrivateKey.private_bytesN)r=r>r?r&propertyintrMrrSrW DHPublicKeyrBrjrarq DHParametersrsrrArvKeySerializationEncryptionryrrrrrEZs$$rEc@s`eZdZddZedefddZdejfddZ dej fdd Z d e j d e jdefd d ZdS)r[cCs&||_||_||_t|j|j|_dSr )r#r$rFrD_key_size_bitsrIrrrr&rKz_DHPublicKey.__init__r'cCs|jSr )rr0rrrrMsz_DHPublicKey.key_sizecCs|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrFd}n|j|d}|jjd}|jj |j||jjj|j|d|jjjkt j t j |j|d|j|d|d|j|ddS)Nrrr(rN) r#r rr rr$r r r+rRrrTr,)r%r)r*rr-rUrrrrPs,z_DHPublicKey.public_numberscCrLr rrr0rrrrsrtz_DHPublicKey.parametersr2r3cCs|tjjur td|jjjs6|jjd}|jj |j |jjj ||jjj |d|jjj kr6t dt j|j||||jdS)Nz>DH public keys support only SubjectPublicKeyInfo serializationrrr4)r PublicFormatSubjectPublicKeyInfor7r#r r8r rrr$r rrr9_public_key_bytesrFr;rrr public_bytes s(   z_DHPublicKey.public_bytesN)r=r>r?r&rzr{rMrrTrPr}rsrrArrBrrrrrr[sr[N)cryptography.exceptionsrrcryptography.hazmat.primitivesr)cryptography.hazmat.primitives.asymmetricrrr"r}r!r{rDr@rEr|r[rrrrs  1