sync code with last improvements from OpenBSD

This commit is contained in:
purplerain 2023-08-18 19:17:13 +00:00
parent 27298272ec
commit 7116a5838e
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
35 changed files with 509 additions and 254 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: obj_dat.c,v 1.54 2023/07/08 12:27:51 beck Exp $ */
/* $OpenBSD: obj_dat.c,v 1.60 2023/08/17 09:28:43 tb Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -166,7 +166,6 @@ added_obj_hash(const ADDED_OBJ *ca)
ret = a->nid;
break;
default:
/* abort(); */
return 0;
}
ret &= 0x3fffffffL;
@ -178,38 +177,32 @@ static IMPLEMENT_LHASH_HASH_FN(added_obj, ADDED_OBJ)
static int
added_obj_cmp(const ADDED_OBJ *ca, const ADDED_OBJ *cb)
{
ASN1_OBJECT *a, *b;
int i;
const ASN1_OBJECT *a, *b;
int cmp;
if ((cmp = ca->type - cb->type) != 0)
return cmp;
i = ca->type - cb->type;
if (i)
return (i);
a = ca->obj;
b = cb->obj;
switch (ca->type) {
case ADDED_DATA:
i = (a->length - b->length);
if (i)
return (i);
return (memcmp(a->data, b->data, (size_t)a->length));
return OBJ_cmp(a, b);
case ADDED_SNAME:
if (a->sn == NULL)
return (-1);
else if (b->sn == NULL)
return (1);
else
return (strcmp(a->sn, b->sn));
return -1;
if (b->sn == NULL)
return 1;
return strcmp(a->sn, b->sn);
case ADDED_LNAME:
if (a->ln == NULL)
return (-1);
else if (b->ln == NULL)
return (1);
else
return (strcmp(a->ln, b->ln));
return -1;
if (b->ln == NULL)
return 1;
return strcmp(a->ln, b->ln);
case ADDED_NID:
return (a->nid - b->nid);
return a->nid - b->nid;
default:
/* abort(); */
return 0;
}
}
@ -432,17 +425,12 @@ LCRYPTO_ALIAS(OBJ_nid2ln);
static int
obj_cmp(const ASN1_OBJECT * const *ap, const unsigned int *bp)
{
int j;
const ASN1_OBJECT *a= *ap;
const ASN1_OBJECT *a = *ap;
const ASN1_OBJECT *b = &nid_objs[*bp];
j = (a->length - b->length);
if (j)
return (j);
return (memcmp(a->data, b->data, a->length));
return OBJ_cmp(a, b);
}
static int
obj_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)
{

View file

@ -1,4 +1,4 @@
/* $OpenBSD: obj_lib.c,v 1.18 2023/07/08 12:27:51 beck Exp $ */
/* $OpenBSD: obj_lib.c,v 1.19 2023/08/17 09:13:01 tb Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -124,11 +124,12 @@ LCRYPTO_ALIAS(OBJ_dup);
int
OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b)
{
int ret;
int cmp;
ret = (a->length - b->length);
if (ret)
return (ret);
return (memcmp(a->data, b->data, a->length));
if ((cmp = a->length - b->length) != 0)
return cmp;
if (a->length == 0)
return 0;
return memcmp(a->data, b->data, a->length);
}
LCRYPTO_ALIAS(OBJ_cmp);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: x509_purp.c,v 1.28 2023/07/02 17:12:17 tb Exp $ */
/* $OpenBSD: x509_purp.c,v 1.29 2023/08/18 08:42:41 tb Exp $ */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project 2001.
*/
@ -550,7 +550,8 @@ x509v3_cache_extensions_internal(X509 *x)
if (x->ex_flags & EXFLAG_SET)
return;
X509_digest(x, X509_CERT_HASH_EVP, x->hash, NULL);
if (!X509_digest(x, X509_CERT_HASH_EVP, x->hash, NULL))
x->ex_flags |= EXFLAG_INVALID;
version = X509_get_version(x);
if (version < 0 || version > 2)