Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 9e72f3e7ecf68cce016a7c5c59e863d3 > files > 655

lib64polarssl-devel-1.3.8-1.mga4.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.5"/>
<title>PolarSSL v1.3.8: pk.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 style="padding-left: 0.5em;">
   <div id="projectname">PolarSSL v1.3.8
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_6a9bbd12bf4e19a18c45e270f8fae3fd.html">include</a></li><li class="navelem"><a class="el" href="dir_04272d44da4745cf8b8bfc767d6c6523.html">polarssl</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">pk.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Public Key abstraction layer.  
<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="md_8h_source.html">md.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="rsa_8h_source.html">rsa.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="ecp_8h_source.html">ecp.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="ecdsa_8h_source.html">ecdsa.h</a>&quot;</code><br/>
</div><div class="textblock"><div class="dynheader">
Include dependency graph for pk.h:</div>
<div class="dyncontent">
<div class="center"><img src="pk_8h__incl.png" border="0" usemap="#pk_8h" alt=""/></div>
<map name="pk_8h" id="pk_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="pk_8h__dep__incl.png" border="0" usemap="#pk_8hdep" alt=""/></div>
<map name="pk_8hdep" id="pk_8hdep">
</map>
</div>
</div>
<p><a href="pk_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="structpk__rsassa__pss__options.html">pk_rsassa_pss_options</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Options for RSASSA-PSS signature verification.  <a href="structpk__rsassa__pss__options.html#details">More...</a><br/></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="structpk__debug__item.html">pk_debug_item</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Item to send to the debug module.  <a href="structpk__debug__item.html#details">More...</a><br/></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="structpk__info__t.html">pk_info_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public key information and operations.  <a href="structpk__info__t.html#details">More...</a><br/></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="structpk__context.html">pk_context</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public key container.  <a href="structpk__context.html#details">More...</a><br/></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="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ac615b9e36b084faf6d51dc1f3405e563"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#ac615b9e36b084faf6d51dc1f3405e563">POLARSSL_ERR_PK_MALLOC_FAILED</a>&#160;&#160;&#160;-0x2F80</td></tr>
<tr class="memdesc:ac615b9e36b084faf6d51dc1f3405e563"><td class="mdescLeft">&#160;</td><td class="mdescRight">Memory alloation failed.  <a href="#ac615b9e36b084faf6d51dc1f3405e563">More...</a><br/></td></tr>
<tr class="separator:ac615b9e36b084faf6d51dc1f3405e563"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adfc2587a1c20023c21a1121d3a396d2f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#adfc2587a1c20023c21a1121d3a396d2f">POLARSSL_ERR_PK_TYPE_MISMATCH</a>&#160;&#160;&#160;-0x2F00</td></tr>
<tr class="memdesc:adfc2587a1c20023c21a1121d3a396d2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type mismatch, eg attempt to encrypt with an ECDSA key.  <a href="#adfc2587a1c20023c21a1121d3a396d2f">More...</a><br/></td></tr>
<tr class="separator:adfc2587a1c20023c21a1121d3a396d2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af53e57b17f7ca55022d3b639ad0ba722"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#af53e57b17f7ca55022d3b639ad0ba722">POLARSSL_ERR_PK_BAD_INPUT_DATA</a>&#160;&#160;&#160;-0x2E80</td></tr>
<tr class="memdesc:af53e57b17f7ca55022d3b639ad0ba722"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bad input parameters to function.  <a href="#af53e57b17f7ca55022d3b639ad0ba722">More...</a><br/></td></tr>
<tr class="separator:af53e57b17f7ca55022d3b639ad0ba722"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e35817e1086ccdf611600128561281c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a5e35817e1086ccdf611600128561281c">POLARSSL_ERR_PK_FILE_IO_ERROR</a>&#160;&#160;&#160;-0x2E00</td></tr>
<tr class="memdesc:a5e35817e1086ccdf611600128561281c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read/write of file failed.  <a href="#a5e35817e1086ccdf611600128561281c">More...</a><br/></td></tr>
<tr class="separator:a5e35817e1086ccdf611600128561281c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a025c4150348004b381eeb5881737b77a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a025c4150348004b381eeb5881737b77a">POLARSSL_ERR_PK_KEY_INVALID_VERSION</a>&#160;&#160;&#160;-0x2D80</td></tr>
<tr class="memdesc:a025c4150348004b381eeb5881737b77a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsupported key version.  <a href="#a025c4150348004b381eeb5881737b77a">More...</a><br/></td></tr>
<tr class="separator:a025c4150348004b381eeb5881737b77a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0af52f107aa8ae7b6e31facfd18ff44b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a0af52f107aa8ae7b6e31facfd18ff44b">POLARSSL_ERR_PK_KEY_INVALID_FORMAT</a>&#160;&#160;&#160;-0x2D00</td></tr>
<tr class="memdesc:a0af52f107aa8ae7b6e31facfd18ff44b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invalid key tag or value.  <a href="#a0af52f107aa8ae7b6e31facfd18ff44b">More...</a><br/></td></tr>
<tr class="separator:a0af52f107aa8ae7b6e31facfd18ff44b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84d3aa6334f5ad3d67dee14c76017354"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a84d3aa6334f5ad3d67dee14c76017354">POLARSSL_ERR_PK_UNKNOWN_PK_ALG</a>&#160;&#160;&#160;-0x2C80</td></tr>
<tr class="memdesc:a84d3aa6334f5ad3d67dee14c76017354"><td class="mdescLeft">&#160;</td><td class="mdescRight">Key algorithm is unsupported (only RSA and EC are supported).  <a href="#a84d3aa6334f5ad3d67dee14c76017354">More...</a><br/></td></tr>
<tr class="separator:a84d3aa6334f5ad3d67dee14c76017354"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a420e18624ba63e48d18c4e647a199904"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a420e18624ba63e48d18c4e647a199904">POLARSSL_ERR_PK_PASSWORD_REQUIRED</a>&#160;&#160;&#160;-0x2C00</td></tr>
<tr class="memdesc:a420e18624ba63e48d18c4e647a199904"><td class="mdescLeft">&#160;</td><td class="mdescRight">Private key password can't be empty.  <a href="#a420e18624ba63e48d18c4e647a199904">More...</a><br/></td></tr>
<tr class="separator:a420e18624ba63e48d18c4e647a199904"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fade72c0a20c8d5f13ce3a209db58ca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a8fade72c0a20c8d5f13ce3a209db58ca">POLARSSL_ERR_PK_PASSWORD_MISMATCH</a>&#160;&#160;&#160;-0x2B80</td></tr>
<tr class="memdesc:a8fade72c0a20c8d5f13ce3a209db58ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given private key password does not allow for correct decryption.  <a href="#a8fade72c0a20c8d5f13ce3a209db58ca">More...</a><br/></td></tr>
<tr class="separator:a8fade72c0a20c8d5f13ce3a209db58ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae336dc80d29e6aa980b776b54647f443"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#ae336dc80d29e6aa980b776b54647f443">POLARSSL_ERR_PK_INVALID_PUBKEY</a>&#160;&#160;&#160;-0x2B00</td></tr>
<tr class="memdesc:ae336dc80d29e6aa980b776b54647f443"><td class="mdescLeft">&#160;</td><td class="mdescRight">The pubkey tag or value is invalid (only RSA and EC are supported).  <a href="#ae336dc80d29e6aa980b776b54647f443">More...</a><br/></td></tr>
<tr class="separator:ae336dc80d29e6aa980b776b54647f443"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f006a0485438e073549d87796d450cc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a3f006a0485438e073549d87796d450cc">POLARSSL_ERR_PK_INVALID_ALG</a>&#160;&#160;&#160;-0x2A80</td></tr>
<tr class="memdesc:a3f006a0485438e073549d87796d450cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">The algorithm tag or value is invalid.  <a href="#a3f006a0485438e073549d87796d450cc">More...</a><br/></td></tr>
<tr class="separator:a3f006a0485438e073549d87796d450cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c3ac0ce0bef7a1903bdb98fce9b5e6e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a0c3ac0ce0bef7a1903bdb98fce9b5e6e">POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE</a>&#160;&#160;&#160;-0x2A00</td></tr>
<tr class="memdesc:a0c3ac0ce0bef7a1903bdb98fce9b5e6e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Elliptic curve is unsupported (only NIST curves are supported).  <a href="#a0c3ac0ce0bef7a1903bdb98fce9b5e6e">More...</a><br/></td></tr>
<tr class="separator:a0c3ac0ce0bef7a1903bdb98fce9b5e6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37a8bde8e3ed0443bba504a22e83045c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a37a8bde8e3ed0443bba504a22e83045c">POLARSSL_ERR_PK_FEATURE_UNAVAILABLE</a>&#160;&#160;&#160;-0x2980</td></tr>
<tr class="memdesc:a37a8bde8e3ed0443bba504a22e83045c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unavailable feature, e.g.  <a href="#a37a8bde8e3ed0443bba504a22e83045c">More...</a><br/></td></tr>
<tr class="separator:a37a8bde8e3ed0443bba504a22e83045c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a455daffab2c5f217faf4e65c26a8c505"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a455daffab2c5f217faf4e65c26a8c505">POLARSSL_ERR_PK_SIG_LEN_MISMATCH</a>&#160;&#160;&#160;-0x2000</td></tr>
<tr class="memdesc:a455daffab2c5f217faf4e65c26a8c505"><td class="mdescLeft">&#160;</td><td class="mdescRight">The signature is valid but its length is less than expected.  <a href="#a455daffab2c5f217faf4e65c26a8c505">More...</a><br/></td></tr>
<tr class="separator:a455daffab2c5f217faf4e65c26a8c505"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a38f752fba9162d32f36e5d55e2d829e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a38f752fba9162d32f36e5d55e2d829e5">pk_rsa</a>(pk)&#160;&#160;&#160;( (<a class="el" href="structrsa__context.html">rsa_context</a> *) (pk).pk_ctx )</td></tr>
<tr class="memdesc:a38f752fba9162d32f36e5d55e2d829e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Quick access to an RSA context inside a PK context.  <a href="#a38f752fba9162d32f36e5d55e2d829e5">More...</a><br/></td></tr>
<tr class="separator:a38f752fba9162d32f36e5d55e2d829e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa99af910a6ed4465722c0c1348c8c65e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#aa99af910a6ed4465722c0c1348c8c65e">pk_ec</a>(pk)&#160;&#160;&#160;( (<a class="el" href="structecp__keypair.html">ecp_keypair</a> *) (pk).pk_ctx )</td></tr>
<tr class="memdesc:aa99af910a6ed4465722c0c1348c8c65e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Quick access to an EC context inside a PK context.  <a href="#aa99af910a6ed4465722c0c1348c8c65e">More...</a><br/></td></tr>
<tr class="separator:aa99af910a6ed4465722c0c1348c8c65e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2565c73cdb12cc77e552cd3ed5a80960"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a2565c73cdb12cc77e552cd3ed5a80960">POLARSSL_PK_DEBUG_MAX_ITEMS</a>&#160;&#160;&#160;3</td></tr>
<tr class="memdesc:a2565c73cdb12cc77e552cd3ed5a80960"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum number of item send for debugging, plus 1.  <a href="#a2565c73cdb12cc77e552cd3ed5a80960">More...</a><br/></td></tr>
<tr class="separator:a2565c73cdb12cc77e552cd3ed5a80960"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a41751bd8fdca87d15a129c17e02a2961"><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a41751bd8fdca87d15a129c17e02a2961">pk_rsa_alt_decrypt_func</a> )(void *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)</td></tr>
<tr class="memdesc:a41751bd8fdca87d15a129c17e02a2961"><td class="mdescLeft">&#160;</td><td class="mdescRight">Types for RSA-alt abstraction.  <a href="#a41751bd8fdca87d15a129c17e02a2961">More...</a><br/></td></tr>
<tr class="separator:a41751bd8fdca87d15a129c17e02a2961"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8927482ee127f20158b61cfba0c44e0a"><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a8927482ee127f20158b61cfba0c44e0a">pk_rsa_alt_sign_func</a> )(void *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, <a class="el" href="md_8h.html#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a> md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)</td></tr>
<tr class="separator:a8927482ee127f20158b61cfba0c44e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9413ee3f4b2f8e8b898af1127410e19"><td class="memItemLeft" align="right" valign="top">typedef size_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#ad9413ee3f4b2f8e8b898af1127410e19">pk_rsa_alt_key_len_func</a> )(void *ctx)</td></tr>
<tr class="separator:ad9413ee3f4b2f8e8b898af1127410e19"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:afca3aa33cb1f34742a7ee3fd8ccec9ca"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a> { <br/>
&#160;&#160;<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caafcfacdf2203aeb937e4dfe6bb11f6088">POLARSSL_PK_NONE</a> =0, 
<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caac21caece338fd9c2d1ee4bbdac9017e3">POLARSSL_PK_RSA</a>, 
<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caa0ca1b70e294125c0c431fadccf950b5e">POLARSSL_PK_ECKEY</a>, 
<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caa3fabfc2fa7f8ddef3ad6ee2f0cf712e8">POLARSSL_PK_ECKEY_DH</a>, 
<br/>
&#160;&#160;<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caa0850c1ae1de62f6694008fbd6e47b879">POLARSSL_PK_ECDSA</a>, 
<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caabf49fc389df7ee9be855e2c6e968022c">POLARSSL_PK_RSA_ALT</a>, 
<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9caa67532cca7f6aae8de28438222d0c49bd">POLARSSL_PK_RSASSA_PSS</a>
<br/>
 }</td></tr>
