summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_crl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/x_crl.c')
-rw-r--r--src/lib/libcrypto/asn1/x_crl.c150
1 files changed, 75 insertions, 75 deletions
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c
index cf7e69aaaf..b3a6355795 100644
--- a/src/lib/libcrypto/asn1/x_crl.c
+++ b/src/lib/libcrypto/asn1/x_crl.c
@@ -78,12 +78,12 @@ static int def_crl_lookup(X509_CRL *crl,
78 X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer); 78 X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer);
79 79
80static X509_CRL_METHOD int_crl_meth = 80static X509_CRL_METHOD int_crl_meth =
81 { 81{
82 0, 82 0,
83 0,0, 83 0,0,
84 def_crl_lookup, 84 def_crl_lookup,
85 def_crl_verify 85 def_crl_verify
86 }; 86};
87 87
88static const X509_CRL_METHOD *default_crl_method = &int_crl_meth; 88static const X509_CRL_METHOD *default_crl_method = &int_crl_meth;
89 89
@@ -104,7 +104,7 @@ static int crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
104 case ASN1_OP_D2I_POST: 104 case ASN1_OP_D2I_POST:
105 (void)sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp); 105 (void)sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp);
106 break; 106 break;
107 } 107}
108 return 1; 108 return 1;
109} 109}
110 110
@@ -124,7 +124,7 @@ ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = {
124 */ 124 */
125 125
126static int crl_set_issuers(X509_CRL *crl) 126static int crl_set_issuers(X509_CRL *crl)
127 { 127{
128 128
129 int i, j; 129 int i, j;
130 GENERAL_NAMES *gens, *gtmp; 130 GENERAL_NAMES *gens, *gtmp;
@@ -134,7 +134,7 @@ static int crl_set_issuers(X509_CRL *crl)
134 134
135 gens = NULL; 135 gens = NULL;
136 for (i = 0; i < sk_X509_REVOKED_num(revoked); i++) 136 for (i = 0; i < sk_X509_REVOKED_num(revoked); i++)
137 { 137 {
138 X509_REVOKED *rev = sk_X509_REVOKED_value(revoked, i); 138 X509_REVOKED *rev = sk_X509_REVOKED_value(revoked, i);
139 STACK_OF(X509_EXTENSION) *exts; 139 STACK_OF(X509_EXTENSION) *exts;
140 ASN1_ENUMERATED *reason; 140 ASN1_ENUMERATED *reason;
@@ -143,38 +143,38 @@ static int crl_set_issuers(X509_CRL *crl)
143 NID_certificate_issuer, 143 NID_certificate_issuer,
144 &j, NULL); 144 &j, NULL);
145 if (!gtmp && (j != -1)) 145 if (!gtmp && (j != -1))
146 { 146 {
147 crl->flags |= EXFLAG_INVALID; 147 crl->flags |= EXFLAG_INVALID;
148 return 1; 148 return 1;
149 } 149 }
150 150
151 if (gtmp) 151 if (gtmp)
152 { 152 {
153 gens = gtmp; 153 gens = gtmp;
154 if (!crl->issuers) 154 if (!crl->issuers)
155 { 155 {
156 crl->issuers = sk_GENERAL_NAMES_new_null(); 156 crl->issuers = sk_GENERAL_NAMES_new_null();
157 if (!crl->issuers) 157 if (!crl->issuers)
158 return 0; 158 return 0;
159 } 159 }
160 if (!sk_GENERAL_NAMES_push(crl->issuers, gtmp)) 160 if (!sk_GENERAL_NAMES_push(crl->issuers, gtmp))
161 return 0; 161 return 0;
162 } 162 }
163 rev->issuer = gens; 163 rev->issuer = gens;
164 164
165 reason = X509_REVOKED_get_ext_d2i(rev, NID_crl_reason, 165 reason = X509_REVOKED_get_ext_d2i(rev, NID_crl_reason,
166 &j, NULL); 166 &j, NULL);
167 if (!reason && (j != -1)) 167 if (!reason && (j != -1))
168 { 168 {
169 crl->flags |= EXFLAG_INVALID; 169 crl->flags |= EXFLAG_INVALID;
170 return 1; 170 return 1;
171 } 171 }
172 172
173 if (reason) 173 if (reason)
174 { 174 {
175 rev->reason = ASN1_ENUMERATED_get(reason); 175 rev->reason = ASN1_ENUMERATED_get(reason);
176 ASN1_ENUMERATED_free(reason); 176 ASN1_ENUMERATED_free(reason);
177 } 177 }
178 else 178 else
179 rev->reason = CRL_REASON_NONE; 179 rev->reason = CRL_REASON_NONE;
180 180
@@ -183,38 +183,38 @@ static int crl_set_issuers(X509_CRL *crl)
183 exts = rev->extensions; 183 exts = rev->extensions;
184 184
185 for (j = 0; j < sk_X509_EXTENSION_num(exts); j++) 185 for (j = 0; j < sk_X509_EXTENSION_num(exts); j++)
186 { 186 {
187 ext = sk_X509_EXTENSION_value(exts, j); 187 ext = sk_X509_EXTENSION_value(exts, j);
188 if (ext->critical > 0) 188 if (ext->critical > 0)
189 { 189 {
190 if (OBJ_obj2nid(ext->object) == 190 if (OBJ_obj2nid(ext->object) ==
191 NID_certificate_issuer) 191 NID_certificate_issuer)
192 continue; 192 continue;
193 crl->flags |= EXFLAG_CRITICAL; 193 crl->flags |= EXFLAG_CRITICAL;
194 break; 194 break;
195 }
196 } 195 }
196 }
197 197
198 198
199 } 199 }
200 200
201 return 1; 201 return 1;
202 202
203 } 203}
204 204
205/* The X509_CRL structure needs a bit of customisation. Cache some extensions 205/* The X509_CRL structure needs a bit of customisation. Cache some extensions
206 * and hash of the whole CRL. 206 * and hash of the whole CRL.
207 */ 207 */
208static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, 208static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
209 void *exarg) 209 void *exarg)
210 { 210{
211 X509_CRL *crl = (X509_CRL *)*pval; 211 X509_CRL *crl = (X509_CRL *)*pval;
212 STACK_OF(X509_EXTENSION) *exts; 212 STACK_OF(X509_EXTENSION) *exts;
213 X509_EXTENSION *ext; 213 X509_EXTENSION *ext;
214 int idx; 214 int idx;
215 215
216 switch(operation) 216 switch(operation)
217 { 217 {
218 case ASN1_OP_NEW_POST: 218 case ASN1_OP_NEW_POST:
219 crl->idp = NULL; 219 crl->idp = NULL;
220 crl->akid = NULL; 220 crl->akid = NULL;
@@ -260,40 +260,40 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
260 exts = crl->crl->extensions; 260 exts = crl->crl->extensions;
261 261
262 for (idx = 0; idx < sk_X509_EXTENSION_num(exts); idx++) 262 for (idx = 0; idx < sk_X509_EXTENSION_num(exts); idx++)
263 { 263 {
264 int nid; 264 int nid;
265 ext = sk_X509_EXTENSION_value(exts, idx); 265 ext = sk_X509_EXTENSION_value(exts, idx);
266 nid = OBJ_obj2nid(ext->object); 266 nid = OBJ_obj2nid(ext->object);
267 if (nid == NID_freshest_crl) 267 if (nid == NID_freshest_crl)
268 crl->flags |= EXFLAG_FRESHEST; 268 crl->flags |= EXFLAG_FRESHEST;
269 if (ext->critical > 0) 269 if (ext->critical > 0)
270 { 270 {
271 /* We handle IDP and deltas */ 271 /* We handle IDP and deltas */
272 if ((nid == NID_issuing_distribution_point) 272 if ((nid == NID_issuing_distribution_point)
273 || (nid == NID_delta_crl)) 273 || (nid == NID_delta_crl))
274 break;; 274 break;;
275 crl->flags |= EXFLAG_CRITICAL; 275 crl->flags |= EXFLAG_CRITICAL;
276 break; 276 break;
277 }
278 } 277 }
278 }
279 279
280 280
281 if (!crl_set_issuers(crl)) 281 if (!crl_set_issuers(crl))
282 return 0; 282 return 0;
283 283
284 if (crl->meth->crl_init) 284 if (crl->meth->crl_init)
285 { 285 {
286 if (crl->meth->crl_init(crl) == 0) 286 if (crl->meth->crl_init(crl) == 0)
287 return 0; 287 return 0;
288 } 288 }
289 break; 289 break;
290 290
291 case ASN1_OP_FREE_POST: 291 case ASN1_OP_FREE_POST:
292 if (crl->meth->crl_free) 292 if (crl->meth->crl_free)
293 { 293 {
294 if (!crl->meth->crl_free(crl)) 294 if (!crl->meth->crl_free(crl))
295 return 0; 295 return 0;
296 } 296 }
297 if (crl->akid) 297 if (crl->akid)
298 AUTHORITY_KEYID_free(crl->akid); 298 AUTHORITY_KEYID_free(crl->akid);
299 if (crl->idp) 299 if (crl->idp)
@@ -302,32 +302,32 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
302 ASN1_INTEGER_free(crl->base_crl_number); 302 ASN1_INTEGER_free(crl->base_crl_number);
303 sk_GENERAL_NAMES_pop_free(crl->issuers, GENERAL_NAMES_free); 303 sk_GENERAL_NAMES_pop_free(crl->issuers, GENERAL_NAMES_free);
304 break; 304 break;
305 }
306 return 1;
307 } 305 }
306 return 1;
307}
308 308
309/* Convert IDP into a more convenient form */ 309/* Convert IDP into a more convenient form */
310 310
311static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) 311static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp)
312 { 312{
313 int idp_only = 0; 313 int idp_only = 0;
314 /* Set various flags according to IDP */ 314 /* Set various flags according to IDP */
315 crl->idp_flags |= IDP_PRESENT; 315 crl->idp_flags |= IDP_PRESENT;
316 if (idp->onlyuser > 0) 316 if (idp->onlyuser > 0)
317 { 317 {
318 idp_only++; 318 idp_only++;
319 crl->idp_flags |= IDP_ONLYUSER; 319 crl->idp_flags |= IDP_ONLYUSER;
320 } 320 }
321 if (idp->onlyCA > 0) 321 if (idp->onlyCA > 0)
322 { 322 {
323 idp_only++; 323 idp_only++;
324 crl->idp_flags |= IDP_ONLYCA; 324 crl->idp_flags |= IDP_ONLYCA;
325 } 325 }
326 if (idp->onlyattr > 0) 326 if (idp->onlyattr > 0)
327 { 327 {
328 idp_only++; 328 idp_only++;
329 crl->idp_flags |= IDP_ONLYATTR; 329 crl->idp_flags |= IDP_ONLYATTR;
330 } 330 }
331 331
332 if (idp_only > 1) 332 if (idp_only > 1)
333 crl->idp_flags |= IDP_INVALID; 333 crl->idp_flags |= IDP_INVALID;
@@ -336,7 +336,7 @@ static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp)
336 crl->idp_flags |= IDP_INDIRECT; 336 crl->idp_flags |= IDP_INDIRECT;
337 337
338 if (idp->onlysomereasons) 338 if (idp->onlysomereasons)
339 { 339 {
340 crl->idp_flags |= IDP_REASONS; 340 crl->idp_flags |= IDP_REASONS;
341 if (idp->onlysomereasons->length > 0) 341 if (idp->onlysomereasons->length > 0)
342 crl->idp_reasons = idp->onlysomereasons->data[0]; 342 crl->idp_reasons = idp->onlysomereasons->data[0];
@@ -344,10 +344,10 @@ static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp)
344 crl->idp_reasons |= 344 crl->idp_reasons |=
345 (idp->onlysomereasons->data[1] << 8); 345 (idp->onlysomereasons->data[1] << 8);
346 crl->idp_reasons &= CRLDP_ALL_REASONS; 346 crl->idp_reasons &= CRLDP_ALL_REASONS;
347 } 347 }
348 348
349 DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); 349 DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl));
350 } 350}
351 351
352ASN1_SEQUENCE_ref(X509_CRL, crl_cb, CRYPTO_LOCK_X509_CRL) = { 352ASN1_SEQUENCE_ref(X509_CRL, crl_cb, CRYPTO_LOCK_X509_CRL) = {
353 ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO), 353 ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO),
@@ -362,11 +362,11 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509_CRL)
362 362
363static int X509_REVOKED_cmp(const X509_REVOKED * const *a, 363static int X509_REVOKED_cmp(const X509_REVOKED * const *a,
364 const X509_REVOKED * const *b) 364 const X509_REVOKED * const *b)
365 { 365{
366 return(ASN1_STRING_cmp( 366 return(ASN1_STRING_cmp(
367 (ASN1_STRING *)(*a)->serialNumber, 367 (ASN1_STRING *)(*a)->serialNumber,
368 (ASN1_STRING *)(*b)->serialNumber)); 368 (ASN1_STRING *)(*b)->serialNumber));
369 } 369}
370 370
371int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) 371int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)
372{ 372{
@@ -377,73 +377,73 @@ int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)
377 if(!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev)) { 377 if(!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev)) {
378 ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); 378 ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE);
379 return 0; 379 return 0;
380 } 380}
381 inf->enc.modified = 1; 381 inf->enc.modified = 1;
382 return 1; 382 return 1;
383} 383}
384 384
385int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r) 385int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r)
386 { 386{
387 if (crl->meth->crl_verify) 387 if (crl->meth->crl_verify)
388 return crl->meth->crl_verify(crl, r); 388 return crl->meth->crl_verify(crl, r);
389 return 0; 389 return 0;
390 } 390}
391 391
392int X509_CRL_get0_by_serial(X509_CRL *crl, 392int X509_CRL_get0_by_serial(X509_CRL *crl,
393 X509_REVOKED **ret, ASN1_INTEGER *serial) 393 X509_REVOKED **ret, ASN1_INTEGER *serial)
394 { 394{
395 if (crl->meth->crl_lookup) 395 if (crl->meth->crl_lookup)
396 return crl->meth->crl_lookup(crl, ret, serial, NULL); 396 return crl->meth->crl_lookup(crl, ret, serial, NULL);
397 return 0; 397 return 0;
398 } 398}
399 399
400int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x) 400int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x)
401 { 401{
402 if (crl->meth->crl_lookup) 402 if (crl->meth->crl_lookup)
403 return crl->meth->crl_lookup(crl, ret, 403 return crl->meth->crl_lookup(crl, ret,
404 X509_get_serialNumber(x), 404 X509_get_serialNumber(x),
405 X509_get_issuer_name(x)); 405 X509_get_issuer_name(x));
406 return 0; 406 return 0;
407 } 407}
408 408
409static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r) 409static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r)
410 { 410{
411 return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), 411 return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO),
412 crl->sig_alg, crl->signature,crl->crl,r)); 412 crl->sig_alg, crl->signature,crl->crl,r));
413 } 413}
414 414
415static int crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, 415static int crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm,
416 X509_REVOKED *rev) 416 X509_REVOKED *rev)
417 { 417{
418 int i; 418 int i;
419 419
420 if (!rev->issuer) 420 if (!rev->issuer)
421 { 421 {
422 if (!nm) 422 if (!nm)
423 return 1; 423 return 1;
424 if (!X509_NAME_cmp(nm, X509_CRL_get_issuer(crl))) 424 if (!X509_NAME_cmp(nm, X509_CRL_get_issuer(crl)))
425 return 1; 425 return 1;
426 return 0; 426 return 0;
427 } 427 }
428 428
429 if (!nm) 429 if (!nm)
430 nm = X509_CRL_get_issuer(crl); 430 nm = X509_CRL_get_issuer(crl);
431 431
432 for (i = 0; i < sk_GENERAL_NAME_num(rev->issuer); i++) 432 for (i = 0; i < sk_GENERAL_NAME_num(rev->issuer); i++)
433 { 433 {
434 GENERAL_NAME *gen = sk_GENERAL_NAME_value(rev->issuer, i); 434 GENERAL_NAME *gen = sk_GENERAL_NAME_value(rev->issuer, i);
435 if (gen->type != GEN_DIRNAME) 435 if (gen->type != GEN_DIRNAME)
436 continue; 436 continue;
437 if (!X509_NAME_cmp(nm, gen->d.directoryName)) 437 if (!X509_NAME_cmp(nm, gen->d.directoryName))
438 return 1; 438 return 1;
439 } 439 }
440 return 0; 440 return 0;
441 441
442 } 442}
443 443
444static int def_crl_lookup(X509_CRL *crl, 444static int def_crl_lookup(X509_CRL *crl,
445 X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer) 445 X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer)
446 { 446{
447 X509_REVOKED rtmp, *rev; 447 X509_REVOKED rtmp, *rev;
448 int idx; 448 int idx;
449 rtmp.serialNumber = serial; 449 rtmp.serialNumber = serial;
@@ -451,39 +451,39 @@ static int def_crl_lookup(X509_CRL *crl,
451 * Do this under a lock to avoid race condition. 451 * Do this under a lock to avoid race condition.
452 */ 452 */
453 if (!sk_X509_REVOKED_is_sorted(crl->crl->revoked)) 453 if (!sk_X509_REVOKED_is_sorted(crl->crl->revoked))
454 { 454 {
455 CRYPTO_w_lock(CRYPTO_LOCK_X509_CRL); 455 CRYPTO_w_lock(CRYPTO_LOCK_X509_CRL);
456 sk_X509_REVOKED_sort(crl->crl->revoked); 456 sk_X509_REVOKED_sort(crl->crl->revoked);
457 CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL); 457 CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL);
458 } 458 }
459 idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); 459 idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp);
460 if(idx < 0) 460 if(idx < 0)
461 return 0; 461 return 0;
462 /* Need to look for matching name */ 462 /* Need to look for matching name */
463 for(;idx < sk_X509_REVOKED_num(crl->crl->revoked); idx++) 463 for(;idx < sk_X509_REVOKED_num(crl->crl->revoked); idx++)
464 { 464 {
465 rev = sk_X509_REVOKED_value(crl->crl->revoked, idx); 465 rev = sk_X509_REVOKED_value(crl->crl->revoked, idx);
466 if (ASN1_INTEGER_cmp(rev->serialNumber, serial)) 466 if (ASN1_INTEGER_cmp(rev->serialNumber, serial))
467 return 0; 467 return 0;
468 if (crl_revoked_issuer_match(crl, issuer, rev)) 468 if (crl_revoked_issuer_match(crl, issuer, rev))
469 { 469 {
470 if (ret) 470 if (ret)
471 *ret = rev; 471 *ret = rev;
472 if (rev->reason == CRL_REASON_REMOVE_FROM_CRL) 472 if (rev->reason == CRL_REASON_REMOVE_FROM_CRL)
473 return 2; 473 return 2;
474 return 1; 474 return 1;
475 }
476 } 475 }
477 return 0;
478 } 476 }
477 return 0;
478}
479 479
480void X509_CRL_set_default_method(const X509_CRL_METHOD *meth) 480void X509_CRL_set_default_method(const X509_CRL_METHOD *meth)
481 { 481{
482 if (meth == NULL) 482 if (meth == NULL)
483 default_crl_method = &int_crl_meth; 483 default_crl_method = &int_crl_meth;
484 else 484 else
485 default_crl_method = meth; 485 default_crl_method = meth;
486 } 486}
487 487
488X509_CRL_METHOD *X509_CRL_METHOD_new( 488X509_CRL_METHOD *X509_CRL_METHOD_new(
489 int (*crl_init)(X509_CRL *crl), 489 int (*crl_init)(X509_CRL *crl),
@@ -491,7 +491,7 @@ X509_CRL_METHOD *X509_CRL_METHOD_new(
491 int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, 491 int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret,
492 ASN1_INTEGER *ser, X509_NAME *issuer), 492 ASN1_INTEGER *ser, X509_NAME *issuer),
493 int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk)) 493 int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk))
494 { 494{
495 X509_CRL_METHOD *m; 495 X509_CRL_METHOD *m;
496 m = malloc(sizeof(X509_CRL_METHOD)); 496 m = malloc(sizeof(X509_CRL_METHOD));
497 if (!m) 497 if (!m)
@@ -502,24 +502,24 @@ X509_CRL_METHOD *X509_CRL_METHOD_new(
502 m->crl_verify = crl_verify; 502 m->crl_verify = crl_verify;
503 m->flags = X509_CRL_METHOD_DYNAMIC; 503 m->flags = X509_CRL_METHOD_DYNAMIC;
504 return m; 504 return m;
505 } 505}
506 506
507void X509_CRL_METHOD_free(X509_CRL_METHOD *m) 507void X509_CRL_METHOD_free(X509_CRL_METHOD *m)
508 { 508{
509 if (!(m->flags & X509_CRL_METHOD_DYNAMIC)) 509 if (!(m->flags & X509_CRL_METHOD_DYNAMIC))
510 return; 510 return;
511 free(m); 511 free(m);
512 } 512}
513 513
514void X509_CRL_set_meth_data(X509_CRL *crl, void *dat) 514void X509_CRL_set_meth_data(X509_CRL *crl, void *dat)
515 { 515{
516 crl->meth_data = dat; 516 crl->meth_data = dat;
517 } 517}
518 518
519void *X509_CRL_get_meth_data(X509_CRL *crl) 519void *X509_CRL_get_meth_data(X509_CRL *crl)
520 { 520{
521 return crl->meth_data; 521 return crl->meth_data;
522 } 522}
523 523
524IMPLEMENT_STACK_OF(X509_REVOKED) 524IMPLEMENT_STACK_OF(X509_REVOKED)
525IMPLEMENT_ASN1_SET_OF(X509_REVOKED) 525IMPLEMENT_ASN1_SET_OF(X509_REVOKED)