B \Úæ`>*ã@sÀddlmZmZmZddlmZddlmZmZddl m Z ddl m Z dd„Z dd „Ze e j¡Gd d „d eƒƒZd d „Zdd„Ze e j¡Gdd„deƒƒZe e j¡Gdd„deƒƒZdS)é)Úabsolute_importÚdivisionÚprint_function)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)Ú serialization)ÚdhcCsŒ|j}|j}| |¡}| ||jk¡| ||j¡}|jrˆ| d¡}|  ||j||j¡|  |d¡}|  ||j||j¡}| |dk¡|S)Nz BIGNUM **ré) Ú_libÚ_ffiZ DHparams_dupÚopenssl_assertÚNULLZgcZDH_freeZ"CRYPTOGRAPHY_OPENSSL_LESS_THAN_102ÚnewÚ DH_get0_pqgÚBN_dupZ DH_set0_pqg)Údh_cdataÚbackendÚlibZffiÚ param_cdataÚqZq_dupÚres©rúZ/opt/alt/python37/lib64/python3.7/site-packages/cryptography/hazmat/backends/openssl/dh.pyÚ_dh_params_dup s  rcCst||ƒ}t||ƒS)N)rÚ _DHParameters)rrrrrrÚ_dh_cdata_to_parameterss rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCs||_||_dS)N)Ú_backendÚ _dh_cdata)ÚselfrrrrrÚ__init__&sz_DHParameters.__init__cCsÄ|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)Nz BIGNUM **r)ÚpÚgr) rr rr rrr rÚ _bn_to_intr ÚDHParameterNumbers)rr!r"rÚq_valrrrÚparameter_numbers*sz_DHParameters.parameter_numberscCs |j |¡S)N)rZgenerate_dh_private_key)rrrrÚgenerate_private_key;sz"_DHParameters.generate_private_keycCs~|tjjk rtdƒ‚|jjjsl|jj d¡}|jj  |j |jjj ||jjj ¡|d|jjj krlt dt jƒ‚|j |||j ¡S)Nz%Only PKCS3 serialization is supportedz BIGNUM **rz'DH X9.42 serialization is not supported)rZParameterFormatZPKCS3Ú ValueErrorrr ÚCryptography_HAS_EVP_PKEY_DHXr rrrrrrÚUNSUPPORTED_SERIALIZATIONZ_parameter_bytes)rÚencodingÚformatrrrrÚparameter_bytes>s"    z_DHParameters.parameter_bytesN)Ú__name__Ú __module__Ú __qualname__r r&r'r-rrrrr$srcCs,|j}| |d |j|j¡¡tdƒ‚dS)Nrz.Public key value is invalid for this exchange.)r r Z_lib_reason_matchZ ERR_LIB_DHZDH_R_INVALID_PUBKEYr()ÚerrorsrrrrrÚ_handle_dh_compute_key_errorUs r2cCsL|j d¡}|j |||jj|jj¡| |d|jjk¡|j |d¡S)Nz BIGNUM **r)r rr rrr Z BN_num_bits)rrr!rrrÚ_get_dh_num_bitsas    r3c@sHeZdZdd„Zedd„ƒZdd„Zdd„Zd d „Zd d „Z d d„Z dS)Ú _DHPrivateKeycCs&||_||_||_|jj |¡|_dS)N)rrÚ _evp_pkeyr ZDH_sizeÚ_key_size_bytes)rrrÚevp_pkeyrrrr lsz_DHPrivateKey.__init__cCst|j|jƒS)N)r3rr)rrrrÚkey_sizersz_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)Nz BIGNUM **r)r!r"r)r&Úy)Úpublic_numbersÚx)rr rr rrr rr#Ú DH_get0_keyr ZDHPrivateNumbersÚDHPublicNumbersr$)rr!r"rr%Úpub_keyZpriv_keyrrrÚprivate_numbersvs,z_DHPrivateKey.private_numberscCsÚ|jj d|j¡}|jj d¡}|jj |j||jjj¡|j |d|jjjk¡|jj  ||d|j¡}|dkrŠ|j  ¡}t ||jƒS|j |dk¡|jj  |¡d|…}|jt |ƒ}|dkrÒd||}|SdS)Nzunsigned char[]z BIGNUM **réÿÿÿÿr ó)rr rr6r r<rrr ZDH_compute_keyZ_consume_errorsr2ÚbufferÚlen)rZpeer_public_keyZbufr>rr1ÚkeyZpadrrrÚexchange’s$    z_DHPrivateKey.exchangecCsºt|j|jƒ}|jj d¡}|jj |j||jjj¡|j |d|jjjk¡|jj  |d¡}|j ||jjjk¡|jj  |||jjj¡}|j |dk¡|j  |¡}t |j||ƒS)Nz BIGNUM **rr ) rrrr rr r<rr rZ DH_set0_keyZ_dh_cdata_to_evp_pkeyÚ _DHPublicKey)rrr>Z pub_key_duprr7rrrÚ public_key­s    z_DHPrivateKey.public_keycCst|j|jƒS)N)rrr)rrrrÚ parameters½sz_DHPrivateKey.parameterscCs„|tjjk rtdƒ‚|jjjsl|jj d¡}|jj  |j |jjj ||jjj ¡|d|jjj krlt dt jƒ‚|j ||||j|j ¡S)Nz0DH private keys support only PKCS8 serializationz BIGNUM **rz'DH X9.42 serialization is not supported)rZ PrivateFormatZPKCS8r(rr r)r rrrrrrr*Z_private_key_bytesr5)rr+r,Zencryption_algorithmrrrrÚ private_bytesÀs&    z_DHPrivateKey.private_bytesN) r.r/r0r Úpropertyr8r?rErGrHrIrrrrr4js r4c@s8eZdZdd„Zedd„ƒZdd„Zdd„Zd d „Zd S) rFcCs&||_||_||_t|j|jƒ|_dS)N)rrr5r3Ú_key_size_bits)rrrr7rrrr Ûsz_DHPublicKey.__init__cCs|jS)N)rK)rrrrr8á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)Nz BIGNUM **r)r!r"r)r&r9) rr rr rrr rr#r<r r=r$)rr!r"rr%r>rrrr:ås& z_DHPublicKey.public_numberscCst|j|jƒS)N)rrr)rrrrrHýsz_DHPublicKey.parameterscCs‚|tjjk rtdƒ‚|jjjsl|jj d¡}|jj  |j |jjj ||jjj ¡|d|jjj krlt dt jƒ‚|j ||||jd¡S)Nz>DH public keys support only SubjectPublicKeyInfo serializationz BIGNUM **rz'DH X9.42 serialization is not supported)rZ PublicFormatZSubjectPublicKeyInfor(rr r)r rrrrrrr*Z_public_key_bytesr5)rr+r,rrrrÚ public_bytess&    z_DHPublicKey.public_bytesN) r.r/r0r rJr8r:rHrLrrrrrFÙs  rFN)Z __future__rrrZ cryptographyrZcryptography.exceptionsrrZcryptography.hazmat.primitivesrZ)cryptography.hazmat.primitives.asymmetricr rrZregister_interfaceZDHParametersWithSerializationÚobjectrr2r3ZDHPrivateKeyWithSerializationr4ZDHPublicKeyWithSerializationrFrrrrÚs   0  n