

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 支持的 API 操作 AWS CloudHSM 客户端 SDK 5 的密钥存储提供程序 (KSP)
<a name="ksp-library-apis"></a>

KSP 中的参数由 Microsoft KSP 定义。有关更多信息，请参阅 [Microsoft 文档](https://learn.microsoft.com/en-us/windows/win32/api/ncrypt/)。

密钥存储提供程序 (KSP) 支持 AWS CloudHSM 客户端 SDK 5 的以下 KSP API 操作。
+ [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)
+ [NCryptOpenKey](ksp-library-apis-open-key.md)
+ [NCryptCreatePersistedKey](ksp-library-apis-create-persisted-key.md)
+ [NCryptGetProperty](ksp-library-apis-get-property.md)
+ [NCryptSetProperty](ksp-library-apis-set-property.md)
+ [NCryptFinalizeKey](ksp-library-apis-finalize-key.md)
+ [NCryptDeleteKey](ksp-library-apis-delete-key.md)
+ [NCryptFreeObject](ksp-library-apis-free-object.md)
+ [NCryptFreeBuffer](ksp-library-apis-free-buffer.md)
+ [NCryptIsAlgSupported](ksp-library-apis-is-alg-supported.md)
+ [NCryptEnumAlgorithms](ksp-library-apis-enum-algorithms.md)
+ [NCryptEnumKeys](ksp-library-apis-enum-keys.md)
+ [NCryptExportKey](ksp-library-apis-export-key.md)
+ [NCryptSignHash](ksp-library-apis-sign-hash.md)
+ [NCryptVerifySignature](ksp-library-apis-verify-signature.md)

# NCryptOpenStorageProvider 与密钥存储提供程序 (KSP) 配合使用
<a name="ksp-library-apis-open-provider"></a>

`NCryptOpenStorageProvider` 函数加载并初始化密钥存储提供程序（KSP）。

## 参数
<a name="ksp-library-apis-open-provider-parameters"></a>

 `phProvider` [out]   
指向存储提供程序句柄的 `NCRYPT_PROV_HANDLE` 变量的指针。

 `pszProviderName` [in]   
指向以 null 结尾的 Unicode 字符串的指针，该字符串标识密钥存储提供程序。AWS CloudHSM 密钥存储提供程序（KSP）支持以下值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-open-provider.html)
值是宽字符字符串文字，如文字前的 L 所示。

`dwFlags` [in]  
修改函数行为的标志。没有为此函数定义任何标志。

## 返回值
<a name="ksp-library-apis-open-provider-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 

# NCryptOpenKey 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-open-key"></a>

`NCryptOpenKey` 函数打开密钥存储提供程序（KSP）中存在的密钥。

## 参数
<a name="ksp-library-apis-open-key-parameters"></a>

 `hProvider` [in]   
包含密钥的 KSP 句柄。使用 [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) 获取句柄。

 `phKey` [out]   
指向存储密钥句柄的 `NCRYPT_KEY_HANDLE` 变量的指针。

`pszKeyName` [in]  
指向以 null 结尾的 Unicode 字符串的指针，该字符串包含密钥名称。

`dwLegacyKeySpec` [in, unused]  
AWS CloudHSM 密钥存储提供程序 (KSP) 不使用此参数。

`dwFlags` [in]  
修改函数行为的标志。没有为此函数定义任何标志。

## 返回值
<a name="ksp-library-apis-open-key-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hProvider` 中的句柄无效。  | 
|  NTE\$1BAD\$1KEYSET  |  提供的密钥名称未返回唯一结果。  | 

# NCryptCreatePersistedKey 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-create-persisted-key"></a>

`NCryptCreatePersistedKey` 函数创建一个新密钥并将其存储在密钥存储提供程序（KSP）中。可以在创建后使用 [`NCryptSetProperty`](ksp-library-apis-set-property.md) 函数设置其属性。必须先调用 [`NCryptFinalizeKey`](ksp-library-apis-finalize-key.md)，然后才能使用该密钥。

## 参数
<a name="ksp-library-apis-create-persisted-key-parameters"></a>

 `hProvider` [in]   
