---
title: RSA算法类相关接口
description: "```"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0044.html
sourcePath: /source/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0044.html
indexId: aaaeb3d82de78aaff2ceece6444359cc0a0afb3a5a06cb6694e099c0cbca829972
---
# RSA算法类相关接口

```
/* RSA message format of Warpdrive */
struct wcrypto_rsa_msg {
__u8 alg_type:3;/* Denoted by enum wcrypto_type */
__u8 op_type:2;/* Denoted by enum wcrypto_rsa_op_type */
__u8 key_type:2;/* Denoted by enum wcrypto_rsa_key_type */
__u8 data_fmt:1; /* Data format, denoted by enum wd_buff_type */
__u8 result;/* Data format, denoted by WD error code */
__u16 in_bytes;/* Input data bytes */
__u16 out_bytes;/* Output data bytes */
__u16 key_bytes;/* Input key bytes */
__u8 *in;/* Input data VA, buf should be DMA buffer. */
__u8 *out;/* Output data VA pointer, should be DMA buffer */
__u8 *key;/* Input key VA pointer, should be DMA buffer */
__u64 usr_data;/* Input user tag, used for indentify data stream/user: struct wcrypto_cb_tag */
};

/* RSA operational types */
enum wcrypto_rsa_op_type {
WCRYPTO_RSA_INVALID,/* invalid rsa operation */
WCRYPTO_RSA_SIGN,/* RSA sign */
WCRYPTO_RSA_VERIFY,/* RSA verify */
WCRYPTO_RSA_GENKEY,/* RSA key generation */
};

/* RSA key types */
enum wcrypto_rsa_key_type {
WCRYPTO_RSA_INVALID_KEY, /* invalid rsa key type */
WCRYPTO_RSA_PUBKEY,/* rsa publick key type */
WCRYPTO_RSA_PRIKEY1,/* invalid rsa private common key type */
WCRYPTO_RSA_PRIKEY2, /* invalid rsa private CRT key type */
};

struct wcrypto_rsa_kg_in; /* rsa key generation input parameters */
struct wcrypto_rsa_kg_out;/* rsa key generation output parameters */
struct wcrypto_rsa_pubkey;/* rsa public key */
struct wcrypto_rsa_prikey;/* rsa private key */

/* RSA context setting up input parameters from user */
struct wcrypto_rsa_ctx_setup {
wcrypto_cb cb;/* call back function from user */
__u16 data_fmt;/* data format denoted by enum wd_buff_type */
__u16 key_bits;/* RSA key bits */
bool is_crt;/* CRT mode or not */
struct wd_mm_br br;/* memory operations from user */
};

struct wcrypto_rsa_op_data {
enum wcrypto_rsa_op_type op_type; /* rsa operation type */
int status; /* rsa operation status */
void *in; /* rsa operation input address, should be DMA-able */
void *out; /* rsa operation output address, should be DMA-able */
__u32 in_bytes;/* rsa operation input bytes */
__u32 out_bytes; /* rsa operation output bytes */
};
```

