第 4 章 - Azure RTOS NetX Crypto API 说明

nx_crypto_initialize

初始化 NetX 安全库

原型

UINT nx_crypto_initialize(VOID);

说明

此函数会初始化 Azure RTOS NetX Crypto 库模块。 使用任何其他加密函数之前,应用程序必须调用此函数以执行初始化并验证库的完整性。 在使用其他 NetX Crypto 服务之前,如未能调用此函数,将导致返回错误。

参数

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功初始化 NetX Crypto 库。 库函数现在已准备就绪,可以使用。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库无法初始化,或无法进行完整性检查。 应用程序不能使用此库。

示例

TODO

nx_crypto_module_state_get

检索启用 FIPS 之模块的当前状态

原型

UINT nx_crypto_module_state_get(VOID);

说明

此服务仅在 FIPS 版本库中提供。 它将返回 NetX Crypto 库当前状态的状态。

参数

返回值

  • NX_CRYPTO_LIBRARY_STATE_UNINITIALIZED 0x00000001
  • NX_CRYPTO_LIBRARY_STATE_POST_IN_PROGRESS 0x00000002
  • NX_CRYPTO_LIBRARY_STATE_INTEGRITY_TEST_FAILED 0x00000004
  • NX_CRYPTO_LIBRARY_STATE_FUNCTIONAL_TEST_FAILED 0x00000008
  • NX_CRYPTO_LIBRARY_STATE_OPERATIONAL 0x80000000

示例

TODO

_nx_crypto_method_aes_init

初始化 AES 加密控制块

原型

UINT _nx_crypto_method_aes_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 AES 控制块。 初始化 AES 控制块后,后续的 AES 操作将使用相同的密钥和密钥大小。

应用程序可以创建多个 AES 控制块,每个块表示一个会话。 一个控制块分配一个密钥。 后续的加密或解密操作可以引用同一个 AES 控制块,而无需重新初始化 AES 控制块。 如果更改了会话的密钥,则应用程序需要用更新的密钥重新初始化 AES 控制块。

调用 nx_crypto_method_aes_init 会自动将以前配置的密钥和密钥大小更新为新密钥。

参数

  • 方法:指向有效的 AES 加密方法控制块的指针。 目前提供以下预定义的 AES 加密方法:
    • crypto_method_aes_cbc_128
    • crypto_method_aes_cbc_192
    • crypto_method_aes_cbc_256
    • crypto_method_aes_ctr_128
    • crypto_method_aes_ctr_192
    • crypto_method_aes_ctr_256
    • crypto_method_aes_xcbc_128
    • crypto_method_aes_ccm_8_128
  • 密钥:指向包含 AES 密钥的缓冲区
  • key_size_in_bits:密钥的大小(以位为单位)。 有效值为:
    • NX_CRYPTO_AES_KEY_SIZE_128_BITS
    • NX_CRYPTO_AES_KEY_SIZE_192_BITS
    • NX_CRYPTO_AES_KEY_SIZE_256_BITS
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,且未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 AES 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 AES,元数据大小必须为 sizeof(NX_AES)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 AES 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。
  • NX_CRYPTO_UNSUPPORTED_KEY_SIZE (0x20002):密钥大小对于 AES 无效。

_nx_crypto_method_aes_operation

执行 AES 操作(加密或解密)。

原型

UINT _nx_crypto_method_aes_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT status));

说明

此函数会执行 AES 加密或解密操作。 必须已使用 _nx_crypto_method_aes_init 初始化 AES 控制块。 要执行的 AES 算法基于方法控制块中指定的算法。

输入缓冲区大小必须是 16 个字节的倍数。 解密数据的大小与输入数据的大小相同。 如果已对加密的数据进行填充以实现 AES 块大小的偶数倍,则填充将包含在输出缓冲区中,并必须由应用程序进行处理。

此操作不会保存状态信息,也不会改变 AES 控制块中的密钥材料。

当 op 为 NX_CRYPTO_SET_ADDITIONAL_DATA 并且算法为 AES-CCM8 时,输入指向其他数据,input_length_in_byte 为其他数据的长度。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_ENCRYPT
    • NX_CRYPTO_DECRYPT
    • NX_CRYPTO_AUTHENTICATE (AES-XCBC only)
    • NX_CRYPTO_SET_ADDITIONAL_DATA (AES-CCM8 only)
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 AES 加密方法的指针。 此处使用的加密方法必须与 nx_crypto_method_aes_init 中使用的加密方法相同。
  • input_data:指向包含加密文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。 输入数据大小必须是 16 个字节的倍数。
  • iv_ptr:指向初始向量的指针。 对 IV 缓冲区没有限制。
  • iv_size:初始向量块的大小(以字节为单位),此字段必须为 16。
  • output_buffer:指向 AES 用于存储明文数据的内存区域的指针。 应用程序必须为输出缓冲区分配空间。 输出缓冲区可能与输入缓冲区重叠。 如果输出缓冲区共享相同的起始地址,则可能与输入缓冲区重叠。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。 输出缓冲区的大小必须至少与输入缓冲区的大小相同,并且输出缓冲区的大小必须是 16 个字节的倍数。
  • crypto_metadata:指向 _nx_crypto_method_aes_init 中所使用的 AES 控制块的指针。**
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 AES,元数据大小必须为 sizeof (NX_AES)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 AES 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 AES 算法无效**。

