summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeck <>2020-09-15 11:55:14 +0000
committerbeck <>2020-09-15 11:55:14 +0000
commit4abed603e66e229dd22adefec8520b9a472ed533 (patch)
tree8192c077f2ef8442fec646b97bcbedf8d15e04aa
parentae829e60e2e59d44b8414fe32e951de15367a3f8 (diff)
downloadopenbsd-4abed603e66e229dd22adefec8520b9a472ed533.tar.gz
openbsd-4abed603e66e229dd22adefec8520b9a472ed533.tar.bz2
openbsd-4abed603e66e229dd22adefec8520b9a472ed533.zip
Deduplicate the time validation code between the legacy and new
verification code. ok jsing@
-rw-r--r--src/lib/libcrypto/x509/x509_internal.h5
-rw-r--r--src/lib/libcrypto/x509/x509_verify.c4
-rw-r--r--src/lib/libcrypto/x509/x509_vfy.c26
3 files changed, 8 insertions, 27 deletions
diff --git a/src/lib/libcrypto/x509/x509_internal.h b/src/lib/libcrypto/x509/x509_internal.h
index ced6b306e5..9d69055afa 100644
--- a/src/lib/libcrypto/x509/x509_internal.h
+++ b/src/lib/libcrypto/x509/x509_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_internal.h,v 1.2 2020/09/13 15:06:17 beck Exp $ */ 1/* $OpenBSD: x509_internal.h,v 1.3 2020/09/15 11:55:14 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -87,6 +87,9 @@ int x509_vfy_check_trust(X509_STORE_CTX *ctx);
87int x509_vfy_check_chain_extensions(X509_STORE_CTX *ctx); 87int x509_vfy_check_chain_extensions(X509_STORE_CTX *ctx);
88void x509v3_cache_extensions(X509 *x); 88void x509v3_cache_extensions(X509 *x);
89 89
90int x509_verify_asn1_time_to_tm(const ASN1_TIME *atime, struct tm *tm,
91 int notafter);
92
90struct x509_verify_ctx *x509_verify_ctx_new_from_xsc(X509_STORE_CTX *xsc, 93struct x509_verify_ctx *x509_verify_ctx_new_from_xsc(X509_STORE_CTX *xsc,
91 STACK_OF(X509) *roots); 94 STACK_OF(X509) *roots);
92 95
diff --git a/src/lib/libcrypto/x509/x509_verify.c b/src/lib/libcrypto/x509/x509_verify.c
index 431f5ab1bc..c3280774f9 100644
--- a/src/lib/libcrypto/x509/x509_verify.c
+++ b/src/lib/libcrypto/x509/x509_verify.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_verify.c,v 1.6 2020/09/14 12:33:51 beck Exp $ */ 1/* $OpenBSD: x509_verify.c,v 1.7 2020/09/15 11:55:14 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -484,7 +484,7 @@ x509_verify_set_check_time(struct x509_verify_ctx *ctx) {
484 return 1; 484 return 1;
485} 485}
486 486
487static int 487int
488x509_verify_asn1_time_to_tm(const ASN1_TIME *atime, struct tm *tm, int notafter) 488x509_verify_asn1_time_to_tm(const ASN1_TIME *atime, struct tm *tm, int notafter)
489{ 489{
490 int type; 490 int type;
diff --git a/src/lib/libcrypto/x509/x509_vfy.c b/src/lib/libcrypto/x509/x509_vfy.c
index 8a616b6bc2..99a699f99e 100644
--- a/src/lib/libcrypto/x509/x509_vfy.c
+++ b/src/lib/libcrypto/x509/x509_vfy.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_vfy.c,v 1.78 2020/09/14 09:09:08 beck Exp $ */ 1/* $OpenBSD: x509_vfy.c,v 1.79 2020/09/15 11:55:14 beck 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 *
@@ -2004,7 +2004,6 @@ X509_cmp_time_internal(const ASN1_TIME *ctm, time_t *cmp_time, int clamp_notafte
2004 time_t compare; 2004 time_t compare;
2005 struct tm tm1, tm2; 2005 struct tm tm1, tm2;
2006 int ret = 0; 2006 int ret = 0;
2007 int type;
2008 2007
2009 if (cmp_time == NULL) 2008 if (cmp_time == NULL)
2010 compare = time(NULL); 2009 compare = time(NULL);
@@ -2013,30 +2012,9 @@ X509_cmp_time_internal(const ASN1_TIME *ctm, time_t *cmp_time, int clamp_notafte
2013 2012
2014 memset(&tm1, 0, sizeof(tm1)); 2013 memset(&tm1, 0, sizeof(tm1));
2015 2014
2016 type = ASN1_time_parse(ctm->data, ctm->length, &tm1, ctm->type); 2015 if (!x509_verify_asn1_time_to_tm(ctm, &tm1, clamp_notafter))
2017 if (type == -1)
2018 goto out; /* invalid time */ 2016 goto out; /* invalid time */
2019 2017
2020 /* RFC 5280 section 4.1.2.5 */
2021 if (tm1.tm_year < 150 && type != V_ASN1_UTCTIME)
2022 goto out;
2023 if (tm1.tm_year >= 150 && type != V_ASN1_GENERALIZEDTIME)
2024 goto out;
2025
2026 if (clamp_notafter) {
2027 /* Allow for completely broken operating systems. */
2028 if (!ASN1_time_tm_clamp_notafter(&tm1))
2029 goto out;
2030 }
2031
2032 /*
2033 * Defensively fail if the time string is not representable as
2034 * a time_t. A time_t must be sane if you care about times after
2035 * Jan 19 2038.
2036 */
2037 if (timegm(&tm1) == -1)
2038 goto out;
2039
2040 if (gmtime_r(&compare, &tm2) == NULL) 2018 if (gmtime_r(&compare, &tm2) == NULL)
2041 goto out; 2019 goto out;
2042 2020