<tr class="memdesc:afca3aa33cb1f34742a7ee3fd8ccec9ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public key types.  <a href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">More...</a><br/></td></tr>
<tr class="separator:afca3aa33cb1f34742a7ee3fd8ccec9ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa057c935b32ef1caa39bdf9edd656df1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#aa057c935b32ef1caa39bdf9edd656df1">pk_debug_type</a> { <a class="el" href="pk_8h.html#aa057c935b32ef1caa39bdf9edd656df1a054af3a928607420c980ffcbf0a312eb">POLARSSL_PK_DEBUG_NONE</a> = 0, 
<a class="el" href="pk_8h.html#aa057c935b32ef1caa39bdf9edd656df1a1030d0b1a2e4be18ed2b0157565a7ac7">POLARSSL_PK_DEBUG_MPI</a>, 
<a class="el" href="pk_8h.html#aa057c935b32ef1caa39bdf9edd656df1a8b7d6a72aff73bb6a9561744a685ef06">POLARSSL_PK_DEBUG_ECP</a>
 }</td></tr>
<tr class="memdesc:aa057c935b32ef1caa39bdf9edd656df1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Types for interfacing with the debug module.  <a href="pk_8h.html#aa057c935b32ef1caa39bdf9edd656df1">More...</a><br/></td></tr>
<tr class="separator:aa057c935b32ef1caa39bdf9edd656df1"><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:a872f51e108cbf04f0a0997440f8208f5"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structpk__info__t.html">pk_info_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a872f51e108cbf04f0a0997440f8208f5">pk_info_from_type</a> (<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a> pk_type)</td></tr>
<tr class="memdesc:a872f51e108cbf04f0a0997440f8208f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return information associated with the given PK type.  <a href="#a872f51e108cbf04f0a0997440f8208f5">More...</a><br/></td></tr>
<tr class="separator:a872f51e108cbf04f0a0997440f8208f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9dc9fb5c88b9192f27b71688ecedb33"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#af9dc9fb5c88b9192f27b71688ecedb33">pk_init</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx)</td></tr>
<tr class="memdesc:af9dc9fb5c88b9192f27b71688ecedb33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a <a class="el" href="structpk__context.html" title="Public key container. ">pk_context</a> (as NONE)  <a href="#af9dc9fb5c88b9192f27b71688ecedb33">More...</a><br/></td></tr>
<tr class="separator:af9dc9fb5c88b9192f27b71688ecedb33"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b5e20233f984cf440379b41b9961911"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a7b5e20233f984cf440379b41b9961911">pk_free</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx)</td></tr>
<tr class="memdesc:a7b5e20233f984cf440379b41b9961911"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free a <a class="el" href="structpk__context.html" title="Public key container. ">pk_context</a>.  <a href="#a7b5e20233f984cf440379b41b9961911">More...</a><br/></td></tr>
<tr class="separator:a7b5e20233f984cf440379b41b9961911"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20121fafbe05f5c4bdaade644ad2a886"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a20121fafbe05f5c4bdaade644ad2a886">pk_init_ctx</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const <a class="el" href="structpk__info__t.html">pk_info_t</a> *info)</td></tr>
<tr class="memdesc:a20121fafbe05f5c4bdaade644ad2a886"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a PK context with the information given and allocates the type-specific PK subcontext.  <a href="#a20121fafbe05f5c4bdaade644ad2a886">More...</a><br/></td></tr>
<tr class="separator:a20121fafbe05f5c4bdaade644ad2a886"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14ae82039a8ee045bc072bc5cc56b286"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a14ae82039a8ee045bc072bc5cc56b286">pk_init_ctx_rsa_alt</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, void *key, <a class="el" href="pk_8h.html#a41751bd8fdca87d15a129c17e02a2961">pk_rsa_alt_decrypt_func</a> decrypt_func, <a class="el" href="pk_8h.html#a8927482ee127f20158b61cfba0c44e0a">pk_rsa_alt_sign_func</a> sign_func, <a class="el" href="pk_8h.html#ad9413ee3f4b2f8e8b898af1127410e19">pk_rsa_alt_key_len_func</a> key_len_func)</td></tr>
<tr class="memdesc:a14ae82039a8ee045bc072bc5cc56b286"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize an RSA-alt context.  <a href="#a14ae82039a8ee045bc072bc5cc56b286">More...</a><br/></td></tr>
<tr class="separator:a14ae82039a8ee045bc072bc5cc56b286"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba04299e090477925590c9e70b4b5a52"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#aba04299e090477925590c9e70b4b5a52">pk_get_size</a> (const <a class="el" href="structpk__context.html">pk_context</a> *ctx)</td></tr>
<tr class="memdesc:aba04299e090477925590c9e70b4b5a52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size in bits of the underlying key.  <a href="#aba04299e090477925590c9e70b4b5a52">More...</a><br/></td></tr>
<tr class="separator:aba04299e090477925590c9e70b4b5a52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8455224749a8b3c0298d1468c8916169"><td class="memItemLeft" align="right" valign="top">static size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a8455224749a8b3c0298d1468c8916169">pk_get_len</a> (const <a class="el" href="structpk__context.html">pk_context</a> *ctx)</td></tr>
<tr class="memdesc:a8455224749a8b3c0298d1468c8916169"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the length in bytes of the underlying key.  <a href="#a8455224749a8b3c0298d1468c8916169">More...</a><br/></td></tr>
<tr class="separator:a8455224749a8b3c0298d1468c8916169"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd6c7a41fd9fbf5c9b0d7409f0f2bd7a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#afd6c7a41fd9fbf5c9b0d7409f0f2bd7a">pk_can_do</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, <a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a> type)</td></tr>
<tr class="memdesc:afd6c7a41fd9fbf5c9b0d7409f0f2bd7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tell if a context can do the operation given by type.  <a href="#afd6c7a41fd9fbf5c9b0d7409f0f2bd7a">More...</a><br/></td></tr>
<tr class="separator:afd6c7a41fd9fbf5c9b0d7409f0f2bd7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a983cd494460c58663c998d5072fe5bd0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a983cd494460c58663c998d5072fe5bd0">pk_verify</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, <a class="el" href="md_8h.html#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a> md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)</td></tr>
<tr class="memdesc:a983cd494460c58663c998d5072fe5bd0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify signature (including padding if relevant).  <a href="#a983cd494460c58663c998d5072fe5bd0">More...</a><br/></td></tr>
<tr class="separator:a983cd494460c58663c998d5072fe5bd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a3c4fb7fad1c9097df161208d81b097"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a3a3c4fb7fad1c9097df161208d81b097">pk_verify_ext</a> (<a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a> type, const void *options, <a class="el" href="structpk__context.html">pk_context</a> *ctx, <a class="el" href="md_8h.html#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a> md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)</td></tr>
<tr class="memdesc:a3a3c4fb7fad1c9097df161208d81b097"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify signature, with options.  <a href="#a3a3c4fb7fad1c9097df161208d81b097">More...</a><br/></td></tr>
<tr class="separator:a3a3c4fb7fad1c9097df161208d81b097"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f5f2b84010885d569ddc0d408e60642"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a7f5f2b84010885d569ddc0d408e60642">pk_sign</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, <a class="el" href="md_8h.html#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a> md_alg, const unsigned char *hash, size_t hash_len, unsigned char *sig, size_t *sig_len, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a7f5f2b84010885d569ddc0d408e60642"><td class="mdescLeft">&#160;</td><td class="mdescRight">Make signature, including padding if relevant.  <a href="#a7f5f2b84010885d569ddc0d408e60642">More...</a><br/></td></tr>
<tr class="separator:a7f5f2b84010885d569ddc0d408e60642"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28b374cdb014b7cbef02a68e391c58c8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a28b374cdb014b7cbef02a68e391c58c8">pk_decrypt</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen, size_t osize, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a28b374cdb014b7cbef02a68e391c58c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decrypt message (including padding if relevant).  <a href="#a28b374cdb014b7cbef02a68e391c58c8">More...</a><br/></td></tr>
<tr class="separator:a28b374cdb014b7cbef02a68e391c58c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1dd92fc68132d533530bcee594c49cf5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a1dd92fc68132d533530bcee594c49cf5">pk_encrypt</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen, size_t osize, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a1dd92fc68132d533530bcee594c49cf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encrypt message (including padding if relevant).  <a href="#a1dd92fc68132d533530bcee594c49cf5">More...</a><br/></td></tr>
<tr class="separator:a1dd92fc68132d533530bcee594c49cf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac769244ad219173fe42e3022389ad574"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#ac769244ad219173fe42e3022389ad574">pk_debug</a> (const <a class="el" href="structpk__context.html">pk_context</a> *ctx, <a class="el" href="structpk__debug__item.html">pk_debug_item</a> *items)</td></tr>
<tr class="memdesc:ac769244ad219173fe42e3022389ad574"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export debug information.  <a href="#ac769244ad219173fe42e3022389ad574">More...</a><br/></td></tr>
<tr class="separator:ac769244ad219173fe42e3022389ad574"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c98e8c088dce6f72b4c8825d6f19160"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a8c98e8c088dce6f72b4c8825d6f19160">pk_get_name</a> (const <a class="el" href="structpk__context.html">pk_context</a> *ctx)</td></tr>
<tr class="memdesc:a8c98e8c088dce6f72b4c8825d6f19160"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access the type name.  <a href="#a8c98e8c088dce6f72b4c8825d6f19160">More...</a><br/></td></tr>
<tr class="separator:a8c98e8c088dce6f72b4c8825d6f19160"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad3b2000d9b043b19530042170e61c404"><td class="memItemLeft" align="right" valign="top"><a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#ad3b2000d9b043b19530042170e61c404">pk_get_type</a> (const <a class="el" href="structpk__context.html">pk_context</a> *ctx)</td></tr>
<tr class="memdesc:ad3b2000d9b043b19530042170e61c404"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the key type.  <a href="#ad3b2000d9b043b19530042170e61c404">More...</a><br/></td></tr>
<tr class="separator:ad3b2000d9b043b19530042170e61c404"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2116e060a9aeb3589cb90633b6d8d062"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a2116e060a9aeb3589cb90633b6d8d062">pk_parse_key</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const unsigned char *key, size_t keylen, const unsigned char *pwd, size_t pwdlen)</td></tr>
<tr class="memdesc:a2116e060a9aeb3589cb90633b6d8d062"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse a private key.  <a href="#a2116e060a9aeb3589cb90633b6d8d062">More...</a><br/></td></tr>
<tr class="separator:a2116e060a9aeb3589cb90633b6d8d062"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67ffa512157184d2e30e3b451344b841"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a67ffa512157184d2e30e3b451344b841">pk_parse_public_key</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const unsigned char *key, size_t keylen)</td></tr>
<tr class="memdesc:a67ffa512157184d2e30e3b451344b841"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse a public key.  <a href="#a67ffa512157184d2e30e3b451344b841">More...</a><br/></td></tr>
<tr class="separator:a67ffa512157184d2e30e3b451344b841"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a584d2510270b007b22d31416e2a7f99e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a584d2510270b007b22d31416e2a7f99e">pk_parse_keyfile</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const char *path, const char *password)</td></tr>
<tr class="memdesc:a584d2510270b007b22d31416e2a7f99e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load and parse a private key.  <a href="#a584d2510270b007b22d31416e2a7f99e">More...</a><br/></td></tr>
<tr class="separator:a584d2510270b007b22d31416e2a7f99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab23ae3da09fcd7f81bd106f7763e9b05"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#ab23ae3da09fcd7f81bd106f7763e9b05">pk_parse_public_keyfile</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, const char *path)</td></tr>
<tr class="memdesc:ab23ae3da09fcd7f81bd106f7763e9b05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load and parse a public key.  <a href="#ab23ae3da09fcd7f81bd106f7763e9b05">More...</a><br/></td></tr>
<tr class="separator:ab23ae3da09fcd7f81bd106f7763e9b05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a890b5c8b8de2bc2853005e045b72edf7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a890b5c8b8de2bc2853005e045b72edf7">pk_write_key_der</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, unsigned char *buf, size_t size)</td></tr>
<tr class="memdesc:a890b5c8b8de2bc2853005e045b72edf7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a private key to a PKCS#1 or SEC1 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="#a890b5c8b8de2bc2853005e045b72edf7">More...</a><br/></td></tr>
<tr class="separator:a890b5c8b8de2bc2853005e045b72edf7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1cc3c109b8f82badd7d69f31f76f7bab"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a1cc3c109b8f82badd7d69f31f76f7bab">pk_write_pubkey_der</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, unsigned char *buf, size_t size)</td></tr>
<tr class="memdesc:a1cc3c109b8f82badd7d69f31f76f7bab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a public key to a SubjectPublicKeyInfo 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="#a1cc3c109b8f82badd7d69f31f76f7bab">More...</a><br/></td></tr>
<tr class="separator:a1cc3c109b8f82badd7d69f31f76f7bab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ae31f8d6873f9358bd935a351570097"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a5ae31f8d6873f9358bd935a351570097">pk_write_pubkey_pem</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, unsigned char *buf, size_t size)</td></tr>
<tr class="memdesc:a5ae31f8d6873f9358bd935a351570097"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a public key to a PEM string.  <a href="#a5ae31f8d6873f9358bd935a351570097">More...</a><br/></td></tr>
<tr class="separator:a5ae31f8d6873f9358bd935a351570097"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ab31e8bc38a4e99f1b4f5d4b94b230c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a7ab31e8bc38a4e99f1b4f5d4b94b230c">pk_write_key_pem</a> (<a class="el" href="structpk__context.html">pk_context</a> *ctx, unsigned char *buf, size_t size)</td></tr>
<tr class="memdesc:a7ab31e8bc38a4e99f1b4f5d4b94b230c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a private key to a PKCS#1 or SEC1 PEM string.  <a href="#a7ab31e8bc38a4e99f1b4f5d4b94b230c">More...</a><br/></td></tr>
<tr class="separator:a7ab31e8bc38a4e99f1b4f5d4b94b230c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8601c6b94a0baaa878cddf8b251d229d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#a8601c6b94a0baaa878cddf8b251d229d">pk_parse_subpubkey</a> (unsigned char **p, const unsigned char *end, <a class="el" href="structpk__context.html">pk_context</a> *pk)</td></tr>
<tr class="memdesc:a8601c6b94a0baaa878cddf8b251d229d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse a SubjectPublicKeyInfo DER structure.  <a href="#a8601c6b94a0baaa878cddf8b251d229d">More...</a><br/></td></tr>
<tr class="separator:a8601c6b94a0baaa878cddf8b251d229d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb4acfcc6b9efd9fecc9f9b6a0bc03f9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pk_8h.html#afb4acfcc6b9efd9fecc9f9b6a0bc03f9">pk_write_pubkey</a> (unsigned char **p, unsigned char *start, const <a class="el" href="structpk__context.html">pk_context</a> *key)</td></tr>
<tr class="memdesc:afb4acfcc6b9efd9fecc9f9b6a0bc03f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a subjectPublicKey to ASN.1 data Note: function works backwards in data buffer.  <a href="#afb4acfcc6b9efd9fecc9f9b6a0bc03f9">More...</a><br/></td></tr>
<tr class="separator:afb4acfcc6b9efd9fecc9f9b6a0bc03f9"><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>Public Key abstraction layer. </p>
<p>Public Key abstraction layer: wrapper functions.</p>
<p>Copyright (C) 2006-2013, Brainspark B.V.</p>
<p>This file is part of PolarSSL (<a href="http://www.polarssl.org">http://www.polarssl.org</a>) Lead Maintainer: Paul Bakker &lt;polarssl_maintainer at polarssl.org&gt;</p>
<p>All rights reserved.</p>
<p>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
<p>You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. </p>

<p>Definition in file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="aa99af910a6ed4465722c0c1348c8c65e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define pk_ec</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">pk</td><td>)</td>
          <td>&#160;&#160;&#160;( (<a class="el" href="structecp__keypair.html">ecp_keypair</a> *) (pk).pk_ctx )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Quick access to an EC context inside a PK context. </p>
