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
);
18 mono_btls_free (void *data
)
24 mono_btls_util_asn1_time_to_ticks (ASN1_TIME
*time
)
26 ASN1_GENERALIZEDTIME
*gtime
;
31 memset (&tm
, 0, sizeof (tm
));
33 gtime
= ASN1_TIME_to_generalizedtime (time
, NULL
);
34 ret
= asn1_generalizedtime_to_tm (&tm
, gtime
);
35 ASN1_GENERALIZEDTIME_free (gtime
);
37 /* FIXME: check the return value in managed code */
42 epoch
= btls_timegm64 (&tm
);
47 // Copied from crypto/bio/printf.c, takes va_list
49 mono_btls_debug_printf (BIO
*bio
, const char *format
, va_list args
)
51 char buf
[256], *out
, out_malloced
= 0;
54 out_len
= vsnprintf (buf
, sizeof(buf
), format
, args
);
59 if ((size_t) out_len
>= sizeof(buf
)) {
60 const int requested_len
= out_len
;
61 /* The output was truncated. Note that vsnprintf's return value
62 * does not include a trailing NUL, but the buffer must be sized
64 out
= OPENSSL_malloc (requested_len
+ 1);
67 OPENSSL_PUT_ERROR(BIO
, ERR_R_MALLOC_FAILURE
);
70 out_len
= vsnprintf (out
, requested_len
+ 1, format
, args
);
71 assert(out_len
== requested_len
);
76 ret
= BIO_write(bio
, out
, out_len
);