Defines and strings for special salt length values, add tests
[oweals/openssl.git] / crypto / rsa / rsa_pmeth.c
1 /*
2  * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the OpenSSL license (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 #include <stdio.h>
11 #include "internal/cryptlib.h"
12 #include <openssl/asn1t.h>
13 #include <openssl/x509.h>
14 #include <openssl/rsa.h>
15 #include <openssl/bn.h>
16 #include <openssl/evp.h>
17 #include <openssl/x509v3.h>
18 #include <openssl/cms.h>
19 #include "internal/evp_int.h"
20 #include "rsa_locl.h"
21
22 /* RSA pkey context structure */
23
24 typedef struct {
25     /* Key gen parameters */
26     int nbits;
27     BIGNUM *pub_exp;
28     /* Keygen callback info */
29     int gentmp[2];
30     /* RSA padding mode */
31     int pad_mode;
32     /* message digest */
33     const EVP_MD *md;
34     /* message digest for MGF1 */
35     const EVP_MD *mgf1md;
36     /* PSS salt length */
37     int saltlen;
38     /* Minimum salt length or -1 if no PSS parameter restriction */
39     int min_saltlen;
40     /* Temp buffer */
41     unsigned char *tbuf;
42     /* OAEP label */
43     unsigned char *oaep_label;
44     size_t oaep_labellen;
45 } RSA_PKEY_CTX;
46
47 /* True if PSS parameters are restricted */
48 #define rsa_pss_restricted(rctx) (rctx->min_saltlen != -1)
49
50 static int pkey_rsa_init(EVP_PKEY_CTX *ctx)
51 {
52     RSA_PKEY_CTX *rctx = OPENSSL_zalloc(sizeof(*rctx));
53
54     if (rctx == NULL)
55         return 0;
56     rctx->nbits = 1024;
57     if (pkey_ctx_is_pss(ctx))
58         rctx->pad_mode = RSA_PKCS1_PSS_PADDING;
59     else
60         rctx->pad_mode = RSA_PKCS1_PADDING;
61     /* Maximum for sign, auto for verify */
62     rctx->saltlen = RSA_PSS_SALTLEN_AUTO;
63     rctx->min_saltlen = -1;
64     ctx->data = rctx;
65     ctx->keygen_info = rctx->gentmp;
66     ctx->keygen_info_count = 2;
67
68     return 1;
69 }
70
71 static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)
72 {
73     RSA_PKEY_CTX *dctx, *sctx;
74
75     if (!pkey_rsa_init(dst))
76         return 0;
77     sctx = src->data;
78     dctx = dst->data;
79     dctx->nbits = sctx->nbits;
80     if (sctx->pub_exp) {
81         dctx->pub_exp = BN_dup(sctx->pub_exp);
82         if (!dctx->pub_exp)
83             return 0;
84     }
85     dctx->pad_mode = sctx->pad_mode;
86     dctx->md = sctx->md;
87     dctx->mgf1md = sctx->mgf1md;
88     if (sctx->oaep_label) {
89         OPENSSL_free(dctx->oaep_label);
90         dctx->oaep_label = OPENSSL_memdup(sctx->oaep_label, sctx->oaep_labellen);
91         if (!dctx->oaep_label)
92             return 0;
93         dctx->oaep_labellen = sctx->oaep_labellen;
94     }
95     return 1;
96 }
97
98 static int setup_tbuf(RSA_PKEY_CTX *ctx, EVP_PKEY_CTX *pk)
99 {
100     if (ctx->tbuf != NULL)
101         return 1;
102     ctx->tbuf = OPENSSL_malloc(EVP_PKEY_size(pk->pkey));
103     if (ctx->tbuf == NULL)
104         return 0;
105     return 1;
106 }
107
108 static void pkey_rsa_cleanup(EVP_PKEY_CTX *ctx)
109 {
110     RSA_PKEY_CTX *rctx = ctx->data;
111     if (rctx) {
112         BN_free(rctx->pub_exp);
113         OPENSSL_free(rctx->tbuf);
114         OPENSSL_free(rctx->oaep_label);
115         OPENSSL_free(rctx);
116     }
117 }
118
119 static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, unsigned char *sig,
120                          size_t *siglen, const unsigned char *tbs,
121                          size_t tbslen)
122 {
123     int ret;
124     RSA_PKEY_CTX *rctx = ctx->data;
125     RSA *rsa = ctx->pkey->pkey.rsa;
126
127     if (rctx->md) {
128         if (tbslen != (size_t)EVP_MD_size(rctx->md)) {
129             RSAerr(RSA_F_PKEY_RSA_SIGN, RSA_R_INVALID_DIGEST_LENGTH);
130             return -1;
131         }
132
133         if (EVP_MD_type(rctx->md) == NID_mdc2) {
134             unsigned int sltmp;
135             if (rctx->pad_mode != RSA_PKCS1_PADDING)
136                 return -1;
137             ret = RSA_sign_ASN1_OCTET_STRING(0,
138                                              tbs, tbslen, sig, &sltmp, rsa);
139
140             if (ret <= 0)
141                 return ret;
142             ret = sltmp;
143         } else if (rctx->pad_mode == RSA_X931_PADDING) {
144             if ((size_t)EVP_PKEY_size(ctx->pkey) < tbslen + 1) {
145                 RSAerr(RSA_F_PKEY_RSA_SIGN, RSA_R_KEY_SIZE_TOO_SMALL);
146                 return -1;
147             }
148             if (!setup_tbuf(rctx, ctx)) {
149                 RSAerr(RSA_F_PKEY_RSA_SIGN, ERR_R_MALLOC_FAILURE);
150                 return -1;
151             }
152             memcpy(rctx->tbuf, tbs, tbslen);
153             rctx->tbuf[tbslen] = RSA_X931_hash_id(EVP_MD_type(rctx->md));
154             ret = RSA_private_encrypt(tbslen + 1, rctx->tbuf,
155                                       sig, rsa, RSA_X931_PADDING);
156         } else if (rctx->pad_mode == RSA_PKCS1_PADDING) {
157             unsigned int sltmp;
158             ret = RSA_sign(EVP_MD_type(rctx->md),
159                            tbs, tbslen, sig, &sltmp, rsa);
160             if (ret <= 0)
161                 return ret;
162             ret = sltmp;
163         } else if (rctx->pad_mode == RSA_PKCS1_PSS_PADDING) {
164             if (!setup_tbuf(rctx, ctx))
165                 return -1;
166             if (!RSA_padding_add_PKCS1_PSS_mgf1(rsa,
167                                                 rctx->tbuf, tbs,
168                                                 rctx->md, rctx->mgf1md,
169                                                 rctx->saltlen))
170                 return -1;
171             ret = RSA_private_encrypt(RSA_size(rsa), rctx->tbuf,
172                                       sig, rsa, RSA_NO_PADDING);
173         } else
174             return -1;
175     } else
176         ret = RSA_private_encrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa,
177                                   rctx->pad_mode);
178     if (ret < 0)
179         return ret;
180     *siglen = ret;
181     return 1;
182 }
183
184 static int pkey_rsa_verifyrecover(EVP_PKEY_CTX *ctx,
185                                   unsigned char *rout, size_t *routlen,
186                                   const unsigned char *sig, size_t siglen)
187 {
188     int ret;
189     RSA_PKEY_CTX *rctx = ctx->data;
190
191     if (rctx->md) {
192         if (rctx->pad_mode == RSA_X931_PADDING) {
193             if (!setup_tbuf(rctx, ctx))
194                 return -1;
195             ret = RSA_public_decrypt(siglen, sig,
196                                      rctx->tbuf, ctx->pkey->pkey.rsa,
197                                      RSA_X931_PADDING);
198             if (ret < 1)
199                 return 0;
200             ret--;
201             if (rctx->tbuf[ret] != RSA_X931_hash_id(EVP_MD_type(rctx->md))) {
202                 RSAerr(RSA_F_PKEY_RSA_VERIFYRECOVER,
203                        RSA_R_ALGORITHM_MISMATCH);
204                 return 0;
205             }
206             if (ret != EVP_MD_size(rctx->md)) {
207                 RSAerr(RSA_F_PKEY_RSA_VERIFYRECOVER,
208                        RSA_R_INVALID_DIGEST_LENGTH);
209                 return 0;
210             }
211             if (rout)
212                 memcpy(rout, rctx->tbuf, ret);
213         } else if (rctx->pad_mode == RSA_PKCS1_PADDING) {
214             size_t sltmp;
215             ret = int_rsa_verify(EVP_MD_type(rctx->md),
216                                  NULL, 0, rout, &sltmp,
217                                  sig, siglen, ctx->pkey->pkey.rsa);
218             if (ret <= 0)
219                 return 0;
220             ret = sltmp;
221         } else
222             return -1;
223     } else
224         ret = RSA_public_decrypt(siglen, sig, rout, ctx->pkey->pkey.rsa,
225                                  rctx->pad_mode);
226     if (ret < 0)
227         return ret;
228     *routlen = ret;
229     return 1;
230 }
231
232 static int pkey_rsa_verify(EVP_PKEY_CTX *ctx,
233                            const unsigned char *sig, size_t siglen,
234                            const unsigned char *tbs, size_t tbslen)
235 {
236     RSA_PKEY_CTX *rctx = ctx->data;
237     RSA *rsa = ctx->pkey->pkey.rsa;
238     size_t rslen;
239
240     if (rctx->md) {
241         if (rctx->pad_mode == RSA_PKCS1_PADDING)
242             return RSA_verify(EVP_MD_type(rctx->md), tbs, tbslen,
243                               sig, siglen, rsa);
244         if (tbslen != (size_t)EVP_MD_size(rctx->md)) {
245             RSAerr(RSA_F_PKEY_RSA_VERIFY, RSA_R_INVALID_DIGEST_LENGTH);
246             return -1;
247         }
248         if (rctx->pad_mode == RSA_X931_PADDING) {
249             if (pkey_rsa_verifyrecover(ctx, NULL, &rslen, sig, siglen) <= 0)
250                 return 0;
251         } else if (rctx->pad_mode == RSA_PKCS1_PSS_PADDING) {
252             int ret;
253             if (!setup_tbuf(rctx, ctx))
254                 return -1;
255             ret = RSA_public_decrypt(siglen, sig, rctx->tbuf,
256                                      rsa, RSA_NO_PADDING);
257             if (ret <= 0)
258                 return 0;
259             ret = RSA_verify_PKCS1_PSS_mgf1(rsa, tbs,
260                                             rctx->md, rctx->mgf1md,
261                                             rctx->tbuf, rctx->saltlen);
262             if (ret <= 0)
263                 return 0;
264             return 1;
265         } else
266             return -1;
267     } else {
268         if (!setup_tbuf(rctx, ctx))
269             return -1;
270         rslen = RSA_public_decrypt(siglen, sig, rctx->tbuf,
271                                    rsa, rctx->pad_mode);
272         if (rslen == 0)
273             return 0;
274     }
275
276     if ((rslen != tbslen) || memcmp(tbs, rctx->tbuf, rslen))
277         return 0;
278
279     return 1;
280
281 }
282
283 static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx,
284                             unsigned char *out, size_t *outlen,
285                             const unsigned char *in, size_t inlen)
286 {
287     int ret;
288     RSA_PKEY_CTX *rctx = ctx->data;
289
290     if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
291         int klen = RSA_size(ctx->pkey->pkey.rsa);
292         if (!setup_tbuf(rctx, ctx))
293             return -1;
294         if (!RSA_padding_add_PKCS1_OAEP_mgf1(rctx->tbuf, klen,
295                                              in, inlen,
296                                              rctx->oaep_label,
297                                              rctx->oaep_labellen,
298                                              rctx->md, rctx->mgf1md))
299             return -1;
300         ret = RSA_public_encrypt(klen, rctx->tbuf, out,
301                                  ctx->pkey->pkey.rsa, RSA_NO_PADDING);
302     } else
303         ret = RSA_public_encrypt(inlen, in, out, ctx->pkey->pkey.rsa,
304                                  rctx->pad_mode);
305     if (ret < 0)
306         return ret;
307     *outlen = ret;
308     return 1;
309 }
310
311 static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx,
312                             unsigned char *out, size_t *outlen,
313                             const unsigned char *in, size_t inlen)
314 {
315     int ret;
316     RSA_PKEY_CTX *rctx = ctx->data;
317
318     if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
319         int i;
320         if (!setup_tbuf(rctx, ctx))
321             return -1;
322         ret = RSA_private_decrypt(inlen, in, rctx->tbuf,
323                                   ctx->pkey->pkey.rsa, RSA_NO_PADDING);
324         if (ret <= 0)
325             return ret;
326         for (i = 0; i < ret; i++) {
327             if (rctx->tbuf[i])
328                 break;
329         }
330         ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, ret, rctx->tbuf + i,
331                                                 ret - i, ret,
332                                                 rctx->oaep_label,
333                                                 rctx->oaep_labellen,
334                                                 rctx->md, rctx->mgf1md);
335     } else
336         ret = RSA_private_decrypt(inlen, in, out, ctx->pkey->pkey.rsa,
337                                   rctx->pad_mode);
338     if (ret < 0)
339         return ret;
340     *outlen = ret;
341     return 1;
342 }
343
344 static int check_padding_md(const EVP_MD *md, int padding)
345 {
346     int mdnid;
347
348     if (!md)
349         return 1;
350
351     mdnid = EVP_MD_type(md);
352
353     if (padding == RSA_NO_PADDING) {
354         RSAerr(RSA_F_CHECK_PADDING_MD, RSA_R_INVALID_PADDING_MODE);
355         return 0;
356     }
357
358     if (padding == RSA_X931_PADDING) {
359         if (RSA_X931_hash_id(mdnid) == -1) {
360             RSAerr(RSA_F_CHECK_PADDING_MD, RSA_R_INVALID_X931_DIGEST);
361             return 0;
362         }
363     } else {
364         switch(mdnid) {
365         /* List of all supported RSA digests */
366         case NID_sha1:
367         case NID_sha224:
368         case NID_sha256:
369         case NID_sha384:
370         case NID_sha512:
371         case NID_md5:
372         case NID_md5_sha1:
373         case NID_md2:
374         case NID_md4:
375         case NID_mdc2:
376         case NID_ripemd160:
377             return 1;
378
379         default:
380             RSAerr(RSA_F_CHECK_PADDING_MD, RSA_R_INVALID_DIGEST);
381             return 0;
382
383         }
384     }
385
386     return 1;
387 }
388
389 static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
390 {
391     RSA_PKEY_CTX *rctx = ctx->data;
392
393     switch (type) {
394     case EVP_PKEY_CTRL_RSA_PADDING:
395         if ((p1 >= RSA_PKCS1_PADDING) && (p1 <= RSA_PKCS1_PSS_PADDING)) {
396             if (!check_padding_md(rctx->md, p1))
397                 return 0;
398             if (p1 == RSA_PKCS1_PSS_PADDING) {
399                 if (!(ctx->operation &
400                       (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY)))
401                     goto bad_pad;
402                 if (!rctx->md)
403                     rctx->md = EVP_sha1();
404             } else if (pkey_ctx_is_pss(ctx)) {
405                 goto bad_pad;
406             }
407             if (p1 == RSA_PKCS1_OAEP_PADDING) {
408                 if (!(ctx->operation & EVP_PKEY_OP_TYPE_CRYPT))
409                     goto bad_pad;
410                 if (!rctx->md)
411                     rctx->md = EVP_sha1();
412             }
413             rctx->pad_mode = p1;
414             return 1;
415         }
416  bad_pad:
417         RSAerr(RSA_F_PKEY_RSA_CTRL,
418                RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
419         return -2;
420
421     case EVP_PKEY_CTRL_GET_RSA_PADDING:
422         *(int *)p2 = rctx->pad_mode;
423         return 1;
424
425     case EVP_PKEY_CTRL_RSA_PSS_SALTLEN:
426     case EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN:
427         if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING) {
428             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PSS_SALTLEN);
429             return -2;
430         }
431         if (type == EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN) {
432             *(int *)p2 = rctx->saltlen;
433         } else {
434             if (p1 < RSA_PSS_SALTLEN_MAX)
435                 return -2;
436             if (rsa_pss_restricted(rctx)) {
437                 if (p1 == RSA_PSS_SALTLEN_AUTO
438                     && ctx->operation == EVP_PKEY_OP_VERIFY) {
439                     RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PSS_SALTLEN);
440                     return -2;
441                 }
442                 if ((p1 == RSA_PSS_SALTLEN_DIGEST
443                      && rctx->min_saltlen > EVP_MD_size(rctx->md))
444                     || (p1 >= 0 && p1 < rctx->min_saltlen)) {
445                     RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_PSS_SALTLEN_TOO_SMALL);
446                     return 0;
447                 }
448             }
449             rctx->saltlen = p1;
450         }
451         return 1;
452
453     case EVP_PKEY_CTRL_RSA_KEYGEN_BITS:
454         if (p1 < 512) {
455             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_KEY_SIZE_TOO_SMALL);
456             return -2;
457         }
458         rctx->nbits = p1;
459         return 1;
460
461     case EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP:
462         if (p2 == NULL || !BN_is_odd((BIGNUM *)p2) || BN_is_one((BIGNUM *)p2)) {
463             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_BAD_E_VALUE);
464             return -2;
465         }
466         BN_free(rctx->pub_exp);
467         rctx->pub_exp = p2;
468         return 1;
469
470     case EVP_PKEY_CTRL_RSA_OAEP_MD:
471     case EVP_PKEY_CTRL_GET_RSA_OAEP_MD:
472         if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
473             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
474             return -2;
475         }
476         if (type == EVP_PKEY_CTRL_GET_RSA_OAEP_MD)
477             *(const EVP_MD **)p2 = rctx->md;
478         else
479             rctx->md = p2;
480         return 1;
481
482     case EVP_PKEY_CTRL_MD:
483         if (!check_padding_md(p2, rctx->pad_mode))
484             return 0;
485         if (rsa_pss_restricted(rctx)) {
486             if (EVP_MD_type(rctx->md) == EVP_MD_type(p2))
487                 return 1;
488             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_DIGEST_NOT_ALLOWED);
489             return 0;
490         }
491         rctx->md = p2;
492         return 1;
493
494     case EVP_PKEY_CTRL_GET_MD:
495         *(const EVP_MD **)p2 = rctx->md;
496         return 1;
497
498     case EVP_PKEY_CTRL_RSA_MGF1_MD:
499     case EVP_PKEY_CTRL_GET_RSA_MGF1_MD:
500         if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING
501             && rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
502             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_MGF1_MD);
503             return -2;
504         }
505         if (type == EVP_PKEY_CTRL_GET_RSA_MGF1_MD) {
506             if (rctx->mgf1md)
507                 *(const EVP_MD **)p2 = rctx->mgf1md;
508             else
509                 *(const EVP_MD **)p2 = rctx->md;
510         } else {
511             if (rsa_pss_restricted(rctx)) {
512                 if (EVP_MD_type(rctx->md) == EVP_MD_type(p2))
513                     return 1;
514                 RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_MGF1_DIGEST_NOT_ALLOWED);
515                 return 0;
516             }
517             rctx->mgf1md = p2;
518         }
519         return 1;
520
521     case EVP_PKEY_CTRL_RSA_OAEP_LABEL:
522         if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
523             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
524             return -2;
525         }
526         OPENSSL_free(rctx->oaep_label);
527         if (p2 && p1 > 0) {
528             rctx->oaep_label = p2;
529             rctx->oaep_labellen = p1;
530         } else {
531             rctx->oaep_label = NULL;
532             rctx->oaep_labellen = 0;
533         }
534         return 1;
535
536     case EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL:
537         if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
538             RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
539             return -2;
540         }
541         *(unsigned char **)p2 = rctx->oaep_label;
542         return rctx->oaep_labellen;
543
544     case EVP_PKEY_CTRL_DIGESTINIT:
545     case EVP_PKEY_CTRL_PKCS7_SIGN:
546 #ifndef OPENSSL_NO_CMS
547     case EVP_PKEY_CTRL_CMS_SIGN:
548 #endif
549     return 1;
550
551     case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
552     case EVP_PKEY_CTRL_PKCS7_DECRYPT:
553 #ifndef OPENSSL_NO_CMS
554     case EVP_PKEY_CTRL_CMS_DECRYPT:
555     case EVP_PKEY_CTRL_CMS_ENCRYPT:
556     if (!pkey_ctx_is_pss(ctx))
557         return 1;
558 #endif
559     case EVP_PKEY_CTRL_PEER_KEY:
560         RSAerr(RSA_F_PKEY_RSA_CTRL,
561                RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
562         return -2;
563
564     default:
565         return -2;
566
567     }
568 }
569
570 static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx,
571                              const char *type, const char *value)
572 {
573     if (value == NULL) {
574         RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_VALUE_MISSING);
575         return 0;
576     }
577     if (strcmp(type, "rsa_padding_mode") == 0) {
578         int pm;
579         if (strcmp(value, "pkcs1") == 0)
580             pm = RSA_PKCS1_PADDING;
581         else if (strcmp(value, "sslv23") == 0)
582             pm = RSA_SSLV23_PADDING;
583         else if (strcmp(value, "none") == 0)
584             pm = RSA_NO_PADDING;
585         else if (strcmp(value, "oeap") == 0)
586             pm = RSA_PKCS1_OAEP_PADDING;
587         else if (strcmp(value, "oaep") == 0)
588             pm = RSA_PKCS1_OAEP_PADDING;
589         else if (strcmp(value, "x931") == 0)
590             pm = RSA_X931_PADDING;
591         else if (strcmp(value, "pss") == 0)
592             pm = RSA_PKCS1_PSS_PADDING;
593         else {
594             RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_UNKNOWN_PADDING_TYPE);
595             return -2;
596         }
597         return EVP_PKEY_CTX_set_rsa_padding(ctx, pm);
598     }
599
600     if (strcmp(type, "rsa_pss_saltlen") == 0) {
601         int saltlen;
602         if (!strcmp(value, "digest"))
603             saltlen = RSA_PSS_SALTLEN_DIGEST;
604         else if (!strcmp(value, "max"))
605             saltlen = RSA_PSS_SALTLEN_MAX;
606         else if (!strcmp(value, "auto"))
607             saltlen = RSA_PSS_SALTLEN_AUTO;
608         else
609             saltlen = atoi(value);
610         return EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltlen);
611     }
612
613     if (strcmp(type, "rsa_keygen_bits") == 0) {
614         int nbits;
615         nbits = atoi(value);
616         return EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, nbits);
617     }
618
619     if (strcmp(type, "rsa_keygen_pubexp") == 0) {
620         int ret;
621         BIGNUM *pubexp = NULL;
622         if (!BN_asc2bn(&pubexp, value))
623             return 0;
624         ret = EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp);
625         if (ret <= 0)
626             BN_free(pubexp);
627         return ret;
628     }
629
630     if (strcmp(type, "rsa_mgf1_md") == 0)
631         return EVP_PKEY_CTX_md(ctx,
632                                EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT,
633                                EVP_PKEY_CTRL_RSA_MGF1_MD, value);
634
635     if (pkey_ctx_is_pss(ctx)) {
636
637         if (strcmp(type, "rsa_pss_keygen_mgf1_md") == 0)
638             return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_KEYGEN,
639                                    EVP_PKEY_CTRL_RSA_MGF1_MD, value);
640
641         if (strcmp(type, "rsa_pss_keygen_md") == 0)
642             return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_KEYGEN,
643                                    EVP_PKEY_CTRL_MD, value);
644
645         if (strcmp(type, "rsa_pss_keygen_saltlen") == 0) {
646             int saltlen = atoi(value);
647
648             return EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, saltlen);
649         }
650     }
651
652     if (strcmp(type, "rsa_oaep_md") == 0)
653         return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_TYPE_CRYPT,
654                                EVP_PKEY_CTRL_RSA_OAEP_MD, value);
655
656     if (strcmp(type, "rsa_oaep_label") == 0) {
657         unsigned char *lab;
658         long lablen;
659         int ret;
660         lab = OPENSSL_hexstr2buf(value, &lablen);
661         if (!lab)
662             return 0;
663         ret = EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, lab, lablen);
664         if (ret <= 0)
665             OPENSSL_free(lab);
666         return ret;
667     }
668
669     return -2;
670 }
671
672 /* Set PSS parameters when generating a key, if necessary */
673 static int rsa_set_pss_param(RSA *rsa, EVP_PKEY_CTX *ctx)
674 {
675     RSA_PKEY_CTX *rctx = ctx->data;
676
677     if (!pkey_ctx_is_pss(ctx))
678         return 1;
679     /* If all parameters are default values don't set pss */
680     if (rctx->md == NULL && rctx->mgf1md == NULL && rctx->saltlen == -2)
681         return 1;
682     rsa->pss = rsa_pss_params_create(rctx->md, rctx->mgf1md,
683                                      rctx->saltlen == -2 ? 0 : rctx->saltlen);
684     if (rsa->pss == NULL)
685         return 0;
686     return 1;
687 }
688
689 static int pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
690 {
691     RSA *rsa = NULL;
692     RSA_PKEY_CTX *rctx = ctx->data;
693     BN_GENCB *pcb;
694     int ret;
695
696     if (rctx->pub_exp == NULL) {
697         rctx->pub_exp = BN_new();
698         if (rctx->pub_exp == NULL || !BN_set_word(rctx->pub_exp, RSA_F4))
699             return 0;
700     }
701     rsa = RSA_new();
702     if (rsa == NULL)
703         return 0;
704     if (ctx->pkey_gencb) {
705         pcb = BN_GENCB_new();
706         if (pcb == NULL) {
707             RSA_free(rsa);
708             return 0;
709         }
710         evp_pkey_set_cb_translate(pcb, ctx);
711     } else
712         pcb = NULL;
713     ret = RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, pcb);
714     BN_GENCB_free(pcb);
715     if (ret > 0 && !rsa_set_pss_param(rsa, ctx)) {
716         RSA_free(rsa);
717         return 0;
718     }
719     if (ret > 0)
720         EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, rsa);
721     else
722         RSA_free(rsa);
723     return ret;
724 }
725
726 const EVP_PKEY_METHOD rsa_pkey_meth = {
727     EVP_PKEY_RSA,
728     EVP_PKEY_FLAG_AUTOARGLEN,
729     pkey_rsa_init,
730     pkey_rsa_copy,
731     pkey_rsa_cleanup,
732
733     0, 0,
734
735     0,
736     pkey_rsa_keygen,
737
738     0,
739     pkey_rsa_sign,
740
741     0,
742     pkey_rsa_verify,
743
744     0,
745     pkey_rsa_verifyrecover,
746
747     0, 0, 0, 0,
748
749     0,
750     pkey_rsa_encrypt,
751
752     0,
753     pkey_rsa_decrypt,
754
755     0, 0,
756
757     pkey_rsa_ctrl,
758     pkey_rsa_ctrl_str
759 };
760
761 /*
762  * Called for PSS sign or verify initialisation: checks PSS parameter
763  * sanity and sets any restrictions on key usage.
764  */
765
766 static int pkey_pss_init(EVP_PKEY_CTX *ctx)
767 {
768     RSA *rsa;
769     RSA_PKEY_CTX *rctx = ctx->data;
770     const EVP_MD *md;
771     const EVP_MD *mgf1md;
772     int min_saltlen, max_saltlen;
773
774     /* Should never happen */
775     if (!pkey_ctx_is_pss(ctx))
776         return 0;
777     rsa = ctx->pkey->pkey.rsa;
778     /* If no restrictions just return */
779     if (rsa->pss == NULL)
780         return 1;
781     /* Get and check parameters */
782     if (!rsa_pss_get_param(rsa->pss, &md, &mgf1md, &min_saltlen))
783         return 0;
784
785     /* See if minumum salt length exceeds maximum possible */
786     max_saltlen = RSA_size(rsa) - EVP_MD_size(md);
787     if ((RSA_bits(rsa) & 0x7) == 1)
788         max_saltlen--;
789     if (min_saltlen > max_saltlen) {
790         RSAerr(RSA_F_PKEY_PSS_INIT, RSA_R_INVALID_SALT_LENGTH);
791         return 0;
792     }
793
794     rctx->min_saltlen = min_saltlen;
795
796     /*
797      * Set PSS restrictions as defaults: we can then block any attempt to
798      * use invalid values in pkey_rsa_ctrl
799      */
800
801     rctx->md = md;
802     rctx->mgf1md = mgf1md;
803     rctx->saltlen = min_saltlen;
804
805     return 1;
806 }
807
808 const EVP_PKEY_METHOD rsa_pss_pkey_meth = {
809     EVP_PKEY_RSA_PSS,
810     EVP_PKEY_FLAG_AUTOARGLEN,
811     pkey_rsa_init,
812     pkey_rsa_copy,
813     pkey_rsa_cleanup,
814
815     0, 0,
816
817     0,
818     pkey_rsa_keygen,
819
820     pkey_pss_init,
821     pkey_rsa_sign,
822
823     pkey_pss_init,
824     pkey_rsa_verify,
825
826     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
827
828     pkey_rsa_ctrl,
829     pkey_rsa_ctrl_str
830 };