The BCryptSecretAgreement function creates a secret agreement value from a private and a public key.
NTSTATUS BCryptSecretAgreement(
BCRYPT_KEY_HANDLE hPrivKey,
BCRYPT_KEY_HANDLE hPubKey,
BCRYPT_SECRET_HANDLE *phAgreedSecret,
ULONG dwFlags
)
hPrivKey
Type: BCRYPT_KEY_HANDLE
[in] The handle of the private key to use to create the secret agreement value. This key and the hPubKey key must come from the same CNG cryptographic algorithm provider.
hPubKey
Type: BCRYPT_KEY_HANDLE
[in] The handle of the public key to use to create the secret agreement value. This key and the hPrivKey key must come from the same CNG cryptographic algorithm provider.
phAgreedSecret
Type: BCRYPT_SECRET_HANDLE *
[out] A pointer to a BCRYPT_SECRET_HANDLE that receives a handle that represents the secret agreement value. This handle must be released by passing it to the BCryptDestroySecret function when it is no longer needed.
dwFlags
Type: ULONG
[in] A set of flags that modify the behavior of this function. No flags are defined for this function.
Type: NTSTATUS
Returns a status code that indicates the success or failure of the function.
Possible return codes include, but are not limited to, the following.
| Return code | Description |
|---|---|
| STATUS_SUCCESS | The function was successful. |
| STATUS_INVALID_HANDLE | The key handle in the hPrivKey or hPubKey parameter is not valid. |
| STATUS_INVALID_PARAMETER | One or more parameters are not valid. |
| STATUS_NOT_SUPPORTED | The key handle in the hPrivKey parameter is not a Diffie-Hellman key. |
Depending on what processor modes a provider supports, BCryptSecretAgreement can be called either from user mode or kernel mode. Kernel mode callers can execute either at PASSIVE_LEVELIRQL or DISPATCH_LEVEL IRQL. If the current IRQL level is DISPATCH_LEVEL, the handles provided in the hPrivKey and hPubKey parameters must be derived from an algorithm handle returned by a provider that was opened by using the BCRYPT_PROV_DISPATCH flag, and any pointers passed to the BCryptSecretAgreement function must refer to nonpaged (or locked) memory.
Header: Declared in bcrypt.h.
Library: Use bcrypt.lib.