<dl class="section warning"><dt>Warning</dt><dd>You must make sure the PK context actually holds an EC context before using this macro! </dd></dl>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00084">84</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a38f752fba9162d32f36e5d55e2d829e5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define pk_rsa</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">pk</td><td>)</td>
          <td>&#160;&#160;&#160;( (<a class="el" href="structrsa__context.html">rsa_context</a> *) (pk).pk_ctx )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Quick access to an RSA context inside a PK context. </p>
<dl class="section warning"><dt>Warning</dt><dd>You must make sure the PK context actually holds an RSA context before using this macro! </dd></dl>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00074">74</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00379">x509_write_key_der()</a>, <a class="el" href="compat-1_82_8h_source.html#l00370">x509_write_pubkey_der()</a>, <a class="el" href="compat-1_82_8h_source.html#l00333">x509parse_key()</a>, <a class="el" href="compat-1_82_8h_source.html#l00302">x509parse_keyfile()</a>, <a class="el" href="compat-1_82_8h_source.html#l00350">x509parse_public_key()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00317">x509parse_public_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="af53e57b17f7ca55022d3b639ad0ba722"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_BAD_INPUT_DATA&#160;&#160;&#160;-0x2E80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Bad input parameters to function. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00053">53</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a37a8bde8e3ed0443bba504a22e83045c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_FEATURE_UNAVAILABLE&#160;&#160;&#160;-0x2980</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Unavailable feature, e.g. </p>
<p>RSA disabled for RSA key. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00063">63</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a5e35817e1086ccdf611600128561281c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_FILE_IO_ERROR&#160;&#160;&#160;-0x2E00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Read/write of file failed. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00054">54</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a3f006a0485438e073549d87796d450cc"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_INVALID_ALG&#160;&#160;&#160;-0x2A80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The algorithm tag or value is invalid. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00061">61</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="ae336dc80d29e6aa980b776b54647f443"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_INVALID_PUBKEY&#160;&#160;&#160;-0x2B00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The pubkey tag or value is invalid (only RSA and EC are supported). </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00060">60</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a0af52f107aa8ae7b6e31facfd18ff44b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_KEY_INVALID_FORMAT&#160;&#160;&#160;-0x2D00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Invalid key tag or value. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00056">56</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a025c4150348004b381eeb5881737b77a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_KEY_INVALID_VERSION&#160;&#160;&#160;-0x2D80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Unsupported key version. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00055">55</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="ac615b9e36b084faf6d51dc1f3405e563"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_MALLOC_FAILED&#160;&#160;&#160;-0x2F80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Memory alloation failed. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00051">51</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a8fade72c0a20c8d5f13ce3a209db58ca"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_PASSWORD_MISMATCH&#160;&#160;&#160;-0x2B80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Given private key password does not allow for correct decryption. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00059">59</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a420e18624ba63e48d18c4e647a199904"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_PASSWORD_REQUIRED&#160;&#160;&#160;-0x2C00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Private key password can't be empty. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00058">58</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a455daffab2c5f217faf4e65c26a8c505"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_SIG_LEN_MISMATCH&#160;&#160;&#160;-0x2000</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The signature is valid but its length is less than expected. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00064">64</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="adfc2587a1c20023c21a1121d3a396d2f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_TYPE_MISMATCH&#160;&#160;&#160;-0x2F00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Type mismatch, eg attempt to encrypt with an ECDSA key. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00052">52</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00333">x509parse_key()</a>, <a class="el" href="compat-1_82_8h_source.html#l00302">x509parse_keyfile()</a>, <a class="el" href="compat-1_82_8h_source.html#l00350">x509parse_public_key()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00317">x509parse_public_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="a0c3ac0ce0bef7a1903bdb98fce9b5e6e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE&#160;&#160;&#160;-0x2A00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Elliptic curve is unsupported (only NIST curves are supported). </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00062">62</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a84d3aa6334f5ad3d67dee14c76017354"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_PK_UNKNOWN_PK_ALG&#160;&#160;&#160;-0x2C80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Key algorithm is unsupported (only RSA and EC are supported). </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00057">57</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a2565c73cdb12cc77e552cd3ed5a80960"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_PK_DEBUG_MAX_ITEMS&#160;&#160;&#160;3</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Maximum number of item send for debugging, plus 1. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00137">137</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="a41751bd8fdca87d15a129c17e02a2961"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef int(* pk_rsa_alt_decrypt_func)(void *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Types for RSA-alt abstraction. </p>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00203">203</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="ad9413ee3f4b2f8e8b898af1127410e19"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef size_t(* pk_rsa_alt_key_len_func)(void *ctx)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="pk_8h_source.html#l00210">210</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="a8927482ee127f20158b61cfba0c44e0a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef int(* pk_rsa_alt_sign_func)(void *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, <a class="el" href="md_8h.html#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a> md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="pk_8h_source.html#l00206">206</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="aa057c935b32ef1caa39bdf9edd656df1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="pk_8h.html#aa057c935b32ef1caa39bdf9edd656df1">pk_debug_type</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Types for interfacing with the debug module. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="aa057c935b32ef1caa39bdf9edd656df1a054af3a928607420c980ffcbf0a312eb"></a>POLARSSL_PK_DEBUG_NONE</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="aa057c935b32ef1caa39bdf9edd656df1a1030d0b1a2e4be18ed2b0157565a7ac7"></a>POLARSSL_PK_DEBUG_MPI</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="aa057c935b32ef1caa39bdf9edd656df1a8b7d6a72aff73bb6a9561744a685ef06"></a>POLARSSL_PK_DEBUG_ECP</em>&nbsp;</td><td class="fielddoc">
</td></tr>
</table>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00119">119</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9ca"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Public key types. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caafcfacdf2203aeb937e4dfe6bb11f6088"></a>POLARSSL_PK_NONE</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caac21caece338fd9c2d1ee4bbdac9017e3"></a>POLARSSL_PK_RSA</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caa0ca1b70e294125c0c431fadccf950b5e"></a>POLARSSL_PK_ECKEY</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caa3fabfc2fa7f8ddef3ad6ee2f0cf712e8"></a>POLARSSL_PK_ECKEY_DH</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caa0850c1ae1de62f6694008fbd6e47b879"></a>POLARSSL_PK_ECDSA</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caabf49fc389df7ee9be855e2c6e968022c"></a>POLARSSL_PK_RSA_ALT</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="afca3aa33cb1f34742a7ee3fd8ccec9caa67532cca7f6aae8de28438222d0c49bd"></a>POLARSSL_PK_RSASSA_PSS</em>&nbsp;</td><td class="fielddoc">
</td></tr>
</table>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00095">95</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="afd6c7a41fd9fbf5c9b0d7409f0f2bd7a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_can_do </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a>&#160;</td>
          <td class="paramname"><em>type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tell if a context can do the operation given by type. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to test </td></tr>
    <tr><td class="paramname">type</td><td>Target type</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if context can't do the operations, 1 otherwise. </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00333">x509parse_key()</a>, <a class="el" href="compat-1_82_8h_source.html#l00302">x509parse_keyfile()</a>, <a class="el" href="compat-1_82_8h_source.html#l00350">x509parse_public_key()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00317">x509parse_public_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="ac769244ad219173fe42e3022389ad574"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_debug </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpk__context.html">pk_context</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="structpk__debug__item.html">pk_debug_item</a> *&#160;</td>
          <td class="paramname"><em>items</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Export debug information. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to use </td></tr>
    <tr><td class="paramname">items</td><td>Place to write debug items</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success or POLARSSL_ERR_PK_BAD_INPUT_DATA </dd></dl>

