diff options
| author | tb <> | 2024-01-10 21:11:37 +0000 |
|---|---|---|
| committer | tb <> | 2024-01-10 21:11:37 +0000 |
| commit | 43fd67915d7f16fede4a13b7fc8fc14d98aeffa2 (patch) | |
| tree | 3926ede793a554fe73c638a21e2be588db6978b6 /src/lib | |
| parent | 4727d280f7f2b3ef945bdccedd807691b37adf71 (diff) | |
| download | openbsd-43fd67915d7f16fede4a13b7fc8fc14d98aeffa2.tar.gz openbsd-43fd67915d7f16fede4a13b7fc8fc14d98aeffa2.tar.bz2 openbsd-43fd67915d7f16fede4a13b7fc8fc14d98aeffa2.zip | |
X509_TRUST: start shuffling some code around
Hoist obj_trust() to the top and move the static default_trust() next
to its setter.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/libcrypto/x509/x509_trs.c | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/src/lib/libcrypto/x509/x509_trs.c b/src/lib/libcrypto/x509/x509_trs.c index db5056dfd1..f42c34b087 100644 --- a/src/lib/libcrypto/x509/x509_trs.c +++ b/src/lib/libcrypto/x509/x509_trs.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509_trs.c,v 1.35 2024/01/08 03:32:01 tb Exp $ */ | 1 | /* $OpenBSD: x509_trs.c,v 1.36 2024/01/10 21:11:37 tb Exp $ */ |
| 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 | */ |
| @@ -68,8 +68,34 @@ static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags); | |||
| 68 | static int trust_1oid(X509_TRUST *trust, X509 *x, int flags); | 68 | static int trust_1oid(X509_TRUST *trust, X509 *x, int flags); |
| 69 | static int trust_compat(X509_TRUST *trust, X509 *x, int flags); | 69 | static int trust_compat(X509_TRUST *trust, X509 *x, int flags); |
| 70 | 70 | ||
| 71 | static int obj_trust(int id, X509 *x, int flags); | 71 | static int |
| 72 | static int (*default_trust)(int id, X509 *x, int flags) = obj_trust; | 72 | obj_trust(int id, X509 *x, int flags) |
| 73 | { | ||
| 74 | ASN1_OBJECT *obj; | ||
| 75 | int i, nid; | ||
| 76 | X509_CERT_AUX *ax; | ||
| 77 | |||
| 78 | ax = x->aux; | ||
| 79 | if (!ax) | ||
| 80 | return X509_TRUST_UNTRUSTED; | ||
| 81 | if (ax->reject) { | ||
| 82 | for (i = 0; i < sk_ASN1_OBJECT_num(ax->reject); i++) { | ||
| 83 | obj = sk_ASN1_OBJECT_value(ax->reject, i); | ||
| 84 | nid = OBJ_obj2nid(obj); | ||
| 85 | if (nid == id || nid == NID_anyExtendedKeyUsage) | ||
| 86 | return X509_TRUST_REJECTED; | ||
| 87 | } | ||
| 88 | } | ||
| 89 | if (ax->trust) { | ||
| 90 | for (i = 0; i < sk_ASN1_OBJECT_num(ax->trust); i++) { | ||
| 91 | obj = sk_ASN1_OBJECT_value(ax->trust, i); | ||
| 92 | nid = OBJ_obj2nid(obj); | ||
| 93 | if (nid == id || nid == NID_anyExtendedKeyUsage) | ||
| 94 | return X509_TRUST_TRUSTED; | ||
| 95 | } | ||
| 96 | } | ||
| 97 | return X509_TRUST_UNTRUSTED; | ||
| 98 | } | ||
| 73 | 99 | ||
| 74 | /* WARNING: the following table should be kept in order of trust | 100 | /* WARNING: the following table should be kept in order of trust |
| 75 | * and without any gaps so we can just subtract the minimum trust | 101 | * and without any gaps so we can just subtract the minimum trust |
| @@ -128,6 +154,8 @@ static X509_TRUST trstandard[] = { | |||
| 128 | 154 | ||
| 129 | #define X509_TRUST_COUNT (sizeof(trstandard) / sizeof(trstandard[0])) | 155 | #define X509_TRUST_COUNT (sizeof(trstandard) / sizeof(trstandard[0])) |
| 130 | 156 | ||
| 157 | static int (*default_trust)(int id, X509 *x, int flags) = obj_trust; | ||
| 158 | |||
| 131 | int | 159 | int |
| 132 | (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int) | 160 | (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int) |
| 133 | { | 161 | { |
| @@ -278,32 +306,3 @@ trust_compat(X509_TRUST *trust, X509 *x, int flags) | |||
| 278 | else | 306 | else |
| 279 | return X509_TRUST_UNTRUSTED; | 307 | return X509_TRUST_UNTRUSTED; |
| 280 | } | 308 | } |
| 281 | |||
| 282 | static int | ||
| 283 | obj_trust(int id, X509 *x, int flags) | ||
| 284 | { | ||
| 285 | ASN1_OBJECT *obj; | ||
| 286 | int i, nid; | ||
| 287 | X509_CERT_AUX *ax; | ||
| 288 | |||
| 289 | ax = x->aux; | ||
| 290 | if (!ax) | ||
| 291 | return X509_TRUST_UNTRUSTED; | ||
| 292 | if (ax->reject) { | ||
| 293 | for (i = 0; i < sk_ASN1_OBJECT_num(ax->reject); i++) { | ||
| 294 | obj = sk_ASN1_OBJECT_value(ax->reject, i); | ||
| 295 | nid = OBJ_obj2nid(obj); | ||
| 296 | if (nid == id || nid == NID_anyExtendedKeyUsage) | ||
| 297 | return X509_TRUST_REJECTED; | ||
| 298 | } | ||
| 299 | } | ||
| 300 | if (ax->trust) { | ||
| 301 | for (i = 0; i < sk_ASN1_OBJECT_num(ax->trust); i++) { | ||
| 302 | obj = sk_ASN1_OBJECT_value(ax->trust, i); | ||
| 303 | nid = OBJ_obj2nid(obj); | ||
| 304 | if (nid == id || nid == NID_anyExtendedKeyUsage) | ||
| 305 | return X509_TRUST_TRUSTED; | ||
| 306 | } | ||
| 307 | } | ||
| 308 | return X509_TRUST_UNTRUSTED; | ||
| 309 | } | ||