_nx_crypto_method_aes_cleanup

清理 AES 控制块。

原型

UINT _nx_crypto_method_aes_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 AES 会话后,将调用此函数来清理 AES 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_aes_init 中所使用的 AES 控制块的指针。**

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 AES 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_3des_init

初始化 3DES 控制块。

原型

UINT _nx_crypto_method_3des_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数会用给定的三个密钥字符串初始化三重 DES (3DES) 控制块。 每个密钥字符串必须是 8 个字节。 这三个 DES 密钥必须连接到 24 字节缓冲区的连续内存。 对于符合 FIPS 标准的编译,三个密钥必须各异,否则函数将返回 NX_CRYPTO_INVALID_KEY 错误。 初始化 3DES 控制块后,后续 3DES 操作将使用相同的密钥。

应用程序可以创建多个 3DES 控制块,每个块表示一个会话。 一个控制块分配一个密钥,后续加密或解密操作可以引用同一控制块,而无需重新初始化。 如果更改了会话的密钥,则应用程序将需要使用更新后的密钥重新初始化控制块。

调用 _nx_crypto_method_3des_init 会自动将以前配置的密钥和密钥大小更新为新密钥。

参数

  • 方法:指向有效的 3DES 加密方法控制块的指针。 目前提供以下预定义的 3DES 加密方法:crypto_method_3des
  • 密钥:指向包含三 (3) 个 DES 密钥的缓冲区
  • key_size_in_bits:必须是 192(3 个密钥,每个 64 位)。
  • 句柄:此服务向调用方返回句柄。 该句柄标识正在初始化的 3DES 控制块。 后续的 3DES 操作(加密、解密和清理)将使用此句柄访问 3DES 控制块
  • crypto_metadata:指向 3DES 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 3DES,元数据大小必须为 sizeof (NX_3DES)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 3DES 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。
  • NX_CRYPTO_UNSUPPORTED_KEY_SIZE (0x20002):密钥大小对于 3DES 无效。

_nx_crypto_method_3des_operation

使用 3DES 进行加密或解密。

原型

UINT _nx_crypto_method_3des_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数将执行 3DES 加密或解密操作。 必须已使用 _nx_crypto_method_3des_init 初始化 3DES 控制块。 要执行的 3DES 算法基于方法控制块中指定的算法。

输入缓冲区大小必须是 8 个字节的倍数。 解密数据的大小与输入数据的大小相同。 如果已对加密的数据进行填充以实现 3DES 块大小的偶数倍,则填充将包含在输出缓冲区中,并必须由应用程序处理。

此操作不会保存状态信息,也不会更改 3DES 控制块中的密钥材料。

参数

  • op:要执行的操作类型。 有效的操作包括:
    • NX_CRYPTO_ENCRYPT
    • NX_CRYPTO_DECRYPT
  • 句柄:使用 _nx_crypto_method_3des_init 初始化的句柄。
  • 方法:指向有效的 3DES 加密方法的指针。 此处使用的加密方法必须与 nx_crypto_method_3des_init 中使用的加密方法相同。
  • input_data:指向包含加密文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。 输入数据大小必须是 8 个字节的倍数。
  • iv_ptr:指向初始向量的指针。 对 IV 缓冲区没有限制。
  • iv_size:初始向量块的大小(以字节为单位),此字段必须为 8。
  • output_buffer:指向 3DES 用于存储明文数据的内存区域的指针。 应用程序必须为输出缓冲区分配空间。 输出缓冲区可能与输入缓冲区重叠。 如果输出缓冲区共享相同的起始地址,则可能与输入缓冲区重叠。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。 输出缓冲区的大小必须至少与输入缓冲区的大小相同,并且输出缓冲区大小必须是 8 个字节的倍数。
  • crypto_metadata:指向 _nx_crypto_method_3des_init 中所使用的 3DES 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 3DES,元数据大小必须为 sizeof (NX_3DES)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

说明

此函数将执行 3DES 加密。 必须已使用 _nx_crypto_moethod_3des_init 初始化 3DES 控制块。 此操作不会保存状态信息,也不会更改 3DES 控制块中的密钥材料。 请注意,此函数不会添加填充,因此调用方需要在调用加密操作之前处理填充。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 3DES 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_3des_cleanup

