struct wcrypto_rsa_op_data opdata;
struct wd_dtb *wd_dq, *wd_dp, *wd_qinv, *wd_q, *wd_p;
/* RSA sign */
memset(&opdata, 0, sizeof(opdata));
opdata.op_type = WCRYPTO_RSA_SIGN;
opdata.in_bytes = key_size;/* 本次操作的输入长度为密钥的宽度 */
opdata.in = wd_alloc_blk(pool);
opdata.out = wd_alloc_blk(pool);
wcrypto_get_rsa_prikey(ctx, &prikey);/* Get private key from context */
wcrypto_get_rsa_crt_prikey_params(prikey, &wd_dq, &wd_dp, &wd_qinv, &wd_q, &wd_p);
/* CRT mode private key, assumed dmq1, dmq1, q, p, iqmp is RSA CRT private key BN
* parameters of OpenSSL.
*/
wd_dq->dsize = BN_bn2bin(dmq1, (unsigned char *)wd_dq->data);
wd_dp->dsize = BN_bn2bin(dmp1, (unsigned char *)wd_dp->data);
wd_q->dsize = BN_bn2bin(q, (unsigned char *)wd_q->data);
wd_p->dsize = BN_bn2bin(p, (unsigned char *)wd_p->data);
wd_qinv->dsize = BN_bn2bin(iqmp, (unsigned char *)wd_qinv->data);
wcrypto_do_rsa(ctx, &opdata, NULL);
/* RSA key generation */
memset(&opdata, 0, sizeof(opdata));
opdata.op_type = WCRYPTO_RSA_KGEN;
opdata.in_bytes = key_size;/* 本次操作的输入长度为密钥的宽度 */
opdata.in = (__u8 *)wd_new_kg_in(ctx, e, p, q);/* e, p,q为密钥生成输入参数 */
opdata.out = wd_new_kg_out(ctx);
wcrypto_do_rsa(ctx, &opdata, NULL);