v3_alt.c
Go to the documentation of this file.
1 /* v3_alt.c */
2 /*
3  * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
4  * project.
5  */
6 /* ====================================================================
7  * Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. All advertising materials mentioning features or use of this
22  * software must display the following acknowledgment:
23  * "This product includes software developed by the OpenSSL Project
24  * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25  *
26  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27  * endorse or promote products derived from this software without
28  * prior written permission. For written permission, please contact
29  * licensing@OpenSSL.org.
30  *
31  * 5. Products derived from this software may not be called "OpenSSL"
32  * nor may "OpenSSL" appear in their names without prior written
33  * permission of the OpenSSL Project.
34  *
35  * 6. Redistributions of any form whatsoever must retain the following
36  * acknowledgment:
37  * "This product includes software developed by the OpenSSL Project
38  * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39  *
40  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51  * OF THE POSSIBILITY OF SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This product includes cryptographic software written by Eric Young
55  * (eay@cryptsoft.com). This product includes software written by Tim
56  * Hudson (tjh@cryptsoft.com). */
57 
58 #include <stdio.h>
59 #include <string.h>
60 
61 #include <openssl/conf.h>
62 #include <openssl/err.h>
63 #include <openssl/mem.h>
64 #include <openssl/obj.h>
65 #include <openssl/x509v3.h>
66 
67 #include "../x509/internal.h"
68 #include "internal.h"
69 
70 
71 static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method,
72  X509V3_CTX *ctx,
73  STACK_OF(CONF_VALUE) *nval);
74 static GENERAL_NAMES *v2i_issuer_alt(X509V3_EXT_METHOD *method,
75  X509V3_CTX *ctx,
76  STACK_OF(CONF_VALUE) *nval);
77 static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p);
78 static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens);
79 static int do_othername(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx);
80 static int do_dirname(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx);
81 
83  {NID_subject_alt_name, 0, ASN1_ITEM_ref(GENERAL_NAMES),
84  0, 0, 0, 0,
85  0, 0,
86  (X509V3_EXT_I2V) i2v_GENERAL_NAMES,
88  NULL, NULL, NULL},
89 
90  {NID_issuer_alt_name, 0, ASN1_ITEM_ref(GENERAL_NAMES),
91  0, 0, 0, 0,
92  0, 0,
93  (X509V3_EXT_I2V) i2v_GENERAL_NAMES,
95  NULL, NULL, NULL},
96 
97  {NID_certificate_issuer, 0, ASN1_ITEM_ref(GENERAL_NAMES),
98  0, 0, 0, 0,
99  0, 0,
100  (X509V3_EXT_I2V) i2v_GENERAL_NAMES,
101  NULL, NULL, NULL, NULL},
102 };
103 
105  GENERAL_NAMES *gens,
107 {
108  int ret_was_null = ret == NULL;
109  for (size_t i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
110  GENERAL_NAME *gen = sk_GENERAL_NAME_value(gens, i);
112  if (tmp == NULL) {
113  if (ret_was_null) {
114  sk_CONF_VALUE_pop_free(ret, X509V3_conf_free);
115  }
116  return NULL;
117  }
118  ret = tmp;
119  }
120  if (!ret)
121  return sk_CONF_VALUE_new_null();
122  return ret;
123 }
124 
126  GENERAL_NAME *gen,
128 {
129  /* Note the error-handling for this function relies on there being at most
130  * one |X509V3_add_value| call. If there were two and the second failed, we
131  * would need to sometimes free the first call's result. */
132  unsigned char *p;
133  char oline[256], htmp[5];
134  int i;
135  switch (gen->type) {
136  case GEN_OTHERNAME:
137  if (!X509V3_add_value("othername", "<unsupported>", &ret))
138  return NULL;
139  break;
140 
141  case GEN_X400:
142  if (!X509V3_add_value("X400Name", "<unsupported>", &ret))
143  return NULL;
144  break;
145 
146  case GEN_EDIPARTY:
147  if (!X509V3_add_value("EdiPartyName", "<unsupported>", &ret))
148  return NULL;
149  break;
150 
151  case GEN_EMAIL:
152  if (!x509V3_add_value_asn1_string("email", gen->d.ia5, &ret))
153  return NULL;
154  break;
155 
156  case GEN_DNS:
157  if (!x509V3_add_value_asn1_string("DNS", gen->d.ia5, &ret))
158  return NULL;
159  break;
160 
161  case GEN_URI:
162  if (!x509V3_add_value_asn1_string("URI", gen->d.ia5, &ret))
163  return NULL;
164  break;
165 
166  case GEN_DIRNAME:
167  if (X509_NAME_oneline(gen->d.dirn, oline, 256) == NULL
168  || !X509V3_add_value("DirName", oline, &ret))
169  return NULL;
170  break;
171 
172  case GEN_IPADD:
173  p = gen->d.ip->data;
174  if (gen->d.ip->length == 4)
175  BIO_snprintf(oline, sizeof oline,
176  "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
177  else if (gen->d.ip->length == 16) {
178  oline[0] = 0;
179  for (i = 0; i < 8; i++) {
180  BIO_snprintf(htmp, sizeof htmp, "%X", p[0] << 8 | p[1]);
181  p += 2;
182  OPENSSL_strlcat(oline, htmp, sizeof(oline));
183  if (i != 7)
184  OPENSSL_strlcat(oline, ":", sizeof(oline));
185  }
186  } else {
187  if (!X509V3_add_value("IP Address", "<invalid>", &ret))
188  return NULL;
189  break;
190  }
191  if (!X509V3_add_value("IP Address", oline, &ret))
192  return NULL;
193  break;
194 
195  case GEN_RID:
196  i2t_ASN1_OBJECT(oline, 256, gen->d.rid);
197  if (!X509V3_add_value("Registered ID", oline, &ret))
198  return NULL;
199  break;
200  }
201  return ret;
202 }
203 
205 {
206  unsigned char *p;
207  int i;
208  switch (gen->type) {
209  case GEN_OTHERNAME:
210  BIO_printf(out, "othername:<unsupported>");
211  break;
212 
213  case GEN_X400:
214  BIO_printf(out, "X400Name:<unsupported>");
215  break;
216 
217  case GEN_EDIPARTY:
218  /* Maybe fix this: it is supported now */
219  BIO_printf(out, "EdiPartyName:<unsupported>");
220  break;
221 
222  case GEN_EMAIL:
223  BIO_printf(out, "email:");
225  break;
226 
227  case GEN_DNS:
228  BIO_printf(out, "DNS:");
230  break;
231 
232  case GEN_URI:
233  BIO_printf(out, "URI:");
235  break;
236 
237  case GEN_DIRNAME:
238  BIO_printf(out, "DirName: ");
240  break;
241 
242  case GEN_IPADD:
243  p = gen->d.ip->data;
244  if (gen->d.ip->length == 4)
245  BIO_printf(out, "IP Address:%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
246  else if (gen->d.ip->length == 16) {
247  BIO_printf(out, "IP Address");
248  for (i = 0; i < 8; i++) {
249  BIO_printf(out, ":%X", p[0] << 8 | p[1]);
250  p += 2;
251  }
252  BIO_puts(out, "\n");
253  } else {
254  BIO_printf(out, "IP Address:<invalid>");
255  break;
256  }
257  break;
258 
259  case GEN_RID:
260  BIO_printf(out, "Registered ID");
262  break;
263  }
264  return 1;
265 }
266 
267 static GENERAL_NAMES *v2i_issuer_alt(X509V3_EXT_METHOD *method,
268  X509V3_CTX *ctx,
269  STACK_OF(CONF_VALUE) *nval)
270 {
271  GENERAL_NAMES *gens = NULL;
272  CONF_VALUE *cnf;
273  size_t i;
274  if (!(gens = sk_GENERAL_NAME_new_null())) {
276  return NULL;
277  }
278  for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
279  cnf = sk_CONF_VALUE_value(nval, i);
280  if (!x509v3_name_cmp(cnf->name, "issuer") && cnf->value &&
281  !strcmp(cnf->value, "copy")) {
282  if (!copy_issuer(ctx, gens))
283  goto err;
284  } else {
285  GENERAL_NAME *gen;
286  if (!(gen = v2i_GENERAL_NAME(method, ctx, cnf)))
287  goto err;
288  sk_GENERAL_NAME_push(gens, gen);
289  }
290  }
291  return gens;
292  err:
293  sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
294  return NULL;
295 }
296 
297 /* Append subject altname of issuer to issuer alt name of subject */
298 
299 static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens)
300 {
301  if (ctx && (ctx->flags == CTX_TEST))
302  return 1;
303  if (!ctx || !ctx->issuer_cert) {
305  return 0;
306  }
307  int i = X509_get_ext_by_NID(ctx->issuer_cert, NID_subject_alt_name, -1);
308  if (i < 0)
309  return 1;
310 
311  int ret = 0;
312  GENERAL_NAMES *ialt = NULL;
314  if (!(ext = X509_get_ext(ctx->issuer_cert, i)) ||
315  !(ialt = X509V3_EXT_d2i(ext))) {
317  goto err;
318  }
319 
320  for (size_t j = 0; j < sk_GENERAL_NAME_num(ialt); j++) {
321  GENERAL_NAME *gen = sk_GENERAL_NAME_value(ialt, j);
322  if (!sk_GENERAL_NAME_push(gens, gen)) {
324  goto err;
325  }
326  /* Ownership of |gen| has moved from |ialt| to |gens|. */
327  sk_GENERAL_NAME_set(ialt, j, NULL);
328  }
329 
330  ret = 1;
331 
332 err:
333  GENERAL_NAMES_free(ialt);
334  return ret;
335 }
336 
337 static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method,
338  X509V3_CTX *ctx,
339  STACK_OF(CONF_VALUE) *nval)
340 {
341  GENERAL_NAMES *gens = NULL;
342  CONF_VALUE *cnf;
343  size_t i;
344  if (!(gens = sk_GENERAL_NAME_new_null())) {
346  return NULL;
347  }
348  for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
349  cnf = sk_CONF_VALUE_value(nval, i);
350  if (!x509v3_name_cmp(cnf->name, "email") && cnf->value &&
351  !strcmp(cnf->value, "copy")) {
352  if (!copy_email(ctx, gens, 0))
353  goto err;
354  } else if (!x509v3_name_cmp(cnf->name, "email") && cnf->value &&
355  !strcmp(cnf->value, "move")) {
356  if (!copy_email(ctx, gens, 1))
357  goto err;
358  } else {
359  GENERAL_NAME *gen;
360  if (!(gen = v2i_GENERAL_NAME(method, ctx, cnf)))
361  goto err;
362  sk_GENERAL_NAME_push(gens, gen);
363  }
364  }
365  return gens;
366  err:
367  sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
368  return NULL;
369 }
370 
371 /*
372  * Copy any email addresses in a certificate or request to GENERAL_NAMES
373  */
374 
375 static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p)
376 {
377  X509_NAME *nm;
378  ASN1_IA5STRING *email = NULL;
379  X509_NAME_ENTRY *ne;
380  GENERAL_NAME *gen = NULL;
381  int i;
382  if (ctx != NULL && ctx->flags == CTX_TEST)
383  return 1;
384  if (!ctx || (!ctx->subject_cert && !ctx->subject_req)) {
386  goto err;
387  }
388  /* Find the subject name */
389  if (ctx->subject_cert)
390  nm = X509_get_subject_name(ctx->subject_cert);
391  else
392  nm = X509_REQ_get_subject_name(ctx->subject_req);
393 
394  /* Now add any email address(es) to STACK */
395  i = -1;
396  while ((i = X509_NAME_get_index_by_NID(nm,
397  NID_pkcs9_emailAddress, i)) >= 0) {
398  ne = X509_NAME_get_entry(nm, i);
400  if (move_p) {
403  i--;
404  }
405  if (!email || !(gen = GENERAL_NAME_new())) {
407  goto err;
408  }
409  gen->d.ia5 = email;
410  email = NULL;
411  gen->type = GEN_EMAIL;
412  if (!sk_GENERAL_NAME_push(gens, gen)) {
414  goto err;
415  }
416  gen = NULL;
417  }
418 
419  return 1;
420 
421  err:
423  ASN1_IA5STRING_free(email);
424  return 0;
425 
426 }
427 
430 {
431  GENERAL_NAME *gen;
432  GENERAL_NAMES *gens = NULL;
433  CONF_VALUE *cnf;
434  size_t i;
435  if (!(gens = sk_GENERAL_NAME_new_null())) {
437  return NULL;
438  }
439  for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
440  cnf = sk_CONF_VALUE_value(nval, i);
441  if (!(gen = v2i_GENERAL_NAME(method, ctx, cnf)))
442  goto err;
443  sk_GENERAL_NAME_push(gens, gen);
444  }
445  return gens;
446  err:
447  sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
448  return NULL;
449 }
450 
452  X509V3_CTX *ctx, CONF_VALUE *cnf)
453 {
454  return v2i_GENERAL_NAME_ex(NULL, method, ctx, cnf, 0);
455 }
456 
458  const X509V3_EXT_METHOD *method,
459  X509V3_CTX *ctx, int gen_type,
460  const char *value, int is_nc)
461 {
462  char is_string = 0;
463  GENERAL_NAME *gen = NULL;
464 
465  if (!value) {
467  return NULL;
468  }
469 
470  if (out)
471  gen = out;
472  else {
473  gen = GENERAL_NAME_new();
474  if (gen == NULL) {
476  return NULL;
477  }
478  }
479 
480  switch (gen_type) {
481  case GEN_URI:
482  case GEN_EMAIL:
483  case GEN_DNS:
484  is_string = 1;
485  break;
486 
487  case GEN_RID:
488  {
489  ASN1_OBJECT *obj;
490  if (!(obj = OBJ_txt2obj(value, 0))) {
492  ERR_add_error_data(2, "value=", value);
493  goto err;
494  }
495  gen->d.rid = obj;
496  }
497  break;
498 
499  case GEN_IPADD:
500  if (is_nc)
502  else
503  gen->d.ip = a2i_IPADDRESS(value);
504  if (gen->d.ip == NULL) {
506  ERR_add_error_data(2, "value=", value);
507  goto err;
508  }
509  break;
510 
511  case GEN_DIRNAME:
512  if (!do_dirname(gen, value, ctx)) {
514  goto err;
515  }
516  break;
517 
518  case GEN_OTHERNAME:
519  if (!do_othername(gen, value, ctx)) {
521  goto err;
522  }
523  break;
524  default:
526  goto err;
527  }
528 
529  if (is_string) {
530  if (!(gen->d.ia5 = ASN1_IA5STRING_new()) ||
531  !ASN1_STRING_set(gen->d.ia5, (unsigned char *)value,
532  strlen(value))) {
534  goto err;
535  }
536  }
537 
538  gen->type = gen_type;
539 
540  return gen;
541 
542  err:
543  if (!out)
545  return NULL;
546 }
547 
549  const X509V3_EXT_METHOD *method,
550  X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc)
551 {
552  int type;
553 
554  char *name, *value;
555 
556  name = cnf->name;
557  value = cnf->value;
558 
559  if (!value) {
561  return NULL;
562  }
563 
564  if (!x509v3_name_cmp(name, "email"))
565  type = GEN_EMAIL;
566  else if (!x509v3_name_cmp(name, "URI"))
567  type = GEN_URI;
568  else if (!x509v3_name_cmp(name, "DNS"))
569  type = GEN_DNS;
570  else if (!x509v3_name_cmp(name, "RID"))
571  type = GEN_RID;
572  else if (!x509v3_name_cmp(name, "IP"))
573  type = GEN_IPADD;
574  else if (!x509v3_name_cmp(name, "dirName"))
575  type = GEN_DIRNAME;
576  else if (!x509v3_name_cmp(name, "otherName"))
578  else {
580  ERR_add_error_data(2, "name=", name);
581  return NULL;
582  }
583 
584  return a2i_GENERAL_NAME(out, method, ctx, type, value, is_nc);
585 
586 }
587 
588 static int do_othername(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx)
589 {
590  char *objtmp = NULL;
591  const char *p;
592  int objlen;
593  if (!(p = strchr(value, ';')))
594  return 0;
595  if (!(gen->d.otherName = OTHERNAME_new()))
596  return 0;
597  /*
598  * Free this up because we will overwrite it. no need to free type_id
599  * because it is static
600  */
602  if (!(gen->d.otherName->value = ASN1_generate_v3(p + 1, ctx)))
603  return 0;
604  objlen = p - value;
605  objtmp = OPENSSL_malloc(objlen + 1);
606  if (objtmp == NULL)
607  return 0;
608  OPENSSL_strlcpy(objtmp, value, objlen + 1);
609  gen->d.otherName->type_id = OBJ_txt2obj(objtmp, 0);
610  OPENSSL_free(objtmp);
611  if (!gen->d.otherName->type_id)
612  return 0;
613  return 1;
614 }
615 
616 static int do_dirname(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx)
617 {
618  int ret = 0;
619  STACK_OF(CONF_VALUE) *sk = NULL;
621  if (nm == NULL)
622  goto err;
624  if (sk == NULL) {
626  ERR_add_error_data(2, "section=", value);
627  goto err;
628  }
629  /* FIXME: should allow other character types... */
631  goto err;
632  gen->d.dirn = nm;
633  ret = 1;
634 
635  err:
636  if (!ret)
639  return ret;
640 }
X509_NAME_print_ex
#define X509_NAME_print_ex
Definition: boringssl_prefix_symbols.h:2394
NID_pkcs9_emailAddress
#define NID_pkcs9_emailAddress
Definition: nid.h:304
obj
OPENSSL_EXPORT const ASN1_OBJECT * obj
Definition: x509.h:1671
GENERAL_NAME_st::type
int type
Definition: x509v3.h:184
X509_get_subject_name
#define X509_get_subject_name
Definition: boringssl_prefix_symbols.h:2672
gen_build_yaml.out
dictionary out
Definition: src/benchmark/gen_build_yaml.py:24
GEN_IPADD
#define GEN_IPADD
Definition: x509v3.h:181
v3_alt
const X509V3_EXT_METHOD v3_alt[]
Definition: v3_alt.c:82
do_othername
static int do_othername(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx)
Definition: v3_alt.c:588
v2i_GENERAL_NAME_ex
GENERAL_NAME * v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc)
Definition: v3_alt.c:548
GENERAL_NAME_st
Definition: x509v3.h:173
ASN1_IA5STRING_free
OPENSSL_EXPORT void ASN1_IA5STRING_free(ASN1_IA5STRING *str)
ctx
Definition: benchmark-async.c:30
ASN1_STRING_dup
#define ASN1_STRING_dup
Definition: boringssl_prefix_symbols.h:679
x509V3_add_value_asn1_string
#define x509V3_add_value_asn1_string
Definition: boringssl_prefix_symbols.h:3451
do_dirname
static int do_dirname(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx)
Definition: v3_alt.c:616
v3_ext_ctx
Definition: x509v3.h:136
NID_issuer_alt_name
#define NID_issuer_alt_name
Definition: nid.h:479
bio_st
Definition: bio.h:822
STACK_OF
STACK_OF(CONF_VALUE)
Definition: v3_alt.c:104
i2t_ASN1_OBJECT
#define i2t_ASN1_OBJECT
Definition: boringssl_prefix_symbols.h:3309
X509_NAME_ENTRY_free
#define X509_NAME_ENTRY_free
Definition: boringssl_prefix_symbols.h:2363
v2i_issuer_alt
static GENERAL_NAMES * v2i_issuer_alt(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval)
Definition: v3_alt.c:267
X509V3_NAME_from_section
#define X509V3_NAME_from_section
Definition: boringssl_prefix_symbols.h:2230
GENERAL_NAME_st::ia5
ASN1_IA5STRING * ia5
Definition: x509v3.h:200
OPENSSL_PUT_ERROR
#define OPENSSL_PUT_ERROR(library, reason)
Definition: err.h:423
ext
void * ext
Definition: x509v3.h:87
string.h
copy_email
static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p)
Definition: v3_alt.c:375
X509V3_R_ISSUER_DECODE_ERROR
#define X509V3_R_ISSUER_DECODE_ERROR
Definition: x509v3.h:990
error_ref_leak.err
err
Definition: error_ref_leak.py:35
x509v3.h
X509V3_get_section
#define X509V3_get_section
Definition: boringssl_prefix_symbols.h:2241
ASN1_ITEM_ref
#define ASN1_ITEM_ref(name)
Definition: asn1.h:312
GENERAL_NAME_st::otherName
OTHERNAME * otherName
Definition: x509v3.h:187
setup.name
name
Definition: setup.py:542
X509V3_R_UNSUPPORTED_OPTION
#define X509V3_R_UNSUPPORTED_OPTION
Definition: x509v3.h:1014
xds_manager.p
p
Definition: xds_manager.py:60
X509V3_R_UNSUPPORTED_TYPE
#define X509V3_R_UNSUPPORTED_TYPE
Definition: x509v3.h:1015
X509_NAME_oneline
#define X509_NAME_oneline
Definition: boringssl_prefix_symbols.h:2392
OTHERNAME_new
#define OTHERNAME_new
Definition: boringssl_prefix_symbols.h:1902
X509_get_ext
#define X509_get_ext
Definition: boringssl_prefix_symbols.h:2656
X509_extension_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:117
GENERAL_NAME_print
int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen)
Definition: v3_alt.c:204
X509_NAME_get_index_by_NID
#define X509_NAME_get_index_by_NID
Definition: boringssl_prefix_symbols.h:2384
X509_NAME_free
#define X509_NAME_free
Definition: boringssl_prefix_symbols.h:2381
X509_REQ_get_subject_name
#define X509_REQ_get_subject_name
Definition: boringssl_prefix_symbols.h:2450
asn1_string_st::data
unsigned char * data
Definition: asn1.h:546
BIO_printf
#define BIO_printf
Definition: boringssl_prefix_symbols.h:827
asn1_object_st
Definition: third_party/boringssl-with-bazel/src/crypto/asn1/internal.h:102
a2i_GENERAL_NAME
GENERAL_NAME * a2i_GENERAL_NAME(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, int gen_type, const char *value, int is_nc)
Definition: v3_alt.c:457
otherName_st::value
ASN1_TYPE * value
Definition: x509v3.h:165
X509V3_R_SECTION_NOT_FOUND
#define X509V3_R_SECTION_NOT_FOUND
Definition: x509v3.h:1007
OPENSSL_malloc
#define OPENSSL_malloc
Definition: boringssl_prefix_symbols.h:1885
i2v_GENERAL_NAME
#define i2v_GENERAL_NAME
Definition: boringssl_prefix_symbols.h:3311
GENERAL_NAME_st::dirn
X509_NAME * dirn
Definition: x509v3.h:199
ASN1_STRING_set
#define ASN1_STRING_set
Definition: boringssl_prefix_symbols.h:688
GEN_EMAIL
#define GEN_EMAIL
Definition: x509v3.h:175
GEN_DNS
#define GEN_DNS
Definition: x509v3.h:176
a2i_IPADDRESS
#define a2i_IPADDRESS
Definition: boringssl_prefix_symbols.h:2752
conf_value_st::value
char * value
Definition: conf.h:85
X509V3_R_NO_SUBJECT_DETAILS
#define X509V3_R_NO_SUBJECT_DETAILS
Definition: x509v3.h:999
asn1_string_st::length
int length
Definition: asn1.h:544
NID_certificate_issuer
#define NID_certificate_issuer
Definition: nid.h:3410
CTX_TEST
#define CTX_TEST
Definition: x509v3.h:137
X509_NAME_get_entry
#define X509_NAME_get_entry
Definition: boringssl_prefix_symbols.h:2383
ASN1_TYPE_free
OPENSSL_EXPORT void ASN1_TYPE_free(ASN1_TYPE *a)
copy_issuer
static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens)
Definition: v3_alt.c:299
X509V3_add_value
#define X509V3_add_value
Definition: boringssl_prefix_symbols.h:2233
OBJ_txt2obj
#define OBJ_txt2obj
Definition: boringssl_prefix_symbols.h:1861
v2i_subject_alt
static GENERAL_NAMES * v2i_subject_alt(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval)
Definition: v3_alt.c:337
X509V3_section_free
#define X509V3_section_free
Definition: boringssl_prefix_symbols.h:2246
GENERAL_NAME_st::rid
ASN1_OBJECT * rid
Definition: x509v3.h:201
nm
X509_NAME * nm
Definition: x509.h:1896
X509V3_conf_free
#define X509V3_conf_free
Definition: boringssl_prefix_symbols.h:2238
X509V3_R_OTHERNAME_ERROR
#define X509V3_R_OTHERNAME_ERROR
Definition: x509v3.h:1002
i2v_GENERAL_NAMES
#define i2v_GENERAL_NAMES
Definition: boringssl_prefix_symbols.h:3312
X509_NAME_ENTRY_get_data
#define X509_NAME_ENTRY_get_data
Definition: boringssl_prefix_symbols.h:2364
err.h
X509_NAME_delete_entry
#define X509_NAME_delete_entry
Definition: boringssl_prefix_symbols.h:2377
X509V3_R_NO_ISSUER_DETAILS
#define X509V3_R_NO_ISSUER_DETAILS
Definition: x509v3.h:995
internal.h
gen
OPENSSL_EXPORT GENERAL_NAME * gen
Definition: x509v3.h:495
conf.h
GEN_EDIPARTY
#define GEN_EDIPARTY
Definition: x509v3.h:179
GENERAL_NAMES_free
#define GENERAL_NAMES_free
Definition: boringssl_prefix_symbols.h:1764
BIO_snprintf
#define BIO_snprintf
Definition: boringssl_prefix_symbols.h:864
X509_name_entry_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:88
OPENSSL_strlcat
#define OPENSSL_strlcat
Definition: boringssl_prefix_symbols.h:1893
GENERAL_NAME_st::ip
ASN1_OCTET_STRING * ip
Definition: x509v3.h:198
value
const char * value
Definition: hpack_parser_table.cc:165
GENERAL_NAME_free
#define GENERAL_NAME_free
Definition: boringssl_prefix_symbols.h:1769
GEN_X400
#define GEN_X400
Definition: x509v3.h:177
X509V3_R_DIRNAME_ERROR
#define X509V3_R_DIRNAME_ERROR
Definition: x509v3.h:959
GENERAL_NAME_new
#define GENERAL_NAME_new
Definition: boringssl_prefix_symbols.h:1773
i2a_ASN1_OBJECT
#define i2a_ASN1_OBJECT
Definition: boringssl_prefix_symbols.h:3172
GENERAL_NAME_st::d
union GENERAL_NAME_st::@370 d
OPENSSL_strlcpy
#define OPENSSL_strlcpy
Definition: boringssl_prefix_symbols.h:1894
otherName_st::type_id
ASN1_OBJECT * type_id
Definition: x509v3.h:164
X509V3_R_MISSING_VALUE
#define X509V3_R_MISSING_VALUE
Definition: x509v3.h:991
GEN_OTHERNAME
#define GEN_OTHERNAME
Definition: x509v3.h:174
XN_FLAG_ONELINE
#define XN_FLAG_ONELINE
Definition: x509.h:242
a2i_IPADDRESS_NC
#define a2i_IPADDRESS_NC
Definition: boringssl_prefix_symbols.h:2753
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
BIO_puts
#define BIO_puts
Definition: boringssl_prefix_symbols.h:830
ERR_add_error_data
#define ERR_add_error_data
Definition: boringssl_prefix_symbols.h:1411
MBSTRING_ASC
#define MBSTRING_ASC
Definition: asn1.h:723
v2i_GENERAL_NAME
GENERAL_NAME * v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf)
Definition: v3_alt.c:451
GEN_URI
#define GEN_URI
Definition: x509v3.h:180
NID_subject_alt_name
#define NID_subject_alt_name
Definition: nid.h:474
obj.h
v2i_GENERAL_NAMES
GENERAL_NAMES * v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval)
Definition: v3_alt.c:428
X509V3_R_BAD_IP_ADDRESS
#define X509V3_R_BAD_IP_ADDRESS
Definition: x509v3.h:954
v3_ext_method
Definition: x509v3.h:102
ASN1_generate_v3
#define ASN1_generate_v3
Definition: boringssl_prefix_symbols.h:735
mem.h
X509V3_EXT_V2I
void *(* X509V3_EXT_V2I)(const struct v3_ext_method *method, struct v3_ext_ctx *ctx, STACK_OF(CONF_VALUE) *values)
Definition: x509v3.h:89
ASN1_IA5STRING_new
OPENSSL_EXPORT ASN1_IA5STRING * ASN1_IA5STRING_new(void)
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
autogen_x86imm.tmp
tmp
Definition: autogen_x86imm.py:12
GEN_RID
#define GEN_RID
Definition: x509v3.h:182
ASN1_STRING_print
#define ASN1_STRING_print
Definition: boringssl_prefix_symbols.h:685
method
NSString * method
Definition: ProtoMethod.h:28
x509v3_name_cmp
#define x509v3_name_cmp
Definition: boringssl_prefix_symbols.h:3462
X509V3_EXT_d2i
#define X509V3_EXT_d2i
Definition: boringssl_prefix_symbols.h:2220
OPENSSL_free
#define OPENSSL_free
Definition: boringssl_prefix_symbols.h:1869
X509V3_R_BAD_OBJECT
#define X509V3_R_BAD_OBJECT
Definition: x509v3.h:955
GEN_DIRNAME
#define GEN_DIRNAME
Definition: x509v3.h:178
X509_NAME_new
#define X509_NAME_new
Definition: boringssl_prefix_symbols.h:2391
X509_name_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:95
asn1_string_st
Definition: asn1.h:543
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
ERR_R_MALLOC_FAILURE
#define ERR_R_MALLOC_FAILURE
Definition: err.h:371
conf_value_st
Definition: conf.h:82
X509_get_ext_by_NID
#define X509_get_ext_by_NID
Definition: boringssl_prefix_symbols.h:2657
conf_value_st::name
char * name
Definition: conf.h:84


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:49