清理 3DES 控制块。

原型

UINT _nx_crypto_method_3des_cleanup(VOID *crypto_metadata);

说明

应用程序在确定不再需要此 3DES 会话后,将调用此函数来清理 3DES 控制块。

参数

  • 句柄:使用 _nx_crypto_method_3des_init 初始化的句柄。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 3DES 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_drbg_init

初始化 DRBG 加密控制块

原型

UINT _nx_crypto_method_drbg_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 DRBG 控制块。 初始化 DRBG 控制块后,后续的 DRBG 操作应该使用相同的控制块。

应用程序可以创建多个 DRBG 控制块,每个块表示一个会话。 初始化 DRBG 控制块将启动新的哈希计算会话。 重新初始化 DRBG 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 DRBG 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_drbg
  • 密钥:DRBG 不使用此字段。
  • key_size_in_bits:DRBG 不使用此字段。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 DRBG 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 DRBG,元数据大小必须为 sizeof(NX_CRYPTO_DRBG)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 DRBG 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_drbg_operation

执行 DRBG 操作

原型

UINT __nx_crypto_method_drbg_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 DRBG 操作。 必须已使用 _nx_crypto_method_drbg_init 初始化 DRBG 控制块。 要执行的 DRBG 算法基于方法控制块中指定的算法。 默认情况下,DRBG 使用 AES-128。

当操作是 NX_CRYPTO_DRBG_OPTIONS_SET 时,输入指向 NX_CRYPTO_DRBG_OPTIONS 结构。 当操作是 NX_CRYPTO_DRBG_INSTANTIATE 时,密钥指向 nonce,输入指向个性化字符串。 当操作是 NX_CRYPTO_DRBG_RESEED 或 NX_CRYPTO_DRBG_GENERATE 时,输入指向其他输入。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_DRBG_OPTIONS_SET
    • NX_CRYPTO_DRBG_INSTANTIATE
    • NX_CRYPTO_DRBG_RESEED
    • NX_CRYPTO_DRBG_GENERATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 DRBG 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_drbg_init 中使用的加密方法相同。
  • 密钥:指向用于实例化操作的 nonce 的指针。 此字段不用于其他操作。
  • key_size_in_bits:nonce 的大小(以位为单位)。 此字段不用于其他操作。
  • 输入:当 op 为 NX_CRYPTO_DRBG_OPTIONS_SET 时,此字段指向 DRBG 选项。 当 op 为 NX_CRYPTO_DRBG_INSTANTIATE 时,此字段指向个性化字符串。 当 op 为 NX_CRYPTO_DRBG_RESEED 或 NX_CRYPTO_DRBG_GENERATE 时,此字段将指向其他输入数据。
  • input_length_in_byte:输入数据的大小(以字节为单位)。
  • iv_ptr:DRBG 不使用此字段。
  • 输出:当 op 为 NX_CRYPTO_DRBG_GENERATE 时,此字段指向所生成的 DRBG 的内存区域。 否则,不使用此字段。
  • output_length_in_byte:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_drbg_init 中所使用的 DRBG 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 DRBG,元数据大小必须为 sizeof(NX_CRYPTO_DRBG)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 DRBG 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 DRBG 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_drbg_cleanup

清理 DRBG 控制块。

原型

UINT _nx_crypto_method_drbg_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 DRBG 会话后,将调用此函数来清理 DRBG 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_drbg_init 中所使用的 DRBG 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 DRBG 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_ecdh_init

初始化 ECDH 加密控制块

原型

UINT _nx_crypto_method_ecdh_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 ECDH 控制块。 初始化 ECDH 控制块后,后续的 ECDH 操作应该使用相同的控制块。

应用程序可以创建多个 ECDH 控制块,每个块表示一个会话。 初始化 ECDH 控制块会启动新的哈希计算会话。 重新初始化 ECDH 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 ECDH 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_ecdh
  • 密钥:ECDH 不使用此字段。
  • key_size_in_bits:ECDH 不使用此字段。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 ECDH 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 ECDH,元数据大小必须为 sizeof(NX_CRYPTO_ECDH)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 ECDH 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_ecdh_operation

执行 ECDH 操作

原型

UINT _nx_crypto_method_ecdh_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 ECDH 操作。 必须已使用 _nx_crypto_method_ecdh_init 初始化 ECDH 控制块。 要执行的 ECDH 算法基于方法控制块中指定的算法。

