From 7aec17e1404d8c362311ce50161a042685fae418 Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Tue, 27 Dec 2022 14:35:11 +0800 Subject: [PATCH] Fix ASN.1 Time --- src/asn1.c | 7 +------ src/x509_cer.c | 27 ++++++++++----------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/asn1.c b/src/asn1.c index 60999b6e..e103e592 100644 --- a/src/asn1.c +++ b/src/asn1.c @@ -457,7 +457,6 @@ int asn1_integer_to_der_ex(int tag, const uint8_t *a, size_t alen, uint8_t **out int asn1_int_to_der_ex(int tag, int a, uint8_t **out, size_t *outlen) { - int i; uint8_t buf[4] = {0}; size_t len = 0; @@ -915,7 +914,7 @@ int asn1_time_to_str(int utc_time, time_t timestamp, char *str) p[1] += year % 10; p[2] += month / 10; p[3] += month % 10; - p[4] += day / 10; + p[4] += (int)day / 10; p[5] += day % 10; p[6] += hour / 10; p[7] += hour % 10; @@ -960,7 +959,6 @@ int asn1_utc_time_to_der_ex(int tag, time_t a, uint8_t **out, size_t *outlen) int asn1_generalized_time_to_der_ex(int tag, time_t a, uint8_t **out, size_t *outlen) { - struct tm tm_val; char buf[ASN1_GENERALIZED_TIME_LEN + 1] = {0}; int utc_time = 0; @@ -1280,10 +1278,8 @@ int asn1_utc_time_from_der_ex(int tag, time_t *t, const uint8_t **pin, size_t *p { const uint8_t *in = *pin; size_t inlen = *pinlen; - struct tm tm_val; char buf[sizeof("YYYYMMDDHHMMSSZ")] = {0}; size_t len; - int year; if (!t || !pin || !(*pin) || !pinlen) { @@ -1318,7 +1314,6 @@ int asn1_generalized_time_from_der_ex(int tag, time_t *t, const uint8_t **pin, s int ret; const uint8_t *in = *pin; size_t inlen = *pinlen; - struct tm tm_val; char buf[sizeof("YYYYMMDDHHMMSS+HHMM")] = {0}; size_t len; diff --git a/src/x509_cer.c b/src/x509_cer.c index a81d726d..af0712df 100644 --- a/src/x509_cer.c +++ b/src/x509_cer.c @@ -25,10 +25,6 @@ #include #include -#ifdef WIN32 -#include "u_time.h" -#endif - const char *x509_version_name(int version) { @@ -100,13 +96,16 @@ int x509_time_to_der(time_t tv, uint8_t **out, size_t *outlen) { int ret; struct tm tm_val; + static time_t utc_time_max = 0; -#ifdef WIN32 - GMSSL_gmtime(&tv, &tm_val); -#else - gmtime_r(&tv, &tm_val); -#endif - if (tm_val.tm_year < 2050 - 1900) { + if (!utc_time_max) { + if (asn1_time_from_str(0, &utc_time_max, "20500101000000Z") != 1) { + error_print(); + return -1; + } + } + + if (tv < utc_time_max) { if ((ret = asn1_utc_time_to_der(tv, out, outlen)) != 1) { if (ret < 0) error_print(); } @@ -144,13 +143,7 @@ int x509_validity_add_days(time_t *not_after, time_t not_before, int days) error_print(); return -1; } -#ifdef WIN32 - GMSSL_gmtime(¬_before, &tm_val); -#else - gmtime_r(¬_before, &tm_val); -#endif - tm_val.tm_mday += days; - *not_after = mktime(&tm_val); + *not_after = not_before + (time_t)days * 24 * 60 * 60; return 1; }