BCryptSignHash

The BCryptSignHash function creates a signature of a hash value.

Syntax

NTSTATUS BCryptSignHash(
         BCRYPT_KEY_HANDLE hKey,
         VOID *pPaddingInfo,
         PUCHAR pbInput,
         ULONG cbInput,
         PUCHAR pbOutput,
         ULONG cbOutput,
         ULONG *pcbResult,
         ULONG dwFlags
)  

Parameters

hKey
Type: BCRYPT_KEY_HANDLE 

[in] The handle of the key to use to sign the hash.

pPaddingInfo
Type: VOID *

[in, optional] A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the dwFlags parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.

pbInput
Type: PUCHAR 

[in] A pointer to a buffer that contains the hash value to sign. The cbInput parameter contains the size of this buffer.

cbInput
Type: ULONG 

[in] The number of bytes in the pbInput buffer to sign.

pbOutput
Type: PUCHAR 

[out, optional] The address of a buffer to receive the signature produced by this function. The cbOutput parameter contains the size of this buffer.

If this parameter is NULL, this function will calculate the size required for the signature and return the size in the location pointed to by the pcbResult parameter.

cbOutput
Type: ULONG 

[in] The size, in bytes, of the pbOutput buffer. This parameter is ignored if the pbOutput parameter is NULL.

pcbResult
Type: ULONG *

[out] A pointer to a ULONG variable that receives the number of bytes copied to the pbOutput buffer.

If pbOutput is NULL, this receives the size, in bytes, required for the signature.

dwFlags
Type: ULONG 

[in] A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.

Return value

Type: NTSTATUS 

Returns a status code that indicates the success or failure of the function.

Return codes

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 specified by the hKey parameter is not valid.
STATUS_NOT_SUPPORTED The algorithm provider used to create the key handle specified by the hKey parameter is not a signing algorithm.
STATUS_NO_MEMORY A memory allocation failure occurred.
STATUS_BUFFER_TOO_SMALL The memory size specified by the cbOutput parameter is not large enough to hold the signature.

Remarks

This function will encrypt the hash value with the specified key to create the signature.

To later verify that the signature is valid, call the BCryptVerifySignature function with an identical key and an identical hash of the original data.

Depending on what processor modes a provider supports, BCryptSignHash 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 handle provided in the hKey parameter must be derived from an algorithm handle returned by a provider that was opened with the BCRYPT_PROV_DISPATCH flag, and any pointers passed to the BCryptSignHash function must refer to nonpaged (or locked) memory.

Requirements

Header: Declared in bcrypt.h.

Library: Use bcrypt.lib.