当操作是 NX_CRYPTO_EC_CURVE_SET 时,输入指向椭圆曲线加密方法。 当操作是 NX_CRYPTO_EC_KEY_PAIR_GENERATE 时,输出指向 NX_CRYPTO_EXTENDED_OUTPUT 结构,并且密钥对将复制到 nx_crypto_extended_output_data。 当操作是 NX_CRYPTO_DH_SETUP 时,公钥将返回到 nx_crypto_extended_output_data。 当操作是 NX_CRYPTO_DH_KEY_PAIR_IMPORT 时,输入指向公钥,而密钥指向私钥。 当操作是 NX_CRYPTO_DH_PRIVATE_KEY_EXPORT 时,私钥将复制到 nx_crypto_extended_output_data。 当操作是 NX_CRYPTO_DH_CALCULATE 时,输入指向远程公钥,并且共享密钥将复制到 nx_crypto_extended_output_data。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_EC_CURVE_SET
    • NX_CRYPTO_DH_SETUP
    • NX_CRYPTO_DH_CALCULATE
    • NX_CRYPTO_DH_KEY_PAIR_IMPOPRT
    • NX_CRYPTO_DH_KEY_PAIR_GENERATE
    • NX_CRYPTO_DH_PRIVATE_KEY_EXPORT
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 ECDH 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_ecdh_init 中使用的加密方法相同。
  • 密钥:当 op 为 NX_CRYPTO_DH_IMPORT_KEY_PAIR 时,此字段指向私钥。 否则,ECDH 不使用此字段。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • 输入:当 op 为 NX_CRYPTO_EC_CURVE_SET 时,此字段指向椭圆曲线加密方法。 当 op 为 NX_CRYPTO_DH_SETUP 时,不使用此字段。 当 op 为 NX_CRYPTO_DH_CALCULATE 时,此字段指向包含输入文本数据的缓冲区。 当 op 为 NX_CRYPTO_DH_IMPORT_KEY_PAIR 时,此字段指向公钥。
  • input_length_in_byte:输入数据的大小(以字节为单位)。
  • iv_ptr:ECDH 不使用此字段。
  • 输出:当 op 为 NX_CRYPTO_EC_CURVE_SET 或 NX_CRYPTO_DH_IMPORT_KEY_PAIR 时,不使用此字段。 当 op 为 NX_CRYPTO_DH_SETUP 时,此字段指向所生成的 ECDH 公钥的内存区域。 当 op 为 NX_CRYPTO_DH_CALCULATE 时,此字段指向所生成的 ECDH 共享密钥的内存区域。
  • output_length_in_byte:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_ecdh_init 中所使用的 ECDH 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 ECDH,元数据大小必须为 sizeof(NX_CRYPTO_ECDH)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 ECDH 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 ECDH 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_ecdh_cleanup

清理 ECDH 控制块。

原型

UINT _nx_crypto_method_ecdh_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 ECDH 会话后,将调用此函数来清理 ECDH 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_ecdh_init 中所使用的 ECDH 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 ECDH 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_ecdsa_init

初始化 ECDSA 加密控制块

原型

UINT _nx_crypto_method_ecdsa_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 ECDSA 控制块。 初始化 ECDSA 控制块后,后续的 ECDSA 操作应该使用相同的控制块。

应用程序可以创建多个 ECDSA 控制块,每个块表示一个会话。 初始化 ECDSA 控制块会启动新的哈希计算会话。 重新初始化 ECDSA 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 ECDSA 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_ecdsa
  • 密钥:ECDSA 不使用此字段。
  • key_size_in_bits:ECDSA 不使用此字段。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 ECDSA 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 ECDSA,元数据大小必须为 sizeof(NX_CRYPTO_ECDSA)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 ECDSA 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_ecdsa_operation

执行 ECDSA 操作

原型

UINT _nx_crypto_method_ecdsa_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 ECDSA 运算。 必须已使用 _nx_crypto_method_ecdsa_init 初始化 ECDSA 控制块。 要执行的 ECDSA 算法基于方法控制块中指定的算法。

当操作是 NX_CRYPTO_EC_CURVE_SET 时,输入指向椭圆曲线加密方法。 当操作是 NX_CRYPTO_EC_KEY_PAIR_GENERATE 时,输出指向 NX_CRYPTO_EXTENDED_OUTPUT 结构,并且密钥对将复制到 nx_crypto_extended_output_data。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_EC_CURVE_SET
    • NX_CRYPTO_AUTHENTICATE
    • NX_CRYPTO_VERIFY
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 ECDSA 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_ecdsa_init 中使用的加密方法相同。
  • 密钥:当 op 为 NX_CRYPTO_VERIFY 时会指向此密钥。 对密钥缓冲区没有限制。 此字段不用于其他 op 值。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • 输入:当 op 为 NX_CRYPTO_EC_CURVE_SET 时,此字段指向椭圆曲线加密方法。 否则,此字段指向包含输入文本数据的缓冲区。
  • input_length_in_byte:输入数据的大小(以字节为单位)。
  • iv_ptr:ECDSA 不使用此字段。
  • 输出:当 op 为 NX_CRYPTO_EC_CURVE_SET 时,不使用此字段。 当 op 为 NX_CRYPTO_AUTHENTICATE 时,此字段指向所生成的 ECDSA 签名的内存区域。 当 op 为 NX_CRYPTO_VERIFY 时,此字段指向已验证的 ECDSA 签名的内存区域。
  • output_length_in_byte:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_ecdsa_init 中所使用的 ECDSA 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 ECDSA,元数据大小必须为 sizeof(NX_CRYPTO_ECDSA)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 ECDSA 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 ECDSA 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_ecdsa_cleanup