| 函数原型 | bool wcrypto\_rsa\_is\_crt(void \*ctx); |
| --- | --- |
| 函数功能 | RSA context是否是CRT模式判断 |
| 输入说明 | ctx：RSA算法context |
| 输出说明 | 无 |
| 返回值说明 | True：CRT模式 False：非CRT模式 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_rsa\_key\_bits(void \*ctx); |
| --- | --- |
| 函数功能 | RSA context的密钥bits宽度 |
| 输入说明 | ctx：RSA算法context |
| 输出说明 | 无 |
| 返回值说明 | RSA算法密钥宽度bits |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_pubkey(void \*ctx, struct wcrypto\_rsa\_pubkey \*\*pubkey); |
| --- | --- |
| 函数功能 | 获取RSA算法context的公钥 |
| 输入说明 | ctx：RSA算法context pubkey：RSA算法公钥指针地址 |
| 输出说明 | pubkey：RSA算法公钥地址 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_prikey(void \*ctx, struct wcrypto\_rsa\_prikey \*\*prikey); |
| --- | --- |
| 函数功能 | 获取RSA算法context的私钥 |
| 输入说明 | ctx：RSA算法context prikey：RSA算法私钥指针地址 |
| 输出说明 | prikey：RSA算法私钥地址 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_set\_rsa\_pubkey\_params(void \*ctx, struct wd\_dtb \*e, struct wd\_dtb \*n); |
| --- | --- |
| 函数功能 | 设置RSA算法context的公钥参数 |
| 输入说明 | ctx：RSA算法context e：RSA e参数 n：RSA n参数 |
| 输出说明 | 无 |
| 返回值说明 | 0：设置成功 非0：设置失败（错误码含义请参考WD消息错误码接口定义） |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_pubkey\_params(struct wcrypto\_rsa\_pubkey \*pbk, struct wd\_dtb \*\*e, struct wd\_dtb \*\*n); |
| --- | --- |
| 函数功能 | 由RSA算法公钥获取公钥参数 |
| 输入说明 | pbk：RSA算法公钥 e：RSA e参数地址指针 n：RSA n参数地址指针 |
| 输出说明 | e：RSA e参数地址 n：RSA n参数地址 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_set\_rsa\_prikey\_params(void \*ctx, struct wd\_dtb \*d, struct wd\_dtb \*n); |
| --- | --- |
| 函数功能 | 设置RSA算法context的密钥参数 |
| 输入说明 | ctx：RSA算法context d：RSA d参数 n：RSA n参数 |
| 输出说明 | 无 |
| 返回值说明 | 0：设置成功 \-WD\_EINVAL：设置失败（错误码含义请参考WD消息错误码接口定义） |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_prikey\_params(struct wcrypto\_rsa\_prikey \*pvk, struct wd\_dtb \*\*d,struct wd\_dtb \*\*n); |
| --- | --- |
| 函数功能 | 由RSA算法密钥获取密钥参数 |
| 输入说明 | pvk：RSA算法私钥 d：RSA d参数地址指针 n：RSA n参数地址指针 |
| 输出说明 | d：RSA d参数地址 n：RSA n参数地址 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_set\_rsa\_crt\_prikey\_params(void \*ctx, struct wd\_dtb \*dq, struct wd\_dtb \*dp,struct wd\_dtb \*qinv, struct wd\_dtb \*q, struct wd\_dtb \*p); |
| --- | --- |
| 函数功能 | 设置RSA算法context的密钥CRT参数 |
| 输入说明 | ctx：RSA算法context dq：RSA dq参数 dp：RSA dp参数 qinv：RSA qinv参数 q：RSA q参数 p：RSA p参数 |
| 输出说明 | 无 |
| 返回值说明 | 0：设置成功 非0：设置失败（错误码含义请参考WD消息错误码接口定义） |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_crt\_prikey\_params(struct wcrypto\_rsa\_prikey \*pvk, struct wd\_dtb \*\*dq, struct wd\_dtb \*\*dp, struct wd\_dtb \*\*qinv, struct wd\_dtb \*\*q, struct wd\_dtb \*\*p); |
| --- | --- |
| 函数功能 | 由RSA算法密钥获取CRT参数 |
| 输入说明 | pvk：RSA算法私钥 dq：RSA dq参数地址指针 dp：RSA dp参数地址指针 qinv：RSA qinv参数地址指针 q：RSA q参数地址指针 p：RSA p参数地址指针 |
| 输出说明 | dq：RSA dq参数地址 dp：RSA dp参数地址 qinv：RSA qinv参数地址 q：RSA q参数地址 p：RSA p参数地址 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | struct wcrypto\_rsa\_kg\_in \*wcrypto\_new\_kg\_in(void \*ctx, struct wd\_dtb \*e, struct wd\_dtb \*p, struct wd\_dtb \*q); |
| --- | --- |
| 函数功能 | 新创建基于指定ctx的RSA算法密钥生成输入参数集 |
| 输入说明 | ctx：RSA算法context e：RSA e参数 q：RSA q参数 p：RSA p参数 |
| 输出说明 | 无 |
| 返回值说明 | 非NULL：成功 NULL：失败 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_del\_kg\_in(void \*ctx, struct wcrypto\_rsa\_kg\_in \*ki); |
| --- | --- |
| 函数功能 | 基于RSA算法context删除密钥生成输入参数集 |
| 输入说明 | ctx：RSA算法context ki：RSA算法密钥生成的输入参数集 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_kg\_in\_params(struct wcrypto\_rsa\_kg\_in \*kin, struct wd\_dtb \*e, struct wd\_dtb \*q, struct wd\_dtb \*p); |
| --- | --- |
| 函数功能 | 基于RSA算法密钥生成输入参数集，获取输入参数 |
| 输入说明 | kin：RSA算法密钥生成的输入参数集 e：RSA e参数获取地址 q：RSA q参数获取地址 p：RSA p参数获取地址 |
| 输出说明 | e：RSA e参数 q：RSA q参数 p：RSA p参数 |
| 返回值说明 | 无 |
| 使用说明 | 南向接口 |
| 注意事项 | 无 |


