Sophie

Sophie

distrib > Mageia > 6 > x86_64 > by-pkgid > f835bee5b8b7ec08e20fae17cab51e63 > files > 649

lib64mbedtls-devel-2.7.3-1.mga6.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mbed TLS v2.7.3: x509_crt.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">mbed TLS v2.7.3
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_b4d146e9a6d8dd56ed4afb2480a97fd3.html">mbedtls</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">x509_crt.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>X.509 certificate parsing and writing.  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="config_8h_source.html">config.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="x509_8h_source.html">x509.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="x509__crl_8h_source.html">x509_crl.h</a>&quot;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for x509_crt.h:</div>
<div class="dyncontent">
<div class="center"><img src="x509__crt_8h__incl.png" border="0" usemap="#x509__crt_8h" alt=""/></div>
<map name="x509__crt_8h" id="x509__crt_8h">
</map>
</div>
</div><div class="textblock"><div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>
<div class="dyncontent">
<div class="center"><img src="x509__crt_8h__dep__incl.png" border="0" usemap="#x509__crt_8hdep" alt=""/></div>
<map name="x509__crt_8hdep" id="x509__crt_8hdep">
</map>
</div>
</div>
<p><a href="x509__crt_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmbedtls__x509__crt__profile.html">mbedtls_x509_crt_profile</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a9da6bf87b583e0eea76bc3ca21a1f3dd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a9da6bf87b583e0eea76bc3ca21a1f3dd">mbedtls_x509write_crt_init</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx)</td></tr>
<tr class="memdesc:a9da6bf87b583e0eea76bc3ca21a1f3dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a CRT writing context.  <a href="#a9da6bf87b583e0eea76bc3ca21a1f3dd">More...</a><br /></td></tr>
<tr class="separator:a9da6bf87b583e0eea76bc3ca21a1f3dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa068b95987692787e169dc9d67677e57"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#aa068b95987692787e169dc9d67677e57">mbedtls_x509write_crt_set_version</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, int version)</td></tr>
<tr class="memdesc:aa068b95987692787e169dc9d67677e57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the verion for a Certificate Default: MBEDTLS_X509_CRT_VERSION_3.  <a href="#aa068b95987692787e169dc9d67677e57">More...</a><br /></td></tr>
<tr class="separator:aa068b95987692787e169dc9d67677e57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32c8ac687c84d8066213297e6813c2f0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a32c8ac687c84d8066213297e6813c2f0">mbedtls_x509write_crt_set_serial</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, const <a class="el" href="structmbedtls__mpi.html">mbedtls_mpi</a> *serial)</td></tr>
<tr class="memdesc:a32c8ac687c84d8066213297e6813c2f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the serial number for a Certificate.  <a href="#a32c8ac687c84d8066213297e6813c2f0">More...</a><br /></td></tr>
<tr class="separator:a32c8ac687c84d8066213297e6813c2f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac7f9ece75e647023a0411a7bfa72b9f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#ac7f9ece75e647023a0411a7bfa72b9f1">mbedtls_x509write_crt_set_validity</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, const char *not_before, const char *not_after)</td></tr>
<tr class="memdesc:ac7f9ece75e647023a0411a7bfa72b9f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the validity period for a Certificate Timestamps should be in string format for UTC timezone i.e. "YYYYMMDDhhmmss" e.g. "20131231235959" for December 31st 2013 at 23:59:59.  <a href="#ac7f9ece75e647023a0411a7bfa72b9f1">More...</a><br /></td></tr>
<tr class="separator:ac7f9ece75e647023a0411a7bfa72b9f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5378017315ad6ac4da70f07777259e19"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a5378017315ad6ac4da70f07777259e19">mbedtls_x509write_crt_set_issuer_name</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, const char *issuer_name)</td></tr>
<tr class="memdesc:a5378017315ad6ac4da70f07777259e19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the issuer name for a Certificate Issuer names should contain a comma-separated list of OID types and values: e.g. "C=UK,O=ARM,CN=mbed TLS CA".  <a href="#a5378017315ad6ac4da70f07777259e19">More...</a><br /></td></tr>
<tr class="separator:a5378017315ad6ac4da70f07777259e19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a272798b488a8ad984c4db95142392ba6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a272798b488a8ad984c4db95142392ba6">mbedtls_x509write_crt_set_subject_name</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, const char *subject_name)</td></tr>
<tr class="memdesc:a272798b488a8ad984c4db95142392ba6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the subject name for a Certificate Subject names should contain a comma-separated list of OID types and values: e.g. "C=UK,O=ARM,CN=mbed TLS Server 1".  <a href="#a272798b488a8ad984c4db95142392ba6">More...</a><br /></td></tr>
<tr class="separator:a272798b488a8ad984c4db95142392ba6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a110c19b1d4379efa650a7e431276f9b0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a110c19b1d4379efa650a7e431276f9b0">mbedtls_x509write_crt_set_subject_key</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, <a class="el" href="structmbedtls__pk__context.html">mbedtls_pk_context</a> *key)</td></tr>
<tr class="memdesc:a110c19b1d4379efa650a7e431276f9b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the subject public key for the certificate.  <a href="#a110c19b1d4379efa650a7e431276f9b0">More...</a><br /></td></tr>
<tr class="separator:a110c19b1d4379efa650a7e431276f9b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a416f26146d68bb79aac90e8e48bbe7df"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a416f26146d68bb79aac90e8e48bbe7df">mbedtls_x509write_crt_set_issuer_key</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, <a class="el" href="structmbedtls__pk__context.html">mbedtls_pk_context</a> *key)</td></tr>
<tr class="memdesc:a416f26146d68bb79aac90e8e48bbe7df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the issuer key used for signing the certificate.  <a href="#a416f26146d68bb79aac90e8e48bbe7df">More...</a><br /></td></tr>
<tr class="separator:a416f26146d68bb79aac90e8e48bbe7df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abdb1cdce6c47b3e697258279bb0e8715"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#abdb1cdce6c47b3e697258279bb0e8715">mbedtls_x509write_crt_set_md_alg</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, <a class="el" href="md_8h.html#a219313cb40503ec3e34a857ab98b2296">mbedtls_md_type_t</a> md_alg)</td></tr>
<tr class="memdesc:abdb1cdce6c47b3e697258279bb0e8715"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the MD algorithm to use for the signature (e.g. MBEDTLS_MD_SHA1)  <a href="#abdb1cdce6c47b3e697258279bb0e8715">More...</a><br /></td></tr>
<tr class="separator:abdb1cdce6c47b3e697258279bb0e8715"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57804fd223bfd8601bdc76550385a50b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a57804fd223bfd8601bdc76550385a50b">mbedtls_x509write_crt_set_extension</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, const char *oid, size_t oid_len, int critical, const unsigned char *val, size_t val_len)</td></tr>
<tr class="memdesc:a57804fd223bfd8601bdc76550385a50b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generic function to add to or replace an extension in the CRT.  <a href="#a57804fd223bfd8601bdc76550385a50b">More...</a><br /></td></tr>
<tr class="separator:a57804fd223bfd8601bdc76550385a50b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae13aefe1e123dcbcefe1eccd7968b6d2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#ae13aefe1e123dcbcefe1eccd7968b6d2">mbedtls_x509write_crt_set_basic_constraints</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, int is_ca, int max_pathlen)</td></tr>
<tr class="memdesc:ae13aefe1e123dcbcefe1eccd7968b6d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the basicConstraints extension for a CRT.  <a href="#ae13aefe1e123dcbcefe1eccd7968b6d2">More...</a><br /></td></tr>
<tr class="separator:ae13aefe1e123dcbcefe1eccd7968b6d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09dd1d818f15b9655f5dbcd3d7c1ec0f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a09dd1d818f15b9655f5dbcd3d7c1ec0f">mbedtls_x509write_crt_set_subject_key_identifier</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx)</td></tr>
<tr class="memdesc:a09dd1d818f15b9655f5dbcd3d7c1ec0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the subjectKeyIdentifier extension for a CRT Requires that <a class="el" href="x509__crt_8h.html#a110c19b1d4379efa650a7e431276f9b0" title="Set the subject public key for the certificate. ">mbedtls_x509write_crt_set_subject_key()</a> has been called before.  <a href="#a09dd1d818f15b9655f5dbcd3d7c1ec0f">More...</a><br /></td></tr>
<tr class="separator:a09dd1d818f15b9655f5dbcd3d7c1ec0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e43c8a91bdd1f5c0b8f729ef602b624"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a7e43c8a91bdd1f5c0b8f729ef602b624">mbedtls_x509write_crt_set_authority_key_identifier</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx)</td></tr>
<tr class="memdesc:a7e43c8a91bdd1f5c0b8f729ef602b624"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the authorityKeyIdentifier extension for a CRT Requires that <a class="el" href="x509__crt_8h.html#a416f26146d68bb79aac90e8e48bbe7df" title="Set the issuer key used for signing the certificate. ">mbedtls_x509write_crt_set_issuer_key()</a> has been called before.  <a href="#a7e43c8a91bdd1f5c0b8f729ef602b624">More...</a><br /></td></tr>
<tr class="separator:a7e43c8a91bdd1f5c0b8f729ef602b624"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ce0db5d77fe07074601c585fe63089a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a5ce0db5d77fe07074601c585fe63089a">mbedtls_x509write_crt_set_key_usage</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, unsigned int key_usage)</td></tr>
<tr class="memdesc:a5ce0db5d77fe07074601c585fe63089a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the Key Usage Extension flags (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN)  <a href="#a5ce0db5d77fe07074601c585fe63089a">More...</a><br /></td></tr>
<tr class="separator:a5ce0db5d77fe07074601c585fe63089a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62f8e6d643c142c87662655bcfc7c7a5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a62f8e6d643c142c87662655bcfc7c7a5">mbedtls_x509write_crt_set_ns_cert_type</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, unsigned char ns_cert_type)</td></tr>
<tr class="memdesc:a62f8e6d643c142c87662655bcfc7c7a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the Netscape Cert Type flags (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL)  <a href="#a62f8e6d643c142c87662655bcfc7c7a5">More...</a><br /></td></tr>
<tr class="separator:a62f8e6d643c142c87662655bcfc7c7a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacd2986253f977770c2353a54cf2e670"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#aacd2986253f977770c2353a54cf2e670">mbedtls_x509write_crt_free</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx)</td></tr>
<tr class="memdesc:aacd2986253f977770c2353a54cf2e670"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the contents of a CRT write context.  <a href="#aacd2986253f977770c2353a54cf2e670">More...</a><br /></td></tr>
<tr class="separator:aacd2986253f977770c2353a54cf2e670"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada0550c8f7ce3e8b360f69c7475fa32f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#ada0550c8f7ce3e8b360f69c7475fa32f">mbedtls_x509write_crt_der</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, unsigned char *buf, size_t size, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:ada0550c8f7ce3e8b360f69c7475fa32f"><td class="mdescLeft">&#160;</td><td class="mdescRight">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.  <a href="#ada0550c8f7ce3e8b360f69c7475fa32f">More...</a><br /></td></tr>
<tr class="separator:ada0550c8f7ce3e8b360f69c7475fa32f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b1106722175cf04ef07313626728886"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="x509__crt_8h.html#a2b1106722175cf04ef07313626728886">mbedtls_x509write_crt_pem</a> (<a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *ctx, unsigned char *buf, size_t size, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a2b1106722175cf04ef07313626728886"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a built up certificate to a X509 PEM string.  <a href="#a2b1106722175cf04ef07313626728886">More...</a><br /></td></tr>
<tr class="separator:a2b1106722175cf04ef07313626728886"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Structures and functions for parsing and writing X.509 certificates</h2></td></tr>
<tr class="memitem:gaedcb73f1c615c266a348a0c62763c5de"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gaedcb73f1c615c266a348a0c62763c5de">MBEDTLS_X509_ID_FLAG</a>(id)&#160;&#160;&#160;( 1 &lt;&lt; ( id - 1 ) )</td></tr>
<tr class="separator:gaedcb73f1c615c266a348a0c62763c5de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8d124765addc200627de55f2018b1ed3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga8d124765addc200627de55f2018b1ed3">MBEDTLS_X509_CRT_VERSION_1</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:ga8d124765addc200627de55f2018b1ed3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga46a0b7f3a4c1f279f609fd8ea304c192"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga46a0b7f3a4c1f279f609fd8ea304c192">MBEDTLS_X509_CRT_VERSION_2</a>&#160;&#160;&#160;1</td></tr>
<tr class="separator:ga46a0b7f3a4c1f279f609fd8ea304c192"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7c22a610222ea94e1faf96223bc5d9a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga7c22a610222ea94e1faf96223bc5d9a4">MBEDTLS_X509_CRT_VERSION_3</a>&#160;&#160;&#160;2</td></tr>
<tr class="separator:ga7c22a610222ea94e1faf96223bc5d9a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga189113155d9c64d4b4255b16761377c7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga189113155d9c64d4b4255b16761377c7">MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN</a>&#160;&#160;&#160;32</td></tr>
<tr class="separator:ga189113155d9c64d4b4255b16761377c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga533580091501768fa25d4d682febbb08"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga533580091501768fa25d4d682febbb08">MBEDTLS_X509_RFC5280_UTC_TIME_LEN</a>&#160;&#160;&#160;15</td></tr>
<tr class="separator:ga533580091501768fa25d4d682febbb08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4ebc833300be4f784ac13ff0a38085ce"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga4ebc833300be4f784ac13ff0a38085ce">MBEDTLS_X509_MAX_FILE_PATH_LEN</a>&#160;&#160;&#160;512</td></tr>
<tr class="separator:ga4ebc833300be4f784ac13ff0a38085ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga836544fec94d5bc02bc97aa87885b9d9"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga836544fec94d5bc02bc97aa87885b9d9">mbedtls_x509_crt</a></td></tr>
<tr class="separator:ga836544fec94d5bc02bc97aa87885b9d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc3115587f8d882a7a137c38d6939e07"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gacc3115587f8d882a7a137c38d6939e07">mbedtls_x509write_cert</a></td></tr>
<tr class="separator:gacc3115587f8d882a7a137c38d6939e07"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9cd2de10ffeff0f339abcc1ba7e26fdf"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structmbedtls__x509__crt__profile.html">mbedtls_x509_crt_profile</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga9cd2de10ffeff0f339abcc1ba7e26fdf">mbedtls_x509_crt_profile_default</a></td></tr>
<tr class="separator:ga9cd2de10ffeff0f339abcc1ba7e26fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8ab1f8a044fd25f76ecb4ba15c6d5bcd"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structmbedtls__x509__crt__profile.html">mbedtls_x509_crt_profile</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga8ab1f8a044fd25f76ecb4ba15c6d5bcd">mbedtls_x509_crt_profile_next</a></td></tr>
<tr class="separator:ga8ab1f8a044fd25f76ecb4ba15c6d5bcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf09067a39129236125e353a68ceb45d6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structmbedtls__x509__crt__profile.html">mbedtls_x509_crt_profile</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gaf09067a39129236125e353a68ceb45d6">mbedtls_x509_crt_profile_suiteb</a></td></tr>
<tr class="separator:gaf09067a39129236125e353a68ceb45d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga003c2483a2691e025641fa9d68d4a96a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga003c2483a2691e025641fa9d68d4a96a">mbedtls_x509_crt_parse_der</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *chain, const unsigned char *buf, size_t buflen)</td></tr>
<tr class="memdesc:ga003c2483a2691e025641fa9d68d4a96a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse a single DER formatted certificate and add it to the chained list.  <a href="group__x509__module.html#ga003c2483a2691e025641fa9d68d4a96a">More...</a><br /></td></tr>
<tr class="separator:ga003c2483a2691e025641fa9d68d4a96a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga033567483649030f7f859db4f4cb7e14"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga033567483649030f7f859db4f4cb7e14">mbedtls_x509_crt_parse</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *chain, const unsigned char *buf, size_t buflen)</td></tr>
<tr class="memdesc:ga033567483649030f7f859db4f4cb7e14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse one or more certificates and add them to the chained list. Parses permissively. If some certificates can be parsed, the result is the number of failed certificates it encountered. If none complete correctly, the first error is returned.  <a href="group__x509__module.html#ga033567483649030f7f859db4f4cb7e14">More...</a><br /></td></tr>
<tr class="separator:ga033567483649030f7f859db4f4cb7e14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad4da63133d3590aa311488497d4c38ec"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gad4da63133d3590aa311488497d4c38ec">mbedtls_x509_crt_parse_file</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *chain, const char *path)</td></tr>
<tr class="memdesc:gad4da63133d3590aa311488497d4c38ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load one or more certificates and add them to the chained list. Parses permissively. If some certificates can be parsed, the result is the number of failed certificates it encountered. If none complete correctly, the first error is returned.  <a href="group__x509__module.html#gad4da63133d3590aa311488497d4c38ec">More...</a><br /></td></tr>
<tr class="separator:gad4da63133d3590aa311488497d4c38ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga571fc89b9f3217ab3dd67bd7af905066"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga571fc89b9f3217ab3dd67bd7af905066">mbedtls_x509_crt_parse_path</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *chain, const char *path)</td></tr>
<tr class="memdesc:ga571fc89b9f3217ab3dd67bd7af905066"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load one or more certificate files from a path and add them to the chained list. Parses permissively. If some certificates can be parsed, the result is the number of failed certificates it encountered. If none complete correctly, the first error is returned.  <a href="group__x509__module.html#ga571fc89b9f3217ab3dd67bd7af905066">More...</a><br /></td></tr>
<tr class="separator:ga571fc89b9f3217ab3dd67bd7af905066"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabaf30f2269fc3b6608b25871f9d09da6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gabaf30f2269fc3b6608b25871f9d09da6">mbedtls_x509_crt_info</a> (char *buf, size_t size, const char *prefix, const <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt)</td></tr>
<tr class="memdesc:gabaf30f2269fc3b6608b25871f9d09da6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an informational string about the certificate.  <a href="group__x509__module.html#gabaf30f2269fc3b6608b25871f9d09da6">More...</a><br /></td></tr>
<tr class="separator:gabaf30f2269fc3b6608b25871f9d09da6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae88f1d8e6696eb2beeffe0a708219e6b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gae88f1d8e6696eb2beeffe0a708219e6b">mbedtls_x509_crt_verify_info</a> (char *buf, size_t size, const char *prefix, uint32_t flags)</td></tr>
<tr class="memdesc:gae88f1d8e6696eb2beeffe0a708219e6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an informational string about the verification status of a certificate.  <a href="group__x509__module.html#gae88f1d8e6696eb2beeffe0a708219e6b">More...</a><br /></td></tr>
<tr class="separator:gae88f1d8e6696eb2beeffe0a708219e6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga98ed4504e4f832b735a230acf54fcde3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga98ed4504e4f832b735a230acf54fcde3">mbedtls_x509_crt_verify</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt, <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *trust_ca, <a class="el" href="structmbedtls__x509__crl.html">mbedtls_x509_crl</a> *ca_crl, const char *cn, uint32_t *flags, int(*f_vrfy)(void *, <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *, int, uint32_t *), void *p_vrfy)</td></tr>
<tr class="memdesc:ga98ed4504e4f832b735a230acf54fcde3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the certificate signature.  <a href="group__x509__module.html#ga98ed4504e4f832b735a230acf54fcde3">More...</a><br /></td></tr>
<tr class="separator:ga98ed4504e4f832b735a230acf54fcde3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf044a51e5b5bc854bf12aeeccb440e55"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gaf044a51e5b5bc854bf12aeeccb440e55">mbedtls_x509_crt_verify_with_profile</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt, <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *trust_ca, <a class="el" href="structmbedtls__x509__crl.html">mbedtls_x509_crl</a> *ca_crl, const <a class="el" href="structmbedtls__x509__crt__profile.html">mbedtls_x509_crt_profile</a> *profile, const char *cn, uint32_t *flags, int(*f_vrfy)(void *, <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *, int, uint32_t *), void *p_vrfy)</td></tr>
<tr class="memdesc:gaf044a51e5b5bc854bf12aeeccb440e55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the certificate signature according to profile.  <a href="group__x509__module.html#gaf044a51e5b5bc854bf12aeeccb440e55">More...</a><br /></td></tr>
<tr class="separator:gaf044a51e5b5bc854bf12aeeccb440e55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0ab7857ffd82467207e718bb9f0131a2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga0ab7857ffd82467207e718bb9f0131a2">mbedtls_x509_crt_check_key_usage</a> (const <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt, unsigned int usage)</td></tr>
<tr class="memdesc:ga0ab7857ffd82467207e718bb9f0131a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check usage of certificate against keyUsage extension.  <a href="group__x509__module.html#ga0ab7857ffd82467207e718bb9f0131a2">More...</a><br /></td></tr>
<tr class="separator:ga0ab7857ffd82467207e718bb9f0131a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad21c0e75a3fdbeb1f65e4d339e479df3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gad21c0e75a3fdbeb1f65e4d339e479df3">mbedtls_x509_crt_check_extended_key_usage</a> (const <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt, const char *usage_oid, size_t usage_len)</td></tr>
<tr class="memdesc:gad21c0e75a3fdbeb1f65e4d339e479df3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check usage of certificate against extendedKeyUsage.  <a href="group__x509__module.html#gad21c0e75a3fdbeb1f65e4d339e479df3">More...</a><br /></td></tr>
<tr class="separator:gad21c0e75a3fdbeb1f65e4d339e479df3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0dc256a70f90cb68002d53bafffab232"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga0dc256a70f90cb68002d53bafffab232">mbedtls_x509_crt_is_revoked</a> (const <a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt, const <a class="el" href="structmbedtls__x509__crl.html">mbedtls_x509_crl</a> *crl)</td></tr>
<tr class="memdesc:ga0dc256a70f90cb68002d53bafffab232"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the certificate revocation status.  <a href="group__x509__module.html#ga0dc256a70f90cb68002d53bafffab232">More...</a><br /></td></tr>
<tr class="separator:ga0dc256a70f90cb68002d53bafffab232"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga016dd06bc770e77b84005f305df20ed1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#ga016dd06bc770e77b84005f305df20ed1">mbedtls_x509_crt_init</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt)</td></tr>
<tr class="memdesc:ga016dd06bc770e77b84005f305df20ed1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a certificate (chain)  <a href="group__x509__module.html#ga016dd06bc770e77b84005f305df20ed1">More...</a><br /></td></tr>
<tr class="separator:ga016dd06bc770e77b84005f305df20ed1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab33c1e4e20bea7ce536119f54a113c6b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__x509__module.html#gab33c1e4e20bea7ce536119f54a113c6b">mbedtls_x509_crt_free</a> (<a class="el" href="structmbedtls__x509__crt.html">mbedtls_x509_crt</a> *crt)</td></tr>
<tr class="memdesc:gab33c1e4e20bea7ce536119f54a113c6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unallocate all certificate data.  <a href="group__x509__module.html#gab33c1e4e20bea7ce536119f54a113c6b">More...</a><br /></td></tr>
<tr class="separator:gab33c1e4e20bea7ce536119f54a113c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>X.509 certificate parsing and writing. </p>