清除 ECDSA 控制块。

原型

UINT _nx_crypto_method_ecdsa_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 ECDSA 会话后,将调用此函数来清理 ECDSA 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_ecdsa_init 中所使用的 ECDSA 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 ECDSA 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_hmac_md5_init

初始化 HMAC MD5 加密控制块

原型

UINT _nx_crypto_method_hmac_md5_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 HMAC MD5 控制块。 初始化 HMAC MD5 控制块后,后续的 HMAC MD5 操作应该使用相同的控制块。

应用程序可以创建多个 HMAC MD5 控制块,每个块表示一个会话。 初始化 HMAC MD5 控制块会启动新的哈希计算会话。 重新初始化 HMAC MD5 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 HMAC MD5 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_hmac_md5
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 HMAC MD5 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC MD5,元数据大小必须为 sizeof(NX_CRYPTO_MD5_HMAC)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 HMAC MD5 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_hmac_md5_operation

执行 HMAC MD5 哈希运算。

原型

UINT _nx_crypto_method_hmac_md5_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 HMAC MD5 哈希运算。 必须已使用 _nx_crypto_method_hmac_md5_init 初始化 HMAC MD5 控制块。 要执行的 HMAC MD5 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 16 个字节。

此操作不会保存状态信息,也不会更改 HMAC MD5 控制块中的密钥材料。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 HMAC MD5 加密方法的指针。 此处使用的加密方法必须与 nx_crypto_method_hmac_md5_init 中使用的加密方法相同。
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:HMAC MD5 不使用此字段。
  • iv_size:HMAC MD5 不使用此字段。
  • output_buffer:指向所生成的 HMAC MD5 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_hmac_md5_init 中所使用的 HMAC MD5 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC MD5,元数据大小必须为 sizeof(NX_CRYPTO_MD5_HMAC)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 HMAC MD5 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 HMAC MD5 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_hmac_sha1_init

初始化 HMAC SHA1 加密控制块

原型

UINT _nx_crypto_method_hmac_sha1_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 HMAC SHA1 控制块。 初始化 HMAC SHA1 控制块后,后续的 HMAC SHA1 操作应该使用相同的控制块。

应用程序可以创建多个 HMAC SHA1 控制块,每个块表示一个会话。 初始化 HMAC SHA1 控制块会启动新的哈希计算会话。 重新初始化 HMAC SHA1 控制块会放弃当前会话,并开始新会话。

参数

  • 方法:指向有效的 HMAC SHA1 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_hmac_sha1
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 HMAC SHA1 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC SHA1,元数据大小必须为 sizeof(NX_CRYPTO_SHA1_HMAC)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 HMAC SHA1 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_hmac_sha1_operation

执行 HMAC SHA1 哈希运算

原型

UINT _nx_crypto_method_hmac_sha1_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 HMAC SHA1 哈希运算。 必须已使用 _nx_crypto_method_hmac_sha1_init 初始化 HMAC SHA1 控制块。 要执行的 HMAC SHA1 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 20 个字节。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 HMAC SHA1 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_hmac_sha1_init 中使用的加密方法相同。
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:HMAC SHA1 不使用此字段。
  • iv_size:HMAC SHA1 不使用此字段。
  • output_buffer:指向所生成的 HMAC SHA1 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_hmac_sha1_init 中所使用的 HMAC SHA1 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC SHA1,元数据大小必须为 sizeof(NX_CRYPTO_SHA1_HMAC)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 HMAC SHA1 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 HMAC SHA1 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_hmac_sha1_cleanup

清除 HMAC SHA1 控制块。

原型

UINT _nx_crypto_method_hmac_sha1_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 HMAC SHA1 会话后,将调用此函数来清理 HMAC SHA1 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_hmac_sha1_init 中所使用的 HMAC SHA1 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 HMAC SHA1 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_hmac_sha256_init

初始化 HMAC SHA256 加密控制块

原型

UINT _nx_crypto_method_hmac_sha256_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 HMAC SHA256 控制块。 初始化 HMAC SHA256 控制块后,后续的 HMAC SHA256 操作应该使用相同的控制块。

应用程序可以创建多个 HMAC SHA256 控制块,每个块表示一个会话。 初始化 HMAC SH256 控制块会启动新的哈希计算会话。 重新初始化 HMAC SHA256 控制块会放弃当前会话,并使用新密钥开始新会话。

