p_rsa.c
Go to the documentation of this file.
1 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
2  * project 2006.
3  */
4 /* ====================================================================
5  * Copyright (c) 2006 The OpenSSL Project. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. All advertising materials mentioning features or use of this
20  * software must display the following acknowledgment:
21  * "This product includes software developed by the OpenSSL Project
22  * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
23  *
24  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
25  * endorse or promote products derived from this software without
26  * prior written permission. For written permission, please contact
27  * licensing@OpenSSL.org.
28  *
29  * 5. Products derived from this software may not be called "OpenSSL"
30  * nor may "OpenSSL" appear in their names without prior written
31  * permission of the OpenSSL Project.
32  *
33  * 6. Redistributions of any form whatsoever must retain the following
34  * acknowledgment:
35  * "This product includes software developed by the OpenSSL Project
36  * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
37  *
38  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
39  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
41  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
42  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
44  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
45  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
46  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
47  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
49  * OF THE POSSIBILITY OF SUCH DAMAGE.
50  * ====================================================================
51  *
52  * This product includes cryptographic software written by Eric Young
53  * (eay@cryptsoft.com). This product includes software written by Tim
54  * Hudson (tjh@cryptsoft.com). */
55 
56 #include <openssl/evp.h>
57 
58 #include <limits.h>
59 #include <string.h>
60 
61 #include <openssl/bn.h>
62 #include <openssl/bytestring.h>
63 #include <openssl/digest.h>
64 #include <openssl/err.h>
65 #include <openssl/mem.h>
66 #include <openssl/nid.h>
67 #include <openssl/rsa.h>
68 
69 #include "../internal.h"
70 #include "../fipsmodule/rsa/internal.h"
71 #include "internal.h"
72 
73 
74 typedef struct {
75  // Key gen parameters
76  int nbits;
78  // RSA padding mode
79  int pad_mode;
80  // message digest
81  const EVP_MD *md;
82  // message digest for MGF1
83  const EVP_MD *mgf1md;
84  // PSS salt length
85  int saltlen;
86  // tbuf is a buffer which is either NULL, or is the size of the RSA modulus.
87  // It's used to store the output of RSA operations.
89  // OAEP label
91  size_t oaep_labellen;
92 } RSA_PKEY_CTX;
93 
94 typedef struct {
96  size_t len;
98 
100  RSA_PKEY_CTX *rctx;
101  rctx = OPENSSL_malloc(sizeof(RSA_PKEY_CTX));
102  if (!rctx) {
103  return 0;
104  }
105  OPENSSL_memset(rctx, 0, sizeof(RSA_PKEY_CTX));
106 
107  rctx->nbits = 2048;
108  rctx->pad_mode = RSA_PKCS1_PADDING;
109  rctx->saltlen = -2;
110 
111  ctx->data = rctx;
112 
113  return 1;
114 }
115 
117  RSA_PKEY_CTX *dctx, *sctx;
118  if (!pkey_rsa_init(dst)) {
119  return 0;
120  }
121  sctx = src->data;
122  dctx = dst->data;
123  dctx->nbits = sctx->nbits;
124  if (sctx->pub_exp) {
125  dctx->pub_exp = BN_dup(sctx->pub_exp);
126  if (!dctx->pub_exp) {
127  return 0;
128  }
129  }
130 
131  dctx->pad_mode = sctx->pad_mode;
132  dctx->md = sctx->md;
133  dctx->mgf1md = sctx->mgf1md;
134  dctx->saltlen = sctx->saltlen;
135  if (sctx->oaep_label) {
136  OPENSSL_free(dctx->oaep_label);
137  dctx->oaep_label = OPENSSL_memdup(sctx->oaep_label, sctx->oaep_labellen);
138  if (!dctx->oaep_label) {
139  return 0;
140  }
141  dctx->oaep_labellen = sctx->oaep_labellen;
142  }
143 
144  return 1;
145 }
146 
148  RSA_PKEY_CTX *rctx = ctx->data;
149 
150  if (rctx == NULL) {
151  return;
152  }
153 
154  BN_free(rctx->pub_exp);
155  OPENSSL_free(rctx->tbuf);
156  OPENSSL_free(rctx->oaep_label);
157  OPENSSL_free(rctx);
158 }
159 
161  if (ctx->tbuf) {
162  return 1;
163  }
164  ctx->tbuf = OPENSSL_malloc(EVP_PKEY_size(pk->pkey));
165  if (!ctx->tbuf) {
166  return 0;
167  }
168  return 1;
169 }
170 
171 static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, uint8_t *sig, size_t *siglen,
172  const uint8_t *tbs, size_t tbslen) {
173  RSA_PKEY_CTX *rctx = ctx->data;
174  RSA *rsa = ctx->pkey->pkey.rsa;
175  const size_t key_len = EVP_PKEY_size(ctx->pkey);
176 
177  if (!sig) {
178  *siglen = key_len;
179  return 1;
180  }
181 
182  if (*siglen < key_len) {
184  return 0;
185  }
186 
187  if (rctx->md) {
188  unsigned out_len;
189  switch (rctx->pad_mode) {
190  case RSA_PKCS1_PADDING:
191  if (!RSA_sign(EVP_MD_type(rctx->md), tbs, tbslen, sig, &out_len, rsa)) {
192  return 0;
193  }
194  *siglen = out_len;
195  return 1;
196 
198  return RSA_sign_pss_mgf1(rsa, siglen, sig, *siglen, tbs, tbslen,
199  rctx->md, rctx->mgf1md, rctx->saltlen);
200 
201  default:
202  return 0;
203  }
204  }
205 
206  return RSA_sign_raw(rsa, siglen, sig, *siglen, tbs, tbslen, rctx->pad_mode);
207 }
208 
209 static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig,
210  size_t siglen, const uint8_t *tbs,
211  size_t tbslen) {
212  RSA_PKEY_CTX *rctx = ctx->data;
213  RSA *rsa = ctx->pkey->pkey.rsa;
214 
215  if (rctx->md) {
216  switch (rctx->pad_mode) {
217  case RSA_PKCS1_PADDING:
218  return RSA_verify(EVP_MD_type(rctx->md), tbs, tbslen, sig, siglen, rsa);
219 
221  return RSA_verify_pss_mgf1(rsa, tbs, tbslen, rctx->md, rctx->mgf1md,
222  rctx->saltlen, sig, siglen);
223 
224  default:
225  return 0;
226  }
227  }
228 
229  size_t rslen;
230  const size_t key_len = EVP_PKEY_size(ctx->pkey);
231  if (!setup_tbuf(rctx, ctx) ||
232  !RSA_verify_raw(rsa, &rslen, rctx->tbuf, key_len, sig, siglen,
233  rctx->pad_mode) ||
234  rslen != tbslen ||
235  CRYPTO_memcmp(tbs, rctx->tbuf, rslen) != 0) {
236  return 0;
237  }
238 
239  return 1;
240 }
241 
243  size_t *out_len, const uint8_t *sig,
244  size_t sig_len) {
245  RSA_PKEY_CTX *rctx = ctx->data;
246  RSA *rsa = ctx->pkey->pkey.rsa;
247  const size_t key_len = EVP_PKEY_size(ctx->pkey);
248 
249  if (out == NULL) {
250  *out_len = key_len;
251  return 1;
252  }
253 
254  if (*out_len < key_len) {
256  return 0;
257  }
258 
259  if (rctx->md == NULL) {
260  return RSA_verify_raw(rsa, out_len, out, *out_len, sig, sig_len,
261  rctx->pad_mode);
262  }
263 
264  if (rctx->pad_mode != RSA_PKCS1_PADDING) {
265  return 0;
266  }
267 
268  // Assemble the encoded hash, using a placeholder hash value.
269  static const uint8_t kDummyHash[EVP_MAX_MD_SIZE] = {0};
270  const size_t hash_len = EVP_MD_size(rctx->md);
271  uint8_t *asn1_prefix;
272  size_t asn1_prefix_len;
273  int asn1_prefix_allocated;
274  if (!setup_tbuf(rctx, ctx) ||
275  !RSA_add_pkcs1_prefix(&asn1_prefix, &asn1_prefix_len,
276  &asn1_prefix_allocated, EVP_MD_type(rctx->md),
277  kDummyHash, hash_len)) {
278  return 0;
279  }
280 
281  size_t rslen;
282  int ok = 1;
283  if (!RSA_verify_raw(rsa, &rslen, rctx->tbuf, key_len, sig, sig_len,
285  rslen != asn1_prefix_len ||
286  // Compare all but the hash suffix.
287  CRYPTO_memcmp(rctx->tbuf, asn1_prefix, asn1_prefix_len - hash_len) != 0) {
288  ok = 0;
289  }
290 
291  if (asn1_prefix_allocated) {
292  OPENSSL_free(asn1_prefix);
293  }
294 
295  if (!ok) {
296  return 0;
297  }
298 
299  if (out != NULL) {
300  OPENSSL_memcpy(out, rctx->tbuf + rslen - hash_len, hash_len);
301  }
302  *out_len = hash_len;
303 
304  return 1;
305 }
306 
307 static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
308  const uint8_t *in, size_t inlen) {
309  RSA_PKEY_CTX *rctx = ctx->data;
310  RSA *rsa = ctx->pkey->pkey.rsa;
311  const size_t key_len = EVP_PKEY_size(ctx->pkey);
312 
313  if (!out) {
314  *outlen = key_len;
315  return 1;
316  }
317 
318  if (*outlen < key_len) {
320  return 0;
321  }
322 
323  if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
324  if (!setup_tbuf(rctx, ctx) ||
325  !RSA_padding_add_PKCS1_OAEP_mgf1(rctx->tbuf, key_len, in, inlen,
326  rctx->oaep_label, rctx->oaep_labellen,
327  rctx->md, rctx->mgf1md) ||
328  !RSA_encrypt(rsa, outlen, out, *outlen, rctx->tbuf, key_len,
329  RSA_NO_PADDING)) {
330  return 0;
331  }
332  return 1;
333  }
334 
335  return RSA_encrypt(rsa, outlen, out, *outlen, in, inlen, rctx->pad_mode);
336 }
337 
339  size_t *outlen, const uint8_t *in,
340  size_t inlen) {
341  RSA_PKEY_CTX *rctx = ctx->data;
342  RSA *rsa = ctx->pkey->pkey.rsa;
343  const size_t key_len = EVP_PKEY_size(ctx->pkey);
344 
345  if (!out) {
346  *outlen = key_len;
347  return 1;
348  }
349 
350  if (*outlen < key_len) {
352  return 0;
353  }
354 
355  if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
356  size_t padded_len;
357  if (!setup_tbuf(rctx, ctx) ||
358  !RSA_decrypt(rsa, &padded_len, rctx->tbuf, key_len, in, inlen,
359  RSA_NO_PADDING) ||
361  out, outlen, key_len, rctx->tbuf, padded_len, rctx->oaep_label,
362  rctx->oaep_labellen, rctx->md, rctx->mgf1md)) {
363  return 0;
364  }
365  return 1;
366  }
367 
368  return RSA_decrypt(rsa, outlen, out, key_len, in, inlen, rctx->pad_mode);
369 }
370 
371 static int check_padding_md(const EVP_MD *md, int padding) {
372  if (!md) {
373  return 1;
374  }
375 
376  if (padding == RSA_NO_PADDING) {
378  return 0;
379  }
380 
381  return 1;
382 }
383 
384 static int is_known_padding(int padding_mode) {
385  switch (padding_mode) {
386  case RSA_PKCS1_PADDING:
387  case RSA_NO_PADDING:
390  return 1;
391  default:
392  return 0;
393  }
394 }
395 
396 static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
397  RSA_PKEY_CTX *rctx = ctx->data;
398  switch (type) {
400  if (!is_known_padding(p1) || !check_padding_md(rctx->md, p1) ||
401  (p1 == RSA_PKCS1_PSS_PADDING &&
402  0 == (ctx->operation & (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY))) ||
403  (p1 == RSA_PKCS1_OAEP_PADDING &&
404  0 == (ctx->operation & EVP_PKEY_OP_TYPE_CRYPT))) {
406  return 0;
407  }
408  if ((p1 == RSA_PKCS1_PSS_PADDING || p1 == RSA_PKCS1_OAEP_PADDING) &&
409  rctx->md == NULL) {
410  rctx->md = EVP_sha1();
411  }
412  rctx->pad_mode = p1;
413  return 1;
414 
416  *(int *)p2 = rctx->pad_mode;
417  return 1;
418 
421  if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING) {
423  return 0;
424  }
426  *(int *)p2 = rctx->saltlen;
427  } else {
428  if (p1 < -2) {
429  return 0;
430  }
431  rctx->saltlen = p1;
432  }
433  return 1;
434 
436  if (p1 < 256) {
438  return 0;
439  }
440  rctx->nbits = p1;
441  return 1;
442 
444  if (!p2) {
445  return 0;
446  }
447  BN_free(rctx->pub_exp);
448  rctx->pub_exp = p2;
449  return 1;
450 
453  if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
455  return 0;
456  }
458  *(const EVP_MD **)p2 = rctx->md;
459  } else {
460  rctx->md = p2;
461  }
462  return 1;
463 
464  case EVP_PKEY_CTRL_MD:
465  if (!check_padding_md(p2, rctx->pad_mode)) {
466  return 0;
467  }
468  rctx->md = p2;
469  return 1;
470 
472  *(const EVP_MD **)p2 = rctx->md;
473  return 1;
474 
477  if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING &&
478  rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
480  return 0;
481  }
483  if (rctx->mgf1md) {
484  *(const EVP_MD **)p2 = rctx->mgf1md;
485  } else {
486  *(const EVP_MD **)p2 = rctx->md;
487  }
488  } else {
489  rctx->mgf1md = p2;
490  }
491  return 1;
492 
494  if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
496  return 0;
497  }
498  OPENSSL_free(rctx->oaep_label);
499  RSA_OAEP_LABEL_PARAMS *params = p2;
500  rctx->oaep_label = params->data;
501  rctx->oaep_labellen = params->len;
502  return 1;
503  }
504 
506  if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
508  return 0;
509  }
510  CBS_init((CBS *)p2, rctx->oaep_label, rctx->oaep_labellen);
511  return 1;
512 
513  default:
515  return 0;
516  }
517 }
518 
520  RSA *rsa = NULL;
521  RSA_PKEY_CTX *rctx = ctx->data;
522 
523  if (!rctx->pub_exp) {
524  rctx->pub_exp = BN_new();
525  if (!rctx->pub_exp || !BN_set_word(rctx->pub_exp, RSA_F4)) {
526  return 0;
527  }
528  }
529  rsa = RSA_new();
530  if (!rsa) {
531  return 0;
532  }
533 
534  if (!RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, NULL)) {
535  RSA_free(rsa);
536  return 0;
537  }
538 
539  EVP_PKEY_assign_RSA(pkey, rsa);
540  return 1;
541 }
542 
544  EVP_PKEY_RSA,
550  NULL /* sign_message */,
552  NULL /* verify_message */,
556  NULL /* derive */,
557  NULL /* paramgen */,
559 };
560 
563  padding, NULL);
564 }
565 
568  0, out_padding);
569 }
570 
572  return 0;
573 }
574 
576  return 0;
577 }
578 
580  const EVP_MD *md) {
581  return 0;
582 }
583 
587  EVP_PKEY_CTRL_RSA_PSS_SALTLEN, salt_len, NULL);
588 }
589 
593  EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, out_salt_len);
594 }
595 
599 }
600 
604 }
605 
608  EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md);
609 }
610 
613  EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void*) out_md);
614 }
615 
619  EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void*) md);
620 }
621 
625  EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void*) out_md);
626 }
627 
629  size_t label_len) {
630  RSA_OAEP_LABEL_PARAMS params = {label, label_len};
632  EVP_PKEY_CTRL_RSA_OAEP_LABEL, 0, &params);
633 }
634 
636  const uint8_t **out_label) {
637  CBS label;
640  return -1;
641  }
642  if (CBS_len(&label) > INT_MAX) {
644  return -1;
645  }
646  *out_label = CBS_data(&label);
647  return (int)CBS_len(&label);
648 }
pkey_rsa_encrypt
static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen, const uint8_t *in, size_t inlen)
Definition: p_rsa.c:307
EVP_PKEY_OP_SIGN
#define EVP_PKEY_OP_SIGN
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:121
EVP_PKEY_CTX_set_rsa_pss_saltlen
int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int salt_len)
Definition: p_rsa.c:584
bn.h
EVP_MD_type
#define EVP_MD_type
Definition: boringssl_prefix_symbols.h:1580
dst
static const char dst[]
Definition: test-fs-copyfile.c:37
gen_build_yaml.out
dictionary out
Definition: src/benchmark/gen_build_yaml.py:24
EVP_PKEY_CTRL_RSA_PSS_SALTLEN
#define EVP_PKEY_CTRL_RSA_PSS_SALTLEN
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:170
EVP_PKEY_OP_TYPE_CRYPT
#define EVP_PKEY_OP_TYPE_CRYPT
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:132
EVP_PKEY_CTRL_GET_RSA_MGF1_MD
#define EVP_PKEY_CTRL_GET_RSA_MGF1_MD
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:177
EVP_R_INVALID_PADDING_MODE
#define EVP_R_INVALID_PADDING_MODE
Definition: evp_errors.h:75
pkey_rsa_decrypt
static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen, const uint8_t *in, size_t inlen)
Definition: p_rsa.c:338
cbs_st
Definition: bytestring.h:39
RSA_PKEY_CTX::oaep_label
uint8_t * oaep_label
Definition: p_rsa.c:90
ctx
Definition: benchmark-async.c:30
BN_dup
#define BN_dup
Definition: boringssl_prefix_symbols.h:919
EVP_PKEY_CTRL_GET_RSA_PADDING
#define EVP_PKEY_CTRL_GET_RSA_PADDING
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:169
EVP_R_COMMAND_NOT_SUPPORTED
#define EVP_R_COMMAND_NOT_SUPPORTED
Definition: evp_errors.h:61
env_md_st
Definition: third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h:67
evp.h
CBS_data
#define CBS_data
Definition: boringssl_prefix_symbols.h:1057
RSA_PKEY_CTX::saltlen
int saltlen
Definition: p_rsa.c:85
EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md
int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md)
Definition: p_rsa.c:579
rsa_pkey_meth
const EVP_PKEY_METHOD rsa_pkey_meth
Definition: p_rsa.c:543
RSA_F4
#define RSA_F4
Definition: rsa.h:607
EVP_PKEY_CTX_set_rsa_oaep_md
int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md)
Definition: p_rsa.c:606
OPENSSL_PUT_ERROR
#define OPENSSL_PUT_ERROR(library, reason)
Definition: err.h:423
string.h
EVP_PKEY_OP_TYPE_SIG
#define EVP_PKEY_OP_TYPE_SIG
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:129
EVP_R_INVALID_MGF1_MD
#define EVP_R_INVALID_MGF1_MD
Definition: evp_errors.h:73
CBS_len
#define CBS_len
Definition: boringssl_prefix_symbols.h:1089
pkey_rsa_keygen
static int pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
Definition: p_rsa.c:519
pkey_rsa_verify_recover
static int pkey_rsa_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *out_len, const uint8_t *sig, size_t sig_len)
Definition: p_rsa.c:242
EVP_PKEY_RSA
#define EVP_PKEY_RSA
Definition: evp.h:175
BN_free
#define BN_free
Definition: boringssl_prefix_symbols.h:923
EVP_PKEY_CTRL_RSA_MGF1_MD
#define EVP_PKEY_CTRL_RSA_MGF1_MD
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:176
RSA_OAEP_LABEL_PARAMS::len
size_t len
Definition: p_rsa.c:96
RSA_generate_key_ex
#define RSA_generate_key_ex
Definition: boringssl_prefix_symbols.h:2091
RSA_add_pkcs1_prefix
#define RSA_add_pkcs1_prefix
Definition: boringssl_prefix_symbols.h:2081
EVP_R_INVALID_KEYBITS
#define EVP_R_INVALID_KEYBITS
Definition: evp_errors.h:72
RSA_OAEP_LABEL_PARAMS::data
uint8_t * data
Definition: p_rsa.c:95
CBS_init
#define CBS_init
Definition: boringssl_prefix_symbols.h:1085
BN_set_word
#define BN_set_word
Definition: boringssl_prefix_symbols.h:992
EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN
#define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:171
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
OPENSSL_memset
static void * OPENSSL_memset(void *dst, int c, size_t n)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:835
evp_pkey_ctx_st::pkey
EVP_PKEY * pkey
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:188
RSA_PKEY_CTX::tbuf
uint8_t * tbuf
Definition: p_rsa.c:88
RSA_PKCS1_PADDING
#define RSA_PKCS1_PADDING
Definition: rsa.h:210
OPENSSL_malloc
#define OPENSSL_malloc
Definition: boringssl_prefix_symbols.h:1885
bytestring.h
RSA_OAEP_LABEL_PARAMS
Definition: p_rsa.c:94
in
const char * in
Definition: third_party/abseil-cpp/absl/strings/internal/str_format/parser_test.cc:391
evp_pkey_ctx_st
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:182
EVP_PKEY_CTRL_RSA_PADDING
#define EVP_PKEY_CTRL_RSA_PADDING
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:168
internal.h
EVP_PKEY_CTX_set0_rsa_oaep_label
int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, uint8_t *label, size_t label_len)
Definition: p_rsa.c:628
evp_pkey_st
Definition: evp.h:1046
RSA_free
#define RSA_free
Definition: boringssl_prefix_symbols.h:2090
EVP_PKEY_CTX_set_rsa_pss_keygen_md
int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md)
Definition: p_rsa.c:571
gen_synthetic_protos.label
label
Definition: gen_synthetic_protos.py:102
RSA_verify_pss_mgf1
#define RSA_verify_pss_mgf1
Definition: boringssl_prefix_symbols.h:2143
EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL
#define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:179
EVP_MD_size
#define EVP_MD_size
Definition: boringssl_prefix_symbols.h:1579
EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen
int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int salt_len)
Definition: p_rsa.c:575
EVP_PKEY_CTX_set_rsa_keygen_pubexp
int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *e)
Definition: p_rsa.c:601
is_known_padding
static int is_known_padding(int padding_mode)
Definition: p_rsa.c:384
EVP_PKEY_CTRL_GET_MD
#define EVP_PKEY_CTRL_GET_MD
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:151
OPENSSL_memcpy
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:819
bits
OPENSSL_EXPORT ASN1_BIT_STRING * bits
Definition: x509v3.h:482
pkey_rsa_sign
static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, uint8_t *sig, size_t *siglen, const uint8_t *tbs, size_t tbslen)
Definition: p_rsa.c:171
RSA_padding_check_PKCS1_OAEP_mgf1
#define RSA_padding_check_PKCS1_OAEP_mgf1
Definition: boringssl_prefix_symbols.h:2117
err.h
evp_pkey_method_st
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:197
rsa.h
pkey_rsa_verify
static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen, const uint8_t *tbs, size_t tbslen)
Definition: p_rsa.c:209
RSA_PKEY_CTX::mgf1md
const EVP_MD * mgf1md
Definition: p_rsa.c:83
EVP_PKEY_CTX_get_rsa_oaep_md
int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md)
Definition: p_rsa.c:611
EVP_PKEY_CTX_set_rsa_keygen_bits
int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits)
Definition: p_rsa.c:596
RSA_PKEY_CTX::nbits
int nbits
Definition: p_rsa.c:76
EVP_PKEY_CTX_ctrl
#define EVP_PKEY_CTX_ctrl
Definition: boringssl_prefix_symbols.h:1584
EVP_PKEY_assign_RSA
#define EVP_PKEY_assign_RSA
Definition: boringssl_prefix_symbols.h:1612
EVP_PKEY_size
#define EVP_PKEY_size
Definition: boringssl_prefix_symbols.h:1658
RSA_new
#define RSA_new
Definition: boringssl_prefix_symbols.h:2110
EVP_PKEY_CTX_set_rsa_padding
int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding)
Definition: p_rsa.c:561
RSA_PKEY_CTX::pub_exp
BIGNUM * pub_exp
Definition: p_rsa.c:77
pkey_rsa_copy
static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)
Definition: p_rsa.c:116
EVP_PKEY_CTRL_RSA_KEYGEN_BITS
#define EVP_PKEY_CTRL_RSA_KEYGEN_BITS
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:172
RSA_NO_PADDING
#define RSA_NO_PADDING
Definition: rsa.h:213
ERR_R_OVERFLOW
#define ERR_R_OVERFLOW
Definition: err.h:375
EVP_PKEY_OP_VERIFY
#define EVP_PKEY_OP_VERIFY
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:122
RSA_verify
#define RSA_verify
Definition: boringssl_prefix_symbols.h:2141
EVP_PKEY_CTRL_MD
#define EVP_PKEY_CTRL_MD
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:150
RSA_PKEY_CTX
Definition: p_rsa.c:74
EVP_PKEY_CTX_get0_rsa_oaep_label
int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, const uint8_t **out_label)
Definition: p_rsa.c:635
EVP_R_INVALID_PSS_SALTLEN
#define EVP_R_INVALID_PSS_SALTLEN
Definition: evp_errors.h:76
benchmark.md
md
Definition: benchmark.py:86
EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE
#define EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE
Definition: evp_errors.h:69
nid.h
EVP_PKEY_CTRL_RSA_OAEP_MD
#define EVP_PKEY_CTRL_RSA_OAEP_MD
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:174
digest.h
EVP_PKEY_CTX_get_rsa_pss_saltlen
int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *out_salt_len)
Definition: p_rsa.c:590
RSA_PKEY_CTX::pad_mode
int pad_mode
Definition: p_rsa.c:79
RSA_PKEY_CTX::oaep_labellen
size_t oaep_labellen
Definition: p_rsa.c:91
EVP_PKEY_CTX_get_rsa_padding
int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *out_padding)
Definition: p_rsa.c:566
bignum_st
Definition: bn.h:957
RSA_PKCS1_OAEP_PADDING
#define RSA_PKCS1_OAEP_PADDING
Definition: rsa.h:216
RSA_PKEY_CTX::md
const EVP_MD * md
Definition: p_rsa.c:81
OPENSSL_memdup
#define OPENSSL_memdup
Definition: boringssl_prefix_symbols.h:1887
EVP_MAX_MD_SIZE
#define EVP_MAX_MD_SIZE
Definition: digest.h:156
pkey_rsa_cleanup
static void pkey_rsa_cleanup(EVP_PKEY_CTX *ctx)
Definition: p_rsa.c:147
EVP_R_BUFFER_TOO_SMALL
#define EVP_R_BUFFER_TOO_SMALL
Definition: evp_errors.h:60
ok
bool ok
Definition: async_end2end_test.cc:197
pkey_rsa_init
static int pkey_rsa_init(EVP_PKEY_CTX *ctx)
Definition: p_rsa.c:99
setup_tbuf
static int setup_tbuf(RSA_PKEY_CTX *ctx, EVP_PKEY_CTX *pk)
Definition: p_rsa.c:160
EVP_sha1
const OPENSSL_EXPORT EVP_MD * EVP_sha1(void)
EVP_PKEY_CTRL_RSA_OAEP_LABEL
#define EVP_PKEY_CTRL_RSA_OAEP_LABEL
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:178
RSA_PKCS1_PSS_PADDING
#define RSA_PKCS1_PSS_PADDING
Definition: rsa.h:221
EVP_PKEY_OP_KEYGEN
#define EVP_PKEY_OP_KEYGEN
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:120
RSA_sign_raw
#define RSA_sign_raw
Definition: boringssl_prefix_symbols.h:2138
EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP
#define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:173
RSA_decrypt
#define RSA_decrypt
Definition: boringssl_prefix_symbols.h:2086
RSA_sign
#define RSA_sign
Definition: boringssl_prefix_symbols.h:2136
evp_pkey_ctx_st::data
void * data
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:194
RSA_sign_pss_mgf1
#define RSA_sign_pss_mgf1
Definition: boringssl_prefix_symbols.h:2137
mem.h
EVP_PKEY_CTX_get_rsa_mgf1_md
int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md)
Definition: p_rsa.c:622
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
RSA_verify_raw
#define RSA_verify_raw
Definition: boringssl_prefix_symbols.h:2144
rsa_st
Definition: rsa.h:732
pkey_rsa_ctrl
static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
Definition: p_rsa.c:396
OPENSSL_free
#define OPENSSL_free
Definition: boringssl_prefix_symbols.h:1869
EVP_PKEY_CTRL_GET_RSA_OAEP_MD
#define EVP_PKEY_CTRL_GET_RSA_OAEP_MD
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:175
EVP_PKEY_CTX_set_rsa_mgf1_md
int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md)
Definition: p_rsa.c:616
RSA_padding_add_PKCS1_OAEP_mgf1
#define RSA_padding_add_PKCS1_OAEP_mgf1
Definition: boringssl_prefix_symbols.h:2112
if
if(p->owned &&p->wrapped !=NULL)
Definition: call.c:42
CRYPTO_memcmp
#define CRYPTO_memcmp
Definition: boringssl_prefix_symbols.h:1178
BN_new
#define BN_new
Definition: boringssl_prefix_symbols.h:971
RSA_encrypt
#define RSA_encrypt
Definition: boringssl_prefix_symbols.h:2088
check_padding_md
static int check_padding_md(const EVP_MD *md, int padding)
Definition: p_rsa.c:371


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:38