X.509 module#
The X.509 module provides X.509 support for reading, writing and verification of certificates.
In summary:
X.509 certificate (CRT) reading (see
mbedtls_x509_crt_parse()
,mbedtls_x509_crt_parse_der()
,mbedtls_x509_crt_parse_file()
).X.509 certificate revocation list (CRL) reading (see
mbedtls_x509_crl_parse()
,mbedtls_x509_crl_parse_der()
, andmbedtls_x509_crl_parse_file()
).X.509 certificate signature verification (see
mbedtls_x509_crt_verify()
andmbedtls_x509_crt_verify_with_profile()
.X.509 certificate writing and certificate request writing (see
mbedtls_x509write_crt_der()
andmbedtls_x509write_csr_der()
).
This module can be used to build a certificate authority (CA) chain and verify its signature. It is also used to generate Certificate Signing Requests and X.509 certificates just as a CA would do.
Modules#
mbedtls_x509_subject_alternative_name
mbedtls_x509_crt_verify_chain_item
Structures for parsing X.509 certificates, CRLs and CSRs#
Type-length-value structure that allows for ASN1 using DER.
Container for ASN1 bit strings.
Container for ASN1 named information objects.
Container for a sequence of ASN.1 items.
Structures and functions for parsing and writing X.509 certificates#
Query certificate for given extension type.
Build flag from an algorithm/curve identifier (pk, md, ecp) Since 0 is always XXX_NONE, ignore it.
Max size of verification chain: end-entity + intermediates + trusted root.
Structures and functions for parsing CRLs#
Parse a DER-encoded CRL and append it to the chained list.
Parse one or more CRLs and append them to the chained list.
Returns an informational string about the CRL.
Initialize a CRL (chain)
Unallocate all CRL data.
X509 Error codes#
Unavailable feature, e.g.
Requested OID is unknown.
The CRT/CRL/CSR format is invalid, e.g.
The CRT/CRL/CSR version element is invalid.
The serial tag or value is invalid.
The algorithm tag or value is invalid.
The name tag or value is invalid.
The date tag or value is invalid.
The signature tag or value invalid.
The extension tag or value is invalid.
CRT/CRL/CSR has an unsupported version number.
Signature algorithm (oid) is unsupported.
Signature algorithms do not match.
Certificate verification failed, e.g.
Format not recognized as DER or PEM.
Input invalid.
Allocation of memory failed.
Read/write of file failed.
Destination buffer is too small.
A fatal error occurred, eg the chain is too long or the vrfy callback failed.
X509 Verify codes#
The certificate validity has expired.
The certificate has been revoked (is on a CRL).
The certificate Common Name (CN) does not match with the expected CN.
The certificate is not correctly signed by the trusted CA.
The CRL is not correctly signed by the trusted CA.
The CRL is expired.
Certificate was missing.
Certificate verification was skipped.
Other reason (can be used by verify callback)
The certificate validity starts in the future.
The CRL is from the future.
Usage does not match the keyUsage extension.
Usage does not match the extendedKeyUsage extension.
Usage does not match the nsCertType extension.
The certificate is signed with an unacceptable hash.
The certificate is signed with an unacceptable PK alg (eg RSA vs ECDSA).
The certificate is signed with an unacceptable key (eg bad curve, RSA too short).
The CRL is signed with an unacceptable hash.
The CRL is signed with an unacceptable PK alg (eg RSA vs ECDSA).
The CRL is signed with an unacceptable key (eg bad curve, RSA too short).
Functions#
Store the certificate DN in printable form into buf; no more than size characters will be written.
Return the next relative DN in an X509 name.
Store the certificate serial in printable form into buf; no more than size characters will be written.
Check a given mbedtls_x509_time against the system time and tell if it's in the past.
Check a given mbedtls_x509_time against the system time and tell if it's in the future.
Macros#
Maximum number of intermediate CAs in a verification chain.
Structures for parsing X.509 certificates, CRLs and CSRs Documentation#
mbedtls_x509_buf#
typedef mbedtls_asn1_buf mbedtls_x509_buf
Type-length-value structure that allows for ASN1 using DER.
228
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_bitstring#
typedef mbedtls_asn1_bitstring mbedtls_x509_bitstring
Container for ASN1 bit strings.
233
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_name#
typedef mbedtls_asn1_named_data mbedtls_x509_name
Container for ASN1 named information objects.
It allows for Relative Distinguished Names (e.g. cn=localhost,ou=code,etc.).
239
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_sequence#
typedef mbedtls_asn1_sequence mbedtls_x509_sequence
Container for a sequence of ASN.1 items.
244
of file util/third_party/mbedtls/include/mbedtls/x509.h
Structures and functions for parsing and writing X.509 certificates Documentation#
mbedtls_x509_crt_restart_ctx#
typedef void mbedtls_x509_crt_restart_ctx
359
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
mbedtls_x509_crt_has_ext_type#
static int mbedtls_x509_crt_has_ext_type (const mbedtls_x509_crt * ctx, int ext_type)
Query certificate for given extension type.
[in] | ctx | Certificate context to be queried, must not be |
N/A | ext_type | Extension type being queried for, must be a valid extension type. Must be one of the MBEDTLS_X509_EXT_XXX values |
Returns
0 if the given extension type is not present, non-zero otherwise
971
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_ID_FLAG#
#define MBEDTLS_X509_ID_FLAGValue:
(id)
Build flag from an algorithm/curve identifier (pk, md, ecp) Since 0 is always XXX_NONE, ignore it.
163
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_CRT_VERSION_1#
#define MBEDTLS_X509_CRT_VERSION_1Value:
0
201
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_CRT_VERSION_2#
#define MBEDTLS_X509_CRT_VERSION_2Value:
1
202
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_CRT_VERSION_3#
#define MBEDTLS_X509_CRT_VERSION_3Value:
2
203
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN#
#define MBEDTLS_X509_RFC5280_MAX_SERIAL_LENValue:
32
205
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_RFC5280_UTC_TIME_LEN#
#define MBEDTLS_X509_RFC5280_UTC_TIME_LENValue:
15
206
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_MAX_FILE_PATH_LEN#
#define MBEDTLS_X509_MAX_FILE_PATH_LENValue:
512
209
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_CRT_ERROR_INFO_LIST#
#define MBEDTLS_X509_CRT_ERROR_INFO_LIST
218
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
MBEDTLS_X509_MAX_VERIFY_CHAIN_SIZE#
#define MBEDTLS_X509_MAX_VERIFY_CHAIN_SIZEValue:
( MBEDTLS_X509_MAX_INTERMEDIATE_CA + 2 )
Max size of verification chain: end-entity + intermediates + trusted root.
309
of file util/third_party/mbedtls/include/mbedtls/x509_crt.h
Structures and functions for parsing CRLs Documentation#
mbedtls_x509_crl_parse_der#
int mbedtls_x509_crl_parse_der (mbedtls_x509_crl * chain, const unsigned char * buf, size_t buflen)
Parse a DER-encoded CRL and append it to the chained list.
N/A | chain | points to the start of the chain |
N/A | buf | buffer holding the CRL data in DER format |
N/A | buflen | size of the buffer (including the terminating null byte for PEM data) |
Returns
0 if successful, or a specific X509 or PEM error code
119
of file util/third_party/mbedtls/include/mbedtls/x509_crl.h
mbedtls_x509_crl_parse#
int mbedtls_x509_crl_parse (mbedtls_x509_crl * chain, const unsigned char * buf, size_t buflen)
Parse one or more CRLs and append them to the chained list.
N/A | chain | points to the start of the chain |
N/A | buf | buffer holding the CRL data in PEM or DER format |
N/A | buflen | size of the buffer (including the terminating null byte for PEM data) |
Note
Multiple CRLs are accepted only if using PEM format
Returns
0 if successful, or a specific X509 or PEM error code
133
of file util/third_party/mbedtls/include/mbedtls/x509_crl.h
mbedtls_x509_crl_info#
int mbedtls_x509_crl_info (char * buf, size_t size, const char * prefix, const mbedtls_x509_crl * crl)
Returns an informational string about the CRL.
N/A | buf | Buffer to write to |
N/A | size | Maximum size of buffer |
N/A | prefix | A line prefix |
N/A | crl | The X509 CRL to represent |
Returns
The length of the string written (not including the terminated nul byte), or a negative error code.
161
of file util/third_party/mbedtls/include/mbedtls/x509_crl.h
mbedtls_x509_crl_init#
void mbedtls_x509_crl_init (mbedtls_x509_crl * crl)
Initialize a CRL (chain)
N/A | crl | CRL chain to initialize |
170
of file util/third_party/mbedtls/include/mbedtls/x509_crl.h
mbedtls_x509_crl_free#
void mbedtls_x509_crl_free (mbedtls_x509_crl * crl)
Unallocate all CRL data.
N/A | crl | CRL chain to free |
177
of file util/third_party/mbedtls/include/mbedtls/x509_crl.h
X509 Error codes Documentation#
MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE
#define MBEDTLS_ERR_X509_FEATURE_UNAVAILABLEValue:
-0x2080
Unavailable feature, e.g.
RSA hashing/encryption combination.
57
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_UNKNOWN_OID#
#define MBEDTLS_ERR_X509_UNKNOWN_OIDValue:
-0x2100
Requested OID is unknown.
59
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_FORMAT#
#define MBEDTLS_ERR_X509_INVALID_FORMATValue:
-0x2180
The CRT/CRL/CSR format is invalid, e.g.
different type expected.
61
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_VERSION#
#define MBEDTLS_ERR_X509_INVALID_VERSIONValue:
-0x2200
The CRT/CRL/CSR version element is invalid.
63
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_SERIAL#
#define MBEDTLS_ERR_X509_INVALID_SERIALValue:
-0x2280
The serial tag or value is invalid.
65
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_ALG#
#define MBEDTLS_ERR_X509_INVALID_ALGValue:
-0x2300
The algorithm tag or value is invalid.
67
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_NAME#
#define MBEDTLS_ERR_X509_INVALID_NAMEValue:
-0x2380
The name tag or value is invalid.
69
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_DATE#
#define MBEDTLS_ERR_X509_INVALID_DATEValue:
-0x2400
The date tag or value is invalid.
71
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_SIGNATURE#
#define MBEDTLS_ERR_X509_INVALID_SIGNATUREValue:
-0x2480
The signature tag or value invalid.
73
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_INVALID_EXTENSIONS#
#define MBEDTLS_ERR_X509_INVALID_EXTENSIONSValue:
-0x2500
The extension tag or value is invalid.
75
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_UNKNOWN_VERSION#
#define MBEDTLS_ERR_X509_UNKNOWN_VERSIONValue:
-0x2580
CRT/CRL/CSR has an unsupported version number.
77
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG#
#define MBEDTLS_ERR_X509_UNKNOWN_SIG_ALGValue:
-0x2600
Signature algorithm (oid) is unsupported.
79
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_SIG_MISMATCH#
#define MBEDTLS_ERR_X509_SIG_MISMATCHValue:
-0x2680
Signature algorithms do not match.
(see mbedtls_x509_crt
sig_oid)
81
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_CERT_VERIFY_FAILED#
#define MBEDTLS_ERR_X509_CERT_VERIFY_FAILEDValue:
-0x2700
Certificate verification failed, e.g.
CRL, CA or signature check failed.
83
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT#
#define MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMATValue:
-0x2780
Format not recognized as DER or PEM.
85
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_BAD_INPUT_DATA#
#define MBEDTLS_ERR_X509_BAD_INPUT_DATAValue:
-0x2800
Input invalid.
87
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_ALLOC_FAILED#
#define MBEDTLS_ERR_X509_ALLOC_FAILEDValue:
-0x2880
Allocation of memory failed.
89
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_FILE_IO_ERROR#
#define MBEDTLS_ERR_X509_FILE_IO_ERRORValue:
-0x2900
Read/write of file failed.
91
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_BUFFER_TOO_SMALL#
#define MBEDTLS_ERR_X509_BUFFER_TOO_SMALLValue:
-0x2980
Destination buffer is too small.
93
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_ERR_X509_FATAL_ERROR#
#define MBEDTLS_ERR_X509_FATAL_ERRORValue:
-0x3000
A fatal error occurred, eg the chain is too long or the vrfy callback failed.
95
of file util/third_party/mbedtls/include/mbedtls/x509.h
X509 Verify codes Documentation#
MBEDTLS_X509_BADCERT_EXPIRED#
#define MBEDTLS_X509_BADCERT_EXPIREDValue:
0x01
The certificate validity has expired.
103
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_REVOKED#
#define MBEDTLS_X509_BADCERT_REVOKEDValue:
0x02
The certificate has been revoked (is on a CRL).
104
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_CN_MISMATCH#
#define MBEDTLS_X509_BADCERT_CN_MISMATCHValue:
0x04
The certificate Common Name (CN) does not match with the expected CN.
105
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_NOT_TRUSTED#
#define MBEDTLS_X509_BADCERT_NOT_TRUSTEDValue:
0x08
The certificate is not correctly signed by the trusted CA.
106
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCRL_NOT_TRUSTED#
#define MBEDTLS_X509_BADCRL_NOT_TRUSTEDValue:
0x10
The CRL is not correctly signed by the trusted CA.
107
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCRL_EXPIRED#
#define MBEDTLS_X509_BADCRL_EXPIREDValue:
0x20
The CRL is expired.
108
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_MISSING#
#define MBEDTLS_X509_BADCERT_MISSINGValue:
0x40
Certificate was missing.
109
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_SKIP_VERIFY#
#define MBEDTLS_X509_BADCERT_SKIP_VERIFYValue:
0x80
Certificate verification was skipped.
110
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_OTHER#
#define MBEDTLS_X509_BADCERT_OTHERValue:
0x0100
Other reason (can be used by verify callback)
111
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_FUTURE#
#define MBEDTLS_X509_BADCERT_FUTUREValue:
0x0200
The certificate validity starts in the future.
112
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCRL_FUTURE#
#define MBEDTLS_X509_BADCRL_FUTUREValue:
0x0400
The CRL is from the future.
113
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_KEY_USAGE#
#define MBEDTLS_X509_BADCERT_KEY_USAGEValue:
0x0800
Usage does not match the keyUsage extension.
114
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_EXT_KEY_USAGE#
#define MBEDTLS_X509_BADCERT_EXT_KEY_USAGEValue:
0x1000
Usage does not match the extendedKeyUsage extension.
115
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_NS_CERT_TYPE#
#define MBEDTLS_X509_BADCERT_NS_CERT_TYPEValue:
0x2000
Usage does not match the nsCertType extension.
116
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_BAD_MD#
#define MBEDTLS_X509_BADCERT_BAD_MDValue:
0x4000
The certificate is signed with an unacceptable hash.
117
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_BAD_PK#
#define MBEDTLS_X509_BADCERT_BAD_PKValue:
0x8000
The certificate is signed with an unacceptable PK alg (eg RSA vs ECDSA).
118
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCERT_BAD_KEY#
#define MBEDTLS_X509_BADCERT_BAD_KEYValue:
0x010000
The certificate is signed with an unacceptable key (eg bad curve, RSA too short).
119
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCRL_BAD_MD#
#define MBEDTLS_X509_BADCRL_BAD_MDValue:
0x020000
The CRL is signed with an unacceptable hash.
120
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCRL_BAD_PK#
#define MBEDTLS_X509_BADCRL_BAD_PKValue:
0x040000
The CRL is signed with an unacceptable PK alg (eg RSA vs ECDSA).
121
of file util/third_party/mbedtls/include/mbedtls/x509.h
MBEDTLS_X509_BADCRL_BAD_KEY#
#define MBEDTLS_X509_BADCRL_BAD_KEYValue:
0x080000
The CRL is signed with an unacceptable key (eg bad curve, RSA too short).
122
of file util/third_party/mbedtls/include/mbedtls/x509.h
Function Documentation#
mbedtls_x509_dn_gets#
int mbedtls_x509_dn_gets (char * buf, size_t size, const mbedtls_x509_name * dn)
Store the certificate DN in printable form into buf; no more than size characters will be written.
N/A | buf | Buffer to write to |
N/A | size | Maximum size of buffer |
N/A | dn | The X509 name to represent |
Returns
The length of the string written (not including the terminated nul byte), or a negative error code.
267
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_dn_get_next#
static mbedtls_x509_name * mbedtls_x509_dn_get_next (mbedtls_x509_name * dn)
Return the next relative DN in an X509 name.
N/A | dn | Current node in the X509 name |
Note
Intended use is to compare function result to dn->next in order to detect boundaries of multi-valued RDNs.
Returns
Pointer to the first attribute-value pair of the next RDN in sequence, or NULL if end is reached.
280
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_serial_gets#
int mbedtls_x509_serial_gets (char * buf, size_t size, const mbedtls_x509_buf * serial)
Store the certificate serial in printable form into buf; no more than size characters will be written.
N/A | buf | Buffer to write to |
N/A | size | Maximum size of buffer |
N/A | serial | The X509 serial to represent |
Returns
The length of the string written (not including the terminated nul byte), or a negative error code.
299
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_time_is_past#
int mbedtls_x509_time_is_past (const mbedtls_x509_time * to)
Check a given mbedtls_x509_time against the system time and tell if it's in the past.
N/A | to | mbedtls_x509_time to check |
Note
Intended usage is "if( is_past( valid_to ) ) ERROR". Hence the return value of 1 if on internal errors.
Returns
1 if the given time is in the past or an error occurred, 0 otherwise.
313
of file util/third_party/mbedtls/include/mbedtls/x509.h
mbedtls_x509_time_is_future#
int mbedtls_x509_time_is_future (const mbedtls_x509_time * from)
Check a given mbedtls_x509_time against the system time and tell if it's in the future.
N/A | from | mbedtls_x509_time to check |
Note
Intended usage is "if( is_future( valid_from ) ) ERROR". Hence the return value of 1 if on internal errors.
Returns
1 if the given time is in the future or an error occurred, 0 otherwise.
327
of file util/third_party/mbedtls/include/mbedtls/x509.h
Macro Definition Documentation#
MBEDTLS_X509_MAX_INTERMEDIATE_CA#
#define MBEDTLS_X509_MAX_INTERMEDIATE_CAValue:
8
Maximum number of intermediate CAs in a verification chain.
That is, maximum length of the chain, excluding the end-entity certificate and the trusted root certificate.
Set this to a low value to prevent an adversary from making you waste resources verifying an overlong certificate chain.
49
of file util/third_party/mbedtls/include/mbedtls/x509.h