<p class="definition">Definition in file <a class="el" href="x509__crt_8h_source.html">x509_crt.h</a>.</p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="ada0550c8f7ce3e8b360f69c7475fa32f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ada0550c8f7ce3e8b360f69c7475fa32f">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_der()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_der </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>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. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>certificate to write away </td></tr>
    <tr><td class="paramname">buf</td><td>buffer to write to </td></tr>
    <tr><td class="paramname">size</td><td>size of the buffer </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function (for signature, see note) </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>length of data written if successful, or a specific error code</dd></dl>
<dl class="section note"><dt>Note</dt><dd>f_rng may be NULL if RSA is used for signature and the signature is made offline (otherwise f_rng is desirable for countermeasures against timing attacks). ECDSA signatures always require a non-NULL f_rng. </dd></dl>

</div>
</div>
<a id="aacd2986253f977770c2353a54cf2e670"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacd2986253f977770c2353a54cf2e670">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_free()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mbedtls_x509write_crt_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Free the contents of a CRT write context. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to free </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a9da6bf87b583e0eea76bc3ca21a1f3dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9da6bf87b583e0eea76bc3ca21a1f3dd">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_init()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mbedtls_x509write_crt_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize a CRT writing context. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to initialize </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a2b1106722175cf04ef07313626728886"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b1106722175cf04ef07313626728886">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_pem()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_pem </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write a built up certificate to a X509 PEM string. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>certificate to write away </td></tr>
    <tr><td class="paramname">buf</td><td>buffer to write to </td></tr>
    <tr><td class="paramname">size</td><td>size of the buffer </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function (for signature, see note) </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a specific error code</dd></dl>
