v3_conf.c
Go to the documentation of this file.
1 /* v3_conf.c */
2 /*
3  * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4  * 1999.
5  */
6 /* ====================================================================
7  * Copyright (c) 1999-2002 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 /* extension creation utilities */
59 
60 #include <ctype.h>
61 #include <stdio.h>
62 #include <string.h>
63 
64 #include <openssl/conf.h>
65 #include <openssl/err.h>
66 #include <openssl/mem.h>
67 #include <openssl/obj.h>
68 #include <openssl/x509.h>
69 #include <openssl/x509v3.h>
70 
71 #include "../internal.h"
72 #include "../x509/internal.h"
73 #include "internal.h"
74 
75 static int v3_check_critical(const char **value);
76 static int v3_check_generic(const char **value);
77 static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid,
78  int crit, const char *value);
79 static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
80  int crit, int type,
81  X509V3_CTX *ctx);
83  int ext_nid, int crit, void *ext_struc);
84 static unsigned char *generic_asn1(const char *value, X509V3_CTX *ctx,
85  long *ext_len);
86 /* CONF *conf: Config file */
87 /* char *name: Name */
88 /* char *value: Value */
90  const char *value)
91 {
92  int crit;
93  int ext_type;
95  crit = v3_check_critical(&value);
96  if ((ext_type = v3_check_generic(&value)))
97  return v3_generic_extension(name, value, crit, ext_type, ctx);
99  if (!ret) {
101  ERR_add_error_data(4, "name=", name, ", value=", value);
102  }
103  return ret;
104 }
105 
106 /* CONF *conf: Config file */
107 /* char *value: Value */
109  const char *value)
110 {
111  int crit;
112  int ext_type;
113  crit = v3_check_critical(&value);
114  if ((ext_type = v3_check_generic(&value)))
115  return v3_generic_extension(OBJ_nid2sn(ext_nid),
116  value, crit, ext_type, ctx);
117  return do_ext_nconf(conf, ctx, ext_nid, crit, value);
118 }
119 
120 /* CONF *conf: Config file */
121 /* char *value: Value */
123  int crit, const char *value)
124 {
125  const X509V3_EXT_METHOD *method;
127  STACK_OF(CONF_VALUE) *nval;
128  void *ext_struc;
129  if (ext_nid == NID_undef) {
131  return NULL;
132  }
133  if (!(method = X509V3_EXT_get_nid(ext_nid))) {
135  return NULL;
136  }
137  /* Now get internal extension representation based on type */
138  if (method->v2i) {
139  if (*value == '@')
140  nval = NCONF_get_section(conf, value + 1);
141  else
142  nval = X509V3_parse_list(value);
143  if (nval == NULL || sk_CONF_VALUE_num(nval) <= 0) {
145  ERR_add_error_data(4, "name=", OBJ_nid2sn(ext_nid), ",section=",
146  value);
147  if (*value != '@')
148  sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
149  return NULL;
150  }
151  ext_struc = method->v2i(method, ctx, nval);
152  if (*value != '@')
153  sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
154  if (!ext_struc)
155  return NULL;
156  } else if (method->s2i) {
157  if (!(ext_struc = method->s2i(method, ctx, value)))
158  return NULL;
159  } else if (method->r2i) {
160  if (!ctx->db || !ctx->db_meth) {
162  return NULL;
163  }
164  if (!(ext_struc = method->r2i(method, ctx, value)))
165  return NULL;
166  } else {
168  ERR_add_error_data(2, "name=", OBJ_nid2sn(ext_nid));
169  return NULL;
170  }
171 
172  ext = do_ext_i2d(method, ext_nid, crit, ext_struc);
173  if (method->it)
174  ASN1_item_free(ext_struc, ASN1_ITEM_ptr(method->it));
175  else
176  method->ext_free(ext_struc);
177  return ext;
178 
179 }
180 
182  int ext_nid, int crit, void *ext_struc)
183 {
184  unsigned char *ext_der;
185  int ext_len;
186  ASN1_OCTET_STRING *ext_oct;
188  /* Convert internal representation to DER */
189  if (method->it) {
190  ext_der = NULL;
191  ext_len =
192  ASN1_item_i2d(ext_struc, &ext_der, ASN1_ITEM_ptr(method->it));
193  if (ext_len < 0)
194  goto merr;
195  } else {
196  unsigned char *p;
197  ext_len = method->i2d(ext_struc, NULL);
198  if (!(ext_der = OPENSSL_malloc(ext_len)))
199  goto merr;
200  p = ext_der;
201  method->i2d(ext_struc, &p);
202  }
203  if (!(ext_oct = ASN1_OCTET_STRING_new()))
204  goto merr;
205  ext_oct->data = ext_der;
206  ext_oct->length = ext_len;
207 
208  ext = X509_EXTENSION_create_by_NID(NULL, ext_nid, crit, ext_oct);
209  if (!ext)
210  goto merr;
211  ASN1_OCTET_STRING_free(ext_oct);
212 
213  return ext;
214 
215  merr:
217  return NULL;
218 
219 }
220 
221 /* Given an internal structure, nid and critical flag create an extension */
222 
223 X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc)
224 {
225  const X509V3_EXT_METHOD *method;
226  if (!(method = X509V3_EXT_get_nid(ext_nid))) {
228  return NULL;
229  }
230  return do_ext_i2d(method, ext_nid, crit, ext_struc);
231 }
232 
233 /* Check the extension string for critical flag */
234 static int v3_check_critical(const char **value)
235 {
236  const char *p = *value;
237  if ((strlen(p) < 9) || strncmp(p, "critical,", 9))
238  return 0;
239  p += 9;
240  while (isspace((unsigned char)*p))
241  p++;
242  *value = p;
243  return 1;
244 }
245 
246 /* Check extension string for generic extension and return the type */
247 static int v3_check_generic(const char **value)
248 {
249  int gen_type = 0;
250  const char *p = *value;
251  if ((strlen(p) >= 4) && !strncmp(p, "DER:", 4)) {
252  p += 4;
253  gen_type = 1;
254  } else if ((strlen(p) >= 5) && !strncmp(p, "ASN1:", 5)) {
255  p += 5;
256  gen_type = 2;
257  } else
258  return 0;
259 
260  while (isspace((unsigned char)*p))
261  p++;
262  *value = p;
263  return gen_type;
264 }
265 
266 /* Create a generic extension: for now just handle DER type */
267 static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
268  int crit, int gen_type,
269  X509V3_CTX *ctx)
270 {
271  unsigned char *ext_der = NULL;
272  long ext_len = 0;
273  ASN1_OBJECT *obj = NULL;
274  ASN1_OCTET_STRING *oct = NULL;
275  X509_EXTENSION *extension = NULL;
276  if (!(obj = OBJ_txt2obj(ext, 0))) {
278  ERR_add_error_data(2, "name=", ext);
279  goto err;
280  }
281 
282  if (gen_type == 1)
283  ext_der = x509v3_hex_to_bytes(value, &ext_len);
284  else if (gen_type == 2)
285  ext_der = generic_asn1(value, ctx, &ext_len);
286 
287  if (ext_der == NULL) {
289  ERR_add_error_data(2, "value=", value);
290  goto err;
291  }
292 
293  if (!(oct = ASN1_OCTET_STRING_new())) {
295  goto err;
296  }
297 
298  oct->data = ext_der;
299  oct->length = ext_len;
300  ext_der = NULL;
301 
302  extension = X509_EXTENSION_create_by_OBJ(NULL, obj, crit, oct);
303 
304  err:
307  if (ext_der)
308  OPENSSL_free(ext_der);
309  return extension;
310 
311 }
312 
313 static unsigned char *generic_asn1(const char *value, X509V3_CTX *ctx,
314  long *ext_len)
315 {
316  ASN1_TYPE *typ;
317  unsigned char *ext_der = NULL;
318  typ = ASN1_generate_v3(value, ctx);
319  if (typ == NULL)
320  return NULL;
321  *ext_len = i2d_ASN1_TYPE(typ, &ext_der);
322  ASN1_TYPE_free(typ);
323  return ext_der;
324 }
325 
326 /*
327  * This is the main function: add a bunch of extensions based on a config
328  * file section to an extension STACK.
329  */
330 
332  STACK_OF(X509_EXTENSION) **sk)
333 {
335  STACK_OF(CONF_VALUE) *nval;
336  CONF_VALUE *val;
337  size_t i;
338  if (!(nval = NCONF_get_section(conf, section)))
339  return 0;
340  for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
341  val = sk_CONF_VALUE_value(nval, i);
342  if (!(ext = X509V3_EXT_nconf(conf, ctx, val->name, val->value)))
343  return 0;
344  if (sk)
345  X509v3_add_ext(sk, ext, -1);
347  }
348  return 1;
349 }
350 
351 /*
352  * Convenience functions to add extensions to a certificate, CRL and request
353  */
354 
356  X509 *cert)
357 {
358  STACK_OF(X509_EXTENSION) **sk = NULL;
359  if (cert)
360  sk = &cert->cert_info->extensions;
361  return X509V3_EXT_add_nconf_sk(conf, ctx, section, sk);
362 }
363 
364 /* Same as above but for a CRL */
365 
367  X509_CRL *crl)
368 {
369  STACK_OF(X509_EXTENSION) **sk = NULL;
370  if (crl)
371  sk = &crl->crl->extensions;
372  return X509V3_EXT_add_nconf_sk(conf, ctx, section, sk);
373 }
374 
375 /* Add extensions to certificate request */
376 
378  X509_REQ *req)
379 {
380  STACK_OF(X509_EXTENSION) *extlist = NULL, **sk = NULL;
381  int i;
382  if (req)
383  sk = &extlist;
385  if (!i || !sk)
386  return i;
387  i = X509_REQ_add_extensions(req, extlist);
388  sk_X509_EXTENSION_pop_free(extlist, X509_EXTENSION_free);
389  return i;
390 }
391 
392 /* Config database functions */
393 
394 char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section)
395 {
396  if (!ctx->db || !ctx->db_meth || !ctx->db_meth->get_string) {
398  return NULL;
399  }
400  if (ctx->db_meth->get_string)
401  return ctx->db_meth->get_string(ctx->db, name, section);
402  return NULL;
403 }
404 
406 {
407  if (!ctx->db || !ctx->db_meth || !ctx->db_meth->get_section) {
409  return NULL;
410  }
411  if (ctx->db_meth->get_section)
412  return ctx->db_meth->get_section(ctx->db, section);
413  return NULL;
414 }
415 
417 {
418  if (!str)
419  return;
420  if (ctx->db_meth->free_string)
421  ctx->db_meth->free_string(ctx->db, str);
422 }
423 
425 {
426  if (!section)
427  return;
428  if (ctx->db_meth->free_section)
429  ctx->db_meth->free_section(ctx->db, section);
430 }
431 
432 static char *nconf_get_string(void *db, const char *section, const char *value)
433 {
434  /* TODO(fork): This returns a non-const pointer because |X509V3_CONF_METHOD|
435  * allows |get_string| to return caller-owned pointers, provided they're
436  * freed by |free_string|. |nconf_method| leaves |free_string| NULL, and
437  * there are no other implementations of |X509V3_CONF_METHOD|, so this can
438  * be simplified if we make it private. */
439  return (char *)NCONF_get_string(db, section, value);
440 }
441 
442 static STACK_OF(CONF_VALUE) *nconf_get_section(void *db, const char *section)
443 {
444  return NCONF_get_section(db, section);
445 }
446 
449  nconf_get_section,
450  NULL,
451  NULL
452 };
453 
455 {
456  ctx->db_meth = &nconf_method;
457  ctx->db = conf;
458 }
459 
461  X509_CRL *crl, int flags)
462 {
463  ctx->issuer_cert = issuer;
464  ctx->subject_cert = subj;
465  ctx->crl = crl;
466  ctx->subject_req = req;
467  ctx->flags = flags;
468 }
X509V3_EXT_REQ_add_nconf
int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, X509_REQ *req)
Definition: v3_conf.c:377
xds_interop_client.str
str
Definition: xds_interop_client.py:487
do_ext_i2d
static X509_EXTENSION * do_ext_i2d(const X509V3_EXT_METHOD *method, int ext_nid, int crit, void *ext_struc)
Definition: v3_conf.c:181
obj
OPENSSL_EXPORT const ASN1_OBJECT * obj
Definition: x509.h:1671
v3_check_critical
static int v3_check_critical(const char **value)
Definition: v3_conf.c:234
X509V3_R_UNKNOWN_EXTENSION
#define X509V3_R_UNKNOWN_EXTENSION
Definition: x509v3.h:1011
X509V3_get_string
char * X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section)
Definition: v3_conf.c:394
x509_st::cert_info
X509_CINF * cert_info
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:140
ctx
Definition: benchmark-async.c:30
v3_ext_ctx
Definition: x509v3.h:136
X509V3_EXT_get_nid
#define X509V3_EXT_get_nid
Definition: boringssl_prefix_symbols.h:2223
i2d_ASN1_TYPE
OPENSSL_EXPORT int i2d_ASN1_TYPE(const ASN1_TYPE *in, uint8_t **outp)
google::protobuf::extension
const Descriptor::ReservedRange const EnumValueDescriptor const MethodDescriptor extension
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.h:2001
X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED
#define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED
Definition: x509v3.h:969
OPENSSL_PUT_ERROR
#define OPENSSL_PUT_ERROR(library, reason)
Definition: err.h:423
internal.h
ext
void * ext
Definition: x509v3.h:87
string.h
x509v3_hex_to_bytes
#define x509v3_hex_to_bytes
Definition: boringssl_prefix_symbols.h:3460
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
setup.name
name
Definition: setup.py:542
xds_manager.p
p
Definition: xds_manager.py:60
ASN1_ITEM_ptr
#define ASN1_ITEM_ptr(iptr)
Definition: asn1.h:316
X509_extension_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:117
v3_generic_extension
static X509_EXTENSION * v3_generic_extension(const char *ext, const char *value, int crit, int type, X509V3_CTX *ctx)
Definition: v3_conf.c:267
X509_EXTENSION_create_by_NID
#define X509_EXTENSION_create_by_NID
Definition: boringssl_prefix_symbols.h:2333
X509V3_EXT_add_nconf_sk
int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, STACK_OF(X509_EXTENSION) **sk)
Definition: v3_conf.c:331
X509V3_R_OPERATION_NOT_DEFINED
#define X509V3_R_OPERATION_NOT_DEFINED
Definition: x509v3.h:1001
asn1_string_st::data
unsigned char * data
Definition: asn1.h:546
ASN1_OCTET_STRING_new
OPENSSL_EXPORT ASN1_OCTET_STRING * ASN1_OCTET_STRING_new(void)
asn1_object_st
Definition: third_party/boringssl-with-bazel/src/crypto/asn1/internal.h:102
NCONF_get_section
#define NCONF_get_section
Definition: boringssl_prefix_symbols.h:1823
OPENSSL_malloc
#define OPENSSL_malloc
Definition: boringssl_prefix_symbols.h:1885
X509V3_set_ctx
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subj, X509_REQ *req, X509_CRL *crl, int flags)
Definition: v3_conf.c:460
conf_value_st::value
char * value
Definition: conf.h:85
conf_st
Definition: conf.c:76
asn1_string_st::length
int length
Definition: asn1.h:544
ASN1_TYPE_free
OPENSSL_EXPORT void ASN1_TYPE_free(ASN1_TYPE *a)
req
static uv_connect_t req
Definition: test-connection-fail.c:30
X509V3_R_INVALID_EXTENSION_STRING
#define X509V3_R_INVALID_EXTENSION_STRING
Definition: x509v3.h:975
STACK_OF
STACK_OF(CONF_VALUE)
Definition: v3_conf.c:405
nconf_get_string
static char * nconf_get_string(void *db, const char *section, const char *value)
Definition: v3_conf.c:432
do_ext_nconf
static X509_EXTENSION * do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid, int crit, const char *value)
Definition: v3_conf.c:122
OBJ_txt2obj
#define OBJ_txt2obj
Definition: boringssl_prefix_symbols.h:1861
X509V3_conf_free
#define X509V3_conf_free
Definition: boringssl_prefix_symbols.h:2238
X509_crl_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:195
err.h
X509_req_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:175
X509_EXTENSION_create_by_OBJ
#define X509_EXTENSION_create_by_OBJ
Definition: boringssl_prefix_symbols.h:2334
ASN1_OBJECT_free
#define ASN1_OBJECT_free
Definition: boringssl_prefix_symbols.h:655
NID_undef
#define NID_undef
Definition: nid.h:85
conf.h
X509_EXTENSION_free
#define X509_EXTENSION_free
Definition: boringssl_prefix_symbols.h:2336
X509V3_EXT_nconf
X509_EXTENSION * X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, const char *value)
Definition: v3_conf.c:89
X509V3_CONF_METHOD_st
Definition: x509v3.h:128
X509V3_EXT_nconf_nid
X509_EXTENSION * X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, const char *value)
Definition: v3_conf.c:108
section
Definition: loader.h:337
X509V3_EXT_add_nconf
int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, X509 *cert)
Definition: v3_conf.c:355
X509V3_R_UNKNOWN_EXTENSION_NAME
#define X509V3_R_UNKNOWN_EXTENSION_NAME
Definition: x509v3.h:1012
value
const char * value
Definition: hpack_parser_table.cc:165
X509V3_parse_list
#define X509V3_parse_list
Definition: boringssl_prefix_symbols.h:2245
ASN1_item_i2d
#define ASN1_item_i2d
Definition: boringssl_prefix_symbols.h:747
v3_check_generic
static int v3_check_generic(const char **value)
Definition: v3_conf.c:247
X509V3_R_ERROR_IN_EXTENSION
#define X509V3_R_ERROR_IN_EXTENSION
Definition: x509v3.h:964
x509_st
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:139
absl::flags_internal
Definition: abseil-cpp/absl/flags/commandlineflag.h:40
X509V3_R_NO_CONFIG_DATABASE
#define X509V3_R_NO_CONFIG_DATABASE
Definition: x509v3.h:993
X509_REQ_add_extensions
#define X509_REQ_add_extensions
Definition: boringssl_prefix_symbols.h:2433
OBJ_nid2sn
#define OBJ_nid2sn
Definition: boringssl_prefix_symbols.h:1856
OBJ_sn2nid
#define OBJ_sn2nid
Definition: boringssl_prefix_symbols.h:1859
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
X509V3_R_EXTENSION_NAME_ERROR
#define X509V3_R_EXTENSION_NAME_ERROR
Definition: x509v3.h:967
X509V3_R_EXTENSION_VALUE_ERROR
#define X509V3_R_EXTENSION_VALUE_ERROR
Definition: x509v3.h:970
ERR_add_error_data
#define ERR_add_error_data
Definition: boringssl_prefix_symbols.h:1411
X509V3_EXT_CRL_add_nconf
int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, X509_CRL *crl)
Definition: v3_conf.c:366
X509V3_string_free
void X509V3_string_free(X509V3_CTX *ctx, char *str)
Definition: v3_conf.c:416
obj.h
X509V3_section_free
void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section)
Definition: v3_conf.c:424
NCONF_get_string
#define NCONF_get_string
Definition: boringssl_prefix_symbols.h:1824
generic_asn1
static unsigned char * generic_asn1(const char *value, X509V3_CTX *ctx, long *ext_len)
Definition: v3_conf.c:313
v3_ext_method
Definition: x509v3.h:102
ASN1_generate_v3
#define ASN1_generate_v3
Definition: boringssl_prefix_symbols.h:735
flags
uint32_t flags
Definition: retry_filter.cc:632
mem.h
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
asn1_type_st
Definition: asn1.h:1481
ASN1_item_free
#define ASN1_item_free
Definition: boringssl_prefix_symbols.h:746
X509v3_add_ext
#define X509v3_add_ext
Definition: boringssl_prefix_symbols.h:2744
X509V3_EXT_i2d
X509_EXTENSION * X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc)
Definition: v3_conf.c:223
method
NSString * method
Definition: ProtoMethod.h:28
X509V3_set_nconf
void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf)
Definition: v3_conf.c:454
OPENSSL_free
#define OPENSSL_free
Definition: boringssl_prefix_symbols.h:1869
nconf_method
static const X509V3_CONF_METHOD nconf_method
Definition: v3_conf.c:447
conf
Definition: doc/python/sphinx/conf.py:1
X509_crl_st::crl
X509_CRL_INFO * crl
Definition: third_party/boringssl-with-bazel/src/crypto/x509/internal.h:197
asn1_string_st
Definition: asn1.h:543
ASN1_OCTET_STRING_free
OPENSSL_EXPORT void ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *str)
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.h
conf_value_st::name
char * name
Definition: conf.h:84


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