summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/objects/obj_dat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/objects/obj_dat.c')
-rw-r--r--src/lib/libcrypto/objects/obj_dat.c74
1 files changed, 32 insertions, 42 deletions
diff --git a/src/lib/libcrypto/objects/obj_dat.c b/src/lib/libcrypto/objects/obj_dat.c
index f4f7f60eab..14da51645d 100644
--- a/src/lib/libcrypto/objects/obj_dat.c
+++ b/src/lib/libcrypto/objects/obj_dat.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: obj_dat.c,v 1.64 2023/12/13 23:31:25 tb Exp $ */ 1/* $OpenBSD: obj_dat.c,v 1.65 2023/12/13 23:34:45 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -75,10 +75,6 @@
75/* obj_dat.h is generated from objects.h by obj_dat.pl */ 75/* obj_dat.h is generated from objects.h by obj_dat.pl */
76#include "obj_dat.h" 76#include "obj_dat.h"
77 77
78static int ln_cmp_BSEARCH_CMP_FN(const void *, const void *);
79static int ln_cmp(const ASN1_OBJECT * const *, unsigned int const *);
80static unsigned int *OBJ_bsearch_ln(const ASN1_OBJECT * *key, unsigned int const *base, int num);
81
82#define ADDED_DATA 0 78#define ADDED_DATA 0
83#define ADDED_SNAME 1 79#define ADDED_SNAME 1
84#define ADDED_LNAME 2 80#define ADDED_LNAME 2
@@ -93,26 +89,6 @@ DECLARE_LHASH_OF(ADDED_OBJ);
93static int new_nid = NUM_NID; 89static int new_nid = NUM_NID;
94static LHASH_OF(ADDED_OBJ) *added = NULL; 90static LHASH_OF(ADDED_OBJ) *added = NULL;
95 91
96static int ln_cmp(const ASN1_OBJECT * const *a, const unsigned int *b)
97{
98 return (strcmp((*a)->ln, nid_objs[*b].ln));
99}
100
101static int
102ln_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)
103{
104 const ASN1_OBJECT * const *a = a_;
105 unsigned int const *b = b_;
106 return ln_cmp(a, b);
107}
108
109static unsigned int *
110OBJ_bsearch_ln(const ASN1_OBJECT * *key, unsigned int const *base, int num)
111{
112 return (unsigned int *)OBJ_bsearch_(key, base, num, sizeof(unsigned int),
113 ln_cmp_BSEARCH_CMP_FN);
114}
115
116static unsigned long 92static unsigned long
117added_obj_hash(const ADDED_OBJ *ca) 93added_obj_hash(const ADDED_OBJ *ca)
118{ 94{
@@ -470,35 +446,49 @@ OBJ_txt2nid(const char *s)
470} 446}
471LCRYPTO_ALIAS(OBJ_txt2nid); 447LCRYPTO_ALIAS(OBJ_txt2nid);
472 448
449static int
450ln_objs_cmp(const void *ln, const void *b)
451{
452 const unsigned int *nid = b;
453
454 return strcmp(ln, nid_objs[*nid].ln);
455}
456
473int 457int
474OBJ_ln2nid(const char *s) 458OBJ_ln2nid(const char *ln)
475{ 459{
476 ASN1_OBJECT o; 460 const unsigned int *nid;
477 const ASN1_OBJECT *oo = &o;
478 ADDED_OBJ ad, *adp;
479 const unsigned int *op;
480 461
481 o.ln = s; 462 /* XXX - locking. OpenSSL 3 moved this after built-in object lookup. */
482 if (added != NULL) { 463 if (added != NULL) {
483 ad.type = ADDED_LNAME; 464 ASN1_OBJECT aobj = {
484 ad.obj = &o; 465 .ln = ln,
485 adp = lh_ADDED_OBJ_retrieve(added, &ad); 466 };
486 if (adp != NULL) 467 ADDED_OBJ needle = {
487 return (adp->obj->nid); 468 .type = ADDED_LNAME,
469 .obj = &aobj,
470 };
471 ADDED_OBJ *found;
472
473 if ((found = lh_ADDED_OBJ_retrieve(added, &needle)) != NULL)
474 return found->obj->nid;
488 } 475 }
489 op = OBJ_bsearch_ln(&oo, ln_objs, NUM_LN); 476
490 if (op == NULL) 477 /* ln_objs holds NIDs in ascending alphabetical order of LN. */
491 return (NID_undef); 478 nid = bsearch(ln, ln_objs, NUM_LN, sizeof(unsigned int), ln_objs_cmp);
492 return (nid_objs[*op].nid); 479 if (nid != NULL)
480 return *nid;
481
482 return NID_undef;
493} 483}
494LCRYPTO_ALIAS(OBJ_ln2nid); 484LCRYPTO_ALIAS(OBJ_ln2nid);
495 485
496static int 486static int
497sn_objs_cmp(const void *a, const void *b) 487sn_objs_cmp(const void *sn, const void *b)
498{ 488{
499 const unsigned int *nid = b; 489 const unsigned int *nid = b;
500 490
501 return strcmp(a, nid_objs[*nid].sn); 491 return strcmp(sn, nid_objs[*nid].sn);
502} 492}
503 493
504int 494int