pg/ddlZddlmZmZddlmZddlmZejrddl m Z ddZ dd Z Gd d ej Zd efd ZGddejZGddejZdS)N)UnsupportedAlgorithm_Reasons) serialization)dh)Backendbackendrc|j}|j}||}|||jk|||j}|jr|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_cdatarlibffi param_cdataqq_dupress I/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/dh.py_dh_params_dupr!s ,C ,C""8,,K ;#(2333&&ck22K #) GGK  #(Asx888 1Q4  ook38UCHEEsax((( return _DHParameterscBt||}t||SN)r!r$)rrrs r _dh_cdata_to_parametersr'"s! 733K + . ..r"cjeZdZd dZdejfdZdejfdZde j de j de fd Z d S) r$rrc"||_||_dSr&)_backend _dh_cdata)selfrrs r __init__z_DHParameters.__init__(s !r"r#c|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrd}n |j|d}tj |j|d|j|d|S)Nr rpgr) r*rrr rr+rr _bn_to_intrDHParameterNumbers)r,r0r1rq_vals r parameter_numbersz_DHParameters.parameter_numbers,s; M  " "; / / M  " "; / / M  " "; / / &&t~q!Q??? $$QqTT]-?-D%DEEE $$QqTT]-?-D%DEEE Q44=%* * *EEM,,QqT22E$m&&qt,,m&&qt,,    r"c6|j|Sr&)r*generate_dh_private_keyr,s r generate_private_keyz"_DHParameters.generate_private_key>s}44T:::r"encodingformatc|tjjurtd|tjjurt d|jj d}|jj |j |jjj ||jjj |d|jjj kr+|jj jstdt j|tjjur?|d|jjj kr|jj j}ns|jj j}na|tjjur?|d|jjj kr|jj j}n!|jj j}ntd|j}|||j }|j|dk|j|S)Nz!OpenSSH encoding is not supportedz%Only PKCS3 serialization is supportedr r'DH X9.42 serialization is not supportedz/encoding must be an item from the Encoding enumr )rEncodingOpenSSH TypeErrorParameterFormatPKCS3 ValueErrorr*rrr rr+rCryptography_HAS_EVP_PKEY_DHXrrUNSUPPORTED_SERIALIZATIONPEMPEM_write_bio_DHxparamsPEM_write_bio_DHparamsDERCryptography_i2d_DHxparams_bioi2d_DHparams_bio_create_mem_bio_gcr _read_mem_bio)r,r:r;r write_biobiors r parameter_bytesz_DHParameters.parameter_bytesAs }-5 5 5?@@ @ 6< < <DEE E M  " "; / / && NDM.3Q 8J8O    aDDM&+ + +M&D ,'92  }-1 1 1tt})... M.F  M.E /3 3 3tt})... M.M  M.? MNN Nm..00iT^,, $$SAX...}**3///r"Nrr)__name__ __module__ __qualname__r-rr3r5 DHPrivateKeyr9rr>rAbytesrPr"r r$r$'s"""" 2#8    $;bo;;;;(0((0-(0  (0(0(0(0(0(0r"c*|jd}|j|||jj|jj||d|jjk|j|dS)Nr r)rrr rrr BN_num_bits)rrr0s r _get_dh_num_bitsrZlsy %%A LXq',*;W\=NOOO 1Q47<#44555 < # #AaD ) ))r"ceZdZddZedefdZdejfdZ dej de fdZ d e dd fd Zdej fd Zdejfd Zdejdejdejde fdZd S) _DHPrivateKeyrrcx||_||_||_|jj||_dSr&)r*r+ _evp_pkeyr DH_size_key_size_bytesr,rrevp_pkeys r r-z_DHPrivateKey.__init__ts8 !!#}199(CCr"r#c6t|j|jSr&)rZr*r+r8s r key_sizez_DHPrivateKey.key_sizezs t~>>>r"c T|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|jjjktj tj tj |j|d|j|d||j|d|j|dS)Nr rr/r5y)public_numbersx)r*rrr rr+rrr2 DH_get0_keyrDHPrivateNumbersDHPublicNumbersr3)r,r0r1rr4pub_keypriv_keys r private_numbersz_DHPrivateKey.private_numbers~s4 M  " "; / / M  " "; / / M  " "; / / &&t~q!Q??? $$QqTT]-?-D%DEEE $$QqTT]-?-D%DEEE Q44=%* * *EEM,,QqT22E-$((55=%))+66 &&t~wIII $$WQZ4=3E3J%JKKK $$Xa[DM4F4K%KLLL"-"$"7m..qt44m..qt44### -**71:66 m&&x{33    r"peer_public_keyct|tstd|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'|z }|dkrd|z|z}|S)Nz%peer_public_key must be a DHPublicKeyr zsize_t *rzunsigned char[]) isinstance _DHPublicKeyr@r*r EVP_PKEY_CTX_newr^rrrrEVP_PKEY_CTX_freeEVP_PKEY_derive_initEVP_PKEY_derive_set_peer_exchange_assertrEVP_PKEY_derivebufferr`len)r,rpctxrkeylenbufkeypads r exchangez_DHPrivateKey.exchanges&/<88 ECDD Dm 11 NDM.3   $$SDM,>,C%CDDDm ##C);)MNNm 55c:: $$SAX...m 99 *   cQh'''#'' 33m 00 #(&   cQh''' $$VAY]333m $$%6q BBm 00c6BB $$SAX...m ''VAY77:"SXX- 77S=C'C r"okNc\|s)|j}td|dS)NzError computing shared key.)r*_consume_errors_with_textrC)r,rerrors_with_texts r ryz_DHPrivateKey._exchange_asserts@ #}FFHH -    r"ct|j|j}|jjd}|jj|j||jjj|j|d|jjjk|jj |d}|j||jjjk|jj |||jjj}|j|dk|j |}t|j||Sr ) r!r+r*rrr rjrrr DH_set0_key_dh_cdata_to_evp_pkeyrt)r,rrm pub_key_duprrbs r public_keyz_DHPrivateKey.public_keys1!$.$-@@-$((55 && NGT]%7%<    $$WQZ4=3E3J%JKKKm(// ;;  $$[DM4F4K%KLLLm ,, k4=#5#:   $$SAX...=66x@@DM8X>>>r"c6t|j|jSr&r'r+r*r8s r parametersz_DHPrivateKey.parameters&t~t}EEEr"r:r;encryption_algorithmc|tjjurtd|jjjs|jjd}|jj |j |jjj ||jjj |d|jjj krtdtj|j|||||j|j S)Nz0DH private keys support only PKCS8 serializationr rr=)r PrivateFormatPKCS8rCr*r rDrrrr+rrrrE_private_key_bytesr^)r,r:r;rrs r private_bytesz_DHPrivateKey.private_bytess 4: : :B }!?  "&&{33A M  * * "' "'     tt})...*=6 }//    N N    r"rQ)rRrSrTr-propertyintrdrrkro DHPublicKeyrVrboolryr DHParametersrrr>rKeySerializationEncryptionrrWr"r r\r\ss:DDDD ?#???X? !4    8""5""""H4D?BN????"FBOFFFF ( + ,F         r"r\ceZdZd dZedefdZdejfdZ dej fdZ de j d e jdefd Zd S) rtrrcn||_||_||_t|j|j|_dSr&)r*r+r^rZ_key_size_bitsras r r-z_DHPublicKey.__init__s3 !!.t}dnMMr"r#c|jSr&)rr8s r rdz_DHPublicKey.key_sizes ""r"c j|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|d|jjjkrd}n |j|d}|jjd}|jj |j||jjj|j|d|jjjktj tj |j|d|j|d||j|dS)Nr rr/rf) r*rrr rr+rrr2rjrrlr3)r,r0r1rr4rms r rhz_DHPublicKey.public_numberss M  " "; / / M  " "; / / M  " "; / / &&t~q!Q??? $$QqTT]-?-D%DEEE $$QqTT]-?-D%DEEE Q44=%* * *EEM,,QqT22E-$((55 && NGT]%7%<    $$WQZ4=3E3J%JKKK! 3-**1Q400-**1Q400 m&&wqz22     r"c6t|j|jSr&rr8s r rz_DHPublicKey.parameters rr"r:r;c|tjjurtd|jjjs|jjd}|jj |j |jjj ||jjj |d|jjj krtdtj|j||||jdS)Nz>DH public keys support only SubjectPublicKeyInfo serializationr rr=)r PublicFormatSubjectPublicKeyInforCr*r rDrrrr+rrrrE_public_key_bytesr^)r,r:r;rs r public_bytesz_DHPublicKey.public_bytes#s 3H H H5  }!?  "&&{33A M  * * "' "'     tt})...*=6 }.. fdDND   r"NrQ)rRrSrTr-rrrdrrlrhrrrr>rrVrrWr"r rtrtsNNNN #####X#  2    2FBOFFFF ( *         r"rtrQ)rrr#r$)typingcryptography.exceptionsrrcryptography.hazmat.primitivesr)cryptography.hazmat.primitives.asymmetricr TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendrr!r'rr$rrZrUr\rrtrWr"r rsY  BBBBBBBB888888888888 EDDDDDD$//// B0B0B0B0B0BOB0B0B0J*3****F F F F F BOF F F RB B B B B 2>B B B B B r"