您将在其中创建密钥的密钥存储提供程序的句柄。使用 [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) 获取此句柄。

 `phKey` [out]   
存储密钥句柄的 `NCRYPT_KEY_HANDLE` 变量的地址。

 `pszAlgId` [in]   
指向以 null 结尾的 Unicode 字符串的指针，该字符串指定用于创建密钥的加密算法标识符。  
AWS CloudHSM 密钥存储提供程序 (KSP) 支持以下算法：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-create-persisted-key.html)

`pszKeyName` [in, optional]  
指向以 null 结尾的 Unicode 字符串的指针，该字符串包含密钥的名称。如果此参数为 NULL，则此函数将创建一个不持久的临时密钥。

`dwLegacyKeySpec` [in, unused]  
AWS CloudHSM 密钥存储提供程序 (KSP) 不使用此参数。

`dwFlags` [in]  
用于修改函数行为的标志。使用零或以下多个值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-create-persisted-key.html)

## 返回值
<a name="ksp-library-apis-create-persisted-key-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  函数已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszAlgId` 参数包含不支持的值。  | 
|  NTE\$1EXISTS  |  已存在具有指定名称的密钥且操作未使用 ` NCRYPT_OVERWRITE_KEY_FLAG`。  | 

# NCryptGetProperty 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-get-property"></a>

`NCryptGetProperty` 函数检索密钥存储对象的属性值。

## 参数
<a name="ksp-library-apis-create-get-property-parameters"></a>

 `hObject` [in]   
 要检索其属性的对象的句柄。您可以使用：  
+ 提供程序句柄（`NCRYPT_PROV_HANDLE`）
+ 密钥句柄（`NCRYPT_KEY_HANDLE`）

 `pszProperty ` [in]   
指向以 null 结尾的 Unicode 字符串的指针，该字符串包含要检索的属性名称。  
使用时`NCRYPT_PROV_HANDLE`， AWS CloudHSM 密钥存储提供程序 (KSP) 支持以下 KSP 标识符：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
使用时`NCRYPT_KEY_HANDLE`， AWS CloudHSM 密钥存储提供程序 (KSP) 支持以下 KSP 标识符：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
值是宽字符字符串文字，如文字前的 L 所示。

 `pbOutput` [out]   
用于存储属性值的缓冲区的地址。使用 `cbOutput` 指定缓冲区大小。  
要确定所需的缓冲区大小，请将此参数设置为 NULL。该函数将所需的大小（以字节为单位）存储在 `pcbResult` 所指向的位置。

 `cbOutput` [in]   
 `pbOutput` 缓冲区的大小，以字节为单位。

`pcbResult` [out]  
指向 DWORD 变量的指针，该变量存储复制到 `pbOutput` 缓冲区的字节数。  
如果 `pbOutput` 为 NULL，则存储所需的大小（以字节为单位）。

`dwFlags` [in]  
用于修改函数行为的标志。可以使用零或：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
当 pszProperty 为 `NCRYPT_SECURITY_DESCR_PROPERTY` 时，使用以下方法之一或组合使用以下方法：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)

## 返回值
<a name="ksp-library-apis-get-property-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszAlgId` 参数包含不支持的值。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hObject` 中的句柄无效。  | 
|  NTE\$1BUFFER\$1TOO\$1SMALL  |  `cbOutput` 参数对于返回值来说太小。  | 

# NCryptSetProperty 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-set-property"></a>

`NCryptSetProperty` 函数设置密钥存储对象的属性值。

## 参数
<a name="ksp-library-apis-create-set-property-parameters"></a>

 `hObject` [in]   
 要设置其属性的对象的句柄。您可以使用：  
+ 提供程序句柄（`NCRYPT_PROV_HANDLE`）
+ 密钥句柄（`NCRYPT_KEY_HANDLE`）

 `pszProperty ` [in]   