参数

  • 方法:指向有效的 HMAC SHA256 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_hmac_sha224
    • crypto_method_hmac_sha256
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 HMAC SHA256 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC SHA256,元数据大小必须为 sizeof(NX_CRYTPO_SHA256_HMAC)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 HMAC SHA256 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_hmac_sha256_operation

执行 HMAC SHA256 哈希运算

原型

UINT _nx_crypto_method_hmac_sha256_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 HMAC SHA256 哈希运算。 必须已使用 _nx_crypto_method_hmac_sha256_init 初始化 HMAC SHA256 控制块。 要执行的 HMAC SHA256 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 32 个字节(对于 SHA256)或 28 个字节(对于 SHA224)。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 HMAC SHA256 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_hmac_sha256_init 中使用的加密方法相同。
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:HMAC SHA256 不使用此字段。
  • iv_size:HMAC SHA256 不使用此字段。
  • output_buffer:指向所生成的 HMAC SHA256 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_hmac_sha256_init 中所使用的 HMAC SHA256 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC SHA256,元数据大小必须为 sizeof(NX_CRYPTO_SHA256_HMAC)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 HMAC SHA256 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 HMAC SHA256 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_hmac_sha256_cleanup

清理 HMAC SHA256 控制块。

原型

UINT _nx_crypto_method_hmac_sha256_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 HMAC SHA256 会话后,将调用此函数来清理 HMAC SHA256 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_hmac_sha256_init 中所使用的 HMAC SHA256 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 HMAC SHA256 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_hmac_sha512_init

初始化 HMAC SHA512 加密控制块

原型

UINT _nx_crypto_method_hmac_sha512_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 HMAC SHA512 控制块。 初始化 HMAC SHA512 控制块后,后续的 HMAC SHA512 操作应该使用相同的控制块。

应用程序可以创建多个 HMAC SHA512 控制块,每个控制块表示一个会话。 初始化 HMAC SH512 控制块会启动新的哈希计算会话。 重新初始化 HMAC SHA512 控制块会放弃当前会话,并使用新密钥开始新会话。

参数

  • 方法:指向有效的 HMAC SHA512 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_hmac_sha384
    • crypto_method_hmac_sha512
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,且未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 HMAC SHA512 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC SHA512,元数据大小必须为 sizeof(NX_CRYPTO_SHA512_HMAC)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 HMAC SHA512 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_hmac_sha512_operation

执行 HMAC SHA512 哈希运算

原型

UINT _nx_crypto_method_hmac_sha512_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 HMAC SHA512 哈希运算。 必须已使用 _nx_crypto_method_hmac_sha512_init 初始化 HMAC SHA512 控制块。 要执行的 HMAC SHA512 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 64 个字节(对于 SHA512)或 48 个字节(对于 SHA384)。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 HMAC SHA512 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_hmac_sha512_init 中使用的加密方法相同。
  • 密钥:指向此密钥。 对密钥缓冲区没有限制。
  • key_size_in_bits:密钥的大小(以位为单位)。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:HMAC SHA512 不使用此字段。
  • iv_size:HMAC SHA512 不使用此字段。
  • output_buffer:指向所生成的 HMAC SHA512 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。
  • crypto_metadata:指向 _nx_crypto_method_hmac_sha512_init 中所使用的 HMAC SHA512 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 HMAC SHA512,元数据大小必须为 sizeof(NX_CRYPTO_SHA512_HMAC)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 HMAC SHA512 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 HMAC SHA512 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_hmac_sha512_cleanup

清理 HMAC SHA512 控制块。

原型

UINT _nx_crypto_method_hmac_sha512_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不需要此 HMAC SHA512 会话后,将调用此函数来清理 HMAC SHA512 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_hmac_sha512_init 中所使用的 HMAC SHA512 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 HMAC SHA512 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

示例

_nx_crypto_method_md5_init

初始化 MD5 加密控制块

原型

UINT _nx_crypto_method_md5_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 MD5 控制块。 初始化 MD5 控制块后,后续的 MD5 操作应该使用相同的控制块。

应用程序可以创建多个 MD5 控制块,每个块表示一个会话。 初始化 MD5 控制块会启动新的哈希计算会话。 重新初始化 MD5 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 MD5 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_md5
  • 密钥:MD5 不使用此字段。
  • key_size_in_bits:MD5 不使用此字段
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 MD5 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 MD5,元数据大小必须为 sizeof(NX_CRYPTO_MD5)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 MD5 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

示例

_nx_crypto_method_md5_operation

执行 MD5 哈希运算。

原型

UINT _nx_crypto_method_md5_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 MD5 哈希运算。 必须已使用 _nx_crypto_method_md5_init 初始化 MD5 控制块。 要执行的 MD5 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 16 个字节。

