mirror of
https://github.com/openssl/openssl.git
synced 2024-12-15 06:01:37 +08:00
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)
This commit is contained in:
parent
69bd5e4fff
commit
57bb112c07
@ -591,78 +591,3 @@ int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b)
|
|||||||
return -1;
|
return -1;
|
||||||
return 0;
|
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;
|
|
||||||
}
|
|
||||||
|
@ -147,7 +147,6 @@ EVP_PKEY *ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a,
|
|||||||
OSSL_LIB_CTX *libctx, const char *propq);
|
OSSL_LIB_CTX *libctx, const char *propq);
|
||||||
X509_ALGOR *ossl_X509_ALGOR_from_nid(int nid, int ptype, void *pval);
|
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);
|
void ossl_asn1_string_set_bits_left(ASN1_STRING *str, unsigned int num);
|
||||||
|
|
||||||
#endif /* ndef OSSL_CRYPTO_ASN1_H */
|
#endif /* ndef OSSL_CRYPTO_ASN1_H */
|
||||||
|
@ -434,10 +434,10 @@ static int convert_asn1_to_time_t(int idx)
|
|||||||
{
|
{
|
||||||
time_t testdateutc;
|
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)) {
|
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,
|
asn1_to_utc[idx].input,
|
||||||
(long long int)asn1_to_utc[idx].expected,
|
(long long int)asn1_to_utc[idx].expected,
|
||||||
(long long int)testdateutc);
|
(long long int)testdateutc);
|
||||||
|
@ -26,7 +26,7 @@ IF[{- !$disabled{tests} -}]
|
|||||||
testutil/format_output.c testutil/load.c testutil/fake_random.c \
|
testutil/format_output.c testutil/load.c testutil/fake_random.c \
|
||||||
testutil/test_cleanup.c testutil/main.c testutil/testutil_init.c \
|
testutil/test_cleanup.c testutil/main.c testutil/testutil_init.c \
|
||||||
testutil/options.c testutil/test_options.c testutil/provider.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 ..
|
INCLUDE[libtestutil.a]=../include ../apps/include ..
|
||||||
DEPEND[libtestutil.a]=../libcrypto
|
DEPEND[libtestutil.a]=../libcrypto
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ static int test_do_updatedb(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
testdate = test_get_argument(2);
|
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)) {
|
if (TEST_time_t_lt(testdateutc, 0)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
X509 *load_cert_der(const unsigned char *bytes, int len);
|
||||||
STACK_OF(X509) *load_certs_pem(const char *file);
|
STACK_OF(X509) *load_certs_pem(const char *file);
|
||||||
X509_REQ *load_csr_der(const char *file, OSSL_LIB_CTX *libctx);
|
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 */
|
#endif /* OSSL_TESTUTIL_H */
|
||||||
|
90
test/testutil/helper.c
Normal file
90
test/testutil/helper.c
Normal file
@ -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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user