-/* $OpenBSD: x509_v3.c,v 1.31 2024/07/12 08:39:54 tb Exp $ */
+/* $OpenBSD: x509_v3.c,v 1.32 2024/07/12 08:44:16 tb Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit,
int lastpos)
{
- int n;
- X509_EXTENSION *ext;
+ crit = (crit != 0);
- if (sk == NULL)
- return -1;
- lastpos++;
- if (lastpos < 0)
+ if (++lastpos < 0)
lastpos = 0;
- n = sk_X509_EXTENSION_num(sk);
- for (; lastpos < n; lastpos++) {
- ext = sk_X509_EXTENSION_value(sk, lastpos);
- if ((ext->critical > 0 && crit) ||
- (ext->critical <= 0 && !crit))
+
+ for (; lastpos < X509v3_get_ext_count(sk); lastpos++) {
+ const X509_EXTENSION *ext = X509v3_get_ext(sk, lastpos);
+
+ if (X509_EXTENSION_get_critical(ext) == crit)
return lastpos;
}
+
return -1;
}
LCRYPTO_ALIAS(X509v3_get_ext_by_critical);