此操作不会保存状态信息,也不会更改 MD5 控制块中的密钥材料。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 MD5 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_md5_init 中使用的加密方法相同。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:MD5 不使用此字段。
  • iv_size:MD5 不使用此字段。
  • output_buffer:指向所生成的 MD5 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。 对于 MD5,缓冲区大小必须为 16 个字节。
  • crypto_metadata:指向 _nx_crypto_method_md5_init 中所使用的 MD5 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 MD5,元数据大小必须为 sizeof(NX_CRYPTO_MD5)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 MD5 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 MD5 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_md5_cleanup

清理 MD5 控制块。

原型

UINT _nx_crypto_method_md5_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 MD5 会话后,将调用此函数来清理 MD5 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_md5_init 中所使用的 MD5 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 MD5 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_sha1_init

初始化 SHA1 加密控制块

原型

UINT _nx_crypto_method_sha1_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 SHA1 控制块。 初始化 SHA1 控制块后,后续的 SHA1 操作应该使用相同的控制块。

应用程序可以创建多个 SHA1 控制块,每个块表示一个会话。 初始化 SHA1 控制块会启动新的哈希计算会话。 重新初始化 SHA1 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 SHA1 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_sha1
  • 密钥:SHA1 不使用此字段。
  • key_size_in_bits:SHA1 不使用此字段
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 SHA1 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 SHA1,元数据大小必须为 sizeof(NX_CRYPTO_SHA1)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 SHA1 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_sha1_operation

执行 SHA1 哈希运算

原型

UINT _nx_crypto_method_sha1_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 SHA1 哈希运算。 必须已使用 _nx_crypto_method_sha1_init 初始化 SHA1 控制块。 要执行的 SHA1 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 20 个字节。

参数

  • op*:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 SHA1 加密方法的指针。 此处使用的加密方法必须与 nx_crypto_method_sha1_init 中使用的加密方法相同。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:SHA1 不使用此字段。
  • iv_size:SHA1 不使用此字段。
  • output_buffer:指向所生成的 SHA1 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。 对于 SHA1,缓冲区大小必须为 20 个字节。
  • crypto_metadata:指向 _nx_crypto_method_sha1_init 中所使用的 SHA1 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 SHA1,元数据大小必须为 sizeof(NX_CRYPTO_SHA1)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 SHA1 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 SHA1 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

示例

_nx_crypto_method_sha1_cleanup

清理 SHA1 控制块。

原型

UINT _nx_crypto_method_sha1_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不需要此 SHA1 会话后,将调用此函数来清理 SHA1 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_sha1_init 中所使用的 SHA1 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 SHA1 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_sha256_init

初始化 SHA256 加密控制块

原型

UINT _nx_crypto_method_sha256_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size)

说明

此函数用给定的密钥字符串初始化 SHA256 控制块。 初始化 SHA256 控制块后,后续的 SHA256 操作应该使用相同的控制块。

应用程序可以创建多个 SHA256 控制块,每个块表示一个会话。 初始化 SHA256 控制块会启动新的哈希计算会话。 重新初始化 SHA256 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 SHA256 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_sha256
    • crypto_method_sha224
  • 密钥:SHA256 不使用此字段。
  • key_size_in_bits:SHA256 不使用此字段
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 SHA256 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 SHA256,元数据大小必须为 sizeof(NX_CRYPTO_SHA256)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 SHA256 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_sha256_operation

执行 SHA256 哈希运算

原型

UINT _nx_crypto_method_sha256_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT
    status));

说明

此函数会执行 SHA256 哈希运算。 必须已使用 _nx_crypto_method_sha256_init 初始化 SHA256 控制块。 要执行的 SHA256 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 32 个字节(对于 SHA256)或 28 个字节(对于 SHA224)。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 SHA256 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_sha256_init 中使用的加密方法相同。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:SHA256 不使用此字段。
  • iv_size:SHA256 不使用此字段。
  • output_buffer:指向所生成的 SHA256 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。 对于 SHA256,缓冲区大小必须为 32 个字节。 对于 SHA224,缓冲区大小必须为 28 个字节。
  • crypto_metadata:指向 _nx_crypto_method_sha2_init 中所使用的 SHA2 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 SHA256,元数据大小必须为 sizeof(NX_CRYPTO_SHA256)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 SHA256 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 SHA256 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_sha256_cleanup

清理 SHA256 控制块。

原型

UINT _nx_crypto_method_sha256_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 SHA256 会话后,将调用此函数来清理 SHA256 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_sha256_init 中所使用的 SHA256 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 SHA256 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。

_nx_crypto_method_sha512_init

初始化 SHA512 加密控制块

原型

UINT _nx_crypto_method_sha512_init(
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    VOID **handle,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size);

说明

此函数用给定的密钥字符串初始化 SHA512 控制块。 初始化 SHA512 控制块后,后续的 SHA512 操作应该使用相同的控制块。