</div>
</div>
<a class="anchor" id="a28b374cdb014b7cbef02a68e391c58c8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_decrypt </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>ilen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>olen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>osize</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>Decrypt message (including padding if relevant). </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>PK context to use </td></tr>
    <tr><td class="paramname">input</td><td>Input to decrypt </td></tr>
    <tr><td class="paramname">ilen</td><td>Input size </td></tr>
    <tr><td class="paramname">output</td><td>Decrypted output </td></tr>
    <tr><td class="paramname">olen</td><td>Decrypted message length </td></tr>
    <tr><td class="paramname">osize</td><td>Size of the output buffer </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>For RSA keys, the default padding type is PKCS#1 v1.5.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, or a specific error code. </dd></dl>

</div>
</div>
<a class="anchor" id="a1dd92fc68132d533530bcee594c49cf5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_encrypt </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>input</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>ilen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>olen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>osize</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>Encrypt message (including padding if relevant). </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>PK context to use </td></tr>
    <tr><td class="paramname">input</td><td>Message to encrypt </td></tr>
    <tr><td class="paramname">ilen</td><td>Message size </td></tr>
    <tr><td class="paramname">output</td><td>Encrypted output </td></tr>
    <tr><td class="paramname">olen</td><td>Encrypted output length </td></tr>
    <tr><td class="paramname">osize</td><td>Size of the output buffer </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>For RSA keys, the default padding type is PKCS#1 v1.5.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, or a specific error code. </dd></dl>