指向以 null 结尾的 Unicode 字符串的指针，该字符串包含要检索的属性名称。  
使用时`NCRYPT_PROV_HANDLE`， AWS CloudHSM 密钥存储提供程序 (KSP) 支持以下 KSP 标识符：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-set-property.html)
使用时`NCRYPT_KEY_HANDLE`， AWS CloudHSM 密钥存储提供程序 (KSP) 支持以下 KSP 标识符：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-set-property.html)
值是宽字符字符串文字，如文字前的 L 所示。

 `pbInput` [in]   
 包含新属性值的缓冲区的地址。`cbInput` 包含缓冲区的大小。

 `cbInput` [in]   
 `pbInput` 缓冲区的大小，以字节为单位。

`dwFlags` [in]  
修改函数行为的标志。没有为此函数定义任何标志。

## 返回值
<a name="ksp-library-apis-set-property-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszProperty` 参数包含不支持的值。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hObject` 中的句柄无效。  | 
|  NTE\$1BAD\$1DATA  |  `pbInput` 和 `cbInput` 所指向的数据无效。  | 

# NCryptFinalizeKey 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-finalize-key"></a>

`NCryptFinalizeKey` 函数完成 KSP 密钥。必须先调用该函数，然后才能使用该密钥。

## 参数
<a name="ksp-library-apis-finalize-key-parameters"></a>

 `hKey` [in]   
 要完成的密钥的句柄。通过调用[NCryptCreatePersistedKey](ksp-library-apis-create-persisted-key.md)函数来获取此句柄。

`dwFlags` [in]  
用于修改函数行为的标志。可以使用零或以下值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-finalize-key.html)

## 返回值
<a name="ksp-library-apis-finalize-key-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hKey` 中的句柄无效。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `dwFlags` 参数包含不支持的值。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 

# NCryptDeleteKey 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-delete-key"></a>

`NCryptDeleteKey` 函数从密钥存储提供程序（KSP）中删除 KSP 密钥。

## 参数
<a name="ksp-library-apis-delete-key-parameters"></a>

 `hKey` [in]   
 要删除的密钥的句柄。

`dwFlags` [in]  
用于修改函数行为的标志。可以使用零或以下多个值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-delete-key.html)

## 返回值
<a name="ksp-library-apis-delete-key-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  函数成功。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hKey` 中的句柄无效。  | 
|  NTE\$1INTERNAL\$1ERROR  |  删除密钥时发生内部错误。  | 

# NCryptFreeObject 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-free-object"></a>

`NCryptFreeObject` 函数从密钥存储提供程序（KSP）中释放提供程序或密钥句柄。

## 参数
<a name="ksp-library-apis-free-object-parameters"></a>

 `hObject` [in]   
 要释放的对象的句柄。您可以使用：  
+ 提供程序句柄（`NCRYPT_PROV_HANDLE`）
+ 密钥句柄（`NCRYPT_KEY_HANDLE`）

## 返回值
<a name="ksp-library-apis-free-object-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hObject` 中的句柄无效。  | 

# NCryptFreeBuffer 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-free-buffer"></a>

`NCryptFreeBuffer` 函数释放由密钥存储提供程序（KSP）分配的内存块。

## 参数
<a name="ksp-library-apis-free-buffer-parameters"></a>

 `pvInput` [in]   
 要释放的内存的地址。

## 返回值
<a name="ksp-library-apis-free-buffer-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 

# NCryptIsAlgSupported 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-is-alg-supported"></a>

NCryptIsAlgSupported 函数确定密钥存储提供程序 (KSP) 是否支持特定的加密算法。

## 参数
<a name="ksp-library-apis-is-alg-supported-parameters"></a>

 `hProvider` [in]   
 密钥存储提供程序的句柄。使用 [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) 获取句柄。

 `pszAlgId` [in]   
 指向以 null 结尾的 Unicode 字符串的指针，该字符串包含用于创建密钥的加密算法的标识符。AWS CloudHSM 密钥存储提供程序（KSP）支持以下算法：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-is-alg-supported.html)

`dwFlags` [in]  
修改函数行为的标志。可以是零或以下值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-is-alg-supported.html)

## 返回值
<a name="ksp-library-apis-is-alg-supported-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszAlgId` 参数包含不支持的值。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hProvider` 中的句柄无效。  | 

# NCryptEnumAlgorithms 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-enum-algorithms"></a>

`NCryptEnumAlgorithms` 函数检索密钥存储提供程序（KSP）支持的算法的名称。