应用程序可以创建多个 SHA512 控制块,每个块表示一个会话。 初始化 SHA512 控制块将启动新的哈希计算会话。 重新初始化 SHA512 控制块会放弃当前会话,并启动新会话。

参数

  • 方法:指向有效的 SHA512 加密方法控制块的指针。 目前提供以下预定义的加密方法:
    • crypto_method_sha512
    • crypto_method_sha384
  • 密钥:SHA512 不使用此字段。
  • key_size_in_bits:SHA512 不使用此字段
  • 句柄:此服务向调用方返回句柄。 该句柄依赖于实现,但未在此实现中使用。 应用程序应为句柄传递 NULL。
  • crypto_metadata:指向 SHA512 控制块的有效内存空间的指针。 内存空间的起始地址必须为 4 字节对齐。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 SHA512,元数据大小必须为 sizeof(NX_CRYPTO_SHA512)

返回值

  • NX_CRYPTO_SUCCESS (0x00):已使用此密钥和密钥大小成功初始化 SHA512 控制块。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):指向密钥的指针无效,或者 crypto_metadata 或 crypto_metadata_size 无效,或者 crypto_metadata 不是以 4 字节对齐。

_nx_crypto_method_sha512_operation

执行 SHA512 哈希运算

原型

UINT _nx_crypto_method_sha512_operation(UINT op,
    VOID *handle,
    struct NX_CRYPTO_METHOD_STRUCT *method,
    UCHAR *key,
    NX_CRYPTO_KEY_SIZE key_size_in_bits,
    UCHAR *input,
    ULONG input_length_in_byte,
    UCHAR *iv_ptr,
    UCHAR *output,
    ULONG output_length_in_byte,
    VOID *crypto_metadata,
    ULONG crypto_metadata_size,
    VOID *packet_ptr,
    VOID (*nx_crypto_hw_process_callback)(VOID *packet_ptr, UINT status));

说明

此函数会执行 SHA512 哈希运算。 必须已使用_nx_crypto_method_sha512_init 初始化 SHA512 控制块。 要执行的 SHA512 算法基于方法控制块中指定的算法。

对于最终的 NX_CRYPTO_HASH_CALCULATE 操作,输出缓冲区大小必须为 64 个字节(对于 SHA512)或 48 个字节(对于 SHA384)。

参数

  • op:要执行的操作类型。 有效的操作为:
    • NX_CRYPTO_HASH_INITIALIZE
    • NX_CRYPTO_HASH_UPDATE
    • NX_CRYPTO_HASH_CALCULATE
  • 句柄:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • 方法:指向有效的 SHA512 加密方法的指针。 此处使用的加密方法必须与 _nx_crypto_method_sha512_init 中使用的加密方法相同。
  • input_data:指向包含输入文本数据的缓冲区。 对输入缓冲区没有限制。
  • input_data_size:输入数据的大小(以字节为单位)。
  • iv_ptr:SHA512 不使用此字段。
  • iv_size:SHA512 不使用此字段。
  • output_buffer:指向所生成的 SHA512 哈希的内存区域的指针。
  • output_buffer_size:输出缓冲区的大小(以字节为单位)。 对于 SHA512,缓冲区大小必须为 64 个字节。 对于 SHA384,缓冲区大小必须为 48 个字节。
  • crypto_metadata:指向 _nx_crypto_method_sha512_init 中所使用的 SHA512 控制块的指针。
  • crypto_metadata_size:crypto_metadata 区域的大小(以字节为单位)。 对于 SHA512,元数据大小必须为 sizeof(NX_CRYPTO_SHA512)
  • packet_ptr:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。
  • nx_crypto_hw_process_callback:NetX Crypto 库的软件实现中不使用此字段。 传入的任何值都将被自动忽略。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功执行 SHA512 操作。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。
  • NX_PTR_ERROR (0x07):输入指针无效或长度无效。
  • NX_CRYPTO_INVALID_ALGORITHM (0x20004):指定的 SHA512 算法无效。
  • NX_CRYPTO_INVALID_BUFFER_SIZE (0x20005):输出缓冲区大小无效。

_nx_crypto_method_sha512_cleanup

清理 SHA512 控制块。

原型

UINT _nx_crypto_method_sha512_cleanup(VOID* crypto_metadata);

说明

应用程序在确定不再需要此 SHA512 会话后,将调用此函数来清理 SHA512 控制块。

参数

  • crypto_metadata:指向 _nx_crypto_method_sha512_init 中所使用的 SHA512 控制块的指针。

返回值

  • NX_CRYPTO_SUCCESS (0x00):已成功清理 SHA512 会话。
  • NX_CRYPTO_INVALID_LIBRARY (0x20001):加密库处于无效状态,因此无法使用。