Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: openssl/crypto/x509v3/v3_conf.c

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/crypto/x509v3/v3_asid.c ('k') | openssl/crypto/x509v3/v3_cpols.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* v3_conf.c */ 1 /* v3_conf.c */
2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
5 /* ==================================================================== 5 /* ====================================================================
6 * Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. 6 * Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions 9 * modification, are permitted provided that the following conditions
10 * are met: 10 * are met:
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 #include <openssl/conf.h> 65 #include <openssl/conf.h>
66 #include <openssl/x509.h> 66 #include <openssl/x509.h>
67 #include <openssl/x509v3.h> 67 #include <openssl/x509v3.h>
68 68
69 static int v3_check_critical(char **value); 69 static int v3_check_critical(char **value);
70 static int v3_check_generic(char **value); 70 static int v3_check_generic(char **value);
71 static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid, in t crit, char *value); 71 static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid, in t crit, char *value);
72 static X509_EXTENSION *v3_generic_extension(const char *ext, char *value, int cr it, int type, X509V3_CTX *ctx); 72 static X509_EXTENSION *v3_generic_extension(const char *ext, char *value, int cr it, int type, X509V3_CTX *ctx);
73 static char *conf_lhash_get_string(void *db, char *section, char *value); 73 static char *conf_lhash_get_string(void *db, char *section, char *value);
74 static STACK_OF(CONF_VALUE) *conf_lhash_get_section(void *db, char *section); 74 static STACK_OF(CONF_VALUE) *conf_lhash_get_section(void *db, char *section);
75 static X509_EXTENSION *do_ext_i2d(X509V3_EXT_METHOD *method, int ext_nid, 75 static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int ext_nid,
76 » » » » » » int crit, void *ext_struc); 76 » » » » int crit, void *ext_struc);
77 static unsigned char *generic_asn1(char *value, X509V3_CTX *ctx, long *ext_len); 77 static unsigned char *generic_asn1(char *value, X509V3_CTX *ctx, long *ext_len);
78 /* CONF *conf: Config file */ 78 /* CONF *conf: Config file */
79 /* char *name: Name */ 79 /* char *name: Name */
80 /* char *value: Value */ 80 /* char *value: Value */
81 X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, 81 X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name,
82 » char *value) 82 » » » » char *value)
83 { 83 {
84 int crit; 84 int crit;
85 int ext_type; 85 int ext_type;
86 X509_EXTENSION *ret; 86 X509_EXTENSION *ret;
87 crit = v3_check_critical(&value); 87 crit = v3_check_critical(&value);
88 if ((ext_type = v3_check_generic(&value))) 88 if ((ext_type = v3_check_generic(&value)))
89 return v3_generic_extension(name, value, crit, ext_type, ctx); 89 return v3_generic_extension(name, value, crit, ext_type, ctx);
90 ret = do_ext_nconf(conf, ctx, OBJ_sn2nid(name), crit, value); 90 ret = do_ext_nconf(conf, ctx, OBJ_sn2nid(name), crit, value);
91 if (!ret) 91 if (!ret)
92 { 92 {
93 X509V3err(X509V3_F_X509V3_EXT_NCONF,X509V3_R_ERROR_IN_EXTENSION) ; 93 X509V3err(X509V3_F_X509V3_EXT_NCONF,X509V3_R_ERROR_IN_EXTENSION) ;
94 ERR_add_error_data(4,"name=", name, ", value=", value); 94 ERR_add_error_data(4,"name=", name, ", value=", value);
95 } 95 }
96 return ret; 96 return ret;
97 } 97 }
98 98
99 /* CONF *conf: Config file */ 99 /* CONF *conf: Config file */
100 /* char *value: Value */ 100 /* char *value: Value */
101 X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, 101 X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
102 » char *value) 102 » » » » char *value)
103 { 103 {
104 int crit; 104 int crit;
105 int ext_type; 105 int ext_type;
106 crit = v3_check_critical(&value); 106 crit = v3_check_critical(&value);
107 if ((ext_type = v3_check_generic(&value))) 107 if ((ext_type = v3_check_generic(&value)))
108 return v3_generic_extension(OBJ_nid2sn(ext_nid), 108 return v3_generic_extension(OBJ_nid2sn(ext_nid),
109 value, crit, ext_type, ctx); 109 value, crit, ext_type, ctx);
110 return do_ext_nconf(conf, ctx, ext_nid, crit, value); 110 return do_ext_nconf(conf, ctx, ext_nid, crit, value);
111 } 111 }
112 112
113 /* CONF *conf: Config file */ 113 /* CONF *conf: Config file */
114 /* char *value: Value */ 114 /* char *value: Value */
115 static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid, 115 static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid,
116 » int crit, char *value) 116 » » » » int crit, char *value)
117 { 117 {
118 » X509V3_EXT_METHOD *method; 118 » const X509V3_EXT_METHOD *method;
119 X509_EXTENSION *ext; 119 X509_EXTENSION *ext;
120 STACK_OF(CONF_VALUE) *nval; 120 STACK_OF(CONF_VALUE) *nval;
121 void *ext_struc; 121 void *ext_struc;
122 if (ext_nid == NID_undef) 122 if (ext_nid == NID_undef)
123 { 123 {
124 X509V3err(X509V3_F_DO_EXT_NCONF,X509V3_R_UNKNOWN_EXTENSION_NAME) ; 124 X509V3err(X509V3_F_DO_EXT_NCONF,X509V3_R_UNKNOWN_EXTENSION_NAME) ;
125 return NULL; 125 return NULL;
126 } 126 }
127 if (!(method = X509V3_EXT_get_nid(ext_nid))) 127 if (!(method = X509V3_EXT_get_nid(ext_nid)))
128 { 128 {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 return NULL; 165 return NULL;
166 } 166 }
167 167
168 ext = do_ext_i2d(method, ext_nid, crit, ext_struc); 168 ext = do_ext_i2d(method, ext_nid, crit, ext_struc);
169 if(method->it) ASN1_item_free(ext_struc, ASN1_ITEM_ptr(method->it)); 169 if(method->it) ASN1_item_free(ext_struc, ASN1_ITEM_ptr(method->it));
170 else method->ext_free(ext_struc); 170 else method->ext_free(ext_struc);
171 return ext; 171 return ext;
172 172
173 } 173 }
174 174
175 static X509_EXTENSION *do_ext_i2d(X509V3_EXT_METHOD *method, int ext_nid, 175 static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int ext_nid,
176 » » » » » » int crit, void *ext_struc) 176 » » » » int crit, void *ext_struc)
177 { 177 {
178 unsigned char *ext_der; 178 unsigned char *ext_der;
179 int ext_len; 179 int ext_len;
180 ASN1_OCTET_STRING *ext_oct; 180 ASN1_OCTET_STRING *ext_oct;
181 X509_EXTENSION *ext; 181 X509_EXTENSION *ext;
182 /* Convert internal representation to DER */ 182 /* Convert internal representation to DER */
183 if (method->it) 183 if (method->it)
184 { 184 {
185 ext_der = NULL; 185 ext_der = NULL;
186 ext_len = ASN1_item_i2d(ext_struc, &ext_der, ASN1_ITEM_ptr(metho d->it)); 186 ext_len = ASN1_item_i2d(ext_struc, &ext_der, ASN1_ITEM_ptr(metho d->it));
(...skipping 20 matching lines...) Expand all
207 merr: 207 merr:
208 X509V3err(X509V3_F_DO_EXT_I2D,ERR_R_MALLOC_FAILURE); 208 X509V3err(X509V3_F_DO_EXT_I2D,ERR_R_MALLOC_FAILURE);
209 return NULL; 209 return NULL;
210 210
211 } 211 }
212 212
213 /* Given an internal structure, nid and critical flag create an extension */ 213 /* Given an internal structure, nid and critical flag create an extension */
214 214
215 X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc) 215 X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc)
216 { 216 {
217 » X509V3_EXT_METHOD *method; 217 » const X509V3_EXT_METHOD *method;
218 if (!(method = X509V3_EXT_get_nid(ext_nid))) { 218 if (!(method = X509V3_EXT_get_nid(ext_nid))) {
219 X509V3err(X509V3_F_X509V3_EXT_I2D,X509V3_R_UNKNOWN_EXTENSION); 219 X509V3err(X509V3_F_X509V3_EXT_I2D,X509V3_R_UNKNOWN_EXTENSION);
220 return NULL; 220 return NULL;
221 } 221 }
222 return do_ext_i2d(method, ext_nid, crit, ext_struc); 222 return do_ext_i2d(method, ext_nid, crit, ext_struc);
223 } 223 }
224 224
225 /* Check the extension string for critical flag */ 225 /* Check the extension string for critical flag */
226 static int v3_check_critical(char **value) 226 static int v3_check_critical(char **value)
227 { 227 {
(...skipping 23 matching lines...) Expand all
251 else 251 else
252 return 0; 252 return 0;
253 253
254 while (isspace((unsigned char)*p)) p++; 254 while (isspace((unsigned char)*p)) p++;
255 *value = p; 255 *value = p;
256 return gen_type; 256 return gen_type;
257 } 257 }
258 258
259 /* Create a generic extension: for now just handle DER type */ 259 /* Create a generic extension: for now just handle DER type */
260 static X509_EXTENSION *v3_generic_extension(const char *ext, char *value, 260 static X509_EXTENSION *v3_generic_extension(const char *ext, char *value,
261 » int crit, int gen_type, X509V3_CTX *ctx) 261 » » » » » int crit, int gen_type,
262 » » » » » X509V3_CTX *ctx)
262 { 263 {
263 unsigned char *ext_der=NULL; 264 unsigned char *ext_der=NULL;
264 long ext_len; 265 long ext_len;
265 ASN1_OBJECT *obj=NULL; 266 ASN1_OBJECT *obj=NULL;
266 ASN1_OCTET_STRING *oct=NULL; 267 ASN1_OCTET_STRING *oct=NULL;
267 X509_EXTENSION *extension=NULL; 268 X509_EXTENSION *extension=NULL;
268 if (!(obj = OBJ_txt2obj(ext, 0))) 269 if (!(obj = OBJ_txt2obj(ext, 0)))
269 { 270 {
270 X509V3err(X509V3_F_V3_GENERIC_EXTENSION,X509V3_R_EXTENSION_NAME_ ERROR); 271 X509V3err(X509V3_F_V3_GENERIC_EXTENSION,X509V3_R_EXTENSION_NAME_ ERROR);
271 ERR_add_error_data(2, "name=", ext); 272 ERR_add_error_data(2, "name=", ext);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 ASN1_TYPE_free(typ); 316 ASN1_TYPE_free(typ);
316 return ext_der; 317 return ext_der;
317 } 318 }
318 319
319 /* This is the main function: add a bunch of extensions based on a config file 320 /* This is the main function: add a bunch of extensions based on a config file
320 * section to an extension STACK. 321 * section to an extension STACK.
321 */ 322 */
322 323
323 324
324 int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, 325 int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section,
325 » STACK_OF(X509_EXTENSION) **sk) 326 » » » STACK_OF(X509_EXTENSION) **sk)
326 { 327 {
327 X509_EXTENSION *ext; 328 X509_EXTENSION *ext;
328 STACK_OF(CONF_VALUE) *nval; 329 STACK_OF(CONF_VALUE) *nval;
329 CONF_VALUE *val; 330 CONF_VALUE *val;
330 int i; 331 int i;
331 if (!(nval = NCONF_get_section(conf, section))) return 0; 332 if (!(nval = NCONF_get_section(conf, section))) return 0;
332 for (i = 0; i < sk_CONF_VALUE_num(nval); i++) 333 for (i = 0; i < sk_CONF_VALUE_num(nval); i++)
333 { 334 {
334 val = sk_CONF_VALUE_value(nval, i); 335 val = sk_CONF_VALUE_value(nval, i);
335 if (!(ext = X509V3_EXT_nconf(conf, ctx, val->name, val->value))) 336 if (!(ext = X509V3_EXT_nconf(conf, ctx, val->name, val->value)))
336 return 0; 337 return 0;
337 if (sk) X509v3_add_ext(sk, ext, -1); 338 if (sk) X509v3_add_ext(sk, ext, -1);
338 X509_EXTENSION_free(ext); 339 X509_EXTENSION_free(ext);
339 } 340 }
340 return 1; 341 return 1;
341 } 342 }
342 343
343 /* Convenience functions to add extensions to a certificate, CRL and request */ 344 /* Convenience functions to add extensions to a certificate, CRL and request */
344 345
345 int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, 346 int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
346 » X509 *cert) 347 » » » X509 *cert)
347 { 348 {
348 STACK_OF(X509_EXTENSION) **sk = NULL; 349 STACK_OF(X509_EXTENSION) **sk = NULL;
349 if (cert) 350 if (cert)
350 sk = &cert->cert_info->extensions; 351 sk = &cert->cert_info->extensions;
351 return X509V3_EXT_add_nconf_sk(conf, ctx, section, sk); 352 return X509V3_EXT_add_nconf_sk(conf, ctx, section, sk);
352 } 353 }
353 354
354 /* Same as above but for a CRL */ 355 /* Same as above but for a CRL */
355 356
356 int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, 357 int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
357 » X509_CRL *crl) 358 » » » X509_CRL *crl)
358 { 359 {
359 STACK_OF(X509_EXTENSION) **sk = NULL; 360 STACK_OF(X509_EXTENSION) **sk = NULL;
360 if (crl) 361 if (crl)
361 sk = &crl->crl->extensions; 362 sk = &crl->crl->extensions;
362 return X509V3_EXT_add_nconf_sk(conf, ctx, section, sk); 363 return X509V3_EXT_add_nconf_sk(conf, ctx, section, sk);
363 } 364 }
364 365
365 /* Add extensions to certificate request */ 366 /* Add extensions to certificate request */
366 367
367 int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, 368 int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 NULL 437 NULL
437 }; 438 };
438 439
439 void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf) 440 void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf)
440 { 441 {
441 ctx->db_meth = &nconf_method; 442 ctx->db_meth = &nconf_method;
442 ctx->db = conf; 443 ctx->db = conf;
443 } 444 }
444 445
445 void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subj, X509_REQ *req, 446 void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subj, X509_REQ *req,
446 » X509_CRL *crl, int flags) 447 » » X509_CRL *crl, int flags)
447 { 448 {
448 ctx->issuer_cert = issuer; 449 ctx->issuer_cert = issuer;
449 ctx->subject_cert = subj; 450 ctx->subject_cert = subj;
450 ctx->crl = crl; 451 ctx->crl = crl;
451 ctx->subject_req = req; 452 ctx->subject_req = req;
452 ctx->flags = flags; 453 ctx->flags = flags;
453 } 454 }
454 455
455 /* Old conf compatibility functions */ 456 /* Old conf compatibility functions */
456 457
457 X509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name, 458 X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
458 » char *value) 459 » » » » char *name, char *value)
459 { 460 {
460 CONF ctmp; 461 CONF ctmp;
461 CONF_set_nconf(&ctmp, conf); 462 CONF_set_nconf(&ctmp, conf);
462 return X509V3_EXT_nconf(&ctmp, ctx, name, value); 463 return X509V3_EXT_nconf(&ctmp, ctx, name, value);
463 } 464 }
464 465
465 /* LHASH *conf: Config file */ 466 /* LHASH *conf: Config file */
466 /* char *value: Value */ 467 /* char *value: Value */
467 X509_EXTENSION *X509V3_EXT_conf_nid(LHASH *conf, X509V3_CTX *ctx, int ext_nid, 468 X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
468 » char *value) 469 » » » » int ext_nid, char *value)
469 { 470 {
470 CONF ctmp; 471 CONF ctmp;
471 CONF_set_nconf(&ctmp, conf); 472 CONF_set_nconf(&ctmp, conf);
472 return X509V3_EXT_nconf_nid(&ctmp, ctx, ext_nid, value); 473 return X509V3_EXT_nconf_nid(&ctmp, ctx, ext_nid, value);
473 } 474 }
474 475
475 static char *conf_lhash_get_string(void *db, char *section, char *value) 476 static char *conf_lhash_get_string(void *db, char *section, char *value)
476 { 477 {
477 return CONF_get_string(db, section, value); 478 return CONF_get_string(db, section, value);
478 } 479 }
479 480
480 static STACK_OF(CONF_VALUE) *conf_lhash_get_section(void *db, char *section) 481 static STACK_OF(CONF_VALUE) *conf_lhash_get_section(void *db, char *section)
481 { 482 {
482 return CONF_get_section(db, section); 483 return CONF_get_section(db, section);
483 } 484 }
484 485
485 static X509V3_CONF_METHOD conf_lhash_method = { 486 static X509V3_CONF_METHOD conf_lhash_method = {
486 conf_lhash_get_string, 487 conf_lhash_get_string,
487 conf_lhash_get_section, 488 conf_lhash_get_section,
488 NULL, 489 NULL,
489 NULL 490 NULL
490 }; 491 };
491 492
492 void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash) 493 void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash)
493 { 494 {
494 ctx->db_meth = &conf_lhash_method; 495 ctx->db_meth = &conf_lhash_method;
495 ctx->db = lhash; 496 ctx->db = lhash;
496 } 497 }
497 498
498 int X509V3_EXT_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, 499 int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
499 » X509 *cert) 500 » » » char *section, X509 *cert)
500 { 501 {
501 CONF ctmp; 502 CONF ctmp;
502 CONF_set_nconf(&ctmp, conf); 503 CONF_set_nconf(&ctmp, conf);
503 return X509V3_EXT_add_nconf(&ctmp, ctx, section, cert); 504 return X509V3_EXT_add_nconf(&ctmp, ctx, section, cert);
504 } 505 }
505 506
506 /* Same as above but for a CRL */ 507 /* Same as above but for a CRL */
507 508
508 int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, 509 int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
509 » X509_CRL *crl) 510 » » » char *section, X509_CRL *crl)
510 { 511 {
511 CONF ctmp; 512 CONF ctmp;
512 CONF_set_nconf(&ctmp, conf); 513 CONF_set_nconf(&ctmp, conf);
513 return X509V3_EXT_CRL_add_nconf(&ctmp, ctx, section, crl); 514 return X509V3_EXT_CRL_add_nconf(&ctmp, ctx, section, crl);
514 } 515 }
515 516
516 /* Add extensions to certificate request */ 517 /* Add extensions to certificate request */
517 518
518 int X509V3_EXT_REQ_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, 519 int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
519 » X509_REQ *req) 520 » » » char *section, X509_REQ *req)
520 { 521 {
521 CONF ctmp; 522 CONF ctmp;
522 CONF_set_nconf(&ctmp, conf); 523 CONF_set_nconf(&ctmp, conf);
523 return X509V3_EXT_REQ_add_nconf(&ctmp, ctx, section, req); 524 return X509V3_EXT_REQ_add_nconf(&ctmp, ctx, section, req);
524 } 525 }
OLDNEW
« no previous file with comments | « openssl/crypto/x509v3/v3_asid.c ('k') | openssl/crypto/x509v3/v3_cpols.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698