## 参数
<a name="ksp-library-apis-enum-algorithms-parameters"></a>

 `hProvider` [in]   
 用于枚举算法的密钥存储提供程序的句柄。使用 [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) 函数获取此句柄。

 `dwAlgOperations` [in]   
一组值，用于指定要枚举的算法类。可以使用零来枚举所有算法，也可以组合以下一个或多个值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-enum-algorithms.html)

`pdwAlgCount` [out]  
存储 `ppAlgList` 数组中的元素数量的 DWORD 的地址。

`ppAlgList` [out]  
存储已注册算法名称数组的 `NCryptAlgorithmName` 结构指针的地址。`pdwAlgCount` 参数表示此数组中的元素数量。

`dwFlags` [in]  
用于修改函数行为的标志。使用零或以下值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-enum-algorithms.html)

## 返回值
<a name="ksp-library-apis-open-key-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `dwAlgOperations` 参数包含不支持的值。  | 

# NCryptEnumKeys 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-enum-keys"></a>

NCryptEnumKeys 函数列出了存储在密钥存储提供程序 (KSP) 中的密钥。

## 参数
<a name="ksp-library-apis-enum-keys-parameters"></a>

 `hProvider` [in]   
密钥存储提供程序句柄。使用 [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) 获取此句柄。

 `pszScope` [in, unused]   
 将此参数设置为 NULL。

 `ppKeyName` [out]   
指向存储密钥名称的 `NCryptKeyName` 结构的指针地址。要在使用后释放内存，请调用 `NCryptFreeBuffer`。

`ppEnumState` [in, out]  
用于跟踪枚举进度的 VOID 指针地址。密钥存储提供程序在内部使用此信息来管理枚举序列。要从头开始新的枚举，请将此指针设置为 NULL。  
要在完成枚举后释放此内存，请将此指针传递给 `NCryptFreeBuffer`。

`dwFlags` [in]  
用于修改函数行为的标志。此函数没有标志。

## 返回值
<a name="ksp-library-apis-enum-keys-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hProvider` 中的句柄无效。  | 
|  NTE\$1NO\$1MORE\$1ITEMS  |  枚举列出了所有可用的密钥。  | 

# NCryptExportKey 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-export-key"></a>

`NCryptExportKey` 函数将 KSP 密钥导出到内存 BLOB。此函数仅支持导出公有密钥。

## 参数
<a name="ksp-library-apis-export-key-parameters"></a>

 `hKey` [in]  
要导出的密钥的句柄。

 `hExportKey` [in, unused]  
 AWS CloudHSM 密钥存储提供程序 (KSP) 不使用此参数。

`pszBlobType` [in]  
一个以空结尾的 Unicode 字符串，用于指定要导出的BLOB类型。 AWS CloudHSM 密钥存储提供程序 (KSP) 支持以下值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-export-key.html)

`pParameterList` [in, unused]  
AWS CloudHSM 密钥存储提供程序 (KSP) 不使用此参数。

`pbOutput` [out, optional]  
用于存储密钥 BLOB 的缓冲区地址。使用 `cbOutput` 指定缓冲区大小。如果设置为 NULL，则该函数在 `pcbResult` 所指向的 DWORD 中存储所需的大小（以字节为单位）。

`cbOutput` [in]  
`pbOutput` 缓冲区的大小，以字节为单位。

`pcbResult` [out]  
用于存储复制到 `pbOutput` 缓冲区的字节数的 DWORD 变量地址。如果 `pbOutput` 为 NULL，则该函数存储所需的缓冲区大小，以字节为单位。

`dwFlags` [in]  
修改函数工作原理的标志。可以使用零或以下值：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-export-key.html)

## 返回值
<a name="ksp-library-apis-export-key-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hProvider` 中的句柄无效。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  密钥状态无效。  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszBlobType` 或 `dwFlags` 参数包含不支持的值。  | 
|  STATUS\$1INTERNAL\$1ERROR  |  操作期间发生内部错误。  | 

# NCryptSignHash 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-sign-hash"></a>

`NCryptSignHash` 函数创建哈希值的签名。

