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
);
37 epoch
= btls_timegm64 (&tm
);
42 // Copied from crypto/bio/printf.c, takes va_list
44 mono_btls_debug_printf (BIO
*bio
, const char *format
, va_list args
)
46 char buf
[256], *out
, out_malloced
= 0;
49 out_len
= vsnprintf (buf
, sizeof(buf
), format
, args
);
54 if ((size_t) out_len
>= sizeof(buf
)) {
55 const int requested_len
= out_len
;
56 /* The output was truncated. Note that vsnprintf's return value
57 * does not include a trailing NUL, but the buffer must be sized
59 out
= OPENSSL_malloc (requested_len
+ 1);
62 OPENSSL_PUT_ERROR(BIO
, ERR_R_MALLOC_FAILURE
);
65 out_len
= vsnprintf (out
, requested_len
+ 1, format
, args
);
66 assert(out_len
== requested_len
);
71 ret
= BIO_write(bio
, out
, out_len
);