5 // Created by Martin Baulig on 3/23/16.
6 // Copyright © 2016 Xamarin. All rights reserved.
13 extern int asn1_generalizedtime_to_tm (struct tm *tm, const ASN1_GENERALIZEDTIME *d);
15 extern int64_t btls_timegm64 (const struct tm *date);
19 mono_btls_free (void *data)
25 mono_btls_util_asn1_time_to_ticks (ASN1_TIME *time)
27 ASN1_GENERALIZEDTIME *gtime;
32 memset (&tm, 0, sizeof (tm));
34 gtime = ASN1_TIME_to_generalizedtime (time, NULL);
35 ret = asn1_generalizedtime_to_tm (&tm, gtime);
36 ASN1_GENERALIZEDTIME_free (gtime);
38 /* FIXME: check the return value in managed code */
43 epoch = btls_timegm64 (&tm);
48 // Copied from crypto/bio/printf.c, takes va_list
50 mono_btls_debug_printf (BIO *bio, const char *format, va_list args)
52 char buf[256], *out, out_malloced = 0;
55 out_len = vsnprintf (buf, sizeof(buf), format, args);
60 if ((size_t) out_len >= sizeof(buf)) {
61 const int requested_len = out_len;
62 /* The output was truncated. Note that vsnprintf's return value
63 * does not include a trailing NUL, but the buffer must be sized
65 out = OPENSSL_malloc (requested_len + 1);
68 OPENSSL_PUT_ERROR(BIO, ERR_R_MALLOC_FAILURE);
71 out_len = vsnprintf (out, requested_len + 1, format, args);
72 assert(out_len == requested_len);
77 ret = BIO_write(bio, out, out_len);