</div>
</div>
<a class="anchor" id="a7b5e20233f984cf440379b41b9961911"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pk_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Free a <a class="el" href="structpk__context.html" title="Public key container. ">pk_context</a>. </p>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00379">x509_write_key_der()</a>, <a class="el" href="compat-1_82_8h_source.html#l00370">x509_write_pubkey_der()</a>, <a class="el" href="compat-1_82_8h_source.html#l00333">x509parse_key()</a>, <a class="el" href="compat-1_82_8h_source.html#l00302">x509parse_keyfile()</a>, <a class="el" href="compat-1_82_8h_source.html#l00350">x509parse_public_key()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00317">x509parse_public_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="a8455224749a8b3c0298d1468c8916169"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static size_t pk_get_len </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the length in bytes of the underlying key. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Key length in bytes, or 0 on error </dd></dl>

<p>Definition at line <a class="el" href="pk_8h_source.html#l00281">281</a> of file <a class="el" href="pk_8h_source.html">pk.h</a>.</p>

<p>References <a class="el" href="pk_8h.html#aba04299e090477925590c9e70b4b5a52">pk_get_size()</a>.</p>

</div>
</div>
<a class="anchor" id="a8c98e8c088dce6f72b4c8825d6f19160"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* pk_get_name </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Access the type name. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Type name on success, or "invalid PK" </dd></dl>

