summaryrefslogtreecommitdiffstats
path: root/recipes-connectivity/openssl/openssl-qoriq/qoriq/0008-Add-RSA-keygen-operation-and-support-gendsa-command-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-connectivity/openssl/openssl-qoriq/qoriq/0008-Add-RSA-keygen-operation-and-support-gendsa-command-.patch')
-rw-r--r--recipes-connectivity/openssl/openssl-qoriq/qoriq/0008-Add-RSA-keygen-operation-and-support-gendsa-command-.patch155
1 files changed, 155 insertions, 0 deletions
diff --git a/recipes-connectivity/openssl/openssl-qoriq/qoriq/0008-Add-RSA-keygen-operation-and-support-gendsa-command-.patch b/recipes-connectivity/openssl/openssl-qoriq/qoriq/0008-Add-RSA-keygen-operation-and-support-gendsa-command-.patch
new file mode 100644
index 00000000..ccd24e31
--- /dev/null
+++ b/recipes-connectivity/openssl/openssl-qoriq/qoriq/0008-Add-RSA-keygen-operation-and-support-gendsa-command-.patch
@@ -0,0 +1,155 @@
1From 94a3fc9f437c20726209cea19256c419837055a2 Mon Sep 17 00:00:00 2001
2From: Hou Zhiqiang <B48286@freescale.com>
3Date: Wed, 2 Apr 2014 16:10:43 +0800
4Subject: [PATCH 08/48] Add RSA keygen operation and support gendsa command
5 with hardware engine
6
7Upstream-status: Pending
8
9Signed-off-by: Hou Zhiqiang <B48286@freescale.com>
10Tested-by: Cristian Stoica <cristian.stoica@freescale.com>
11---
12 crypto/engine/eng_cryptodev.c | 120 ++++++++++++++++++++++++++++++++++++++++++
13 1 file changed, 120 insertions(+)
14
15diff --git a/crypto/engine/eng_cryptodev.c b/crypto/engine/eng_cryptodev.c
16index 8303630..44017a3 100644
17--- a/crypto/engine/eng_cryptodev.c
18+++ b/crypto/engine/eng_cryptodev.c
19@@ -2009,6 +2009,124 @@ cryptodev_dsa_verify(const unsigned char *dgst, int dlen,
20 }
21 }
22
23+/* Cryptodev RSA Key Gen routine */
24+static int cryptodev_rsa_keygen(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)
25+{
26+ struct crypt_kop kop;
27+ int ret, fd;
28+ int p_len, q_len;
29+ int i;
30+
31+ if ((fd = get_asym_dev_crypto()) < 0)
32+ return fd;
33+
34+ if (!rsa->n && ((rsa->n = BN_new()) == NULL))
35+ goto err;
36+ if (!rsa->d && ((rsa->d = BN_new()) == NULL))
37+ goto err;
38+ if (!rsa->e && ((rsa->e = BN_new()) == NULL))
39+ goto err;
40+ if (!rsa->p && ((rsa->p = BN_new()) == NULL))
41+ goto err;
42+ if (!rsa->q && ((rsa->q = BN_new()) == NULL))
43+ goto err;
44+ if (!rsa->dmp1 && ((rsa->dmp1 = BN_new()) == NULL))
45+ goto err;
46+ if (!rsa->dmq1 && ((rsa->dmq1 = BN_new()) == NULL))
47+ goto err;
48+ if (!rsa->iqmp && ((rsa->iqmp = BN_new()) == NULL))
49+ goto err;
50+
51+ BN_copy(rsa->e, e);
52+
53+ p_len = (bits + 1) / (2 * 8);
54+ q_len = (bits - p_len * 8) / 8;
55+ memset(&kop, 0, sizeof kop);
56+ kop.crk_op = CRK_RSA_GENERATE_KEY;
57+
58+ /* p length */
59+ kop.crk_param[kop.crk_iparams].crp_p = calloc(p_len + 1, sizeof(char));
60+ if (!kop.crk_param[kop.crk_iparams].crp_p)
61+ goto err;
62+ kop.crk_param[kop.crk_iparams].crp_nbits = p_len * 8;
63+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0xff, p_len + 1);
64+ kop.crk_iparams++;
65+ kop.crk_oparams++;
66+ /* q length */
67+ kop.crk_param[kop.crk_iparams].crp_p = calloc(q_len + 1, sizeof(char));
68+ if (!kop.crk_param[kop.crk_iparams].crp_p)
69+ goto err;
70+ kop.crk_param[kop.crk_iparams].crp_nbits = q_len * 8;
71+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0xff, q_len + 1);
72+ kop.crk_iparams++;
73+ kop.crk_oparams++;
74+ /* n length */
75+ kop.crk_param[kop.crk_iparams].crp_p =
76+ calloc(p_len + q_len + 1, sizeof(char));
77+ if (!kop.crk_param[kop.crk_iparams].crp_p)
78+ goto err;
79+ kop.crk_param[kop.crk_iparams].crp_nbits = bits;
80+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0x00, p_len + q_len + 1);
81+ kop.crk_iparams++;
82+ kop.crk_oparams++;
83+ /* d length */
84+ kop.crk_param[kop.crk_iparams].crp_p =
85+ calloc(p_len + q_len + 1, sizeof(char));
86+ if (!kop.crk_param[kop.crk_iparams].crp_p)
87+ goto err;
88+ kop.crk_param[kop.crk_iparams].crp_nbits = bits;
89+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0xff, p_len + q_len + 1);
90+ kop.crk_iparams++;
91+ kop.crk_oparams++;
92+ /* dp1 length */
93+ kop.crk_param[kop.crk_iparams].crp_p = calloc(p_len + 1, sizeof(char));
94+ if (!kop.crk_param[kop.crk_iparams].crp_p)
95+ goto err;
96+ kop.crk_param[kop.crk_iparams].crp_nbits = p_len * 8;
97+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0xff, p_len + 1);
98+ kop.crk_iparams++;
99+ kop.crk_oparams++;
100+ /* dq1 length */
101+ kop.crk_param[kop.crk_iparams].crp_p = calloc(q_len + 1, sizeof(char));
102+ if (!kop.crk_param[kop.crk_iparams].crp_p)
103+ goto err;
104+ kop.crk_param[kop.crk_iparams].crp_nbits = q_len * 8;
105+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0xff, q_len + 1);
106+ kop.crk_iparams++;
107+ kop.crk_oparams++;
108+ /* i length */
109+ kop.crk_param[kop.crk_iparams].crp_p = calloc(p_len + 1, sizeof(char));
110+ if (!kop.crk_param[kop.crk_iparams].crp_p)
111+ goto err;
112+ kop.crk_param[kop.crk_iparams].crp_nbits = p_len * 8;
113+ memset(kop.crk_param[kop.crk_iparams].crp_p, 0xff, p_len + 1);
114+ kop.crk_iparams++;
115+ kop.crk_oparams++;
116+
117+ if (ioctl(fd, CIOCKEY, &kop) == 0) {
118+ BN_bin2bn(kop.crk_param[0].crp_p, p_len, rsa->p);
119+ BN_bin2bn(kop.crk_param[1].crp_p, q_len, rsa->q);
120+ BN_bin2bn(kop.crk_param[2].crp_p, bits / 8, rsa->n);
121+ BN_bin2bn(kop.crk_param[3].crp_p, bits / 8, rsa->d);
122+ BN_bin2bn(kop.crk_param[4].crp_p, p_len, rsa->dmp1);
123+ BN_bin2bn(kop.crk_param[5].crp_p, q_len, rsa->dmq1);
124+ BN_bin2bn(kop.crk_param[6].crp_p, p_len, rsa->iqmp);
125+ return 1;
126+ }
127+ sw_try:
128+ {
129+ const RSA_METHOD *meth = RSA_PKCS1_SSLeay();
130+ ret = (meth->rsa_keygen) (rsa, bits, e, cb);
131+ }
132+ return ret;
133+
134+ err:
135+ for (i = 0; i < CRK_MAXPARAM; i++)
136+ free(kop.crk_param[i].crp_p);
137+ return 0;
138+
139+}
140+
141 /* Cryptodev DSA Key Gen routine */
142 static int cryptodev_dsa_keygen(DSA *dsa)
143 {
144@@ -4035,6 +4153,8 @@ void ENGINE_load_cryptodev(void)
145 cryptodev_rsa.rsa_mod_exp_async =
146 cryptodev_rsa_nocrt_mod_exp_async;
147 }
148+ if (cryptodev_asymfeat & CRF_RSA_GENERATE_KEY)
149+ cryptodev_rsa.rsa_keygen = cryptodev_rsa_keygen;
150 }
151 }
152
153--
1542.7.0
155