a ¹aÉ+ã@s€ddlmZmZddlmZddlmZdd„Zdd„ZGdd „d ej ƒZ e d œd d „Z Gd d„dej ƒZGdd„dejƒZdS)é)ÚUnsupportedAlgorithmÚ_Reasons)Ú serialization)ÚdhcCsŒ|j}|j}| |¡}| ||jk¡| ||j¡}|jrˆ| d¡}|  ||j||j¡|  |d¡}|  ||j||j¡}| |dk¡|S©Nú BIGNUM **ré) Ú_libÚ_ffiZ DHparams_dupÚopenssl_assertÚNULLÚgcZDH_freeZCRYPTOGRAPHY_IS_LIBRESSLÚnewÚ DH_get0_pqgÚBN_dupZ DH_set0_pqg)Údh_cdataÚbackendÚlibZffiÚ param_cdataÚqZq_dupÚres©rúM/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/dh.pyÚ_dh_params_dup s  rcCst||ƒ}t||ƒS©N)rÚ _DHParameters)rrrrrrÚ_dh_cdata_to_parameterss rc@sJeZdZdd„Zejdœdd„Zejdœdd„Ze j e j e dœd d „Z d S) rcCs||_||_dSr)Ú_backendÚ _dh_cdata)ÚselfrrrrrÚ__init__#sz_DHParameters.__init__©ÚreturncCsÄ|jj d¡}|jj d¡}|jj d¡}|jj |j|||¡|j |d|jjjk¡|j |d|jjjk¡|d|jjjkrŒd}n|j |d¡}t j |j |d¡|j |d¡|dS)Nrr©ÚpÚgr) rr rr rrr r Ú _bn_to_intrÚDHParameterNumbers)rr$r%rÚq_valrrrÚparameter_numbers'sýz_DHParameters.parameter_numberscCs |j |¡Sr)rZgenerate_dh_private_key©rrrrÚgenerate_private_key8sz"_DHParameters.generate_private_key©ÚencodingÚformatr"cCs~|tjjurtdƒ‚|jjjsl|jj d¡}|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)rÚParameterFormatZPKCS3Ú ValueErrorrr ÚCryptography_HAS_EVP_PKEY_DHXr rrrr rrÚUNSUPPORTED_SERIALIZATIONZ_parameter_bytes©rr-r.rrrrÚparameter_bytes;s   üþz_DHParameters.parameter_bytesN)Ú__name__Ú __module__Ú __qualname__r rr'r)Ú DHPrivateKeyr+rÚEncodingr0Úbytesr5rrrrr"sürr!cCsL|j d¡}|j |||jj|jj¡| |d|jjk¡|j |d¡S)Nrr)r rr rr r Z BN_num_bits)rrr$rrrÚ_get_dh_num_bitsSs r<c@sŠeZdZdd„Zeedœdd„ƒZejdœdd„Z ej e dœd d „Z d d „Z ej dœd d„Zejdœdd„Zejejeje dœdd„ZdS)Ú _DHPrivateKeycCs&||_||_||_|jj |¡|_dSr)rrÚ _evp_pkeyr ZDH_sizeÚ_key_size_bytes©rrrÚevp_pkeyrrrr [sz_DHPrivateKey.__init__r!cCst|j|jƒSr)r<rrr*rrrÚkey_sizeasz_DHPrivateKey.key_sizecCsT|jj d¡}|jj d¡}|jj d¡}|jj |j|||¡|j |d|jjjk¡|j |d|jjjk¡|d|jjjkrŒd}n|j |d¡}|jj d¡}|jj d¡}|jj  |j||¡|j |d|jjjk¡|j |d|jjjk¡t j t j t j |j |d¡|j |d¡|d|j |d¡d|j |d¡dS)Nrrr#©r)Úy)Úpublic_numbersÚx)rr rr rrr r r&Ú DH_get0_keyrÚDHPrivateNumbersÚDHPublicNumbersr')rr$r%rr(Úpub_keyZpriv_keyrrrÚprivate_numberses2ýú÷z_DHPrivateKey.private_numbers)Úpeer_public_keyr"cCsVt|tƒstdƒ‚|jj |j|jjj¡}|j  ||jjjk¡|jj  ||jjj ¡}|jj  |¡}|j  |dk¡|jj  ||j¡}| |dk¡|jj d¡}|jj ||jjj|¡}| |dk¡|j  |ddk¡|jj d|d¡}|jj |||¡}|j  |dk¡|jj ||d¡dd…}|jt|ƒ}|dkrRd||}|S)Nz%peer_public_key must be a DHPublicKeyrzsize_t *rzunsigned char[]ó)Ú isinstanceÚ _DHPublicKeyÚ TypeErrorrr ZEVP_PKEY_CTX_newr>r r r r ZEVP_PKEY_CTX_freeZEVP_PKEY_derive_initZEVP_PKEY_derive_set_peerÚ_exchange_assertrZEVP_PKEY_deriveÚbufferr?Úlen)rrLÚctxrZkeylenÚbufÚkeyZpadrrrÚexchanges6  ÿÿ ÿ  z_DHPrivateKey.exchangecCs|s|j ¡}td|ƒ‚dS)NzError computing shared key.)rZ_consume_errors_with_textr1)rÚokZerrors_with_textrrrrQ¥s  þz_DHPrivateKey._exchange_assertcCsºt|j|jƒ}|jj d¡}|jj |j||jjj¡|j |d|jjjk¡|jj  |d¡}|j ||jjjk¡|jj  |||jjj¡}|j |dk¡|j  |¡}t |j||ƒSr) rrrr rr rGr r rZ DH_set0_keyZ_dh_cdata_to_evp_pkeyrO)rrrJZ pub_key_duprrArrrÚ public_key­sÿ ÿ z_DHPrivateKey.public_keycCst|j|jƒSr©rrrr*rrrÚ parameters¾sz_DHPrivateKey.parameters)r-r.Úencryption_algorithmr"cCs†|tjjurtdƒ‚|jjjsl|jj d¡}|jj  |j |jjj ||jjj ¡|d|jjj krlt dt jƒ‚|j |||||j|j ¡S)Nz0DH private keys support only PKCS8 serializationrrr/)rÚ PrivateFormatZPKCS8r1rr r2r rrrr rrr3Z_private_key_bytesr>)rr-r.r\rrrrÚ private_bytesÁs2 ÿ üþúz_DHPrivateKey.private_bytesN)r6r7r8r ÚpropertyÚintrBrrHrKÚ DHPublicKeyr;rWrQrYÚ DHParametersr[rr:r]ZKeySerializationEncryptionr^rrrrr=Zs$ûr=c@s\eZdZdd„Zeedœdd„ƒZejdœdd„Z ej dœdd „Z e j e jed œd d „Zd S)rOcCs&||_||_||_t|j|jƒ|_dSr)rrr>r<Ú_key_size_bitsr@rrrr äsz_DHPublicKey.__init__r!cCs|jSr)rcr*rrrrBêsz_DHPublicKey.key_sizecCs|jj d¡}|jj d¡}|jj d¡}|jj |j|||¡|j |d|jjjk¡|j |d|jjjk¡|d|jjjkrŒd}n|j |d¡}|jj d¡}|jj  |j||jjj¡|j |d|jjjk¡t j t j |j |d¡|j |d¡|d|j |d¡dS)Nrrr#rC) rr rr rrr r r&rGrrIr')rr$r%rr(rJrrrrEîs,ÿýúz_DHPublicKey.public_numberscCst|j|jƒSrrZr*rrrr[sz_DHPublicKey.parametersr,cCs‚|tjjurtdƒ‚|jjjsl|jj d¡}|jj  |j |jjj ||jjj ¡|d|jjj krlt dt jƒ‚|j ||||jd¡S)Nz>DH public keys support only SubjectPublicKeyInfo serializationrrr/)rÚ PublicFormatZSubjectPublicKeyInfor1rr r2r rrrr rrr3Z_public_key_bytesr>r4rrrÚ public_bytes s( ÿ üþ ÿz_DHPublicKey.public_bytesN)r6r7r8r r_r`rBrrIrErbr[rr:rdr;rerrrrrOãsürON)Zcryptography.exceptionsrrZcryptography.hazmat.primitivesrZ)cryptography.hazmat.primitives.asymmetricrrrrbrr`r<r9r=rarOrrrrÚs  1