ASN1_TIME_set.3 revision 306195
Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)

Standard preamble:
========================================================================
..
..
.. Set up some character translations and predefined strings. \*(-- will
give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
double quote, and \*(R" will give a right double quote. \*(C+ will
give a nicer C++. Capital omega is used to do unbreakable dashes and
therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
nothing in troff, for use with C<>.
.tr \(*W- . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\}
Escape single quotes in literal strings from groff's Unicode transform.

If the F register is turned on, we'll generate index entries on stderr for
titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
entries marked with X<> in POD. Of course, you'll have to process the
output yourself in some meaningful fashion.

Avoid warning from groff about undefined register 'F'.
.. .nr rF 0 . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF
Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] .\} . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents . \" corrections for vroff . \" for low resolution devices (crt and lpr) \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} ========================================================================

Title "ASN1_TIME_set 3"
ASN1_TIME_set 3 "2016-09-22" "1.0.2i" "OpenSSL"
For nroff, turn off justification. Always turn off hyphenation; it makes
way too many mistakes in technical documents.
"NAME"
ASN1_TIME_set, ASN1_TIME_adj, ASN1_TIME_check, ASN1_TIME_set_string, ASN1_TIME_print, ASN1_TIME_diff - ASN.1 Time functions.
"SYNOPSIS"
Header "SYNOPSIS" .Vb 6 ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day, long offset_sec); int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); int ASN1_TIME_check(const ASN1_TIME *t); int ASN1_TIME_print(BIO *b, const ASN1_TIME *s); \& int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); .Ve
"DESCRIPTION"
Header "DESCRIPTION" The function ASN1_TIME_set() sets the \s-1ASN1_TIME\s0 structure s to the time represented by the time_t value t. If s is \s-1NULL\s0 a new \s-1ASN1_TIME\s0 structure is allocated and returned.

\fIASN1_TIME_adj() sets the \s-1ASN1_TIME\s0 structure s to the time represented by the time offset_day and offset_sec after the time_t value t. The values of offset_day or offset_sec can be negative to set a time before t. The offset_sec value can also exceed the number of seconds in a day. If s is \s-1NULL\s0 a new \s-1ASN1_TIME\s0 structure is allocated and returned.

\fIASN1_TIME_set_string() sets \s-1ASN1_TIME\s0 structure s to the time represented by string str which must be in appropriate \s-1ASN.1\s0 time format (for example \s-1YYMMDDHHMMSSZ\s0 or \s-1YYYYMMDDHHMMSSZ\s0).

\fIASN1_TIME_check() checks the syntax of \s-1ASN1_TIME\s0 structure s.

\fIASN1_TIME_print() prints out the time s to \s-1BIO \s0b in human readable format. It will be of the format \s-1MMM DD HH:MM:SS YYYY\s0 [\s-1GMT\s0], for example \*(L"Feb 3 00:55:52 2015 \s-1GMT\*(R"\s0 it does not include a newline. If the time structure has invalid format it prints out \*(L"Bad time value\*(R" and returns an error.

\fIASN1_TIME_diff() sets *pday and *psec to the time difference between \fBfrom and to. If to represents a time later than from then one or both (depending on the time difference) of *pday and *psec will be positive. If to represents a time earlier than from then one or both of *pday and *psec will be negative. If to and from represent the same time then *pday and *psec will both be zero. If both *pday and *psec are non-zero they will always have the same sign. The value of *psec will always be less than the number of seconds in a day. If from or to is \s-1NULL\s0 the current time is used.

"NOTES"
Header "NOTES" The \s-1ASN1_TIME\s0 structure corresponds to the \s-1ASN.1\s0 structure Time defined in \s-1RFC5280\s0 et al. The time setting functions obey the rules outlined in \s-1RFC5280:\s0 if the date can be represented by UTCTime it is used, else GeneralizedTime is used.

The \s-1ASN1_TIME\s0 structure is represented as an \s-1ASN1_STRING\s0 internally and can be freed up using ASN1_STRING_free().

The \s-1ASN1_TIME\s0 structure can represent years from 0000 to 9999 but no attempt is made to correct ancient calendar changes (for example from Julian to Gregorian calendars).

Some applications add offset times directly to a time_t value and pass the results to ASN1_TIME_set() (or equivalent). This can cause problems as the time_t value can overflow on some systems resulting in unexpected results. New applications should use ASN1_TIME_adj() instead and pass the offset value in the offset_sec and offset_day parameters instead of directly manipulating a time_t value.

"BUGS"
Header "BUGS" \fIASN1_TIME_print() currently does not print out the time zone: it either prints out \*(L"\s-1GMT\*(R"\s0 or nothing. But all certificates complying with \s-1RFC5280\s0 et al use \s-1GMT\s0 anyway.
"EXAMPLES"
Header "EXAMPLES" Set a time structure to one hour after the current time and print it out:

.Vb 11 #include <time.h> #include <openssl/asn1.h> ASN1_TIME *tm; time_t t; BIO *b; t = time(NULL); tm = ASN1_TIME_adj(NULL, t, 0, 60 * 60); b = BIO_new_fp(stdout, BIO_NOCLOSE); ASN1_TIME_print(b, tm); ASN1_STRING_free(tm); BIO_free(b); .Ve

Determine if one time is later or sooner than the current time:

.Vb 1 int day, sec; \& if (!ASN1_TIME_diff(&day, &sec, NULL, to)) /* Invalid time format */ \& if (day > 0 || sec > 0) printf("Later\en"); else if (day < 0 || sec < 0) printf("Sooner\en"); else printf("Same\en"); .Ve

"RETURN VALUES"
Header "RETURN VALUES" \fIASN1_TIME_set() and ASN1_TIME_adj() return a pointer to an \s-1ASN1_TIME\s0 structure or \s-1NULL\s0 if an error occurred.

\fIASN1_TIME_set_string() returns 1 if the time value is successfully set and 0 otherwise.

\fIASN1_TIME_check() returns 1 if the structure is syntactically correct and 0 otherwise.

\fIASN1_TIME_print() returns 1 if the time is successfully printed out and 0 if an error occurred (I/O error or invalid time format).

\fIASN1_TIME_diff() returns 1 for sucess and 0 for failure. It can fail if the pass \s-1ASN1_TIME\s0 structure has invalid syntax for example.