<dl class="section note"><dt>Note</dt><dd>f_rng may be NULL if RSA is used for signature and the signature is made offline (otherwise f_rng is desirable for countermeasures against timing attacks). ECDSA signatures always require a non-NULL f_rng. </dd></dl>

</div>
</div>
<a id="a7e43c8a91bdd1f5c0b8f729ef602b624"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e43c8a91bdd1f5c0b8f729ef602b624">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_authority_key_identifier()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_authority_key_identifier </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the authorityKeyIdentifier extension for a CRT Requires that <a class="el" href="x509__crt_8h.html#a416f26146d68bb79aac90e8e48bbe7df" title="Set the issuer key used for signing the certificate. ">mbedtls_x509write_crt_set_issuer_key()</a> has been called before. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED </dd></dl>

</div>
</div>
<a id="ae13aefe1e123dcbcefe1eccd7968b6d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae13aefe1e123dcbcefe1eccd7968b6d2">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_basic_constraints()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_basic_constraints </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>is_ca</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>max_pathlen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the basicConstraints extension for a CRT. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">is_ca</td><td>is this a CA certificate </td></tr>
    <tr><td class="paramname">max_pathlen</td><td>maximum length of certificate chains below this certificate (only for CA certificates, -1 is inlimited)</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED </dd></dl>

