From cdf63a3736a91a534bd3bc952b1dc3ef714604dd Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Thu, 11 Mar 2021 14:43:04 -0500 Subject: Add X509 version constants. The X509 version APIs return the numerical values of the version numbers, which are one off from the names. This is a bit confusing. Where they don't get it wrong (accidentally making an "X509v4" certificate), callers tend to try commenting every call site to explain the mismatch, including in OpenSSL itself. Define constants for these values, so code can be self-documenting and callers are nudged towards the right values. Reviewed-by: Matt Caswell Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/14549) --- crypto/x509/t_crl.c | 2 +- crypto/x509/t_req.c | 2 +- crypto/x509/t_x509.c | 2 +- crypto/x509/v3_purp.c | 2 +- crypto/x509/x509_cmp.c | 4 ++-- crypto/x509/x509_vfy.c | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) (limited to 'crypto') diff --git a/crypto/x509/t_crl.c b/crypto/x509/t_crl.c index b9bffbb0c6..48bcf5bb44 100644 --- a/crypto/x509/t_crl.c +++ b/crypto/x509/t_crl.c @@ -48,7 +48,7 @@ int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag) BIO_printf(out, "Certificate Revocation List (CRL):\n"); l = X509_CRL_get_version(x); - if (l >= 0 && l <= 1) + if (l >= X509_CRL_VERSION_1 && l <= X509_CRL_VERSION_2) BIO_printf(out, "%8sVersion %ld (0x%lx)\n", "", l + 1, (unsigned long)l); else BIO_printf(out, "%8sVersion unknown (%ld)\n", "", l); diff --git a/crypto/x509/t_req.c b/crypto/x509/t_req.c index 29479b0886..095c165100 100644 --- a/crypto/x509/t_req.c +++ b/crypto/x509/t_req.c @@ -60,7 +60,7 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, } if (!(cflag & X509_FLAG_NO_VERSION)) { l = X509_REQ_get_version(x); - if (l >= 0 && l <= 2) { + if (l == X509_REQ_VERSION_1) { if (BIO_printf(bp, "%8sVersion: %ld (0x%lx)\n", "", l + 1, (unsigned long)l) <= 0) goto err; } else { diff --git a/crypto/x509/t_x509.c b/crypto/x509/t_x509.c index 78d4452156..bdfb4cb08b 100644 --- a/crypto/x509/t_x509.c +++ b/crypto/x509/t_x509.c @@ -71,7 +71,7 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, } if (!(cflag & X509_FLAG_NO_VERSION)) { l = X509_get_version(x); - if (l >= 0 && l <= 2) { + if (l >= X509_VERSION_1 && l <= X509_VERSION_3) { if (BIO_printf(bp, "%8sVersion: %ld (0x%lx)\n", "", l + 1, (unsigned long)l) <= 0) goto err; } else { diff --git a/crypto/x509/v3_purp.c b/crypto/x509/v3_purp.c index 5b13fd7445..ede556d8ef 100644 --- a/crypto/x509/v3_purp.c +++ b/crypto/x509/v3_purp.c @@ -425,7 +425,7 @@ int ossl_x509v3_cache_extensions(X509 *x) ERR_set_mark(); /* V1 should mean no extensions ... */ - if (X509_get_version(x) == 0) + if (X509_get_version(x) == X509_VERSION_1) x->ex_flags |= EXFLAG_V1; /* Handle basic constraints */ diff --git a/crypto/x509/x509_cmp.c b/crypto/x509/x509_cmp.c index 0cc5ed7f5f..1c1a5e6a27 100644 --- a/crypto/x509/x509_cmp.c +++ b/crypto/x509/x509_cmp.c @@ -486,7 +486,7 @@ int X509_chain_check_suiteb(int *perror_depth, X509 *x, STACK_OF(X509) *chain, if (chain == NULL) return check_suite_b(pk, -1, &tflags); - if (X509_get_version(x) != 2) { + if (X509_get_version(x) != X509_VERSION_3) { rv = X509_V_ERR_SUITE_B_INVALID_VERSION; /* Correct error depth */ i = 0; @@ -503,7 +503,7 @@ int X509_chain_check_suiteb(int *perror_depth, X509 *x, STACK_OF(X509) *chain, for (; i < sk_X509_num(chain); i++) { sign_nid = X509_get_signature_nid(x); x = sk_X509_value(chain, i); - if (X509_get_version(x) != 2) { + if (X509_get_version(x) != X509_VERSION_3) { rv = X509_V_ERR_SUITE_B_INVALID_VERSION; goto end; } diff --git a/crypto/x509/x509_vfy.c b/crypto/x509/x509_vfy.c index cb541084df..4e6ce11f4e 100644 --- a/crypto/x509/x509_vfy.c +++ b/crypto/x509/x509_vfy.c @@ -562,7 +562,7 @@ static int check_extensions(X509_STORE_CTX *ctx) CB_FAIL_IF(x->skid != NULL && (x->ex_flags & EXFLAG_SKID_CRITICAL) != 0, ctx, x, i, X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL); - if (X509_get_version(x) >= 2) { /* at least X.509v3 */ + if (X509_get_version(x) >= X509_VERSION_3) { /* Check AKID presence acc. to RFC 5280 section 4.2.1.1 */ CB_FAIL_IF(i + 1 < num /* * this means not last cert in chain, @@ -2053,7 +2053,7 @@ X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, } /* Create new CRL */ crl = X509_CRL_new_ex(base->libctx, base->propq); - if (crl == NULL || !X509_CRL_set_version(crl, 1)) + if (crl == NULL || !X509_CRL_set_version(crl, X509_CRL_VERSION_2)) goto memerr; /* Set issuer name */ if (!X509_CRL_set_issuer_name(crl, X509_CRL_get_issuer(newer))) -- cgit v1.2.3