summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshridhar kalavagunta <coolshrid@hotmail.com>2024-01-11 17:01:23 -0600
committerTomas Mraz <tomas@openssl.org>2024-05-07 12:07:49 +0200
commit57bb112c07116d1cdbf5bc8562ebb3e7990f291c (patch)
tree05e04e4c4a63d52c791dcfc324c7a19203fd4553
parent69bd5e4fff8ac9bf4dc3ed6fd87b5a5858edbb01 (diff)
Move ossl_asn1_string_to_time_t() to libtestutil
It is not used anywhere else than in tests. Fixes #22965 Reviewed-by: Hugo Landau <hlandau@openssl.org> Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/23269)
-rw-r--r--crypto/asn1/a_time.c75
-rw-r--r--include/crypto/asn1.h1
-rw-r--r--test/asn1_time_test.c4
-rw-r--r--test/build.info2
-rw-r--r--test/ca_internals_test.c2
-rw-r--r--test/testutil.h2
-rw-r--r--test/testutil/helper.c90
7 files changed, 95 insertions, 81 deletions
diff --git a/crypto/asn1/a_time.c b/crypto/asn1/a_time.c
index 96ee63d310..7dfbc5faab 100644
--- a/crypto/asn1/a_time.c
+++ b/crypto/asn1/a_time.c
@@ -591,78 +591,3 @@ int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b)
return -1;
return 0;
}
-
-/*
- * tweak for Windows
- */
-#ifdef WIN32
-# define timezone _timezone
-#endif
-
-#if defined(__FreeBSD__) || defined(__wasi__)
-# define USE_TIMEGM
-#endif
-
-time_t ossl_asn1_string_to_time_t(const char *asn1_string)
-{
- ASN1_TIME *timestamp_asn1 = NULL;
- struct tm *timestamp_tm = NULL;
-#if defined(__DJGPP__)
- char *tz = NULL;
-#elif !defined(USE_TIMEGM)
- time_t timestamp_local;
-#endif
- time_t timestamp_utc;
-
- timestamp_asn1 = ASN1_TIME_new();
- if (!ASN1_TIME_set_string(timestamp_asn1, asn1_string))
- {
- ASN1_TIME_free(timestamp_asn1);
- return -1;
- }
-
- timestamp_tm = OPENSSL_malloc(sizeof(*timestamp_tm));
- if (timestamp_tm == NULL) {
- ASN1_TIME_free(timestamp_asn1);
- return -1;
- }
- if (!(ASN1_TIME_to_tm(timestamp_asn1, timestamp_tm))) {
- OPENSSL_free(timestamp_tm);
- ASN1_TIME_free(timestamp_asn1);
- return -1;
- }
- ASN1_TIME_free(timestamp_asn1);
-
-#if defined(__DJGPP__)
- /*
- * This is NOT thread-safe. Do not use this method for platforms other
- * than djgpp.
- */
- tz = getenv("TZ");
- if (tz != NULL) {
- tz = OPENSSL_strdup(tz);
- if (tz == NULL) {
- OPENSSL_free(timestamp_tm);
- return -1;
- }
- }
- setenv("TZ", "UTC", 1);
-
- timestamp_utc = mktime(timestamp_tm);
-
- if (tz != NULL) {
- setenv("TZ", tz, 1);
- OPENSSL_free(tz);
- } else {
- unsetenv("TZ");
- }
-#elif defined(USE_TIMEGM)
- timestamp_utc = timegm(timestamp_tm);
-#else
- timestamp_local = mktime(timestamp_tm);
- timestamp_utc = timestamp_local - timezone;
-#endif
- OPENSSL_free(timestamp_tm);
-
- return timestamp_utc;
-}
diff --git a/include/crypto/asn1.h b/include/crypto/asn1.h
index 36af1d7689..b5683f007c 100644
--- a/include/crypto/asn1.h
+++ b/include/crypto/asn1.h
@@ -147,7 +147,6 @@ EVP_PKEY *ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a,
OSSL_LIB_CTX *libctx, const char *propq);
X509_ALGOR *ossl_X509_ALGOR_from_nid(int nid, int ptype, void *pval);
-time_t ossl_asn1_string_to_time_t(const char *asn1_string);
void ossl_asn1_string_set_bits_left(ASN1_STRING *str, unsigned int num);
#endif /* ndef OSSL_CRYPTO_ASN1_H */
diff --git a/test/asn1_time_test.c b/test/asn1_time_test.c
index 7736fd3416..32bc4ff2ad 100644
--- a/test/asn1_time_test.c
+++ b/test/asn1_time_test.c
@@ -434,10 +434,10 @@ static int convert_asn1_to_time_t(int idx)
{
time_t testdateutc;
- testdateutc = ossl_asn1_string_to_time_t(asn1_to_utc[idx].input);
+ testdateutc = test_asn1_string_to_time_t(asn1_to_utc[idx].input);
if (!TEST_time_t_eq(testdateutc, asn1_to_utc[idx].expected)) {
- TEST_info("ossl_asn1_string_to_time_t (%s) failed: expected %lli, got %lli\n",
+ TEST_info("test_asn1_string_to_time_t (%s) failed: expected %lli, got %lli\n",
asn1_to_utc[idx].input,
(long long int)asn1_to_utc[idx].expected,
(long long int)testdateutc);
diff --git a/test/build.info b/test/build.info
index 9cbca834c8..e2b09ae965 100644
--- a/test/build.info
+++ b/test/build.info
@@ -26,7 +26,7 @@ IF[{- !$disabled{tests} -}]
testutil/format_output.c testutil/load.c testutil/fake_random.c \
testutil/test_cleanup.c testutil/main.c testutil/testutil_init.c \
testutil/options.c testutil/test_options.c testutil/provider.c \
- testutil/apps_shims.c testutil/random.c $LIBAPPSSRC
+ testutil/apps_shims.c testutil/random.c testutil/helper.c $LIBAPPSSRC
INCLUDE[libtestutil.a]=../include ../apps/include ..
DEPEND[libtestutil.a]=../libcrypto
diff --git a/test/ca_internals_test.c b/test/ca_internals_test.c
index 24f7ba3884..776996b4ac 100644
--- a/test/ca_internals_test.c
+++ b/test/ca_internals_test.c
@@ -47,7 +47,7 @@ static int test_do_updatedb(void)
}
testdate = test_get_argument(2);
- testdateutc = ossl_asn1_string_to_time_t(testdate);
+ testdateutc = test_asn1_string_to_time_t(testdate);
if (TEST_time_t_lt(testdateutc, 0)) {
return 0;
}
diff --git a/test/testutil.h b/test/testutil.h
index a247f55ed6..35fbdab84e 100644
--- a/test/testutil.h
+++ b/test/testutil.h
@@ -648,5 +648,5 @@ X509 *load_cert_pem(const char *file, OSSL_LIB_CTX *libctx);
X509 *load_cert_der(const unsigned char *bytes, int len);
STACK_OF(X509) *load_certs_pem(const char *file);
X509_REQ *load_csr_der(const char *file, OSSL_LIB_CTX *libctx);
-
+time_t test_asn1_string_to_time_t(const char *asn1_string);
#endif /* OSSL_TESTUTIL_H */
diff --git a/test/testutil/helper.c b/test/testutil/helper.c
new file mode 100644
index 0000000000..8da42b0fac
--- /dev/null
+++ b/test/testutil/helper.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <time.h>
+#include <openssl/asn1t.h>
+#include "../testutil.h"
+
+/*
+ * tweak for Windows
+ */
+#ifdef WIN32
+# define timezone _timezone
+#endif
+
+#if defined(__FreeBSD__) || defined(__wasi__)
+# define USE_TIMEGM
+#endif
+
+time_t test_asn1_string_to_time_t(const char *asn1_string)
+{
+ ASN1_TIME *timestamp_asn1 = NULL;
+ struct tm *timestamp_tm = NULL;
+#if defined(__DJGPP__)
+ char *tz = NULL;
+#elif !defined(USE_TIMEGM)
+ time_t timestamp_local;
+#endif
+ time_t timestamp_utc;
+
+ timestamp_asn1 = ASN1_TIME_new();
+ if(timestamp_asn1 == NULL)
+ return -1;
+ if (!ASN1_TIME_set_string(timestamp_asn1, asn1_string))
+ {
+ ASN1_TIME_free(timestamp_asn1);
+ return -1;
+ }
+
+ timestamp_tm = OPENSSL_malloc(sizeof(*timestamp_tm));
+ if (timestamp_tm == NULL) {
+ ASN1_TIME_free(timestamp_asn1);
+ return -1;
+ }
+ if (!(ASN1_TIME_to_tm(timestamp_asn1, timestamp_tm))) {
+ OPENSSL_free(timestamp_tm);
+ ASN1_TIME_free(timestamp_asn1);
+ return -1;
+ }
+ ASN1_TIME_free(timestamp_asn1);
+
+#if defined(__DJGPP__)
+ /*
+ * This is NOT thread-safe. Do not use this method for platforms other
+ * than djgpp.
+ */
+ tz = getenv("TZ");
+ if (tz != NULL) {
+ tz = OPENSSL_strdup(tz);
+ if (tz == NULL) {
+ OPENSSL_free(timestamp_tm);
+ return -1;
+ }
+ }
+ setenv("TZ", "UTC", 1);
+
+ timestamp_utc = mktime(timestamp_tm);
+
+ if (tz != NULL) {
+ setenv("TZ", tz, 1);
+ OPENSSL_free(tz);
+ } else {
+ unsetenv("TZ");
+ }
+#elif defined(USE_TIMEGM)
+ timestamp_utc = timegm(timestamp_tm);
+#else
+ timestamp_local = mktime(timestamp_tm);
+ timestamp_utc = timestamp_local - timezone;
+#endif
+ OPENSSL_free(timestamp_tm);
+
+ return timestamp_utc;
+}