</div>
</div>
<a class="anchor" id="aba04299e090477925590c9e70b4b5a52"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t pk_get_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the size in bits of the underlying key. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Key size in bits, or 0 on error </dd></dl>

<p>Referenced by <a class="el" href="pk_8h_source.html#l00281">pk_get_len()</a>.</p>

</div>
</div>
<a class="anchor" id="ad3b2000d9b043b19530042170e61c404"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a> pk_get_type </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the key type. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Type on success, or POLARSSL_PK_NONE </dd></dl>

</div>
</div>
<a class="anchor" id="a872f51e108cbf04f0a0997440f8208f5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structpk__info__t.html">pk_info_t</a>* pk_info_from_type </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a>&#160;</td>
          <td class="paramname"><em>pk_type</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return information associated with the given PK type. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">pk_type</td><td>PK type to search for.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The PK info associated with the type or NULL if not found. </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00379">x509_write_key_der()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00370">x509_write_pubkey_der()</a>.</p>

</div>
</div>
<a class="anchor" id="af9dc9fb5c88b9192f27b71688ecedb33"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pk_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize a <a class="el" href="structpk__context.html" title="Public key container. ">pk_context</a> (as NONE) </p>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00333">x509parse_key()</a>, <a class="el" href="compat-1_82_8h_source.html#l00302">x509parse_keyfile()</a>, <a class="el" href="compat-1_82_8h_source.html#l00350">x509parse_public_key()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00317">x509parse_public_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="a20121fafbe05f5c4bdaade644ad2a886"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_init_ctx </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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="structpk__info__t.html">pk_info_t</a> *&#160;</td>
          <td class="paramname"><em>info</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize a PK context with the information given and allocates the type-specific PK subcontext. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to initialize. Must be empty (type NONE). </td></tr>
    <tr><td class="paramname">info</td><td>Information to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, POLARSSL_ERR_PK_BAD_INPUT_DATA on invalid input, POLARSSL_ERR_PK_MALLOC_FAILED on allocation failure.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>For contexts holding an RSA-alt key, use <code><a class="el" href="pk_8h.html#a14ae82039a8ee045bc072bc5cc56b286" title="Initialize an RSA-alt context. ">pk_init_ctx_rsa_alt()</a></code> instead. </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00379">x509_write_key_der()</a>, and <a class="el" href="compat-1_82_8h_source.html#l00370">x509_write_pubkey_der()</a>.</p>

