中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

基于Context进行RSA签名与密钥生成操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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);