diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/asn1/x_x509.c | 29 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509.h | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509_err.c | 3 |
3 files changed, 31 insertions, 4 deletions
diff --git a/src/lib/libcrypto/asn1/x_x509.c b/src/lib/libcrypto/asn1/x_x509.c index 227af88e82..87b714877f 100644 --- a/src/lib/libcrypto/asn1/x_x509.c +++ b/src/lib/libcrypto/asn1/x_x509.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x_x509.c,v 1.31 2022/11/26 16:08:50 tb Exp $ */ | 1 | /* $OpenBSD: x_x509.c,v 1.32 2023/04/23 21:31:16 job 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 | * |
| @@ -61,6 +61,7 @@ | |||
| 61 | #include <openssl/opensslconf.h> | 61 | #include <openssl/opensslconf.h> |
| 62 | 62 | ||
| 63 | #include <openssl/asn1t.h> | 63 | #include <openssl/asn1t.h> |
| 64 | #include <openssl/err.h> | ||
| 64 | #include <openssl/evp.h> | 65 | #include <openssl/evp.h> |
| 65 | #include <openssl/x509.h> | 66 | #include <openssl/x509.h> |
| 66 | #include <openssl/x509v3.h> | 67 | #include <openssl/x509v3.h> |
| @@ -194,10 +195,34 @@ x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
| 194 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_X509, ret, &ret->ex_data); | 195 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_X509, ret, &ret->ex_data); |
| 195 | break; | 196 | break; |
| 196 | 197 | ||
| 197 | case ASN1_OP_D2I_POST: | 198 | case ASN1_OP_D2I_POST: { |
| 199 | const ASN1_BIT_STRING *issuerUID = NULL, *subjectUID = NULL; | ||
| 200 | long version; | ||
| 201 | |||
| 202 | version = X509_get_version(ret); | ||
| 203 | /* accept 0 despite DER requiring omission of default values */ | ||
| 204 | if (version < 0 || version > 2) { | ||
| 205 | X509error(X509_R_INVALID_VERSION); | ||
| 206 | return 0; | ||
| 207 | } | ||
| 208 | |||
| 209 | /* RFC 5280 section 4.1.2.8, these fields require v2 or v3 */ | ||
| 210 | X509_get0_uids(ret, &issuerUID, &subjectUID); | ||
| 211 | if ((issuerUID != NULL || subjectUID != NULL) && version == 0) { | ||
| 212 | X509error(X509_R_INVALID_VERSION); | ||
| 213 | return 0; | ||
| 214 | } | ||
| 215 | |||
| 216 | /* RFC 5280 section 4.1.2.9, extensions require v3. */ | ||
| 217 | if (X509_get_ext_count(ret) != 0 && version != 2) { | ||
| 218 | X509error(X509_R_INVALID_VERSION); | ||
| 219 | return 0; | ||
| 220 | } | ||
| 221 | |||
| 198 | free(ret->name); | 222 | free(ret->name); |
| 199 | ret->name = X509_NAME_oneline(ret->cert_info->subject, NULL, 0); | 223 | ret->name = X509_NAME_oneline(ret->cert_info->subject, NULL, 0); |
| 200 | break; | 224 | break; |
| 225 | } | ||
| 201 | 226 | ||
| 202 | case ASN1_OP_FREE_POST: | 227 | case ASN1_OP_FREE_POST: |
| 203 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509, ret, &ret->ex_data); | 228 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509, ret, &ret->ex_data); |
diff --git a/src/lib/libcrypto/x509/x509.h b/src/lib/libcrypto/x509/x509.h index 9f87700c60..e8cedaae13 100644 --- a/src/lib/libcrypto/x509/x509.h +++ b/src/lib/libcrypto/x509/x509.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509.h,v 1.96 2023/04/18 08:47:28 tb Exp $ */ | 1 | /* $OpenBSD: x509.h,v 1.97 2023/04/23 21:31:16 job 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 | * |
| @@ -1200,6 +1200,7 @@ void ERR_load_X509_strings(void); | |||
| 1200 | #define X509_R_UNSUPPORTED_ALGORITHM 111 | 1200 | #define X509_R_UNSUPPORTED_ALGORITHM 111 |
| 1201 | #define X509_R_WRONG_LOOKUP_TYPE 112 | 1201 | #define X509_R_WRONG_LOOKUP_TYPE 112 |
| 1202 | #define X509_R_WRONG_TYPE 122 | 1202 | #define X509_R_WRONG_TYPE 122 |
| 1203 | #define X509_R_INVALID_VERSION 123 | ||
| 1203 | 1204 | ||
| 1204 | #ifdef __cplusplus | 1205 | #ifdef __cplusplus |
| 1205 | } | 1206 | } |
diff --git a/src/lib/libcrypto/x509/x509_err.c b/src/lib/libcrypto/x509/x509_err.c index 272d2894d8..84328df62a 100644 --- a/src/lib/libcrypto/x509/x509_err.c +++ b/src/lib/libcrypto/x509/x509_err.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509_err.c,v 1.19 2023/02/16 08:38:17 tb Exp $ */ | 1 | /* $OpenBSD: x509_err.c,v 1.20 2023/04/23 21:31:16 job Exp $ */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| @@ -104,6 +104,7 @@ static ERR_STRING_DATA X509_str_reasons[] = { | |||
| 104 | {ERR_REASON(X509_R_UNSUPPORTED_ALGORITHM), "unsupported algorithm"}, | 104 | {ERR_REASON(X509_R_UNSUPPORTED_ALGORITHM), "unsupported algorithm"}, |
| 105 | {ERR_REASON(X509_R_WRONG_LOOKUP_TYPE) , "wrong lookup type"}, | 105 | {ERR_REASON(X509_R_WRONG_LOOKUP_TYPE) , "wrong lookup type"}, |
| 106 | {ERR_REASON(X509_R_WRONG_TYPE) , "wrong type"}, | 106 | {ERR_REASON(X509_R_WRONG_TYPE) , "wrong type"}, |
| 107 | {ERR_REASON(X509_R_INVALID_VERSION) , "wrong x509 version"}, | ||
| 107 | {0, NULL} | 108 | {0, NULL} |
| 108 | }; | 109 | }; |
| 109 | 110 | ||