</div>
</div>
<a class="anchor" id="a14ae82039a8ee045bc072bc5cc56b286"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_init_ctx_rsa_alt </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="pk_8h.html#a41751bd8fdca87d15a129c17e02a2961">pk_rsa_alt_decrypt_func</a>&#160;</td>
          <td class="paramname"><em>decrypt_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="pk_8h.html#a8927482ee127f20158b61cfba0c44e0a">pk_rsa_alt_sign_func</a>&#160;</td>
          <td class="paramname"><em>sign_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="pk_8h.html#ad9413ee3f4b2f8e8b898af1127410e19">pk_rsa_alt_key_len_func</a>&#160;</td>
          <td class="paramname"><em>key_len_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize an RSA-alt context. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>Context to initialize. Must be empty (type NONE). </td></tr>
    <tr><td class="paramname">key</td><td>RSA key pointer </td></tr>
    <tr><td class="paramname">decrypt_func</td><td>Decryption function </td></tr>
    <tr><td class="paramname">sign_func</td><td>Signing function </td></tr>
    <tr><td class="paramname">key_len_func</td><td>Function returning key length in bytes</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, or POLARSSL_ERR_PK_BAD_INPUT_DATA if the context wasn't already initialized as RSA_ALT.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function replaces <code><a class="el" href="pk_8h.html#a20121fafbe05f5c4bdaade644ad2a886" title="Initialize a PK context with the information given and allocates the type-specific PK subcontext...">pk_init_ctx()</a></code> for RSA-alt. </dd></dl>

</div>
</div>
<a class="anchor" id="a2116e060a9aeb3589cb90633b6d8d062"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_parse_key </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>keylen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>pwd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>pwdlen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Parse a private key. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>key to be initialized </td></tr>
    <tr><td class="paramname">key</td><td>input buffer </td></tr>
    <tr><td class="paramname">keylen</td><td>size of the buffer </td></tr>
    <tr><td class="paramname">pwd</td><td>password for decryption (optional) </td></tr>
    <tr><td class="paramname">pwdlen</td><td>size of the password</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>On entry, ctx must be empty, either freshly initialised with <a class="el" href="pk_8h.html#af9dc9fb5c88b9192f27b71688ecedb33" title="Initialize a pk_context (as NONE) ">pk_init()</a> or reset with <a class="el" href="pk_8h.html#a7b5e20233f984cf440379b41b9961911" title="Free a pk_context. ">pk_free()</a>. If you need a specific key type, check the result with <a class="el" href="pk_8h.html#afd6c7a41fd9fbf5c9b0d7409f0f2bd7a" title="Tell if a context can do the operation given by type. ">pk_can_do()</a>.</dd>
<dd>
The key is also checked for correctness.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a specific PK or PEM error code </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00333">x509parse_key()</a>.</p>

</div>
</div>
<a class="anchor" id="a584d2510270b007b22d31416e2a7f99e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_parse_keyfile </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>password</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Load and parse a private key. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>key to be initialized </td></tr>
    <tr><td class="paramname">path</td><td>filename to read the private key from </td></tr>
    <tr><td class="paramname">password</td><td>password to decrypt the file (can be NULL)</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>On entry, ctx must be empty, either freshly initialised with <a class="el" href="pk_8h.html#af9dc9fb5c88b9192f27b71688ecedb33" title="Initialize a pk_context (as NONE) ">pk_init()</a> or reset with <a class="el" href="pk_8h.html#a7b5e20233f984cf440379b41b9961911" title="Free a pk_context. ">pk_free()</a>. If you need a specific key type, check the result with <a class="el" href="pk_8h.html#afd6c7a41fd9fbf5c9b0d7409f0f2bd7a" title="Tell if a context can do the operation given by type. ">pk_can_do()</a>.</dd>
<dd>
The key is also checked for correctness.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a specific PK or PEM error code </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00302">x509parse_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="a67ffa512157184d2e30e3b451344b841"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_parse_public_key </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>keylen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Parse a public key. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>key to be initialized </td></tr>
    <tr><td class="paramname">key</td><td>input buffer </td></tr>
    <tr><td class="paramname">keylen</td><td>size of the buffer</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>On entry, ctx must be empty, either freshly initialised with <a class="el" href="pk_8h.html#af9dc9fb5c88b9192f27b71688ecedb33" title="Initialize a pk_context (as NONE) ">pk_init()</a> or reset with <a class="el" href="pk_8h.html#a7b5e20233f984cf440379b41b9961911" title="Free a pk_context. ">pk_free()</a>. If you need a specific key type, check the result with <a class="el" href="pk_8h.html#afd6c7a41fd9fbf5c9b0d7409f0f2bd7a" title="Tell if a context can do the operation given by type. ">pk_can_do()</a>.</dd>
<dd>
The key is also checked for correctness.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a specific PK or PEM error code </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00350">x509parse_public_key()</a>.</p>

</div>
</div>
<a class="anchor" id="ab23ae3da09fcd7f81bd106f7763e9b05"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_parse_public_keyfile </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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>path</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Load and parse a public key. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>key to be initialized </td></tr>
    <tr><td class="paramname">path</td><td>filename to read the private key from</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>On entry, ctx must be empty, either freshly initialised with <a class="el" href="pk_8h.html#af9dc9fb5c88b9192f27b71688ecedb33" title="Initialize a pk_context (as NONE) ">pk_init()</a> or reset with <a class="el" href="pk_8h.html#a7b5e20233f984cf440379b41b9961911" title="Free a pk_context. ">pk_free()</a>. If you need a specific key type, check the result with <a class="el" href="pk_8h.html#afd6c7a41fd9fbf5c9b0d7409f0f2bd7a" title="Tell if a context can do the operation given by type. ">pk_can_do()</a>.</dd>
