a ‚oeŽć@sdddlmZddlZddlmZddlmZejr>ddlm Z dddœd d „Z dd d d œdd„Z dS)é)Ś annotationsN)Śhashes)Ś Prehashed)ŚBackendrŚbytes)ŚbackendŚreturncCs"|j ||jj”}| ||jjk”|j ||jj”}|j |”}| |dk”|jjrl|j  ||j d”}n|j  ||j ”}| |dk”|j  d”}|j  ||jj|”}| |dk”| |ddk”|j  d|d”}|j  |||”}|dkr| ”}td|ƒ‚|j ||d”dd…S)Nérzsize_t *zunsigned char[]zError computing shared key.)Z_libZEVP_PKEY_CTX_newZ_ffiZNULLZopenssl_assertŚgcZEVP_PKEY_CTX_freeZEVP_PKEY_derive_initZ%Cryptography_HAS_EVP_PKEY_SET_PEER_EXZEVP_PKEY_derive_set_peer_exZ _evp_pkeyZEVP_PKEY_derive_set_peerŚnewZEVP_PKEY_deriveZ_consume_errorsŚ ValueErrorŚbuffer)rZevp_pkeyZpeer_public_keyŚctxŚresZkeylenŚbufŚerrors©rśKC:\Program Files\Certbot\pkgs\cryptography\hazmat\backends\openssl\utils.pyŚ_evp_pkey_derives. ’’   rz-typing.Union[Prehashed, hashes.HashAlgorithm]z)typing.Tuple[bytes, hashes.HashAlgorithm])ŚdataŚ algorithmrcCsLt|tƒs(t |”}| |”| ”}n|j}t|ƒ|jkrDt dƒ‚||fS)NzNThe provided data must be the same length as the hash algorithm's digest size.) Ś isinstancerrZHashŚupdateŚfinalizeZ _algorithmŚlenZ digest_sizer )rrZhash_ctxrrrŚ_calculate_digest_and_algorithm.s    ’r) Z __future__rŚtypingZcryptography.hazmat.primitivesrZ/cryptography.hazmat.primitives.asymmetric.utilsrŚ TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendrrrrrrrŚs