PKE
PKE(Public Key Engine)提供公钥密码运算能力,覆盖 ECC(Elliptic Curve Cryptography)密钥生成、ECDSA(Elliptic Curve Digital Signature Algorithm) / EdDSA(Edwards-curve Digital Signature Algorithm)签名与验签、ECDH(Elliptic Curve Diffie-Hellman)密钥协商、SM2 签名/加密与解密、RSA(Rivest-Shamir-Adleman)签名/验签/加解密、DH(Diffie-Hellman)密钥生成与协商,以及大数模加、模减、模乘、模逆、取模、大数乘和模幂运算。
模块公共头文件
接口清单
Functions
uapi_drv_cipher_pke_ecc_gen_key
errcode_t uapi_drv_cipher_pke_ecc_gen_key(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_data_t *input_priv_key,
const uapi_drv_cipher_pke_data_t *output_priv_key,
const uapi_drv_cipher_pke_ecc_point_t *output_pub_key)
声明头文件
功能说明
- 依据指定的 ECC 曲线类型生成 ECC 公私钥对。
- 输入私钥可为空指针,为空时由内部生成随机私钥。
- 输出私钥与输出公钥由调用方提供缓冲区,接口填充结果。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| input_priv_key | uapi_drv_cipher_pke_data_t | 输入私钥,可为空指针;非空时作为生成私钥的输入 | 可为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| output_priv_key | uapi_drv_cipher_pke_data_t | 输出私钥,由调用方分配缓冲区,接口填充私钥数据 |
| output_pub_key | uapi_drv_cipher_pke_ecc_point_t | 输出公钥,由调用方分配 X/Y 坐标缓冲区,接口填充公钥坐标 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 密钥对生成成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_ECC_GEN_KEY | 特性宏 | 支持 ECC 密钥生成功能 | y |
uapi_drv_cipher_pke_ecdsa_sign
errcode_t uapi_drv_cipher_pke_ecdsa_sign(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_data_t *priv_key,
const uapi_drv_cipher_pke_data_t *hash,
const uapi_drv_cipher_pke_ecc_sig_t *sig)
声明头文件
功能说明
- 使用 ECC 私钥对输入摘要进行 ECDSA 数字签名。
- 签名结果输出到调用方提供的签名结构体缓冲区。
- 支持多种 ECC 曲线类型。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| priv_key | uapi_drv_cipher_pke_data_t | 输入 ECC 私钥 | 不为 NULL |
| hash | uapi_drv_cipher_pke_data_t | 输入待签名的摘要数据 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| sig | uapi_drv_cipher_pke_ecc_sig_t | 输出签名结果,由调用方分配 r/s 缓冲区,接口填充签名值 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 签名生成成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
uapi_drv_cipher_pke_ecdsa_verify
errcode_t uapi_drv_cipher_pke_ecdsa_verify(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_ecc_point_t *pub_key,
const uapi_drv_cipher_pke_data_t *hash,
const uapi_drv_cipher_pke_ecc_sig_t *sig)
声明头文件
功能说明
- 使用 ECC 公钥对输入签名进行 ECDSA 验签。
- 验签输入包括公钥、摘要与签名值。
- 支持多种 ECC 曲线类型。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| pub_key | uapi_drv_cipher_pke_ecc_point_t | 输入 ECC 公钥 | 不为 NULL |
| hash | uapi_drv_cipher_pke_data_t | 输入待验签的摘要数据 | 不为 NULL |
| sig | uapi_drv_cipher_pke_ecc_sig_t | 输入待验证的签名值 | 不为 NULL |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 验签通过 |
| Other | 其他错误码,参考errcode_t | 验签失败或执行失败 |
参考案例
src/middleware/utils/update/common/upg_verify.c
uapi_drv_cipher_pke_eddsa_sign
errcode_t uapi_drv_cipher_pke_eddsa_sign(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_data_t *priv_key,
const uapi_drv_cipher_pke_msg_t *msg,
const uapi_drv_cipher_pke_ecc_sig_t *sig)
声明头文件
功能说明
- 使用 Edwards 曲线私钥对输入消息进行 EdDSA 数字签名。
- 签名输入为完整消息而非摘要。
- 签名结果输出到调用方提供的签名结构体缓冲区。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| priv_key | uapi_drv_cipher_pke_data_t | 输入 Edwards 曲线私钥 | 不为 NULL |
| msg | uapi_drv_cipher_pke_msg_t | 输入待签名消息 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| sig | uapi_drv_cipher_pke_ecc_sig_t | 输出签名结果,由调用方分配 r/s 缓冲区,接口填充签名值 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 签名生成成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_EDWARD | 特性宏 | 支持 Edwards 曲线签名功能 | y |
uapi_drv_cipher_pke_eddsa_verify
errcode_t uapi_drv_cipher_pke_eddsa_verify(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_ecc_point_t *pub_key,
const uapi_drv_cipher_pke_msg_t *msg,
const uapi_drv_cipher_pke_ecc_sig_t *sig)
声明头文件
功能说明
- 使用 Edwards 曲线公钥对输入签名进行 EdDSA 验签。
- 验签输入包括公钥、消息与签名值。
- 支持多种 ECC 曲线类型。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| pub_key | uapi_drv_cipher_pke_ecc_point_t | 输入 Edwards 曲线公钥 | 不为 NULL |
| msg | uapi_drv_cipher_pke_msg_t | 输入待验签消息 | 不为 NULL |
| sig | uapi_drv_cipher_pke_ecc_sig_t | 输入待验证的签名值 | 不为 NULL |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 验签通过 |
| Other | 其他错误码,参考errcode_t | 验签失败或执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_EDWARD | 特性宏 | 支持 Edwards 曲线验签功能 | y |
uapi_drv_cipher_pke_ecc_gen_ecdh_key
errcode_t uapi_drv_cipher_pke_ecc_gen_ecdh_key(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_ecc_point_t *input_pub_key,
const uapi_drv_cipher_pke_data_t *input_priv_key,
const uapi_drv_cipher_pke_data_t *output_shared_key)
声明头文件
功能说明
- 基于输入的 ECC 公钥与私钥执行 ECDH 密钥协商。
- 输出协商得到的共享密钥。
- 支持多种 ECC 曲线类型。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| input_pub_key | uapi_drv_cipher_pke_ecc_point_t | 输入对端 ECC 公钥 | 不为 NULL |
| input_priv_key | uapi_drv_cipher_pke_data_t | 输入本地 ECC 私钥 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| output_shared_key | uapi_drv_cipher_pke_data_t | 输出协商得到的共享密钥,由调用方分配缓冲区,接口填充数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 共享密钥协商成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_ECC_ECDH | 特性宏 | 支持 ECC ECDH 密钥协商功能 | y |
uapi_drv_cipher_pke_check_dot_on_curve
errcode_t uapi_drv_cipher_pke_check_dot_on_curve(uapi_drv_cipher_pke_ecc_curve_type_t curve_type,
const uapi_drv_cipher_pke_ecc_point_t *pub_key, bool *is_on_curve)
声明头文件
功能说明
- 检查输入点是否在指定 ECC 曲线上。
- 输出布尔结果指示点是否在曲线上。
- 支持多种 ECC 曲线类型。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| curve_type | uapi_drv_cipher_pke_ecc_curve_type_t | ECC 曲线类型 | uapi_drv_cipher_pke_ecc_curve_type_t 全体成员 |
| pub_key | uapi_drv_cipher_pke_ecc_point_t | 输入待检查的 ECC 点 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| is_on_curve | bool * | 输出检查结果,true 表示点在曲线上,false 表示不在曲线上 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 检查操作执行成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_ECC_CAL | 特性宏 | 支持 ECC 点校验功能 | y |
uapi_drv_cipher_pke_sm2_dsa_hash
errcode_t uapi_drv_cipher_pke_sm2_dsa_hash(const uapi_drv_cipher_pke_data_t *sm2_id,
const uapi_drv_cipher_pke_ecc_point_t *pub_key,
const uapi_drv_cipher_pke_msg_t *msg,
uapi_drv_cipher_pke_data_t *hash)
声明头文件
功能说明
- 计算 SM2 数字签名所需的 SM3 摘要。
- 输入包括 SM2 ID、公钥与待签名消息。
- 输出摘要供后续 SM2 签名或验签使用。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| sm2_id | uapi_drv_cipher_pke_data_t | 输入 SM2 用户 ID | 不为 NULL |
| pub_key | uapi_drv_cipher_pke_ecc_point_t | 输入 SM2 公钥 | 不为 NULL |
| msg | uapi_drv_cipher_pke_msg_t | 输入待计算摘要的消息 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| hash | uapi_drv_cipher_pke_data_t | 输出 SM3 摘要,由调用方分配缓冲区,接口填充摘要数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 摘要计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
参考案例
src/middleware/utils/update/common/upg_verify.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_SM2_SIGN | 特性宏 | 支持 SM2 签名摘要计算功能 | y |
| CONFIG_PKE_SUPPORT_SM2_VERIFY | 特性宏 | 支持 SM2 验签摘要计算功能 | y |
uapi_drv_cipher_pke_sm2_public_encrypt
errcode_t uapi_drv_cipher_pke_sm2_public_encrypt(const uapi_drv_cipher_pke_ecc_point_t *pub_key,
const uapi_drv_cipher_pke_data_t *plain_text,
const uapi_drv_cipher_pke_data_t *cipher_text)
声明头文件
功能说明
- 使用 SM2 公钥对明文进行加密。
- 输出密文到调用方提供的缓冲区。
- 配合 SM2 私钥解密接口成对使用。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| pub_key | uapi_drv_cipher_pke_ecc_point_t | 输入 SM2 公钥 | 不为 NULL |
| plain_text | uapi_drv_cipher_pke_data_t | 输入待加密的明文 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| cipher_text | uapi_drv_cipher_pke_data_t | 输出密文,由调用方分配缓冲区,接口填充密文数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 加密成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_SM2_CRYPTO | 特性宏 | 支持 SM2 加解密功能 | y |
uapi_drv_cipher_pke_sm2_private_decrypt
errcode_t uapi_drv_cipher_pke_sm2_private_decrypt(const uapi_drv_cipher_pke_data_t *priv_key,
const uapi_drv_cipher_pke_data_t *cipher_text,
const uapi_drv_cipher_pke_data_t *plain_text)
声明头文件
功能说明
- 使用 SM2 私钥对密文进行解密。
- 输出明文到调用方提供的缓冲区。
- 配合 SM2 公钥加密接口成对使用。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| priv_key | uapi_drv_cipher_pke_data_t | 输入 SM2 私钥 | 不为 NULL |
| cipher_text | uapi_drv_cipher_pke_data_t | 输入待解密的密文 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| plain_text | uapi_drv_cipher_pke_data_t | 输出明文,由调用方分配缓冲区,接口填充明文数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 解密成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_SM2_CRYPTO | 特性宏 | 支持 SM2 加解密功能 | y |
uapi_drv_cipher_pke_rsa_sign
errcode_t uapi_drv_cipher_pke_rsa_sign(const uapi_drv_cipher_pke_rsa_priv_key_t *priv_key,
uapi_drv_cipher_pke_rsa_scheme_t scheme,
uapi_drv_cipher_pke_hash_type_t hash_type,
const uapi_drv_cipher_pke_data_t *input_hash,
uapi_drv_cipher_pke_data_t *sign)
声明头文件
功能说明
- 使用 RSA 私钥对输入摘要进行数字签名。
- 签名填充方式与摘要算法由入参指定。
- 签名结果输出到调用方提供的缓冲区。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| priv_key | uapi_drv_cipher_pke_rsa_priv_key_t | 输入 RSA 私钥 | 不为 NULL |
| scheme | uapi_drv_cipher_pke_rsa_scheme_t | RSA 填充方式 | uapi_drv_cipher_pke_rsa_scheme_t 全体成员 |
| hash_type | uapi_drv_cipher_pke_hash_type_t | RSA 填充使用的摘要算法 | uapi_drv_cipher_pke_hash_type_t 全体成员 |
| input_hash | uapi_drv_cipher_pke_data_t | 输入待签名的摘要 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| sign | uapi_drv_cipher_pke_data_t | 输出签名结果,由调用方分配缓冲区,接口填充签名数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 签名生成成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_RSA | 特性宏 | 支持 RSA 签名功能 | y |
uapi_drv_cipher_pke_rsa_verify
errcode_t uapi_drv_cipher_pke_rsa_verify(const uapi_drv_cipher_pke_rsa_pub_key_t *pub_key,
uapi_drv_cipher_pke_rsa_scheme_t scheme,
uapi_drv_cipher_pke_hash_type_t hash_type,
uapi_drv_cipher_pke_data_t *input_hash,
const uapi_drv_cipher_pke_data_t *sig)
声明头文件
功能说明
- 使用 RSA 公钥对输入签名进行验签。
- 验签填充方式与摘要算法由入参指定。
- 验签输入包括公钥、摘要与签名值。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| pub_key | uapi_drv_cipher_pke_rsa_pub_key_t | 输入 RSA 公钥 | 不为 NULL |
| scheme | uapi_drv_cipher_pke_rsa_scheme_t | RSA 填充方式 | uapi_drv_cipher_pke_rsa_scheme_t 全体成员 |
| hash_type | uapi_drv_cipher_pke_hash_type_t | RSA 填充使用的摘要算法 | uapi_drv_cipher_pke_hash_type_t 全体成员 |
| input_hash | uapi_drv_cipher_pke_data_t | 输入待验签的摘要 | 不为 NULL |
| sig | uapi_drv_cipher_pke_data_t | 输入待验证的签名值 | 不为 NULL |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 验签通过 |
| Other | 其他错误码,参考errcode_t | 验签失败或执行失败 |
参考案例
src/middleware/utils/update/common/upg_verify.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_RSA | 特性宏 | 支持 RSA 验签功能 | y |
uapi_drv_cipher_pke_rsa_public_encrypt
errcode_t uapi_drv_cipher_pke_rsa_public_encrypt(uapi_drv_cipher_pke_rsa_scheme_t scheme,
uapi_drv_cipher_pke_hash_type_t hash_type,
const uapi_drv_cipher_pke_rsa_pub_key_t *pub_key,
const uapi_drv_cipher_pke_data_t *input,
const uapi_drv_cipher_pke_data_t *label,
uapi_drv_cipher_pke_data_t *output)
声明头文件
功能说明
- 使用 RSA 公钥对明文进行加密。
- 填充方式由入参指定,hash_type 与 label 仅 OAEP(Optimal Asymmetric Encryption Padding)填充模式时使用。
- 输出密文到调用方提供的缓冲区。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| scheme | uapi_drv_cipher_pke_rsa_scheme_t | RSA 填充方式 | uapi_drv_cipher_pke_rsa_scheme_t 全体成员 |
| hash_type | uapi_drv_cipher_pke_hash_type_t | RSA 填充使用的摘要算法,仅 OAEP 填充模式时使用此参数 | uapi_drv_cipher_pke_hash_type_t 全体成员 |
| pub_key | uapi_drv_cipher_pke_rsa_pub_key_t | 输入 RSA 公钥 | 不为 NULL |
| input | uapi_drv_cipher_pke_data_t | 输入待加密的明文 | 不为 NULL |
| label | uapi_drv_cipher_pke_data_t | RSA 标签,仅 OAEP 填充模式时使用此参数 | 可为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| output | uapi_drv_cipher_pke_data_t | 输出密文,由调用方分配缓冲区,接口填充密文数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 加密成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_RSA | 特性宏 | 支持 RSA 公钥加密功能 | y |
uapi_drv_cipher_pke_rsa_private_decrypt
errcode_t uapi_drv_cipher_pke_rsa_private_decrypt(uapi_drv_cipher_pke_rsa_scheme_t scheme,
uapi_drv_cipher_pke_hash_type_t hash_type,
const uapi_drv_cipher_pke_rsa_priv_key_t *priv_key,
const uapi_drv_cipher_pke_data_t *input,
const uapi_drv_cipher_pke_data_t *label,
const uapi_drv_cipher_pke_data_t *output)
声明头文件
功能说明
- 使用 RSA 私钥对密文进行解密。
- 填充方式由入参指定,hash_type 与 label 仅 OAEP 填充模式时使用。
- 输出明文到调用方提供的缓冲区。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| scheme | uapi_drv_cipher_pke_rsa_scheme_t | RSA 填充方式 | uapi_drv_cipher_pke_rsa_scheme_t 全体成员 |
| hash_type | uapi_drv_cipher_pke_hash_type_t | RSA 填充使用的摘要算法,仅 OAEP 填充模式时使用此参数 | uapi_drv_cipher_pke_hash_type_t 全体成员 |
| priv_key | uapi_drv_cipher_pke_rsa_priv_key_t | 输入 RSA 私钥 | 不为 NULL |
| input | uapi_drv_cipher_pke_data_t | 输入待解密的密文 | 不为 NULL |
| label | uapi_drv_cipher_pke_data_t | RSA 标签,仅 OAEP 填充模式时使用此参数 | 可为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| output | uapi_drv_cipher_pke_data_t | 输出明文,由调用方分配缓冲区,接口填充明文数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 解密成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_RSA | 特性宏 | 支持 RSA 私钥解密功能 | y |
uapi_drv_cipher_pke_dh_gen_key
errcode_t uapi_drv_cipher_pke_dh_gen_key(const uapi_drv_cipher_pke_data_t *g_data,
const uapi_drv_cipher_pke_data_t *mod_n, const uapi_drv_cipher_pke_data_t *input_priv_key,
const uapi_drv_cipher_pke_data_t *output_priv_key, const uapi_drv_cipher_pke_data_t *output_pub_key)
声明头文件
功能说明
- 生成 DH 公私钥对,或基于输入私钥推导生成公钥。
- 输入私钥可为空,为空时由内部生成随机私钥。
- 输出私钥与公钥长度应与模数长度相同。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| g_data | uapi_drv_cipher_pke_data_t | 输入公开底数,该数为质数;g_data->length 不能大于 mod_n->length | 不为 NULL |
| mod_n | uapi_drv_cipher_pke_data_t | 输入公开模数,该数为质数;mod_n->length 支持 192/224/256/384/512/521/1024/2048/3072/4096 bits | 不为 NULL |
| input_priv_key | uapi_drv_cipher_pke_data_t | 输入私钥,可为空;非空时 input_priv_key->length 应与 mod_n->length 相同 | 可为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| output_priv_key | uapi_drv_cipher_pke_data_t | 输出私钥,output_priv_key->length 应与 mod_n->length 相同 |
| output_pub_key | uapi_drv_cipher_pke_data_t | 输出公钥,output_pub_key->length 应与 mod_n->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 密钥生成成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_RSA | 特性宏 | 支持 DH 密钥生成功能 | y |
uapi_drv_cipher_pke_dh_compute_key
errcode_t uapi_drv_cipher_pke_dh_compute_key(const uapi_drv_cipher_pke_data_t *mod_n,
const uapi_drv_cipher_pke_data_t *input_priv_key, const uapi_drv_cipher_pke_data_t *input_pub_key,
const uapi_drv_cipher_pke_data_t *output_shared_key)
声明头文件
功能说明
- 基于 DH(Diffie-Hellman)算法计算共享密钥。
- 输入本地私钥与对端公钥,输出协商得到的共享密钥。
- 模数为公开质数。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| mod_n | uapi_drv_cipher_pke_data_t | 输入公开模数,该数为质数 | 不为 NULL |
| input_priv_key | uapi_drv_cipher_pke_data_t | 输入本地私钥 | 不为 NULL |
| input_pub_key | uapi_drv_cipher_pke_data_t | 输入对端公钥 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| output_shared_key | uapi_drv_cipher_pke_data_t | 输出协商得到的共享密钥,由调用方分配缓冲区,接口填充数据 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 共享密钥计算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_RSA | 特性宏 | 支持 DH 密钥协商功能 | y |
uapi_drv_cipher_pke_add_mod
errcode_t uapi_drv_cipher_pke_add_mod(const uapi_drv_cipher_pke_data_t *a, const uapi_drv_cipher_pke_data_t *b,
const uapi_drv_cipher_pke_data_t *p, const uapi_drv_cipher_pke_data_t *c)
声明头文件
功能说明
- 执行大数模加运算,计算 c =(a + b) mod p。
- 模数 p 支持多种比特长度规格。
- 输出结果长度应与模数长度相同。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| a | uapi_drv_cipher_pke_data_t | 输入第一个大数,a->length 不能大于 p->length | 不为 NULL |
| b | uapi_drv_cipher_pke_data_t | 输入第二个大数,b->length 不能大于 p->length | 不为 NULL |
| p | uapi_drv_cipher_pke_data_t | 输入模数,p->length 支持 192/224/256/384/512/521/1024/1536/2048/3072/4096 bits | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| c | uapi_drv_cipher_pke_data_t | 输出模加结果,c->length 应与 p->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数模加运算功能 | y |
uapi_drv_cipher_pke_sub_mod
errcode_t uapi_drv_cipher_pke_sub_mod(const uapi_drv_cipher_pke_data_t *a, const uapi_drv_cipher_pke_data_t *b,
const uapi_drv_cipher_pke_data_t *p, const uapi_drv_cipher_pke_data_t *c)
声明头文件
功能说明
- 执行大数模减运算,计算 c =(a - b) mod p。
- 模数 p 支持多种比特长度规格。
- 输出结果长度应与模数长度相同。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| a | uapi_drv_cipher_pke_data_t | 输入第一个大数,a->length 不能大于 p->length | 不为 NULL |
| b | uapi_drv_cipher_pke_data_t | 输入第二个大数,b->length 不能大于 p->length | 不为 NULL |
| p | uapi_drv_cipher_pke_data_t | 输入模数,p->length 支持 192/224/256/384/512/521/1024/1536/2048/3072/4096 bits | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| c | uapi_drv_cipher_pke_data_t | 输出模减结果,c->length 应与 p->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数模减运算功能 | y |
uapi_drv_cipher_pke_mul_mod
errcode_t uapi_drv_cipher_pke_mul_mod(const uapi_drv_cipher_pke_data_t *a, const uapi_drv_cipher_pke_data_t *b,
const uapi_drv_cipher_pke_data_t *p, const uapi_drv_cipher_pke_data_t *c)
声明头文件
功能说明
- 执行大数模乘运算,计算 c = (a * b) mod p。
- 模数 p 支持多种比特长度规格且模数不能为偶数。
- 输出结果长度应与模数长度相同。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| a | uapi_drv_cipher_pke_data_t | 输入第一个大数,a->length 不能大于 p->length | 不为 NULL |
| b | uapi_drv_cipher_pke_data_t | 输入第二个大数,b->length 不能大于 p->length | 不为 NULL |
| p | uapi_drv_cipher_pke_data_t | 输入模数,p->length 支持 192/256/384/512/1024/1536/2048/3072/4096 bits,且模数不能为偶数 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| c | uapi_drv_cipher_pke_data_t | 输出模乘结果,c->length 应与 p->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数模乘运算功能 | y |
uapi_drv_cipher_pke_inv_mod
errcode_t uapi_drv_cipher_pke_inv_mod(const uapi_drv_cipher_pke_data_t *a, const uapi_drv_cipher_pke_data_t *p,
const uapi_drv_cipher_pke_data_t *c)
声明头文件
功能说明
- 执行大数模逆运算,计算 c = (a^-1) mod p。
- 模数 p 支持多种比特长度规格且模数不能为偶数。
- 输入 a 长度应与模数长度相同。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| a | uapi_drv_cipher_pke_data_t | 输入大数,a->length 应与 p->length 相同 | 不为 NULL |
| p | uapi_drv_cipher_pke_data_t | 输入模数,p->length 支持 192/256/384/512/1024/1536/2048/3072/4096 bits,且模数不能为偶数 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| c | uapi_drv_cipher_pke_data_t | 输出模逆结果,c->length 应与 p->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数模逆运算功能 | y |
uapi_drv_cipher_pke_mod
errcode_t uapi_drv_cipher_pke_mod(const uapi_drv_cipher_pke_data_t *a, const uapi_drv_cipher_pke_data_t *p,
const uapi_drv_cipher_pke_data_t *c)
声明头文件
功能说明
- 执行大数取模运算,计算 c = a mod p。
- 模数 p 支持多种比特长度规格且模数不能为偶数。
- 输入 a 有效数据长度不能大于模数有效数据长度的 2 倍。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| a | uapi_drv_cipher_pke_data_t | 输入大数,其有效数据长度不能大于 2 倍的 p->length 有效数据长度 | 不为 NULL |
| p | uapi_drv_cipher_pke_data_t | 输入模数,p->length 支持 192/256/384/512/1024/1536/2048/3072/4096 bits,且模数不能为偶数 | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| c | uapi_drv_cipher_pke_data_t | 输出取模结果,c->length 应与 p->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数取模运算功能 | y |
uapi_drv_cipher_pke_mul
errcode_t uapi_drv_cipher_pke_mul(const uapi_drv_cipher_pke_data_t *a, const uapi_drv_cipher_pke_data_t *b,
const uapi_drv_cipher_pke_data_t *c)
声明头文件
功能说明
- 执行大数乘运算,计算 c = a * b。
- 输入 a、b 数据长度均不能大于 2048 bits。
- 输出结果长度不能小于 a->length + b->length。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| a | uapi_drv_cipher_pke_data_t | 输入第一个大数,a->length 不能大于 2048 bits | 不为 NULL |
| b | uapi_drv_cipher_pke_data_t | 输入第二个大数,b->length 不能大于 2048 bits | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| c | uapi_drv_cipher_pke_data_t | 输出大数乘结果,c->length 不能小于 a->length + b->length |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数乘运算功能 | y |
uapi_drv_cipher_pke_exp_mod
errcode_t uapi_drv_cipher_pke_exp_mod(const uapi_drv_cipher_pke_data_t *n, const uapi_drv_cipher_pke_data_t *k,
const uapi_drv_cipher_pke_data_t *in, const uapi_drv_cipher_pke_data_t *out)
声明头文件
功能说明
- 执行大数模幂运算,计算 out = (in ^ k) mod n。
- 模数 n 支持多种比特长度规格且模数不能为偶数。
- 指数 k 与输入数据 in 的数据长度均不能大于 4096 bits。
前置条件
- 依赖关系:依赖 PKE 硬件引擎已就绪。
- 上下文限制:需在任务上下文调用,禁止在中断上下文调用。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| n | uapi_drv_cipher_pke_data_t | 输入模数,n->length 支持 192/256/384/512/1024/1536/2048/3072/4096 bits,且模数不能为偶数 | 不为 NULL |
| k | uapi_drv_cipher_pke_data_t | 输入指数,数据长度不能大于 4096 bits | 不为 NULL |
| in | uapi_drv_cipher_pke_data_t | 输入底数数据,数据长度不能大于 4096 bits | 不为 NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| out | uapi_drv_cipher_pke_data_t | 输出模幂结果,out->length 应与 n->length 相同 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 成功执行 | 运算成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_PKE_SUPPORT_BIG_NUMBER | 特性宏 | 支持大数模幂运算功能 | y |
Type definitions
errcode_t
使用说明
作为本模块全部对外接口的返回值类型,表示接口执行结果。
Enumerations
uapi_drv_cipher_pke_ecc_curve_type_t
typedef enum {
UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC5639_P256 = 0, /* RFC 5639 - Brainpool P256/384/512 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC5639_P384, /* RFC 5639 - Brainpool P256/384/512 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC5639_P512, /* RFC 5639 - Brainpool P256/384/512 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P256K, /* NIST FIPS 186-4 P192/224/256/384/521, suggest not to use */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P192R, /* NIST FIPS 186-4 P192/224/256/384/521, suggest not to use */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P224R, /* NIST FIPS 186-4 P192/224/256/384/521, suggest not to use */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P256R, /* NIST FIPS 186-4 P192/224/256/384/521, suggest not to use */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P384R, /* NIST FIPS 186-4 P192/224/256/384/521, suggest not to use */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P521R, /* NIST FIPS 186-4 P192/224/256/384/521, suggest not to use */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC7748, /* RFC 7748 - Curve25519 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC7748_448, /* RFC 7748 - Curve448 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC8032, /* RFC 8032 - ED25519 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_SM2, /* GMT 0003.2-2012 */
UAPI_DRV_CIPHER_PKE_ECC_TYPE_MAX,
UAPI_DRV_CIPHER_PKE_ECC_TYPE_INVALID = 0xffffffff,
} uapi_drv_cipher_pke_ecc_curve_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC5639_P256 | 0 | RFC 5639 Brainpool P256 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC5639_P384 | 1 | RFC 5639 Brainpool P384 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC5639_P512 | 2 | RFC 5639 Brainpool P512 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P256K | 3 | NIST FIPS 186-4 P256K 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P192R | 4 | NIST FIPS 186-4 P192R 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P224R | 5 | NIST FIPS 186-4 P224R 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P256R | 6 | NIST FIPS 186-4 P256R 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P384R | 7 | NIST FIPS 186-4 P384R 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_FIPS_P521R | 8 | NIST FIPS 186-4 P521R 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC7748 | 9 | RFC 7748 Curve25519 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC7748_448 | 10 | RFC 7748 Curve448 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_RFC8032 | 11 | RFC 8032 ED25519 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_SM2 | 12 | GMT 0003.2-2012 SM2 曲线 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_MAX | 13 | 曲线类型上限 |
| UAPI_DRV_CIPHER_PKE_ECC_TYPE_INVALID | 0xffffffff | 无效曲线类型 |
uapi_drv_cipher_pke_rsa_scheme_t
typedef enum {
UAPI_DRV_CIPHER_PKE_RSA_SCHEME_PKCS1_V15 = 0x00, /* not security, suggest not to use */
UAPI_DRV_CIPHER_PKE_RSA_SCHEME_PKCS1_V21,
UAPI_DRV_CIPHER_PKE_RSA_SCHEME_MAX,
UAPI_DRV_CIPHER_PKE_RSA_SCHEME_INVALID = 0xffffffff,
} uapi_drv_cipher_pke_rsa_scheme_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_CIPHER_PKE_RSA_SCHEME_PKCS1_V15 | 0x00 | PKCS1 v1.5 填充方式(不安全,不建议使用) |
| UAPI_DRV_CIPHER_PKE_RSA_SCHEME_PKCS1_V21 | 0x1 | PKCS1 v2.1 填充方式 |
| UAPI_DRV_CIPHER_PKE_RSA_SCHEME_MAX | 0x2 | 填充方式上限 |
| UAPI_DRV_CIPHER_PKE_RSA_SCHEME_INVALID | 0xffffffff | 无效填充方式 |
uapi_drv_cipher_pke_hash_type_t
typedef enum {
UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA1 = 0x00, /* not security, suggest not to use */
UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA224,
UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA256,
UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA384,
UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA512,
UAPI_DRV_CIPHER_PKE_HASH_TYPE_SM3,
UAPI_DRV_CIPHER_PKE_HASH_TYPE_MAX,
UAPI_DRV_CIPHER_PKE_HASH_TYPE_INVALID = 0xffffffff,
} uapi_drv_cipher_pke_hash_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA1 | 0x00 | SHA1 摘要算法 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA224 | 0x1 | SHA224 摘要算法 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA256 | 0x2 | SHA256 摘要算法 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA384 | 0x3 | SHA384 摘要算法 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_SHA512 | 0x4 | SHA512 摘要算法 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_SM3 | 0x5 | SM3 摘要算法 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_MAX | 0x6 | 摘要算法上限 |
| UAPI_DRV_CIPHER_PKE_HASH_TYPE_INVALID | 0xffffffff | 无效摘要算法 |
uapi_drv_cipher_pke_buffer_secure_t
typedef enum {
UAPI_DRV_CIPHER_PKE_BUF_NONSECURE = 0x00,
UAPI_DRV_CIPHER_PKE_BUF_SECURE,
UAPI_DRV_CIPHER_PKE_BUF_INVALID = 0xffffffff,
} uapi_drv_cipher_pke_buffer_secure_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_DRV_CIPHER_PKE_BUF_NONSECURE | 0x00 | 非安全缓冲区属性 |
| UAPI_DRV_CIPHER_PKE_BUF_SECURE | 0x1 | 安全缓冲区属性 |
| UAPI_DRV_CIPHER_PKE_BUF_INVALID | 0xffffffff | 无效缓冲区属性 |
Structures
uapi_drv_cipher_pke_data_t
typedef struct {
uint32_t length; /*!< PKE common data buffer length. */
uint8_t *data; /*!< PKE common data buffer. */
} uapi_drv_cipher_pke_data_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| length | uint32_t | PKE 通用数据缓冲区长度 |
| data | uint8_t * | PKE 通用数据缓冲区 |
uapi_drv_cipher_pke_ecc_point_t
typedef struct {
uint8_t *x; /*!< X coordinates of the generated public key, the caller ensures it is padded with leading
zeros if the effective size of this key is smaller than ecc key size. */
uint8_t *y; /*!< Y coordinates of the generated public key, the caller ensures it is padded with leading
zeros if the effective size of this key is smaller than ecc key size. */
uint32_t length; /*!< ECC public key length. */
} uapi_drv_cipher_pke_ecc_point_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| x | uint8_t * | 公钥的 X 坐标;当有效尺寸小于 ECC 密钥尺寸时,调用方需用前导零填充 |
| y | uint8_t * | 公钥的 Y 坐标;当有效尺寸小于 ECC 密钥尺寸时,调用方需用前导零填充 |
| length | uint32_t | ECC 公钥长度 |
uapi_drv_cipher_pke_ecc_sig_t
typedef struct {
uint8_t *r; /*!< ECC signature R. */
uint8_t *s; /*!< ECC signature S. */
uint32_t length; /*!< Length of the ECC signature. */
} uapi_drv_cipher_pke_ecc_sig_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| r | uint8_t * | ECC 签名值 R |
| s | uint8_t * | ECC 签名值 S |
| length | uint32_t | ECC 签名数据长度 |
uapi_drv_cipher_pke_msg_t
typedef struct {
uint32_t length; /*!< Length of the ECC input message buffer. */
uint8_t *data; /*!< ECC input message buffer. */
uapi_drv_cipher_pke_buffer_secure_t buf_sec;
} uapi_drv_cipher_pke_msg_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| length | uint32_t | ECC 输入消息缓冲区长度 |
| data | uint8_t * | ECC 输入消息缓冲区 |
| buf_sec | uapi_drv_cipher_pke_buffer_secure_t | 缓冲区安全属性 |
uapi_drv_cipher_pke_rsa_priv_key_t
typedef struct {
uint8_t *n; /*!< RSA public modulus. */
uint8_t *e; /*!< public exponent. */
uint8_t *d; /*!< private exponent. */
uint8_t *p; /*!< 1st prime factor. */
uint8_t *q; /*!< 2nd prime factor. */
uint8_t *dp; /*!< D % (P - 1). */
uint8_t *dq; /*!< D % (Q - 1). */
uint8_t *qp; /*!< 1 / (Q % P). */
uint16_t n_len; /*!< length of public modulus. */
uint16_t e_len; /*!< length of public exponent. */
uint16_t d_len; /*!< length of private exponent. */
uint16_t p_len; /*!< length of 1st prime factor, should be half of u16NLen. */
uint16_t q_len; /*!< length of 2nd prime factor, should be half of u16NLen. */
uint16_t dp_len; /*!< length of D % (P - 1), should be half of u16NLen. */
uint16_t dq_len; /*!< length of D % (Q - 1), should be half of u16NLen. */
uint16_t qp_len; /*!< length of 1 / (Q % P), should be half of u16NLen. */
} uapi_drv_cipher_pke_rsa_priv_key_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| n | uint8_t * | RSA 公钥参数 n(模数) |
| e | uint8_t * | RSA 公钥参数 e(公钥指数) |
| d | uint8_t * | RSA 私钥参数 d(私钥指数) |
| p | uint8_t * | RSA 第一素数因子 p |
| q | uint8_t * | RSA 第二素数因子 q |
| dp | uint8_t * | D %(P - 1)的结果 |
| dq | uint8_t * | D %(Q - 1)的结果 |
| qp | uint8_t * | 1 / (Q % P) 的结果 |
| n_len | uint16_t | RSA 公钥参数 n 的长度 |
| e_len | uint16_t | RSA 公钥参数 e 的长度 |
| d_len | uint16_t | RSA 私钥参数 d 的长度 |
| p_len | uint16_t | RSA 第一素因子 p 的长度,应为 n_len 的一半 |
| q_len | uint16_t | RSA 第二素因子 q 的长度,应为 n_len 的一半 |
| dp_len | uint16_t | D %(P - 1)结果的长度,应为 n_len 的一半 |
| dq_len | uint16_t | D %(Q - 1)结果的长度,应为 n_len 的一半 |
| qp_len | uint16_t | 1 / (Q % P) 结果的长度,应为 n_len 的一半 |
uapi_drv_cipher_pke_rsa_pub_key_t
typedef struct {
uint8_t *n; /*!< RSA public key length. */
uint8_t *e; /*!< public exponent. */
uint16_t len; /*!< RSA public key length. */
} uapi_drv_cipher_pke_rsa_pub_key_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| n | uint8_t * | RSA 公钥参数 n(模数) |
| e | uint8_t * | RSA 公钥参数 e(公钥指数) |
| len | uint16_t | RSA 公钥长度 |