<dd>
The key is also checked for correctness.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a specific PK or PEM error code </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00317">x509parse_public_keyfile()</a>.</p>

</div>
</div>
<a class="anchor" id="a8601c6b94a0baaa878cddf8b251d229d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_parse_subpubkey </td>
          <td>(</td>
          <td class="paramtype">unsigned char **&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>end</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</a> *&#160;</td>
          <td class="paramname"><em>pk</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Parse a SubjectPublicKeyInfo DER structure. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>the position in the ASN.1 data </td></tr>
    <tr><td class="paramname">end</td><td>end of the buffer </td></tr>
    <tr><td class="paramname">pk</td><td>the key to fill</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a specific PK error code </dd></dl>

</div>
</div>
<a class="anchor" id="a7f5f2b84010885d569ddc0d408e60642"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_sign </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a>&#160;</td>
          <td class="paramname"><em>md_alg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>hash_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>sig</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>sig_len</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>Make signature, including padding if relevant. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>PK context to use </td></tr>
    <tr><td class="paramname">md_alg</td><td>Hash algorithm used (see notes) </td></tr>
    <tr><td class="paramname">hash</td><td>Hash of the message to sign </td></tr>
    <tr><td class="paramname">hash_len</td><td>Hash length or 0 (see notes) </td></tr>
    <tr><td class="paramname">sig</td><td>Place to write the signature </td></tr>
    <tr><td class="paramname">sig_len</td><td>Number of bytes written </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </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 on success, or a specific error code.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>For RSA keys, the default padding type is PKCS#1 v1.5. There is no interface in the PK module to make RSASSA-PSS signatures yet.</dd>
<dd>
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.</dd>
<dd>
md_alg may be POLARSSL_MD_NONE, only if hash_len != 0 </dd></dl>

</div>
</div>
<a class="anchor" id="a983cd494460c58663c998d5072fe5bd0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_verify </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a>&#160;</td>
          <td class="paramname"><em>md_alg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>hash_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>sig</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>sig_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Verify signature (including padding if relevant). </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>PK context to use </td></tr>
    <tr><td class="paramname">md_alg</td><td>Hash algorithm used (see notes) </td></tr>
    <tr><td class="paramname">hash</td><td>Hash of the message to sign </td></tr>
    <tr><td class="paramname">hash_len</td><td>Hash length or 0 (see notes) </td></tr>
    <tr><td class="paramname">sig</td><td>Signature to verify </td></tr>
    <tr><td class="paramname">sig_len</td><td>Signature length</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success (signature is valid), POLARSSL_ERR_PK_SIG_LEN_MISMATCH if the signature is valid but its actual length is less than sig_len, or a specific error code.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>For RSA keys, the default padding type is PKCS#1 v1.5. Use <code>pk_verify_ext</code>( POLARSSL_PK_RSASSA_PSS, ... ) to verify RSASSA_PSS signatures.</dd>
<dd>
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.</dd>
<dd>
md_alg may be POLARSSL_MD_NONE, only if hash_len != 0 </dd></dl>

</div>
</div>
<a class="anchor" id="a3a3c4fb7fad1c9097df161208d81b097"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_verify_ext </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="pk_8h.html#afca3aa33cb1f34742a7ee3fd8ccec9ca">pk_type_t</a>&#160;</td>
          <td class="paramname"><em>type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>options</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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#af1fbbb67afa0daee4090cde8864e0b68">md_type_t</a>&#160;</td>
          <td class="paramname"><em>md_alg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>hash_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>sig</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>sig_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Verify signature, with options. </p>
<pre class="fragment">             (Includes verification of the padding depending on type.)
</pre><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">type</td><td>Signature type (inc. possible padding type) to verify </td></tr>
    <tr><td class="paramname">options</td><td>Pointer to type-specific options, or NULL </td></tr>
    <tr><td class="paramname">ctx</td><td>PK context to use </td></tr>
    <tr><td class="paramname">md_alg</td><td>Hash algorithm used (see notes) </td></tr>
    <tr><td class="paramname">hash</td><td>Hash of the message to sign </td></tr>
    <tr><td class="paramname">hash_len</td><td>Hash length or 0 (see notes) </td></tr>
    <tr><td class="paramname">sig</td><td>Signature to verify </td></tr>
    <tr><td class="paramname">sig_len</td><td>Signature length</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success (signature is valid), POLARSSL_ERR_PK_TYPE_MISMATCH if the PK context can't be used for this type of signatures, POLARSSL_ERR_PK_SIG_LEN_MISMATCH if the signature is valid but its actual length is less than sig_len, or a specific error code.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.</dd>
<dd>
md_alg may be POLARSSL_MD_NONE, only if hash_len != 0</dd>
<dd>
If type is POLARSSL_PK_RSASSA_PSS, then options must point to a <a class="el" href="structpk__rsassa__pss__options.html" title="Options for RSASSA-PSS signature verification. ">pk_rsassa_pss_options</a> structure, otherwise it must be NULL. </dd></dl>

</div>
</div>
<a class="anchor" id="a890b5c8b8de2bc2853005e045b72edf7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_write_key_der </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write a private key to a PKCS#1 or SEC1 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>private 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>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>length of data written if successful, or a specific error code </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00379">x509_write_key_der()</a>.</p>

</div>
</div>
<a class="anchor" id="a7ab31e8bc38a4e99f1b4f5d4b94b230c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_write_key_pem </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write a private key to a PKCS#1 or SEC1 PEM string. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>private 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>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 successful, or a specific error code </dd></dl>

</div>
</div>
<a class="anchor" id="afb4acfcc6b9efd9fecc9f9b6a0bc03f9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_write_pubkey </td>
          <td>(</td>
          <td class="paramtype">unsigned char **&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>start</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpk__context.html">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>Write a subjectPublicKey to ASN.1 data Note: function works backwards in data buffer. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>reference to current position pointer </td></tr>
    <tr><td class="paramname">start</td><td>start of the buffer (for bounds-checking) </td></tr>
    <tr><td class="paramname">key</td><td>public key to write away</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the length written or a negative error code </dd></dl>

</div>
</div>
<a class="anchor" id="a1cc3c109b8f82badd7d69f31f76f7bab"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_write_pubkey_der </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write a public key to a SubjectPublicKeyInfo 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>public key 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>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>length of data written if successful, or a specific error code </dd></dl>

<p>Referenced by <a class="el" href="compat-1_82_8h_source.html#l00370">x509_write_pubkey_der()</a>.</p>

</div>
</div>
<a class="anchor" id="a5ae31f8d6873f9358bd935a351570097"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int pk_write_pubkey_pem </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpk__context.html">pk_context</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>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write a public key to a PEM string. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">ctx</td><td>public key 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>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 successful, or a specific error code </dd></dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jul 31 2014 11:35:56 for PolarSSL v1.3.8 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.5
</small></address>
</body>
</html>