</div>
</div>
<a id="a57804fd223bfd8601bdc76550385a50b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57804fd223bfd8601bdc76550385a50b">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_extension()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_extension </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>oid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>oid_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>critical</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>val</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>val_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Generic function to add to or replace an extension in the CRT. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">oid</td><td>OID of the extension </td></tr>
    <tr><td class="paramname">oid_len</td><td>length of the OID </td></tr>
    <tr><td class="paramname">critical</td><td>if the extension is critical (per the RFC's definition) </td></tr>
    <tr><td class="paramname">val</td><td>value of the extension OCTET STRING </td></tr>
    <tr><td class="paramname">val_len</td><td>length of the value data</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED </dd></dl>

</div>
</div>
<a id="a416f26146d68bb79aac90e8e48bbe7df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a416f26146d68bb79aac90e8e48bbe7df">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_issuer_key()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mbedtls_x509write_crt_set_issuer_key </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmbedtls__pk__context.html">mbedtls_pk_context</a> *&#160;</td>
          <td class="paramname"><em>key</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the issuer key used for signing the certificate. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">key</td><td>private key to sign with </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a5378017315ad6ac4da70f07777259e19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5378017315ad6ac4da70f07777259e19">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_issuer_name()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_issuer_name </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>issuer_name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the issuer name for a Certificate Issuer names should contain a comma-separated list of OID types and values: e.g. "C=UK,O=ARM,CN=mbed TLS CA". </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">issuer_name</td><td>issuer name to set</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if issuer name was parsed successfully, or a specific error code </dd></dl>

</div>
</div>
<a id="a5ce0db5d77fe07074601c585fe63089a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ce0db5d77fe07074601c585fe63089a">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_key_usage()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_key_usage </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>key_usage</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the Key Usage Extension flags (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">key_usage</td><td>key usage flags to set</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED </dd></dl>

</div>
</div>
<a id="abdb1cdce6c47b3e697258279bb0e8715"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abdb1cdce6c47b3e697258279bb0e8715">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_md_alg()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mbedtls_x509write_crt_set_md_alg </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="md_8h.html#a219313cb40503ec3e34a857ab98b2296">mbedtls_md_type_t</a>&#160;</td>
          <td class="paramname"><em>md_alg</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the MD algorithm to use for the signature (e.g. MBEDTLS_MD_SHA1) </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">md_alg</td><td>MD algorithm to use </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a62f8e6d643c142c87662655bcfc7c7a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62f8e6d643c142c87662655bcfc7c7a5">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_ns_cert_type()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_ns_cert_type </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char&#160;</td>
          <td class="paramname"><em>ns_cert_type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the Netscape Cert Type flags (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">ns_cert_type</td><td>Netscape Cert Type flags to set</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED </dd></dl>

</div>
</div>
<a id="a32c8ac687c84d8066213297e6813c2f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32c8ac687c84d8066213297e6813c2f0">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_serial()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_serial </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmbedtls__mpi.html">mbedtls_mpi</a> *&#160;</td>
          <td class="paramname"><em>serial</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the serial number for a Certificate. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">serial</td><td>serial number to set</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful </dd></dl>

</div>
</div>
<a id="a110c19b1d4379efa650a7e431276f9b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a110c19b1d4379efa650a7e431276f9b0">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_subject_key()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mbedtls_x509write_crt_set_subject_key </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmbedtls__pk__context.html">mbedtls_pk_context</a> *&#160;</td>
          <td class="paramname"><em>key</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the subject public key for the certificate. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">key</td><td>public key to include </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a09dd1d818f15b9655f5dbcd3d7c1ec0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09dd1d818f15b9655f5dbcd3d7c1ec0f">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_subject_key_identifier()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_subject_key_identifier </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the subjectKeyIdentifier extension for a CRT Requires that <a class="el" href="x509__crt_8h.html#a110c19b1d4379efa650a7e431276f9b0" title="Set the subject public key for the certificate. ">mbedtls_x509write_crt_set_subject_key()</a> has been called before. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED </dd></dl>

</div>
</div>
<a id="a272798b488a8ad984c4db95142392ba6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a272798b488a8ad984c4db95142392ba6">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_subject_name()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_subject_name </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>subject_name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the subject name for a Certificate Subject names should contain a comma-separated list of OID types and values: e.g. "C=UK,O=ARM,CN=mbed TLS Server 1". </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">subject_name</td><td>subject name to set</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if subject name was parsed successfully, or a specific error code </dd></dl>

</div>
</div>
<a id="ac7f9ece75e647023a0411a7bfa72b9f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac7f9ece75e647023a0411a7bfa72b9f1">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_validity()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mbedtls_x509write_crt_set_validity </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>not_before</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>not_after</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the validity period for a Certificate Timestamps should be in string format for UTC timezone i.e. "YYYYMMDDhhmmss" e.g. "20131231235959" for December 31st 2013 at 23:59:59. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">not_before</td><td>not_before timestamp </td></tr>
    <tr><td class="paramname">not_after</td><td>not_after timestamp</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if timestamp was parsed successfully, or a specific error code </dd></dl>

</div>
</div>
<a id="aa068b95987692787e169dc9d67677e57"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa068b95987692787e169dc9d67677e57">&#9670;&nbsp;</a></span>mbedtls_x509write_crt_set_version()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mbedtls_x509write_crt_set_version </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmbedtls__x509write__cert.html">mbedtls_x509write_cert</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>version</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the verion for a Certificate Default: MBEDTLS_X509_CRT_VERSION_3. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>CRT context to use </td></tr>
    <tr><td class="paramname">version</td><td>version to set (MBEDTLS_X509_CRT_VERSION_1, MBEDTLS_X509_CRT_VERSION_2 or MBEDTLS_X509_CRT_VERSION_3) </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue May 8 2018 21:08:42 for mbed TLS v2.7.3 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>