summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ts/ts_rsp_sign.c
diff options
context:
space:
mode:
authorderaadt <>2014-05-27 21:29:43 +0000
committerderaadt <>2014-05-27 21:29:43 +0000
commit44b1ab0f6ed24380287a97a4709c7e4b7fd13d20 (patch)
tree9a5f8c41ac7aa5540ccc275fed226bd22d7adda7 /src/lib/libcrypto/ts/ts_rsp_sign.c
parentbaea9cffa20ddb15f869859f8369e86072e24b5f (diff)
downloadopenbsd-44b1ab0f6ed24380287a97a4709c7e4b7fd13d20.tar.gz
openbsd-44b1ab0f6ed24380287a97a4709c7e4b7fd13d20.tar.bz2
openbsd-44b1ab0f6ed24380287a97a4709c7e4b7fd13d20.zip
Fix a Y2038 problem, by conversion of long to time_t.
The TS_RESP_CTX_set_time_cb() API gets removed. Nothing in the greater ecosystem ever calls it. This API needs to be removed, because if anyone ever calls on a BE 32 system assuming long rather than time_t, it will be dangerously incompatible. ok miod guenther
Diffstat (limited to 'src/lib/libcrypto/ts/ts_rsp_sign.c')
-rw-r--r--src/lib/libcrypto/ts/ts_rsp_sign.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/src/lib/libcrypto/ts/ts_rsp_sign.c b/src/lib/libcrypto/ts/ts_rsp_sign.c
index a81d4eedf0..39d2efd3db 100644
--- a/src/lib/libcrypto/ts/ts_rsp_sign.c
+++ b/src/lib/libcrypto/ts/ts_rsp_sign.c
@@ -67,7 +67,7 @@
67/* Private function declarations. */ 67/* Private function declarations. */
68 68
69static ASN1_INTEGER *def_serial_cb(struct TS_resp_ctx *, void *); 69static ASN1_INTEGER *def_serial_cb(struct TS_resp_ctx *, void *);
70static int def_time_cb(struct TS_resp_ctx *, void *, long *sec, long *usec); 70static int def_time_cb(struct TS_resp_ctx *, void *, time_t *sec, long *usec);
71static int def_extension_cb(struct TS_resp_ctx *, X509_EXTENSION *, void *); 71static int def_extension_cb(struct TS_resp_ctx *, X509_EXTENSION *, void *);
72 72
73static void TS_RESP_CTX_init(TS_RESP_CTX *ctx); 73static void TS_RESP_CTX_init(TS_RESP_CTX *ctx);
@@ -86,7 +86,7 @@ static int TS_TST_INFO_content_new(PKCS7 *p7);
86static int ESS_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc); 86static int ESS_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc);
87 87
88static ASN1_GENERALIZEDTIME *TS_RESP_set_genTime_with_precision( 88static ASN1_GENERALIZEDTIME *TS_RESP_set_genTime_with_precision(
89 ASN1_GENERALIZEDTIME *, long, long, unsigned); 89 ASN1_GENERALIZEDTIME *, time_t, long, unsigned);
90 90
91/* Default callbacks for response generation. */ 91/* Default callbacks for response generation. */
92 92
@@ -110,7 +110,7 @@ err:
110 110
111/* Use the gettimeofday function call. */ 111/* Use the gettimeofday function call. */
112static int 112static int
113def_time_cb(struct TS_resp_ctx *ctx, void *data, long *sec, long *usec) 113def_time_cb(struct TS_resp_ctx *ctx, void *data, time_t *sec, long *usec)
114{ 114{
115 struct timeval tv; 115 struct timeval tv;
116 116
@@ -321,13 +321,6 @@ TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data)
321} 321}
322 322
323void 323void
324TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data)
325{
326 ctx->time_cb = cb;
327 ctx->time_cb_data = data;
328}
329
330void
331TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, TS_extension_cb cb, void *data) 324TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, TS_extension_cb cb, void *data)
332{ 325{
333 ctx->extension_cb = cb; 326 ctx->extension_cb = cb;
@@ -607,7 +600,8 @@ TS_RESP_create_tst_info(TS_RESP_CTX *ctx, ASN1_OBJECT *policy)
607 TS_TST_INFO *tst_info = NULL; 600 TS_TST_INFO *tst_info = NULL;
608 ASN1_INTEGER *serial = NULL; 601 ASN1_INTEGER *serial = NULL;
609 ASN1_GENERALIZEDTIME *asn1_time = NULL; 602 ASN1_GENERALIZEDTIME *asn1_time = NULL;
610 long sec, usec; 603 time_t sec;
604 long usec;
611 TS_ACCURACY *accuracy = NULL; 605 TS_ACCURACY *accuracy = NULL;
612 const ASN1_INTEGER *nonce; 606 const ASN1_INTEGER *nonce;
613 GENERAL_NAME *tsa_name = NULL; 607 GENERAL_NAME *tsa_name = NULL;
@@ -959,9 +953,8 @@ err:
959 953
960static ASN1_GENERALIZEDTIME * 954static ASN1_GENERALIZEDTIME *
961TS_RESP_set_genTime_with_precision(ASN1_GENERALIZEDTIME *asn1_time, 955TS_RESP_set_genTime_with_precision(ASN1_GENERALIZEDTIME *asn1_time,
962 long sec, long usec, unsigned precision) 956 time_t sec, long usec, unsigned precision)
963{ 957{
964 time_t time_sec = (time_t) sec;
965 struct tm *tm = NULL; 958 struct tm *tm = NULL;
966 char genTime_str[17 + TS_MAX_CLOCK_PRECISION_DIGITS]; 959 char genTime_str[17 + TS_MAX_CLOCK_PRECISION_DIGITS];
967 char usecstr[TS_MAX_CLOCK_PRECISION_DIGITS + 2]; 960 char usecstr[TS_MAX_CLOCK_PRECISION_DIGITS + 2];
@@ -971,7 +964,7 @@ TS_RESP_set_genTime_with_precision(ASN1_GENERALIZEDTIME *asn1_time,
971 if (precision > TS_MAX_CLOCK_PRECISION_DIGITS) 964 if (precision > TS_MAX_CLOCK_PRECISION_DIGITS)
972 goto err; 965 goto err;
973 966
974 if (!(tm = gmtime(&time_sec))) 967 if (!(tm = gmtime(&sec)))
975 goto err; 968 goto err;
976 969
977 /* 970 /*