## 参数
<a name="ksp-library-apis-sign-hash-parameters"></a>

 `hKey` [in]   
 用于对哈希进行签名的密钥的句柄。

`pPaddingInfo` [in, optional]  
指向包含填充信息的结构的指针。结构类型取决于 `dwFlags` 值。仅对非对称密钥使用此参数；对于其他密钥类型，请设置为 NULL。

`pbHashValue` [in]  
指向包含待签名哈希值的缓冲区的指针。使用 `cbHashValue` 指定缓冲区大小。

`cbHashValue` [in]  
待签名 `pbHashValue` 缓冲区的大小，以字节为单位。

`pbSignature` [out]  
用于存储签名的缓冲区的地址。使用 `cbSignature` 指定缓冲区大小。  
要确定所需的缓冲区大小，请将此参数设置为 NULL。该函数将所需的大小（以字节为单位）存储在 `pcbResult` 所指向的位置。

`cbSignature` [in]  
`pbSignature` 缓冲区的大小，以字节为单位。如果 `pbSignature` 为 NULL，则该函数将忽略此参数。

`pcbResult` [out]  
指向 DWORD 变量的指针，该变量存储复制到 `pbSignature` 缓冲区的字节数。  
如果 `pbSignature` 为 NULL，则存储所需的缓冲区大小，以字节为单位。

`dwFlags` [in]  
用于修改函数行为的标志。允许的标志取决于您的密钥类型。使用以下值之一：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-sign-hash.html)

## 返回值
<a name="ksp-library-apis-sign-hash-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hKey` 中的句柄无效。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1BUFFER\$1TOO\$1SMALL  |  `pcbOutput` 参数对于返回值来说太小。  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  密钥状态无效。  | 
|  NTE\$1INTERNAL\$1ERROR  |  对哈希进行签名时发生内部错误。  | 

# NCryptVerifySignature 使用密钥存储提供商 (KSP)
<a name="ksp-library-apis-verify-signature"></a>

`NCryptVerifySignature` 函数确认签名是否与指定的哈希匹配。

## 参数
<a name="ksp-library-apis-verify-signature-parameters"></a>

 `hKey` [in]   
 用于解密签名的密钥的句柄。必须使用密钥对中用于使用 [`NCryptSignHash`](ksp-library-apis-sign-hash.md) 对数据进行签名的公有密钥部分。

`pPaddingInfo` [in, optional]  
指向包含填充信息的结构的指针。结构类型取决于 `dwFlags` 值。仅对非对称密钥使用此参数；对于其他密钥类型，请设置为 NULL。

`pbHashValue` [in]  
指向包含待签名哈希值的缓冲区的指针。使用 `cbHashValue` 指定缓冲区大小。

`cbHashValue` [in]  
`pbHashValue` 缓冲区的大小，以字节为单位。

`pbSignature` [out]  
包含数据签名哈希的缓冲区的地址。使用 [`NCryptSignHash`](ksp-library-apis-sign-hash.md) 创建此签名。使用 `cbSignature` 指定缓冲区大小。

`cbSignature` [in]  
`pbSignature` 缓冲区的大小，以字节为单位。使用 [`NCryptSignHash`](ksp-library-apis-sign-hash.md) 创建签名。

`dwFlags` [in]  
用于修改函数行为的标志。允许的标志取决于您的密钥类型。使用以下值之一：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/ksp-library-apis-verify-signature.html)

## 返回值
<a name="ksp-library-apis-verify-signature-return-value"></a>

该函数返回一个状态代码，指示成功或失败。

常见的返回代码包括：


****  

| 返回代码 | 说明 | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  操作已成功完成。  | 
|  NTE\$1INVALID\$1PARAMETER  |  一个或多个参数无效。  | 
|  NTE\$1FAIL  |  操作无法完成。  | 
|  NTE\$1INVALID\$1HANDLE  |  `hKey` 中的句柄无效。  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags` 参数包含无效值。  | 
|  NTE\$1BAD\$1SIGNATURE  |  签名未经过验证。  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  密钥状态无效。  | 
|  NTE\$1INTERNAL\$1ERROR  |  验证签名时发生内部错误。  | 