.\" $OpenBSD: X509_get0_notBefore.3,v 1.7 2024/03/05 18:30:40 tb Exp $ .\" content checked up to: OpenSSL 27b138e9 May 19 00:16:38 2017 +0000 .\" .\" Copyright (c) 2018, 2020 Ingo Schwarze .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .Dd $Mdocdate: March 5 2024 $ .Dt X509_GET0_NOTBEFORE 3 .Os .Sh NAME .Nm X509_get0_notBefore , .Nm X509_get0_notAfter , .Nm X509_getm_notBefore , .Nm X509_getm_notAfter , .Nm X509_get_notBefore , .Nm X509_get_notAfter , .Nm X509_CRL_get0_lastUpdate , .Nm X509_CRL_get0_nextUpdate , .Nm X509_CRL_get_lastUpdate , .Nm X509_CRL_get_nextUpdate , .Nm X509_set1_notBefore , .Nm X509_set1_notAfter , .Nm X509_set_notBefore , .Nm X509_set_notAfter , .Nm X509_CRL_set1_lastUpdate , .Nm X509_CRL_set1_nextUpdate , .Nm X509_CRL_set_lastUpdate , .Nm X509_CRL_set_nextUpdate .Nd get and set certificate and CRL validity dates .Sh SYNOPSIS .In openssl/x509.h .Ft const ASN1_TIME * .Fo X509_get0_notBefore .Fa "const X509 *x" .Fc .Ft const ASN1_TIME * .Fo X509_get0_notAfter .Fa "const X509 *x" .Fc .Ft ASN1_TIME * .Fo X509_getm_notBefore .Fa "const X509 *x" .Fc .Ft ASN1_TIME * .Fo X509_getm_notAfter .Fa "const X509 *x" .Fc .Ft ASN1_TIME * .Fo X509_get_notBefore .Fa "const X509 *x" .Fc .Ft ASN1_TIME * .Fo X509_get_notAfter .Fa "const X509 *x" .Fc .Ft const ASN1_TIME * .Fo X509_CRL_get0_lastUpdate .Fa "const X509_CRL *crl" .Fc .Ft const ASN1_TIME * .Fo X509_CRL_get0_nextUpdate .Fa "const X509_CRL *crl" .Fc .Ft ASN1_TIME * .Fo X509_CRL_get_lastUpdate .Fa "X509_CRL *crl" .Fc .Ft ASN1_TIME * .Fo X509_CRL_get_nextUpdate .Fa "X509_CRL *crl" .Fc .Ft int .Fo X509_set1_notBefore .Fa "X509 *x" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_set1_notAfter .Fa "X509 *x" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_set_notBefore .Fa "X509 *x" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_set_notAfter .Fa "X509 *x" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_CRL_set1_lastUpdate .Fa "X509_CRL *crl" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_CRL_set1_nextUpdate .Fa "X509_CRL *crl" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_CRL_set_lastUpdate .Fa "X509_CRL *crl" .Fa "const ASN1_TIME *tm" .Fc .Ft int .Fo X509_CRL_set_nextUpdate .Fa "X509_CRL *crl" .Fa "const ASN1_TIME *tm" .Fc .Sh DESCRIPTION .Fn X509_getm_notBefore and .Fn X509_getm_notAfter return pointers to the .Fa notBefore and .Fa notAfter fields of the validity period of the certificate .Fa x , respectively. .Fn X509_get_notBefore and .Fn X509_get_notAfter are deprecated aliases implemented as macros. .Pp .Fn X509_get0_notBefore and .Fn X509_get0_notAfter are identical except for the const qualifier on the return type. .Pp .Fn X509_CRL_get0_lastUpdate is misnamed in a confusing way: it returns a pointer to the .Fa thisUpdate field of the .Fa crl , indicating the time when this .Fa crl was issued. .Pp .Fn X509_CRL_get0_nextUpdate returns a pointer to the .Fa nextUpdate field of the .Fa crl , indicating the time when issuing the subsequent CRL will be due. .Pp .Fn X509_CRL_get_lastUpdate and .Fn X509_CRL_get_nextUpdate are deprecated and identical except for the const qualifier on the argument and on the return type. .Pp .Fn X509_set1_notBefore , .Fn X509_set1_notAfter , .Fn X509_CRL_set1_lastUpdate , and .Fn X509_CRL_set1_nextUpdate set the .Fa notBefore , .Fa notAfter , .Fa thisUpdate Pq sic!\& , or .Fa nextUpdate field of .Fa x or .Fa crl , respectively, to a deep copy of .Fa tm and free the .Vt ASN1_TIME value that they replace. .Pp .Fn X509_set_notBefore , .Fn X509_set_notAfter , .Fn X509_CRL_set_lastUpdate , and .Fn X509_CRL_set_nextUpdate are deprecated aliases. .Sh RETURN VALUES The .Sy get functions return internal pointers which must not be freed by the application, or .Dv NULL if the requested field is not available. They may crash with a .Dv NULL pointer access if .Fa x or .Fa crl is .Dv NULL . .Pp The .Sy set functions return 1 on success or 0 on failure. They fail if .Fa x is .Dv NULL or does not contain a .Fa validity substructure, if .Fa crl is .Dv NULL , or if .Xr ASN1_STRING_dup 3 fails. .Pp Except for some cases of .Xr ASN1_STRING_dup 3 failure, these functions do not support determining reasons for failure with .Xr ERR_get_error 3 . .Sh SEE ALSO .Xr ASN1_TIME_set 3 , .Xr X509_cmp_time 3 , .Xr X509_CRL_get0_by_serial 3 , .Xr X509_CRL_new 3 , .Xr X509_get_subject_name 3 , .Xr X509_new 3 , .Xr X509_sign 3 , .Xr X509_VAL_new 3 , .Xr X509_verify_cert 3 .Sh HISTORY .Fn X509_get_notBefore , .Fn X509_get_notAfter , .Fn X509_set_notBefore , and .Fn X509_set_notAfter first appeared in SSLeay 0.6.5 and have been available since .Ox 2.4 . .Pp .Fn X509_CRL_get_lastUpdate and .Fn X509_CRL_get_nextUpdate first appeared in OpenSSL 0.9.2 and have been available since .Ox 2.6 . .Pp .Fn X509_CRL_set_lastUpdate and .Fn X509_CRL_set_nextUpdate first appeared in OpenSSL 0.9.7 and have been available since .Ox 3.2 . .Pp The remaining functions first appeared in OpenSSL 1.1.0 and have been available since .Ox 6.3 .