3 lá˜_ÿ'ã@s¸ddlmZmZmZddlmZddlmZmZddl m Z ddl m Z dd„Z dd „Zeje jƒGd d „d eƒƒZd d „Zeje jƒGdd„deƒƒZeje jƒGdd„deƒƒZdS)é)Úabsolute_importÚdivisionÚprint_function)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)Ú serialization)ÚdhcCsŒ|j}|j}|j|ƒ}|j||jkƒ|j||jƒ}|jrˆ|jdƒ}|j ||j||jƒ|j |dƒ}|j ||j||jƒ}|j|dkƒ|S)Nz 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ú/usr/lib64/python3.6/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Ä|jjjdƒ}|jjjdƒ}|jjjdƒ}|jjj|j|||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒ|d|jjjkrŒd}n|jj|dƒ}t j |jj|dƒ|jj|dƒ|d�S)Nz BIGNUM **r)ÚpÚgr) rr rr rrr rÚ _bn_to_intr ÚDHParameterNumbers)r r"r#rÚq_valrrrÚparameter_numbers*sz_DHParameters.parameter_numberscCs |jj|ƒS)N)rZgenerate_dh_private_key)r rrrÚgenerate_private_key;sz"_DHParameters.generate_private_keycCs~|tjjk rtdƒ‚|jjjsl|jjjdƒ}|jjj |j |jjj ||jjj ƒ|d|jjj krlt dt jƒ‚|jj|||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$srcCsL|jjdƒ}|jj|||jj|jjƒ|j|d|jjkƒ|jj|dƒS)Nz BIGNUM **r)r rr rrr Z BN_num_bits)rrr"rrrÚ_get_dh_num_bitsRs r2c@sHeZdZdd„Zedd„ƒZdd„Zdd„Zd d „Zd d „Z d d„Z dS)Ú _DHPrivateKeycCs&||_||_||_|jjj|ƒ|_dS)N)rrÚ _evp_pkeyr ZDH_sizeÚ_key_size_bytes)r rrÚevp_pkeyrrrr![sz_DHPrivateKey.__init__cCst|j|jƒS)N)r2rr)r rrrÚkey_sizeasz_DHPrivateKey.key_sizecCsT|jjjdƒ}|jjjdƒ}|jjjdƒ}|jjj|j|||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒ|d|jjjkrŒd}n|jj|dƒ}|jjjdƒ}|jjjdƒ}|jjj |j||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒt j t j t j |jj|dƒ|jj|dƒ|d�|jj|dƒd�|jj|dƒd�S)Nz BIGNUM **r)r"r#r)r'Úy)Úpublic_numbersÚx)rr rr rrr rr$Ú DH_get0_keyr ZDHPrivateNumbersÚDHPublicNumbersr%)r r"r#rr&Úpub_keyZpriv_keyrrrÚprivate_numberses,z_DHPrivateKey.private_numberscCsÚ|jjjd|jƒ}|jjjdƒ}|jjj|j||jjjƒ|jj|d|jjjkƒ|jjj ||d|jƒ}|dkrŠ|jj ƒ}t d|ƒ‚nL|jj|dkƒ|jjj |ƒd|…}|jt |ƒ}|dkrÒd||}|SdS)Nzunsigned char[]z BIGNUM **rr zKError computing shared key. Public key is likely invalid for this exchange.óéÿÿÿÿ)rr rr5r r;rrr ZDH_compute_keyZ_consume_errors_with_textr)ÚbufferÚlen)r Zpeer_public_keyZbufr=rZerrors_with_textÚkeyZpadrrrÚexchange�s$  z_DHPrivateKey.exchangecCsºt|j|jƒ}|jjjdƒ}|jjj|j||jjjƒ|jj|d|jjjkƒ|jjj |dƒ}|jj||jjjkƒ|jjj |||jjjƒ}|jj|dkƒ|jj |ƒ}t |j||ƒS)Nz BIGNUM **rr ) rrrr rr r;rr rZ DH_set0_keyZ_dh_cdata_to_evp_pkeyÚ _DHPublicKey)r rr=Z pub_key_duprr6rrrÚ public_keyŸs z_DHPrivateKey.public_keycCst|j|jƒS)N)rrr)r rrrÚ parameters°sz_DHPrivateKey.parameterscCs†|tjjk rtdƒ‚|jjjsl|jjjdƒ}|jjj |j |jjj ||jjj ƒ|d|jjj krlt dt jƒ‚|jj|||||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_bytesr4)r r,r-Zencryption_algorithmrrrrÚ private_bytes³s*   z_DHPrivateKey.private_bytesN) r/r0r1r!Úpropertyr7r>rDrFrGrHrrrrr3Ys r3c@s8eZdZdd„Zedd„ƒZdd„Zdd„Zd d „Zd S) rEcCs&||_||_||_t|j|jƒ|_dS)N)rrr4r2Ú_key_size_bits)r rrr6rrrr!Òsz_DHPublicKey.__init__cCs|jS)N)rJ)r rrrr7Øsz_DHPublicKey.key_sizecCs|jjjdƒ}|jjjdƒ}|jjjdƒ}|jjj|j|||ƒ|jj|d|jjjkƒ|jj|d|jjjkƒ|d|jjjkrŒd}n|jj|dƒ}|jjjdƒ}|jjj |j||jjjƒ|jj|d|jjjkƒt j t j |jj|dƒ|jj|dƒ|d�|jj|dƒd�S)Nz BIGNUM **r)r"r#r)r'r8) rr rr rrr rr$r;r r<r%)r r"r#rr&r=rrrr9Üs&z_DHPublicKey.public_numberscCst|j|jƒS)N)rrr)r rrrrGõsz_DHPublicKey.parameterscCs‚|tjjk rtdƒ‚|jjjsl|jjjdƒ}|jjj |j |jjj ||jjj ƒ|d|jjj krlt dt jƒ‚|jj||||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_bytesr4)r r,r-rrrrÚ public_bytesøs    z_DHPublicKey.public_bytesN) r/r0r1r!rIr7r9rGrKrrrrrEÐs  rEN)Z __future__rrrZ cryptographyrZcryptography.exceptionsrrZcryptography.hazmat.primitivesrZ)cryptography.hazmat.primitives.asymmetricr rrZregister_interfaceZDHParametersWithSerializationÚobjectrr2ZDHPrivateKeyWithSerializationr3ZDHPublicKeyWithSerializationrErrrrÚs   -v