@@ -97,24 +97,21 @@ static int rsa_enc(struct akcipher_request *req)
9797 goto err_free_c ;
9898 }
9999
100- m = mpi_read_raw_data ( req -> src , req -> src_len ) ;
101- if (! m ) {
102- ret = - ENOMEM ;
100+ ret = - ENOMEM ;
101+ m = mpi_read_raw_from_sgl ( req -> src , req -> src_len );
102+ if (! m )
103103 goto err_free_c ;
104- }
105104
106105 ret = _rsa_enc (pkey , c , m );
107106 if (ret )
108107 goto err_free_m ;
109108
110- ret = mpi_read_buffer (c , req -> dst , req -> dst_len , & req -> dst_len , & sign );
109+ ret = mpi_write_to_sgl (c , req -> dst , & req -> dst_len , & sign );
111110 if (ret )
112111 goto err_free_m ;
113112
114- if (sign < 0 ) {
113+ if (sign < 0 )
115114 ret = - EBADMSG ;
116- goto err_free_m ;
117- }
118115
119116err_free_m :
120117 mpi_free (m );
@@ -145,25 +142,21 @@ static int rsa_dec(struct akcipher_request *req)
145142 goto err_free_m ;
146143 }
147144
148- c = mpi_read_raw_data ( req -> src , req -> src_len ) ;
149- if (! c ) {
150- ret = - ENOMEM ;
145+ ret = - ENOMEM ;
146+ c = mpi_read_raw_from_sgl ( req -> src , req -> src_len );
147+ if (! c )
151148 goto err_free_m ;
152- }
153149
154150 ret = _rsa_dec (pkey , m , c );
155151 if (ret )
156152 goto err_free_c ;
157153
158- ret = mpi_read_buffer (m , req -> dst , req -> dst_len , & req -> dst_len , & sign );
154+ ret = mpi_write_to_sgl (m , req -> dst , & req -> dst_len , & sign );
159155 if (ret )
160156 goto err_free_c ;
161157
162- if (sign < 0 ) {
158+ if (sign < 0 )
163159 ret = - EBADMSG ;
164- goto err_free_c ;
165- }
166-
167160err_free_c :
168161 mpi_free (c );
169162err_free_m :
@@ -193,24 +186,21 @@ static int rsa_sign(struct akcipher_request *req)
193186 goto err_free_s ;
194187 }
195188
196- m = mpi_read_raw_data ( req -> src , req -> src_len ) ;
197- if (! m ) {
198- ret = - ENOMEM ;
189+ ret = - ENOMEM ;
190+ m = mpi_read_raw_from_sgl ( req -> src , req -> src_len );
191+ if (! m )
199192 goto err_free_s ;
200- }
201193
202194 ret = _rsa_sign (pkey , s , m );
203195 if (ret )
204196 goto err_free_m ;
205197
206- ret = mpi_read_buffer (s , req -> dst , req -> dst_len , & req -> dst_len , & sign );
198+ ret = mpi_write_to_sgl (s , req -> dst , & req -> dst_len , & sign );
207199 if (ret )
208200 goto err_free_m ;
209201
210- if (sign < 0 ) {
202+ if (sign < 0 )
211203 ret = - EBADMSG ;
212- goto err_free_m ;
213- }
214204
215205err_free_m :
216206 mpi_free (m );
@@ -241,7 +231,8 @@ static int rsa_verify(struct akcipher_request *req)
241231 goto err_free_m ;
242232 }
243233
244- s = mpi_read_raw_data (req -> src , req -> src_len );
234+ ret = - ENOMEM ;
235+ s = mpi_read_raw_from_sgl (req -> src , req -> src_len );
245236 if (!s ) {
246237 ret = - ENOMEM ;
247238 goto err_free_m ;
@@ -251,14 +242,12 @@ static int rsa_verify(struct akcipher_request *req)
251242 if (ret )
252243 goto err_free_s ;
253244
254- ret = mpi_read_buffer (m , req -> dst , req -> dst_len , & req -> dst_len , & sign );
245+ ret = mpi_write_to_sgl (m , req -> dst , & req -> dst_len , & sign );
255246 if (ret )
256247 goto err_free_s ;
257248
258- if (sign < 0 ) {
249+ if (sign < 0 )
259250 ret = - EBADMSG ;
260- goto err_free_s ;
261- }
262251
263252err_free_s :
264253 mpi_free (s );
@@ -282,13 +271,13 @@ static int rsa_check_key_length(unsigned int len)
282271 return - EINVAL ;
283272}
284273
285- static int rsa_setkey (struct crypto_akcipher * tfm , const void * key ,
286- unsigned int keylen )
274+ static int rsa_set_pub_key (struct crypto_akcipher * tfm , const void * key ,
275+ unsigned int keylen )
287276{
288277 struct rsa_key * pkey = akcipher_tfm_ctx (tfm );
289278 int ret ;
290279
291- ret = rsa_parse_key (pkey , key , keylen );
280+ ret = rsa_parse_pub_key (pkey , key , keylen );
292281 if (ret )
293282 return ret ;
294283
@@ -299,6 +288,30 @@ static int rsa_setkey(struct crypto_akcipher *tfm, const void *key,
299288 return ret ;
300289}
301290
291+ static int rsa_set_priv_key (struct crypto_akcipher * tfm , const void * key ,
292+ unsigned int keylen )
293+ {
294+ struct rsa_key * pkey = akcipher_tfm_ctx (tfm );
295+ int ret ;
296+
297+ ret = rsa_parse_priv_key (pkey , key , keylen );
298+ if (ret )
299+ return ret ;
300+
301+ if (rsa_check_key_length (mpi_get_size (pkey -> n ) << 3 )) {
302+ rsa_free_key (pkey );
303+ ret = - EINVAL ;
304+ }
305+ return ret ;
306+ }
307+
308+ static int rsa_max_size (struct crypto_akcipher * tfm )
309+ {
310+ struct rsa_key * pkey = akcipher_tfm_ctx (tfm );
311+
312+ return pkey -> n ? mpi_get_size (pkey -> n ) : - EINVAL ;
313+ }
314+
302315static void rsa_exit_tfm (struct crypto_akcipher * tfm )
303316{
304317 struct rsa_key * pkey = akcipher_tfm_ctx (tfm );
@@ -311,7 +324,9 @@ static struct akcipher_alg rsa = {
311324 .decrypt = rsa_dec ,
312325 .sign = rsa_sign ,
313326 .verify = rsa_verify ,
314- .setkey = rsa_setkey ,
327+ .set_priv_key = rsa_set_priv_key ,
328+ .set_pub_key = rsa_set_pub_key ,
329+ .max_size = rsa_max_size ,
315330 .exit = rsa_exit_tfm ,
316331 .base = {
317332 .cra_name = "rsa" ,
0 commit comments