| 函数原型 | struct wcrypto\_rsa\_kg\_out \* wcrypto\_new\_kg\_out(void \*ctx); |
| --- | --- |
| 函数功能 | 新创建基于指定ctx的RSA算法密钥生成输出参数集 |
| 输入说明 | ctx：RSA算法context |
| 输出说明 | 无 |
| 返回值说明 | 非NULL：成功 NULL：失败 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_del\_kg\_out(void \*ctx, struct wcrypto\_rsa\_kg\_out \*kout); |
| --- | --- |
| 函数功能 | 删除基于指定ctx的RSA算法密钥生成输出参数集 |
| 输入说明 | ctx：RSA算法context kout：RSA算法密钥生成输出参数集 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_kg\_out\_params(struct wcrypto\_rsa\_kg\_out \*kout, struct wd\_dtb \*d, struct wd\_dtb \*n); |
| --- | --- |
| 函数功能 | 基于RSA算法密钥生成输出参数集，获取输出参数 |
| 输入说明 | kout：RSA算法密钥生成的输出参数集 d：RSA d参数获取地址 n：RSA n参数获取地址 |
| 输出说明 | d：RSA d参数 n：RSA n参数 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | void wcrypto\_get\_rsa\_kg\_out\_crt\_params(struct wcrypto\_rsa\_kg\_out \*kout, struct wd\_dtb \*qinv, struct wd\_dtb \*dq, struct wd\_dtb \*dp); |
| --- | --- |
| 函数功能 | 基于RSA算法CRT模式密钥生成输出参数集，获取输出参数 |
| 输入说明 | kout：RSA算法密钥生成的输出参数集 qinv：RSA CRT模式qinv参数获取地址 dq：RSA CRT模式dq参数获取地址 dp：RSA CRT模式dp参数获取地址 |
| 输出说明 | qinv：RSA CRT模式qinv参数 dq：RSA CRT模式dq参数 dp：RSA CRT模式dp参数 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_rsa\_kg\_in\_data(struct wcrypto\_rsa\_kg\_in \*ki, char \*\*data); |
| --- | --- |
| 函数功能 | 基于RSA算法密钥生成输入参数集，获取输入参数的数据域 |
| 输入说明 | ki：RSA算法密钥生成的输入参数集 |
| 输出说明 | data：输入参数集的数据域地址 |
| 返回值说明 | 0：成功 非0：失败（错误码含义请参考WD消息错误码接口定义） |
| 使用说明 | 南向接口 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_rsa\_kg\_out\_data(struct wcrypto\_rsa\_kg\_out \*ko, char \*\*data); |
| --- | --- |
| 函数功能 | 基于RSA算法密钥生成输出，获取输出参数的数据域 |
| 输入说明 | ko：RSA算法密钥生成的输出参数集 |
| 输出说明 | data：输出参数集的数据域地址 |
| 返回值说明 | 0：成功 非0：失败（错误码含义请参考WD消息错误码接口定义） |
| 使用说明 | 南向接口 |
| 注意事项 | 无 |


| 函数原型 | void \* wcrypto\_create\_rsa\_ctx(struct wd\_queue \*q, struct wcrypto\_rsa\_ctx\_setup \*setup); |
| --- | --- |
| 函数功能 | 基于支持RSA算法的warpdrive queue创建context |
| 输入说明 | q：Warpdrive queue setup：用户指定的context参数集 |
| 输出说明 | 无。 |
| 返回值说明 | 非NULL：成功 否则失败 |
| 使用说明 | 支持多线程 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_do\_rsa(void \*ctx, struct wcrypto\_rsa\_op\_data \*opdata, void \*tag); |
| --- | --- |
| 函数功能 | 基于RSA context的RSA算法操作 |
| 输入说明 | ctx：RSA context opdata：RSA操作参数，包括输入输出以及操作类型等 tag：用户回调标识，为NULL时，为同步接口，否则为异步接口 |
| 输出说明 | 无。 |
| 返回值说明 | 0：成功 其他负值：失败（RSA verify失败，\-WD\_VERIFY\_ERR；用户输入与硬件要求的数据长度、格式与对齐方式等不匹配，\-WD\_HWDT\_MISMATCH；用户输入SGL错误，\-WD\_SGL\_ERR；硬件不可用（硬件复位等情况），\-WD\_HW\_EACCESS；其他错误\-WD\_EINVAL） |
| 使用说明 | 同一个ctx仅支持单线程 |
| 注意事项 | 无 |


| 函数原型 | int wcrypto\_rsa\_poll(struct wd\_queue \*q, unsigned int num); |
| --- | --- |
| 函数功能 | 基于warpdrive queue的RSA算法poll操作 |
| 输入说明 | q：Warpdrive RSA queue num：0\-\-\-表示将队列q中所有回应消息全部收上来，非0\-\-\-表示将队列中num个回应消息收上来。 |
| 输出说明 | 无。 |
| 返回值说明 | 大于0：成功收到对应个数的回应消息 0：没有收到任何回应 负值：poll发生错误（硬件不可用（硬件复位等情况），\-WD\_HW\_EACCESS；其他错误\-WD\_EINVAL） |
| 使用说明 | 同一个q仅支持单线程 |
| 注意事项 | 回应消息中status错误码的含义请参考WD消息错误码接口定义 |


| 函数原型 | void wcrypto\_del\_rsa\_ctx(void \*ctx); |
| --- | --- |
| 函数功能 | 删除一个RSA的context |
| 输入说明 | ctx：需要删除的RSA context |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 无 |
| 注意事项 | 无 |
