基于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); |
父主题: RSA同步接口使用示例