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_crt_verify_chain_item
mbedtls_x509_subject_alternative_name
Structures and functions for parsing and writing X.509 certificates#
The type of certificate extension callbacks.
The type of trusted certificate callbacks.
Default security profile.
Expected next default profile.
NSA Suite B profile.
Empty profile that allows nothing.
Set Subject Alternative Name.
Parse a single DER formatted certificate and add it to the end of the provided chained list.
Parse a single DER formatted certificate and add it to the end of the provided chained list.
Parse a single DER formatted certificate and add it to the end of the provided chained list.
Parse one DER-encoded or one or more concatenated PEM-encoded certificates and add them to the chained list.
Returns an informational string about the certificate.
Returns an informational string about the verification status of a certificate.
Verify a chain of certificates.
Verify a chain of certificates with respect to a configurable security profile.
Restartable version of mbedtls_crt_verify_with_profile()
Check usage of certificate against keyUsage extension.
Check usage of certificate against extendedKeyUsage.
Verify the certificate revocation status.
Initialize a certificate (chain)
Unallocate all certificate data.
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 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 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.
Structures and functions for X.509 Certificate Signing Requests (CSR)#
Load a Certificate Signing Request (CSR) in DER format.
Load a Certificate Signing Request (CSR), DER or PEM format.
Returns an informational string about the CSR.
Initialize a CSR.
Unallocate all CSR 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#
Initialize a CRT writing context.
Set the version for a Certificate Default: MBEDTLS_X509_CRT_VERSION_3.
Set the serial number for a Certificate.
Set the serial number for a Certificate.
Set the validity period for a Certificate Timestamps should be in string format for UTC timezone i.e.
Set the issuer name for a Certificate Issuer names should contain a comma-separated list of OID types and values: e.g.
Set the subject name for a Certificate Subject names should contain a comma-separated list of OID types and values: e.g.
Set the subject public key for the certificate.
Set the issuer key used for signing the certificate.
Set the MD algorithm to use for the signature (e.g.
Generic function to add to or replace an extension in the CRT.
Set the basicConstraints extension for a CRT.
Set the Key Usage Extension flags (e.g.
Set the Extended Key Usage Extension (e.g.
Set the Netscape Cert Type flags (e.g.
Free the contents of a CRT write context.
Write a built up certificate to a X509 DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.
Write a built up certificate to a X509 PEM string.
Initialize a CSR context.
Set the subject name for a CSR Subject names should contain a comma-separated list of OID types and values: e.g.
Set the key for a CSR (public key will be included, private key used to sign the CSR when writing it)
Set the MD algorithm to use for the signature (e.g.
Set the Key Usage Extension flags (e.g.
Set Subject Alternative Name.
Set the Netscape Cert Type flags (e.g.
Generic function to add to or replace an extension in the CSR.
Free the contents of a CSR context.
Write a CSR (Certificate Signing Request) to a DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.
Write a CSR (Certificate Signing Request) to a PEM string.
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.
Compare pair of mbedtls_x509_time.
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.
This function parses an item in the SubjectAlternativeNames extension.
Unallocate all data related to subject alternative name.
Macros#
Maximum number of intermediate CAs in a verification chain.
Structures and functions for parsing and writing X.509 certificates Documentation#
mbedtls_x509_crt_ext_cb_t#
typedef int(* mbedtls_x509_crt_ext_cb_t) (void *p_ctx, mbedtls_x509_crt const *crt, mbedtls_x509_buf const *oid, int critical, const unsigned char *p, const unsigned char *end) )(void *p_ctx, mbedtls_x509_crt const *crt, mbedtls_x509_buf const *oid, int critical, const unsigned char *p, const unsigned char *end)
The type of certificate extension callbacks.
Type | Direction | Argument Name | Description |
---|---|---|---|
N/A | p_ctx | An opaque context passed to the callback. | |
N/A | crt | The certificate being parsed. | |
N/A | oid | The OID of the extension. | |
N/A | critical | Whether the extension is critical. | |
N/A | p | Pointer to the start of the extension value (the content of the OCTET STRING). | |
N/A | end | End of extension value. |
Callbacks of this type are passed to and used by the
mbedtls_x509_crt_parse_der_with_ext_cb() routine when
it encounters either an unsupported extension or a
"certificate policies" extension containing any
unsupported certificate policies.
Future versions of the library may invoke the callback
in other cases, if and when the need arises.
Note
The callback must fail and return a negative error code if it can not parse or does not support the extension. When the callback fails to parse a critical extension mbedtls_x509_crt_parse_der_with_ext_cb() also fails. When the callback fails to parse a non critical extension mbedtls_x509_crt_parse_der_with_ext_cb() simply skips the extension and continues parsing.
Returns
0
on success.A negative error code on failure.
mbedtls_x509_crt_ca_cb_t#
typedef int(* mbedtls_x509_crt_ca_cb_t) (void *p_ctx, mbedtls_x509_crt const *child, mbedtls_x509_crt **candidate_cas) )(void *p_ctx, mbedtls_x509_crt const *child, mbedtls_x509_crt **candidate_cas)
The type of trusted certificate callbacks.
Type | Direction | Argument Name | Description |
---|---|---|---|
N/A | p_ctx | An opaque context passed to the callback. | |
N/A | child | The certificate for which to search a potential signer. This will point to a readable certificate. | |
N/A | candidate_cas | The address at which to store the address of the first entry in the generated linked list of candidate signers. This will not be |
Callbacks of this type are passed to and used by the CRT
verification routine mbedtls_x509_crt_verify_with_ca_cb()
when looking for trusted signers of a given certificate.
On success, the callback returns a list of trusted
certificates to be considered as potential signers
for the input certificate.
Note
The callback must only return a non-zero value on a fatal error. If, in contrast, the search for a potential signer completes without a single candidate, the callback must return
0
and set*candidate_cas
toNULL
.
Returns
0
on success. In this case,*candidate_cas
points to a heap-allocated linked list of instances of mbedtls_x509_crt, and ownership of this list is passed to the caller.A negative error code on failure.
mbedtls_x509_crt_profile_default#
const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default
Default security profile.
Should provide a good balance between security and compatibility with current deployments.
This profile permits:
SHA2 hashes with at least 256 bits: SHA-256, SHA-384, SHA-512.
Elliptic curves with 255 bits and above except secp256k1.
RSA with 2048 bits and above.
New minor versions of Mbed TLS may extend this profile, for example if new algorithms are added to the library. New minor versions of Mbed TLS will not reduce this profile unless serious security concerns require it.
mbedtls_x509_crt_profile_next#
const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next
Expected next default profile.
Recommended for new deployments. Currently targets a 128-bit security level, except for allowing RSA-2048. This profile may change at any time.
mbedtls_x509_crt_profile_suiteb#
const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb
NSA Suite B profile.
mbedtls_x509_crt_profile_none#
const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_none
Empty profile that allows nothing.
Useful as a basis for constructing custom profiles.
mbedtls_x509write_crt_set_subject_alternative_name#
int mbedtls_x509write_crt_set_subject_alternative_name (mbedtls_x509write_cert * ctx, const mbedtls_x509_san_list * san_list)
Set Subject Alternative Name.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | Certificate context to use |
const mbedtls_x509_san_list * | N/A | san_list | List of SAN values |
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
Note
"dnsName", "uniformResourceIdentifier", "IP address", "otherName", and "DirectoryName", as defined in RFC 5280, are supported.
mbedtls_x509_crt_parse_der#
int mbedtls_x509_crt_parse_der (mbedtls_x509_crt * chain, const unsigned char * buf, size_t buflen)
Parse a single DER formatted certificate and add it to the end of the provided chained list.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | chain | The pointer to the start of the CRT chain to attach to. When parsing the first CRT in a chain, this should point to an instance of mbedtls_x509_crt initialized through mbedtls_x509_crt_init(). |
const unsigned char * | N/A | buf | The buffer holding the DER encoded certificate. |
size_t | N/A | buflen | The size in Bytes of |
Note
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Note
This function makes an internal copy of the CRT buffer
buf
. In particular,buf
may be destroyed or reused after this call returns. To avoid duplicating the CRT buffer (at the cost of stricter lifetime constraints), use mbedtls_x509_crt_parse_der_nocopy() instead.
Returns
0
if successful.A negative error code on failure.
mbedtls_x509_crt_parse_der_with_ext_cb#
int mbedtls_x509_crt_parse_der_with_ext_cb (mbedtls_x509_crt * chain, const unsigned char * buf, size_t buflen, int make_copy, mbedtls_x509_crt_ext_cb_t cb, void * p_ctx)
Parse a single DER formatted certificate and add it to the end of the provided chained list.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | chain | The pointer to the start of the CRT chain to attach to. When parsing the first CRT in a chain, this should point to an instance of mbedtls_x509_crt initialized through mbedtls_x509_crt_init(). |
const unsigned char * | N/A | buf | The buffer holding the DER encoded certificate. |
size_t | N/A | buflen | The size in Bytes of |
int | N/A | make_copy | When not zero this function makes an internal copy of the CRT buffer |
mbedtls_x509_crt_ext_cb_t | N/A | cb | A callback invoked for every unsupported certificate extension. |
void * | N/A | p_ctx | An opaque context passed to the callback. |
Note
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Note
This call is functionally equivalent to mbedtls_x509_crt_parse_der(), and/or mbedtls_x509_crt_parse_der_nocopy() but it calls the callback with every unsupported certificate extension and additionally the "certificate policies" extension if it contains any unsupported certificate policies. The callback must return a negative error code if it does not know how to handle such an extension. When the callback fails to parse a critical extension mbedtls_x509_crt_parse_der_with_ext_cb() also fails. When the callback fails to parse a non critical extension mbedtls_x509_crt_parse_der_with_ext_cb() simply skips the extension and continues parsing. Future versions of the library may invoke the callback in other cases, if and when the need arises.
Returns
0
if successful.A negative error code on failure.
mbedtls_x509_crt_parse_der_nocopy#
int mbedtls_x509_crt_parse_der_nocopy (mbedtls_x509_crt * chain, const unsigned char * buf, size_t buflen)
Parse a single DER formatted certificate and add it to the end of the provided chained list.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | chain | The pointer to the start of the CRT chain to attach to. When parsing the first CRT in a chain, this should point to an instance of mbedtls_x509_crt initialized through mbedtls_x509_crt_init(). |
const unsigned char * | N/A | buf | The address of the readable buffer holding the DER encoded certificate to use. On success, this buffer must be retained and not be changed for the lifetime of the CRT chain |
size_t | N/A | buflen | The size in Bytes of |
This is a variant of mbedtls_x509_crt_parse_der() which takes temporary ownership of the CRT buffer until the CRT is destroyed.
Note
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Note
This call is functionally equivalent to mbedtls_x509_crt_parse_der(), but it avoids creating a copy of the input buffer at the cost of stronger lifetime constraints. This is useful in constrained environments where duplication of the CRT cannot be tolerated.
Returns
0
if successful.A negative error code on failure.
mbedtls_x509_crt_parse#
int mbedtls_x509_crt_parse (mbedtls_x509_crt * chain, const unsigned char * buf, size_t buflen)
Parse one DER-encoded or one or more concatenated PEM-encoded certificates and add them to the chained list.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | chain | The chain to which to add the parsed certificates. |
const unsigned char * | N/A | buf | The buffer holding the certificate data in PEM or DER format. For certificates in PEM encoding, this may be a concatenation of multiple certificates; for DER encoding, the buffer must comprise exactly one certificate. |
size_t | N/A | buflen | The size of |
For CRTs in PEM encoding, the function parses permissively: if at least one certificate can be parsed, the function returns the number of certificates for which parsing failed (hence 0
if all certificates were parsed successfully). If no certificate could be parsed, the function returns the first (negative) error encountered during parsing.
PEM encoded certificates may be interleaved by other data such as human readable descriptions of their content, as long as the certificates are enclosed in the PEM specific '--—{BEGIN/END} CERTIFICATE--—' delimiters.
Note
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Returns
0
if all certificates were parsed successfully.The (positive) number of certificates that couldn't be parsed if parsing was partly successful (see above).
A negative X509 or PEM error code otherwise.
mbedtls_x509_crt_info#
int mbedtls_x509_crt_info (char * buf, size_t size, const char * prefix, const mbedtls_x509_crt * crt)
Returns an informational string about the certificate.
Type | Direction | Argument Name | Description |
---|---|---|---|
char * | N/A | buf | Buffer to write to |
size_t | N/A | size | Maximum size of buffer |
const char * | N/A | prefix | A line prefix |
const mbedtls_x509_crt * | N/A | crt | The X509 certificate to represent |
Returns
The length of the string written (not including the terminated nul byte), or a negative error code.
mbedtls_x509_crt_verify_info#
int mbedtls_x509_crt_verify_info (char * buf, size_t size, const char * prefix, uint32_t flags)
Returns an informational string about the verification status of a certificate.
Type | Direction | Argument Name | Description |
---|---|---|---|
char * | N/A | buf | Buffer to write to |
size_t | N/A | size | Maximum size of buffer |
const char * | N/A | prefix | A line prefix |
uint32_t | N/A | flags | Verification flags created by mbedtls_x509_crt_verify() |
Returns
The length of the string written (not including the terminated nul byte), or a negative error code.
mbedtls_x509_crt_verify#
int mbedtls_x509_crt_verify (mbedtls_x509_crt * crt, mbedtls_x509_crt * trust_ca, mbedtls_x509_crl * ca_crl, const char * cn, uint32_t * flags, int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) f_vrfy, void * p_vrfy)
Verify a chain of certificates.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | crt | The certificate chain to be verified. |
mbedtls_x509_crt * | N/A | trust_ca | The list of trusted CAs. |
mbedtls_x509_crl * | N/A | ca_crl | The list of CRLs for trusted CAs. |
const char * | N/A | cn | The expected Common Name. This will be checked to be present in the certificate's subjectAltNames extension or, if this extension is absent, as a CN component in its Subject name. DNS names and IP addresses are fully supported, while the URI subtype is partially supported: only exact matching, without any normalization procedures described in 7.4 of RFC5280, will result in a positive URI verification. This may be |
uint32_t * | N/A | flags | The address at which to store the result of the verification. If the verification couldn't be completed, the flag value is set to (uint32_t) -1. |
int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) | N/A | f_vrfy | The verification callback to use. See the documentation of mbedtls_x509_crt_verify() for more information. |
void * | N/A | p_vrfy | The context to be passed to |
The verify callback is a user-supplied callback that
can clear / modify / add flags for a certificate. If set,
the verification callback is called for each
certificate in the chain (from the trust-ca down to the
presented crt). The parameters for the callback are:
(void *parameter, mbedtls_x509_crt *crt, int certificate_depth,
int *flags). With the flags representing current flags for
that specific certificate and the certificate depth from
the bottom (Peer cert depth = 0).
All flags left after returning from the callback
are also returned to the application. The function should
return 0 for anything (including invalid certificates)
other than fatal error, as a non-zero return code
immediately aborts the verification process. For fatal
errors, a specific error code should be used (different
from MBEDTLS_ERR_X509_CERT_VERIFY_FAILED which should not
be returned at this point), or MBEDTLS_ERR_X509_FATAL_ERROR
can be used if no better code is available.
Note
In case verification failed, the results can be displayed using
mbedtls_x509_crt_verify_info()
Same as
mbedtls_x509_crt_verify_with_profile()
with the default security profile.It is your responsibility to provide up-to-date CRLs for all trusted CAs. If no CRL is provided for the CA that was used to sign the certificate, CRL verification is skipped silently, that is without setting any flag.
The
trust_ca
list can contain two types of certificates: (1) those of trusted root CAs, so that certificates chaining up to those CAs will be trusted, and (2) self-signed end-entity certificates to be trusted (for specific peers you know) - in that case, the self-signed certificate doesn't need to have the CA bit set.
Returns
0
if the chain is valid with respect to the passed CN, CAs, CRLs and security profile.MBEDTLS_ERR_X509_CERT_VERIFY_FAILED in case the certificate chain verification failed. In this case,
*flags
will have one or moreMBEDTLS_X509_BADCERT_XXX
orMBEDTLS_X509_BADCRL_XXX
flags set.Another negative error code in case of a fatal error encountered during the verification process.
mbedtls_x509_crt_verify_with_profile#
int mbedtls_x509_crt_verify_with_profile (mbedtls_x509_crt * crt, mbedtls_x509_crt * trust_ca, mbedtls_x509_crl * ca_crl, const mbedtls_x509_crt_profile * profile, const char * cn, uint32_t * flags, int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) f_vrfy, void * p_vrfy)
Verify a chain of certificates with respect to a configurable security profile.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | crt | The certificate chain to be verified. |
mbedtls_x509_crt * | N/A | trust_ca | The list of trusted CAs. |
mbedtls_x509_crl * | N/A | ca_crl | The list of CRLs for trusted CAs. |
const mbedtls_x509_crt_profile * | N/A | profile | The security profile to use for the verification. |
const char * | N/A | cn | The expected Common Name. This may be |
uint32_t * | N/A | flags | The address at which to store the result of the verification. If the verification couldn't be completed, the flag value is set to (uint32_t) -1. |
int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) | N/A | f_vrfy | The verification callback to use. See the documentation of mbedtls_x509_crt_verify() for more information. |
void * | N/A | p_vrfy | The context to be passed to |
Note
Same as
mbedtls_x509_crt_verify()
, but with explicit security profile.The restrictions on keys (RSA minimum size, allowed curves for ECDSA) apply to all certificates: trusted root, intermediate CAs if any, and end entity certificate.
Returns
0
if the chain is valid with respect to the passed CN, CAs, CRLs and security profile.MBEDTLS_ERR_X509_CERT_VERIFY_FAILED in case the certificate chain verification failed. In this case,
*flags
will have one or moreMBEDTLS_X509_BADCERT_XXX
orMBEDTLS_X509_BADCRL_XXX
flags set.Another negative error code in case of a fatal error encountered during the verification process.
mbedtls_x509_crt_verify_restartable#
int mbedtls_x509_crt_verify_restartable (mbedtls_x509_crt * crt, mbedtls_x509_crt * trust_ca, mbedtls_x509_crl * ca_crl, const mbedtls_x509_crt_profile * profile, const char * cn, uint32_t * flags, int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) f_vrfy, void * p_vrfy, mbedtls_x509_crt_restart_ctx * rs_ctx)
Restartable version of mbedtls_crt_verify_with_profile()
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | crt | The certificate chain to be verified. |
mbedtls_x509_crt * | N/A | trust_ca | The list of trusted CAs. |
mbedtls_x509_crl * | N/A | ca_crl | The list of CRLs for trusted CAs. |
const mbedtls_x509_crt_profile * | N/A | profile | The security profile to use for the verification. |
const char * | N/A | cn | The expected Common Name. This may be |
uint32_t * | N/A | flags | The address at which to store the result of the verification. If the verification couldn't be completed, the flag value is set to (uint32_t) -1. |
int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) | N/A | f_vrfy | The verification callback to use. See the documentation of mbedtls_x509_crt_verify() for more information. |
void * | N/A | p_vrfy | The context to be passed to |
mbedtls_x509_crt_restart_ctx * | N/A | rs_ctx | The restart context to use. This may be set to |
Note
Performs the same job as
mbedtls_crt_verify_with_profile()
but can return early and restart according to the limit set withmbedtls_ecp_set_max_ops()
to reduce blocking.
Returns
See
mbedtls_crt_verify_with_profile()
, or#MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of operations was reached: see
mbedtls_ecp_set_max_ops()
.
mbedtls_x509_crt_check_key_usage#
int mbedtls_x509_crt_check_key_usage (const mbedtls_x509_crt * crt, unsigned int usage)
Check usage of certificate against keyUsage extension.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_crt * | N/A | crt | Leaf certificate used. |
unsigned int | N/A | usage | Intended usage(s) (eg MBEDTLS_X509_KU_KEY_ENCIPHERMENT before using the certificate to perform an RSA key exchange). |
Note
Except for decipherOnly and encipherOnly, a bit set in the usage argument means this bit MUST be set in the certificate. For decipherOnly and encipherOnly, it means that bit MAY be set.
Returns
0 is these uses of the certificate are allowed, MBEDTLS_ERR_X509_BAD_INPUT_DATA if the keyUsage extension is present but does not match the usage argument.
Note
You should only call this function on leaf certificates, on (intermediate) CAs the keyUsage extension is automatically checked by
mbedtls_x509_crt_verify()
.
mbedtls_x509_crt_check_extended_key_usage#
int mbedtls_x509_crt_check_extended_key_usage (const mbedtls_x509_crt * crt, const char * usage_oid, size_t usage_len)
Check usage of certificate against extendedKeyUsage.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_crt * | N/A | crt | Leaf certificate used. |
const char * | N/A | usage_oid | Intended usage (eg MBEDTLS_OID_SERVER_AUTH or MBEDTLS_OID_CLIENT_AUTH). |
size_t | N/A | usage_len | Length of usage_oid (eg given by MBEDTLS_OID_SIZE()). |
Returns
0 if this use of the certificate is allowed, MBEDTLS_ERR_X509_BAD_INPUT_DATA if not.
Note
Usually only makes sense on leaf certificates.
mbedtls_x509_crt_is_revoked#
int mbedtls_x509_crt_is_revoked (const mbedtls_x509_crt * crt, const mbedtls_x509_crl * crl)
Verify the certificate revocation status.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_crt * | N/A | crt | a certificate to be verified |
const mbedtls_x509_crl * | N/A | crl | the CRL to verify against |
Returns
1 if the certificate is revoked, 0 otherwise
mbedtls_x509_crt_init#
void mbedtls_x509_crt_init (mbedtls_x509_crt * crt)
Initialize a certificate (chain)
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | crt | Certificate chain to initialize |
mbedtls_x509_crt_free#
void mbedtls_x509_crt_free (mbedtls_x509_crt * crt)
Unallocate all certificate data.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crt * | N/A | crt | Certificate chain to free |
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_crt * | [in] | ctx | Certificate context to be queried, must not be |
int | 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
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.
mbedtls_x509_bitstring#
typedef mbedtls_asn1_bitstring mbedtls_x509_bitstring
Container for ASN1 bit strings.
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.).
mbedtls_x509_sequence#
typedef mbedtls_asn1_sequence mbedtls_x509_sequence
Container for a sequence of ASN.1 items.
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crl * | N/A | chain | points to the start of the chain |
const unsigned char * | N/A | buf | buffer holding the CRL data in DER format |
size_t | N/A | buflen | size of the buffer (including the terminating null byte for PEM data) |
Note
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Returns
0 if successful, or a specific X509 or PEM error code
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crl * | N/A | chain | points to the start of the chain |
const unsigned char * | N/A | buf | buffer holding the CRL data in PEM or DER format |
size_t | 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
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Returns
0 if successful, or a specific X509 or PEM error code
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
char * | N/A | buf | Buffer to write to |
size_t | N/A | size | Maximum size of buffer |
const char * | N/A | prefix | A line prefix |
const mbedtls_x509_crl * | 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.
mbedtls_x509_crl_init#
void mbedtls_x509_crl_init (mbedtls_x509_crl * crl)
Initialize a CRL (chain)
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crl * | N/A | crl | CRL chain to initialize |
mbedtls_x509_crl_free#
void mbedtls_x509_crl_free (mbedtls_x509_crl * crl)
Unallocate all CRL data.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_crl * | N/A | crl | CRL chain to free |
Structures and functions for X.509 Certificate Signing Requests (CSR) Documentation#
mbedtls_x509_csr_parse_der#
int mbedtls_x509_csr_parse_der (mbedtls_x509_csr * csr, const unsigned char * buf, size_t buflen)
Load a Certificate Signing Request (CSR) in DER format.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_csr * | N/A | csr | CSR context to fill |
const unsigned char * | N/A | buf | buffer holding the CRL data |
size_t | N/A | buflen | size of the buffer |
Note
CSR attributes (if any) are currently silently ignored.
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Returns
0 if successful, or a specific X509 error code
mbedtls_x509_csr_parse#
int mbedtls_x509_csr_parse (mbedtls_x509_csr * csr, const unsigned char * buf, size_t buflen)
Load a Certificate Signing Request (CSR), DER or PEM format.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_csr * | N/A | csr | CSR context to fill |
const unsigned char * | N/A | buf | buffer holding the CRL data |
size_t | N/A | buflen | size of the buffer (including the terminating null byte for PEM data) |
Note
See notes for
mbedtls_x509_csr_parse_der()
If #MBEDTLS_USE_PSA_CRYPTO is enabled, the PSA crypto subsystem must have been initialized by calling psa_crypto_init() before calling this function.
Returns
0 if successful, or a specific X509 or PEM error code
mbedtls_x509_csr_info#
int mbedtls_x509_csr_info (char * buf, size_t size, const char * prefix, const mbedtls_x509_csr * csr)
Returns an informational string about the CSR.
Type | Direction | Argument Name | Description |
---|---|---|---|
char * | N/A | buf | Buffer to write to |
size_t | N/A | size | Maximum size of buffer |
const char * | N/A | prefix | A line prefix |
const mbedtls_x509_csr * | N/A | csr | The X509 CSR to represent |
Returns
The length of the string written (not including the terminated nul byte), or a negative error code.
mbedtls_x509_csr_init#
void mbedtls_x509_csr_init (mbedtls_x509_csr * csr)
Initialize a CSR.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_csr * | N/A | csr | CSR to initialize |
mbedtls_x509_csr_free#
void mbedtls_x509_csr_free (mbedtls_x509_csr * csr)
Unallocate all CSR data.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_csr * | N/A | csr | CSR to free |
X509 Error codes Documentation#
X509 Verify codes Documentation#
Function Documentation#
mbedtls_x509write_crt_init#
void mbedtls_x509write_crt_init (mbedtls_x509write_cert * ctx)
Initialize a CRT writing context.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to initialize |
mbedtls_x509write_crt_set_version#
void mbedtls_x509write_crt_set_version (mbedtls_x509write_cert * ctx, int version)
Set the version for a Certificate Default: MBEDTLS_X509_CRT_VERSION_3.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
int | N/A | version | version to set (MBEDTLS_X509_CRT_VERSION_1, MBEDTLS_X509_CRT_VERSION_2 or MBEDTLS_X509_CRT_VERSION_3) |
mbedtls_x509write_crt_set_serial#
int MBEDTLS_DEPRECATED mbedtls_x509write_crt_set_serial (mbedtls_x509write_cert * ctx, const mbedtls_mpi * serial)
Set the serial number for a Certificate.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
const mbedtls_mpi * | N/A | serial | serial number to set |
Note
Even though the MBEDTLS_BIGNUM_C guard looks redundant since X509 depends on PK and PK depends on BIGNUM, this emphasizes a direct dependency between X509 and BIGNUM which is going to be deprecated in the future.
Returns
0 if successful
mbedtls_x509write_crt_set_serial_raw#
int mbedtls_x509write_crt_set_serial_raw (mbedtls_x509write_cert * ctx, unsigned char * serial, size_t serial_len)
Set the serial number for a Certificate.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
unsigned char * | N/A | serial | A raw array of bytes containing the serial number in big endian format |
size_t | N/A | serial_len | Length of valid bytes (expressed in bytes) in |
Returns
0 if successful, or MBEDTLS_ERR_X509_BAD_INPUT_DATA if the provided input buffer is too big (longer than MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN)
mbedtls_x509write_crt_set_validity#
int mbedtls_x509write_crt_set_validity (mbedtls_x509write_cert * ctx, const char * not_before, const char * not_after)
Set the validity period for a Certificate Timestamps should be in string format for UTC timezone i.e.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
const char * | N/A | not_before | not_before timestamp |
const char * | N/A | not_after | not_after timestamp |
"YYYYMMDDhhmmss" e.g. "20131231235959" for December 31st 2013 at 23:59:59
Returns
0 if timestamp was parsed successfully, or a specific error code
mbedtls_x509write_crt_set_issuer_name#
int mbedtls_x509write_crt_set_issuer_name (mbedtls_x509write_cert * ctx, const char * issuer_name)
Set the issuer name for a Certificate Issuer names should contain a comma-separated list of OID types and values: e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
const char * | N/A | issuer_name | issuer name to set |
"C=UK,O=ARM,CN=Mbed TLS CA"
Returns
0 if issuer name was parsed successfully, or a specific error code
mbedtls_x509write_crt_set_subject_name#
int mbedtls_x509write_crt_set_subject_name (mbedtls_x509write_cert * ctx, const char * subject_name)
Set the subject name for a Certificate Subject names should contain a comma-separated list of OID types and values: e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
const char * | N/A | subject_name | subject name to set |
"C=UK,O=ARM,CN=Mbed TLS Server 1"
Returns
0 if subject name was parsed successfully, or a specific error code
mbedtls_x509write_crt_set_subject_key#
void mbedtls_x509write_crt_set_subject_key (mbedtls_x509write_cert * ctx, mbedtls_pk_context * key)
Set the subject public key for the certificate.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
mbedtls_pk_context * | N/A | key | public key to include |
mbedtls_x509write_crt_set_issuer_key#
void mbedtls_x509write_crt_set_issuer_key (mbedtls_x509write_cert * ctx, mbedtls_pk_context * key)
Set the issuer key used for signing the certificate.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
mbedtls_pk_context * | N/A | key | private key to sign with |
mbedtls_x509write_crt_set_md_alg#
void mbedtls_x509write_crt_set_md_alg (mbedtls_x509write_cert * ctx, mbedtls_md_type_t md_alg)
Set the MD algorithm to use for the signature (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
mbedtls_md_type_t | N/A | md_alg | MD algorithm to use |
MBEDTLS_MD_SHA1)
mbedtls_x509write_crt_set_extension#
int mbedtls_x509write_crt_set_extension (mbedtls_x509write_cert * ctx, const char * oid, size_t oid_len, int critical, const unsigned char * val, size_t val_len)
Generic function to add to or replace an extension in the CRT.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
const char * | N/A | oid | OID of the extension |
size_t | N/A | oid_len | length of the OID |
int | N/A | critical | if the extension is critical (per the RFC's definition) |
const unsigned char * | N/A | val | value of the extension OCTET STRING |
size_t | N/A | val_len | length of the value data |
Returns
0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_crt_set_basic_constraints#
int mbedtls_x509write_crt_set_basic_constraints (mbedtls_x509write_cert * ctx, int is_ca, int max_pathlen)
Set the basicConstraints extension for a CRT.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
int | N/A | is_ca | is this a CA certificate |
int | N/A | max_pathlen | maximum length of certificate chains below this certificate (only for CA certificates, -1 is unlimited) |
Returns
0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_crt_set_key_usage#
int mbedtls_x509write_crt_set_key_usage (mbedtls_x509write_cert * ctx, unsigned int key_usage)
Set the Key Usage Extension flags (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
unsigned int | N/A | key_usage | key usage flags to set |
MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN)
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_crt_set_ext_key_usage#
int mbedtls_x509write_crt_set_ext_key_usage (mbedtls_x509write_cert * ctx, const mbedtls_asn1_sequence * exts)
Set the Extended Key Usage Extension (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
const mbedtls_asn1_sequence * | N/A | exts | extended key usage extensions to set, a sequence of MBEDTLS_ASN1_OID objects |
MBEDTLS_OID_SERVER_AUTH)
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_crt_set_ns_cert_type#
int mbedtls_x509write_crt_set_ns_cert_type (mbedtls_x509write_cert * ctx, unsigned char ns_cert_type)
Set the Netscape Cert Type flags (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to use |
unsigned char | N/A | ns_cert_type | Netscape Cert Type flags to set |
MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL)
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_crt_free#
void mbedtls_x509write_crt_free (mbedtls_x509write_cert * ctx)
Free the contents of a CRT write context.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | CRT context to free |
mbedtls_x509write_crt_der#
int mbedtls_x509write_crt_der (mbedtls_x509write_cert * ctx, unsigned char * buf, size_t size, int(*)(void *, unsigned char *, size_t) f_rng, void * p_rng)
Write a built up certificate to a X509 DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | certificate to write away |
unsigned char * | N/A | buf | buffer to write to |
size_t | N/A | size | size of the buffer |
int(*)(void *, unsigned char *, size_t) | N/A | f_rng | RNG function. This must not be |
void * | N/A | p_rng | RNG parameter |
Returns
length of data written if successful, or a specific error code
Note
f_rng
is used for the signature operation.
mbedtls_x509write_crt_pem#
int mbedtls_x509write_crt_pem (mbedtls_x509write_cert * ctx, unsigned char * buf, size_t size, int(*)(void *, unsigned char *, size_t) f_rng, void * p_rng)
Write a built up certificate to a X509 PEM string.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_cert * | N/A | ctx | certificate to write away |
unsigned char * | N/A | buf | buffer to write to |
size_t | N/A | size | size of the buffer |
int(*)(void *, unsigned char *, size_t) | N/A | f_rng | RNG function. This must not be |
void * | N/A | p_rng | RNG parameter |
Returns
0 if successful, or a specific error code
Note
f_rng
is used for the signature operation.
mbedtls_x509write_csr_init#
void mbedtls_x509write_csr_init (mbedtls_x509write_csr * ctx)
Initialize a CSR context.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to initialize |
mbedtls_x509write_csr_set_subject_name#
int mbedtls_x509write_csr_set_subject_name (mbedtls_x509write_csr * ctx, const char * subject_name)
Set the subject name for a CSR Subject names should contain a comma-separated list of OID types and values: e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
const char * | N/A | subject_name | subject name to set |
"C=UK,O=ARM,CN=Mbed TLS Server 1"
Returns
0 if subject name was parsed successfully, or a specific error code
mbedtls_x509write_csr_set_key#
void mbedtls_x509write_csr_set_key (mbedtls_x509write_csr * ctx, mbedtls_pk_context * key)
Set the key for a CSR (public key will be included, private key used to sign the CSR when writing it)
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
mbedtls_pk_context * | N/A | key | Asymmetric key to include |
mbedtls_x509write_csr_set_md_alg#
void mbedtls_x509write_csr_set_md_alg (mbedtls_x509write_csr * ctx, mbedtls_md_type_t md_alg)
Set the MD algorithm to use for the signature (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
mbedtls_md_type_t | N/A | md_alg | MD algorithm to use |
MBEDTLS_MD_SHA1)
mbedtls_x509write_csr_set_key_usage#
int mbedtls_x509write_csr_set_key_usage (mbedtls_x509write_csr * ctx, unsigned char key_usage)
Set the Key Usage Extension flags (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
unsigned char | N/A | key_usage | key usage flags to set |
MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN)
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
Note
The
decipherOnly
flag from the Key Usage extension is represented by bit 8 (i.e.0x8000
), which cannot typically be represented in an unsigned char. Therefore, the flagdecipherOnly
(i.e. #MBEDTLS_X509_KU_DECIPHER_ONLY) cannot be set using this function.
mbedtls_x509write_csr_set_subject_alternative_name#
int mbedtls_x509write_csr_set_subject_alternative_name (mbedtls_x509write_csr * ctx, const mbedtls_x509_san_list * san_list)
Set Subject Alternative Name.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
const mbedtls_x509_san_list * | N/A | san_list | List of SAN values |
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
Note
Only "dnsName", "uniformResourceIdentifier" and "otherName", as defined in RFC 5280, are supported.
mbedtls_x509write_csr_set_ns_cert_type#
int mbedtls_x509write_csr_set_ns_cert_type (mbedtls_x509write_csr * ctx, unsigned char ns_cert_type)
Set the Netscape Cert Type flags (e.g.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
unsigned char | N/A | ns_cert_type | Netscape Cert Type flags to set |
MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL)
Returns
0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_csr_set_extension#
int mbedtls_x509write_csr_set_extension (mbedtls_x509write_csr * ctx, const char * oid, size_t oid_len, int critical, const unsigned char * val, size_t val_len)
Generic function to add to or replace an extension in the CSR.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to use |
const char * | N/A | oid | OID of the extension |
size_t | N/A | oid_len | length of the OID |
int | N/A | critical | Set to 1 to mark the extension as critical, 0 otherwise. |
const unsigned char * | N/A | val | value of the extension OCTET STRING |
size_t | N/A | val_len | length of the value data |
Returns
0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED
mbedtls_x509write_csr_free#
void mbedtls_x509write_csr_free (mbedtls_x509write_csr * ctx)
Free the contents of a CSR context.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR context to free |
mbedtls_x509write_csr_der#
int mbedtls_x509write_csr_der (mbedtls_x509write_csr * ctx, unsigned char * buf, size_t size, int(*)(void *, unsigned char *, size_t) f_rng, void * p_rng)
Write a CSR (Certificate Signing Request) to a DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR to write away |
unsigned char * | N/A | buf | buffer to write to |
size_t | N/A | size | size of the buffer |
int(*)(void *, unsigned char *, size_t) | N/A | f_rng | RNG function. This must not be |
void * | N/A | p_rng | RNG parameter |
Returns
length of data written if successful, or a specific error code
Note
f_rng
is used for the signature operation.
mbedtls_x509write_csr_pem#
int mbedtls_x509write_csr_pem (mbedtls_x509write_csr * ctx, unsigned char * buf, size_t size, int(*)(void *, unsigned char *, size_t) f_rng, void * p_rng)
Write a CSR (Certificate Signing Request) to a PEM string.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509write_csr * | N/A | ctx | CSR to write away |
unsigned char * | N/A | buf | buffer to write to |
size_t | N/A | size | size of the buffer |
int(*)(void *, unsigned char *, size_t) | N/A | f_rng | RNG function. This must not be |
void * | N/A | p_rng | RNG parameter |
Returns
0 if successful, or a specific error code
Note
f_rng
is used for the signature operation.
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
char * | N/A | buf | Buffer to write to |
size_t | N/A | size | Maximum size of buffer |
const mbedtls_x509_name * | 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.
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_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.
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
char * | N/A | buf | Buffer to write to |
size_t | N/A | size | Maximum size of buffer |
const mbedtls_x509_buf * | 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.
mbedtls_x509_time_cmp#
int mbedtls_x509_time_cmp (const mbedtls_x509_time * t1, const mbedtls_x509_time * t2)
Compare pair of mbedtls_x509_time.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_time * | N/A | t1 | mbedtls_x509_time to compare |
const mbedtls_x509_time * | N/A | t2 | mbedtls_x509_time to compare |
Returns
< 0 if t1 is before t2 0 if t1 equals t2 > 0 if t1 is after t2
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_time * | 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.
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.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_time * | 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.
mbedtls_x509_parse_subject_alt_name#
int mbedtls_x509_parse_subject_alt_name (const mbedtls_x509_buf * san_buf, mbedtls_x509_subject_alternative_name * san)
This function parses an item in the SubjectAlternativeNames extension.
Type | Direction | Argument Name | Description |
---|---|---|---|
const mbedtls_x509_buf * | N/A | san_buf | The buffer holding the raw data item of the subject alternative name. |
mbedtls_x509_subject_alternative_name * | N/A | san | The target structure to populate with the parsed presentation of the subject alternative name encoded in |
Please note that this function might allocate additional memory for a subject alternative name, thus mbedtls_x509_free_subject_alt_name has to be called to dispose of this additional memory afterwards.
Note
Supported GeneralName types, as defined in RFC 5280: "rfc822Name", "dnsName", "directoryName", "uniformResourceIdentifier" and "hardware_module_name" of type "otherName", as defined in RFC 4108.
This function should be called on a single raw data of subject alternative name. For example, after successful certificate parsing, one must iterate on every item in the
crt->subject_alt_names
sequence, and pass it to this function.
Warnings
The target structure contains pointers to the raw data of the parsed certificate, and its lifetime is restricted by the lifetime of the certificate.
Returns
0
on successMBEDTLS_ERR_X509_FEATURE_UNAVAILABLE for an unsupported SAN type.
Another negative value for any other failure.
mbedtls_x509_free_subject_alt_name#
void mbedtls_x509_free_subject_alt_name (mbedtls_x509_subject_alternative_name * san)
Unallocate all data related to subject alternative name.
Type | Direction | Argument Name | Description |
---|---|---|---|
mbedtls_x509_subject_alternative_name * | N/A | san | SAN structure - extra memory owned by this structure will be freed |