The BCryptImportKey function imports a symmetric key from a key BLOB. The BCryptImportKeyPair function is used to import a public/private key pair.
NTSTATUS BCryptImportKey(
BCRYPT_ALG_HANDLE hAlgorithm,
BCRYPT_KEY_HANDLE hImportKey,
LPCWSTR pszBlobType,
BCRYPT_KEY_HANDLE *phKey,
PUCHAR pbKeyObject,
ULONG cbKeyObject,
PUCHAR pbInput,
ULONG cbInput,
ULONG dwFlags
)
hAlgorithm
Type: BCRYPT_ALG_HANDLE
[in] The handle of the algorithm provider to import the key. This handle is obtained by calling the BCryptOpenAlgorithmProvider function.
hImportKey
Type: BCRYPT_KEY_HANDLE
[in, optional]
The handle of the key encryption key needed to unwrap the key BLOB in the pbInput parameter.
Note
The handle must be supplied by the same provider that supplied the key that is being imported.
Note
This parameter is not used and should be set to NULL.
pszBlobType
Type: LPCWSTR
[in] A null-terminated Unicode string that contains an identifier that specifies the type of BLOB that is contained in the pbInput buffer. This can be one of the following values.
phKey
Type: BCRYPT_KEY_HANDLE *
[out] A pointer to a BCRYPT_KEY_HANDLE that receives the handle of the imported key. This handle is used in subsequent functions that require a key, such as BCryptEncrypt. This handle must be released when it is no longer needed by passing it to the BCryptDestroyKey function.
pbKeyObject
Type: PUCHAR
[out, optional] A pointer to a buffer that receives the imported key object. The cbKeyObject parameter contains the size of this buffer. The required size of this buffer can be obtained by calling the BCryptGetProperty function to get the BCRYPT_OBJECT_LENGTH property. This will provide the size of the key object for the specified algorithm.
This memory can only be freed after the phKey key handle is destroyed.
cbKeyObject
Type: ULONG
[in] The size, in bytes, of the pbKeyObject buffer.
pbInput
Type: PUCHAR
[in] The address of a buffer that contains the key BLOB to import. The cbInput parameter contains the size of this buffer. The pszBlobType parameter specifies the type of key BLOB this buffer contains.
cbInput
Type: ULONG
[in] The size, in bytes, of the pbInput buffer.
dwFlags
Type: ULONG
[in] A set of flags that modify the behavior of this function. No flags are currently defined, so this parameter should be zero.
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_BUFFER_TOO_SMALL | The size of the key object specified by the cbKeyObject parameter is not large enough to hold the key object. |
| STATUS_INVALID_HANDLE | The algorithm handle in the hAlgorithm parameter is not valid. |
| STATUS_INVALID_PARAMETER | One or more parameters are not valid. |
| STATUS_NOT_SUPPORTED | The algorithm provider specified by the hAlgorithm parameter does not support the BLOB type specified by the pszBlobType parameter. |
Depending on what processor modes a provider supports, BCryptImportKey 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 hAlgorithm parameter must have been opened by using the BCRYPT_PROV_DISPATCH flag, and any pointers passed to the BCryptImportKey function must refer to nonpaged (or locked) memory.
Header: Declared in bcrypt.h.
Library: Use bcrypt.lib.