<!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: asn1.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 Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data 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 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> | <a href="#define-members">Macros</a> </div> <div class="headertitle"> <div class="title">asn1.h File Reference</div> </div> </div><!--header--> <div class="contents"> <p>Generic ASN.1 parsing. <a href="#details">More...</a></p> <div class="textblock"><code>#include "<a class="el" href="config_8h_source.html">config.h</a>"</code><br/> <code>#include "<a class="el" href="bignum_8h_source.html">bignum.h</a>"</code><br/> <code>#include <string.h></code><br/> </div><div class="textblock"><div class="dynheader"> Include dependency graph for asn1.h:</div> <div class="dyncontent"> <div class="center"><img src="asn1_8h__incl.png" border="0" usemap="#asn1_8h" alt=""/></div> <map name="asn1_8h" id="asn1_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="asn1_8h__dep__incl.png" border="0" usemap="#asn1_8hdep" alt=""/></div> <map name="asn1_8hdep" id="asn1_8hdep"> </map> </div> </div> <p><a href="asn1_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  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct__asn1__buf.html">_asn1_buf</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Type-length-value structure that allows for ASN1 using DER. <a href="struct__asn1__buf.html#details">More...</a><br/></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct__asn1__bitstring.html">_asn1_bitstring</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Container for ASN1 bit strings. <a href="struct__asn1__bitstring.html#details">More...</a><br/></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct__asn1__sequence.html">_asn1_sequence</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Container for a sequence of ASN.1 items. <a href="struct__asn1__sequence.html#details">More...</a><br/></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct__asn1__named__data.html">_asn1_named_data</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Container for a sequence or list of 'named' ASN.1 data items. <a href="struct__asn1__named__data.html#details">More...</a><br/></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </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:a79358b9b589d5cf11497945672ea7fd7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a79358b9b589d5cf11497945672ea7fd7">OID_SIZE</a>(x)   (sizeof(x) - 1)</td></tr> <tr class="memdesc:a79358b9b589d5cf11497945672ea7fd7"><td class="mdescLeft"> </td><td class="mdescRight">Returns the size of the binary string, without the trailing \0. <a href="#a79358b9b589d5cf11497945672ea7fd7">More...</a><br/></td></tr> <tr class="separator:a79358b9b589d5cf11497945672ea7fd7"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a068fd58b6b0011021a516695ff14a41e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a068fd58b6b0011021a516695ff14a41e">OID_CMP</a>(oid_str, oid_buf)</td></tr> <tr class="memdesc:a068fd58b6b0011021a516695ff14a41e"><td class="mdescLeft"> </td><td class="mdescRight">Compares an asn1_buf structure to a reference OID. <a href="#a068fd58b6b0011021a516695ff14a41e">More...</a><br/></td></tr> <tr class="separator:a068fd58b6b0011021a516695ff14a41e"><td class="memSeparator" colspan="2"> </td></tr> <tr><td colspan="2"><div class="groupHeader">ASN1 Error codes</div></td></tr> <tr><td colspan="2"><div class="groupText"><p>These error codes are OR'ed to X509 error codes for higher error granularity.</p> <p>ASN1 is a standard to specify data structures. </p> </div></td></tr> <tr class="memitem:ga0274145c2843f1d22cf7ca9b7ed37bab"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga0274145c2843f1d22cf7ca9b7ed37bab">POLARSSL_ERR_ASN1_OUT_OF_DATA</a>   -0x0060</td></tr> <tr class="memdesc:ga0274145c2843f1d22cf7ca9b7ed37bab"><td class="mdescLeft"> </td><td class="mdescRight">Out of data when parsing an ASN1 data structure. <a href="group__asn1__module.html#ga0274145c2843f1d22cf7ca9b7ed37bab">More...</a><br/></td></tr> <tr class="separator:ga0274145c2843f1d22cf7ca9b7ed37bab"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga171798e67a7a1024ab5e1c12c73f0537"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga171798e67a7a1024ab5e1c12c73f0537">POLARSSL_ERR_ASN1_UNEXPECTED_TAG</a>   -0x0062</td></tr> <tr class="memdesc:ga171798e67a7a1024ab5e1c12c73f0537"><td class="mdescLeft"> </td><td class="mdescRight">ASN1 tag was of an unexpected value. <a href="group__asn1__module.html#ga171798e67a7a1024ab5e1c12c73f0537">More...</a><br/></td></tr> <tr class="separator:ga171798e67a7a1024ab5e1c12c73f0537"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga05662cd7f7290c3de3e74598f0a60b7e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga05662cd7f7290c3de3e74598f0a60b7e">POLARSSL_ERR_ASN1_INVALID_LENGTH</a>   -0x0064</td></tr> <tr class="memdesc:ga05662cd7f7290c3de3e74598f0a60b7e"><td class="mdescLeft"> </td><td class="mdescRight">Error when trying to determine the length or invalid length. <a href="group__asn1__module.html#ga05662cd7f7290c3de3e74598f0a60b7e">More...</a><br/></td></tr> <tr class="separator:ga05662cd7f7290c3de3e74598f0a60b7e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaffc1c105d348cf2be47a2c8d6ab5ef63"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gaffc1c105d348cf2be47a2c8d6ab5ef63">POLARSSL_ERR_ASN1_LENGTH_MISMATCH</a>   -0x0066</td></tr> <tr class="memdesc:gaffc1c105d348cf2be47a2c8d6ab5ef63"><td class="mdescLeft"> </td><td class="mdescRight">Actual length differs from expected length. <a href="group__asn1__module.html#gaffc1c105d348cf2be47a2c8d6ab5ef63">More...</a><br/></td></tr> <tr class="separator:gaffc1c105d348cf2be47a2c8d6ab5ef63"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga6dab8f2bf2ddd7e0c9f274267ab6aa30"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga6dab8f2bf2ddd7e0c9f274267ab6aa30">POLARSSL_ERR_ASN1_INVALID_DATA</a>   -0x0068</td></tr> <tr class="memdesc:ga6dab8f2bf2ddd7e0c9f274267ab6aa30"><td class="mdescLeft"> </td><td class="mdescRight">Data is invalid. <a href="group__asn1__module.html#ga6dab8f2bf2ddd7e0c9f274267ab6aa30">More...</a><br/></td></tr> <tr class="separator:ga6dab8f2bf2ddd7e0c9f274267ab6aa30"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga37e8d5745c2724e7330566921ca16fec"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga37e8d5745c2724e7330566921ca16fec">POLARSSL_ERR_ASN1_MALLOC_FAILED</a>   -0x006A</td></tr> <tr class="memdesc:ga37e8d5745c2724e7330566921ca16fec"><td class="mdescLeft"> </td><td class="mdescRight">Memory allocation failed. <a href="group__asn1__module.html#ga37e8d5745c2724e7330566921ca16fec">More...</a><br/></td></tr> <tr class="separator:ga37e8d5745c2724e7330566921ca16fec"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gafc87dd8ff36b6f9354941b0de4567cc6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gafc87dd8ff36b6f9354941b0de4567cc6">POLARSSL_ERR_ASN1_BUF_TOO_SMALL</a>   -0x006C</td></tr> <tr class="memdesc:gafc87dd8ff36b6f9354941b0de4567cc6"><td class="mdescLeft"> </td><td class="mdescRight">Buffer too small when writing ASN.1 data structure. <a href="group__asn1__module.html#gafc87dd8ff36b6f9354941b0de4567cc6">More...</a><br/></td></tr> <tr class="separator:gafc87dd8ff36b6f9354941b0de4567cc6"><td class="memSeparator" colspan="2"> </td></tr> <tr><td colspan="2"><div class="groupHeader">DER constants</div></td></tr> <tr><td colspan="2"><div class="groupText"><p>These constants comply with DER encoded the ANS1 type tags.</p> <p>DER encoding uses hexadecimal representation. An example DER sequence is:<br/> </p> <ul> <li>0x02 – tag indicating INTEGER</li> <li>0x01 – length in octets</li> <li>0x05 – value Such sequences are typically read into <code><a class="el" href="group__x509__module.html#ga4c222d5841d84a018a77b3f8419141fd" title="Type-length-value structure that allows for ASN1 using DER. ">x509_buf</a></code>. </li> </ul> </div></td></tr> <tr class="memitem:ga5ecb3f6655f48694a6326657290d4996"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga5ecb3f6655f48694a6326657290d4996">ASN1_BOOLEAN</a>   0x01</td></tr> <tr class="separator:ga5ecb3f6655f48694a6326657290d4996"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga0d3b979ef2ca9618ec1899fd0e14d8ec"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga0d3b979ef2ca9618ec1899fd0e14d8ec">ASN1_INTEGER</a>   0x02</td></tr> <tr class="separator:ga0d3b979ef2ca9618ec1899fd0e14d8ec"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga1493defdd429594af36feaf6309cc70a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga1493defdd429594af36feaf6309cc70a">ASN1_BIT_STRING</a>   0x03</td></tr> <tr class="separator:ga1493defdd429594af36feaf6309cc70a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gae251e2c2d40228a89468f3f939a18585"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gae251e2c2d40228a89468f3f939a18585">ASN1_OCTET_STRING</a>   0x04</td></tr> <tr class="separator:gae251e2c2d40228a89468f3f939a18585"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga381db5db1873cb0b03744322cd9bc19c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga381db5db1873cb0b03744322cd9bc19c">ASN1_NULL</a>   0x05</td></tr> <tr class="separator:ga381db5db1873cb0b03744322cd9bc19c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga3fef844d0ea67080b66b3a4d5f0a9ec8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga3fef844d0ea67080b66b3a4d5f0a9ec8">ASN1_OID</a>   0x06</td></tr> <tr class="separator:ga3fef844d0ea67080b66b3a4d5f0a9ec8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga0dcba566de60f1776d36931ac1733b8d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga0dcba566de60f1776d36931ac1733b8d">ASN1_UTF8_STRING</a>   0x0C</td></tr> <tr class="separator:ga0dcba566de60f1776d36931ac1733b8d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9321fc9f2a5ef4103008fbe5c4b230df"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga9321fc9f2a5ef4103008fbe5c4b230df">ASN1_SEQUENCE</a>   0x10</td></tr> <tr class="separator:ga9321fc9f2a5ef4103008fbe5c4b230df"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaaa4097914560e5318d1c316106b38998"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gaaa4097914560e5318d1c316106b38998">ASN1_SET</a>   0x11</td></tr> <tr class="separator:gaaa4097914560e5318d1c316106b38998"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9d250073c32cfa2d0f90a92fa9485c89"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga9d250073c32cfa2d0f90a92fa9485c89">ASN1_PRINTABLE_STRING</a>   0x13</td></tr> <tr class="separator:ga9d250073c32cfa2d0f90a92fa9485c89"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaecb31acd8c2e58371f4cc5163f13ee3e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gaecb31acd8c2e58371f4cc5163f13ee3e">ASN1_T61_STRING</a>   0x14</td></tr> <tr class="separator:gaecb31acd8c2e58371f4cc5163f13ee3e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga45d8160d9158c5e040db66bb79fc8f18"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga45d8160d9158c5e040db66bb79fc8f18">ASN1_IA5_STRING</a>   0x16</td></tr> <tr class="separator:ga45d8160d9158c5e040db66bb79fc8f18"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga94a96a45489af8cb19d6dd3ee76eefb2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga94a96a45489af8cb19d6dd3ee76eefb2">ASN1_UTC_TIME</a>   0x17</td></tr> <tr class="separator:ga94a96a45489af8cb19d6dd3ee76eefb2"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gab7a08388517b5d807fb6bc2ed0325b90"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gab7a08388517b5d807fb6bc2ed0325b90">ASN1_GENERALIZED_TIME</a>   0x18</td></tr> <tr class="separator:gab7a08388517b5d807fb6bc2ed0325b90"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga7571a2e3383313e9a36cf168b707b4f9"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga7571a2e3383313e9a36cf168b707b4f9">ASN1_UNIVERSAL_STRING</a>   0x1C</td></tr> <tr class="separator:ga7571a2e3383313e9a36cf168b707b4f9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gae17ad2492005596109a4179b6f22cc62"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gae17ad2492005596109a4179b6f22cc62">ASN1_BMP_STRING</a>   0x1E</td></tr> <tr class="separator:gae17ad2492005596109a4179b6f22cc62"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gad61fcc873df5268453d3064aa11ffbca"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gad61fcc873df5268453d3064aa11ffbca">ASN1_PRIMITIVE</a>   0x00</td></tr> <tr class="separator:gad61fcc873df5268453d3064aa11ffbca"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga799d7b17a9532e1dadc8355f04477e27"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#ga799d7b17a9532e1dadc8355f04477e27">ASN1_CONSTRUCTED</a>   0x20</td></tr> <tr class="separator:ga799d7b17a9532e1dadc8355f04477e27"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gab1f89bc6e469d46d5293f724d317d1d7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__asn1__module.html#gab1f89bc6e469d46d5293f724d317d1d7">ASN1_CONTEXT_SPECIFIC</a>   0x80</td></tr> <tr class="separator:gab1f89bc6e469d46d5293f724d317d1d7"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a> Functions to parse ASN.1 data structures</h2></td></tr> <tr class="memitem:a494fbc8ee39d97c8118aa420070db04f"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__asn1__buf.html">_asn1_buf</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a></td></tr> <tr class="memdesc:a494fbc8ee39d97c8118aa420070db04f"><td class="mdescLeft"> </td><td class="mdescRight">Type-length-value structure that allows for ASN1 using DER. <a href="#a494fbc8ee39d97c8118aa420070db04f">More...</a><br/></td></tr> <tr class="separator:a494fbc8ee39d97c8118aa420070db04f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a087073ffe1db16e6e3fce23266513e6a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__asn1__bitstring.html">_asn1_bitstring</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a087073ffe1db16e6e3fce23266513e6a">asn1_bitstring</a></td></tr> <tr class="memdesc:a087073ffe1db16e6e3fce23266513e6a"><td class="mdescLeft"> </td><td class="mdescRight">Container for ASN1 bit strings. <a href="#a087073ffe1db16e6e3fce23266513e6a">More...</a><br/></td></tr> <tr class="separator:a087073ffe1db16e6e3fce23266513e6a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6e1b233f294affd535a3102d7eb893e9"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__asn1__sequence.html">_asn1_sequence</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a6e1b233f294affd535a3102d7eb893e9">asn1_sequence</a></td></tr> <tr class="memdesc:a6e1b233f294affd535a3102d7eb893e9"><td class="mdescLeft"> </td><td class="mdescRight">Container for a sequence of ASN.1 items. <a href="#a6e1b233f294affd535a3102d7eb893e9">More...</a><br/></td></tr> <tr class="separator:a6e1b233f294affd535a3102d7eb893e9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4f35635976d2b59cc08444099ebcbd6a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__asn1__named__data.html">_asn1_named_data</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a></td></tr> <tr class="memdesc:a4f35635976d2b59cc08444099ebcbd6a"><td class="mdescLeft"> </td><td class="mdescRight">Container for a sequence or list of 'named' ASN.1 data items. <a href="#a4f35635976d2b59cc08444099ebcbd6a">More...</a><br/></td></tr> <tr class="separator:a4f35635976d2b59cc08444099ebcbd6a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acebb8b02851a2f8dfa866d1b8e7f2ebd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#acebb8b02851a2f8dfa866d1b8e7f2ebd">asn1_get_len</a> (unsigned char **p, const unsigned char *end, size_t *len)</td></tr> <tr class="memdesc:acebb8b02851a2f8dfa866d1b8e7f2ebd"><td class="mdescLeft"> </td><td class="mdescRight">Get the length of an ASN.1 element. <a href="#acebb8b02851a2f8dfa866d1b8e7f2ebd">More...</a><br/></td></tr> <tr class="separator:acebb8b02851a2f8dfa866d1b8e7f2ebd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af7d10ad8e91ae5cb4a78f7d7dc1a8ac6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#af7d10ad8e91ae5cb4a78f7d7dc1a8ac6">asn1_get_tag</a> (unsigned char **p, const unsigned char *end, size_t *len, int tag)</td></tr> <tr class="memdesc:af7d10ad8e91ae5cb4a78f7d7dc1a8ac6"><td class="mdescLeft"> </td><td class="mdescRight">Get the tag and length of the tag. <a href="#af7d10ad8e91ae5cb4a78f7d7dc1a8ac6">More...</a><br/></td></tr> <tr class="separator:af7d10ad8e91ae5cb4a78f7d7dc1a8ac6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a099cac848d0bbdc60dd440153e794a1c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a099cac848d0bbdc60dd440153e794a1c">asn1_get_bool</a> (unsigned char **p, const unsigned char *end, int *val)</td></tr> <tr class="memdesc:a099cac848d0bbdc60dd440153e794a1c"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a boolean ASN.1 tag and its value. <a href="#a099cac848d0bbdc60dd440153e794a1c">More...</a><br/></td></tr> <tr class="separator:a099cac848d0bbdc60dd440153e794a1c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac1ec6c9510754709ffbe5ed9b746d009"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#ac1ec6c9510754709ffbe5ed9b746d009">asn1_get_int</a> (unsigned char **p, const unsigned char *end, int *val)</td></tr> <tr class="memdesc:ac1ec6c9510754709ffbe5ed9b746d009"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an integer ASN.1 tag and its value. <a href="#ac1ec6c9510754709ffbe5ed9b746d009">More...</a><br/></td></tr> <tr class="separator:ac1ec6c9510754709ffbe5ed9b746d009"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8cb7d558ab80268d8a01ad05c2a7804a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a8cb7d558ab80268d8a01ad05c2a7804a">asn1_get_bitstring</a> (unsigned char **p, const unsigned char *end, <a class="el" href="asn1_8h.html#a087073ffe1db16e6e3fce23266513e6a">asn1_bitstring</a> *bs)</td></tr> <tr class="memdesc:a8cb7d558ab80268d8a01ad05c2a7804a"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a bitstring ASN.1 tag and its value. <a href="#a8cb7d558ab80268d8a01ad05c2a7804a">More...</a><br/></td></tr> <tr class="separator:a8cb7d558ab80268d8a01ad05c2a7804a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4eea0ac1585372e535c06e91a16f7126"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a4eea0ac1585372e535c06e91a16f7126">asn1_get_bitstring_null</a> (unsigned char **p, const unsigned char *end, size_t *len)</td></tr> <tr class="memdesc:a4eea0ac1585372e535c06e91a16f7126"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a bitstring ASN.1 tag without unused bits and its value. <a href="#a4eea0ac1585372e535c06e91a16f7126">More...</a><br/></td></tr> <tr class="separator:a4eea0ac1585372e535c06e91a16f7126"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aff5e02b8136105bacb05e350678bad0d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#aff5e02b8136105bacb05e350678bad0d">asn1_get_sequence_of</a> (unsigned char **p, const unsigned char *end, <a class="el" href="asn1_8h.html#a6e1b233f294affd535a3102d7eb893e9">asn1_sequence</a> *cur, int tag)</td></tr> <tr class="memdesc:aff5e02b8136105bacb05e350678bad0d"><td class="mdescLeft"> </td><td class="mdescRight">Parses and splits an ASN.1 "SEQUENCE OF <tag>" Updated the pointer to immediately behind the full sequence tag. <a href="#aff5e02b8136105bacb05e350678bad0d">More...</a><br/></td></tr> <tr class="separator:aff5e02b8136105bacb05e350678bad0d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9241caf4492b2405e48db346205af62f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a9241caf4492b2405e48db346205af62f">asn1_get_mpi</a> (unsigned char **p, const unsigned char *end, <a class="el" href="structmpi.html">mpi</a> *X)</td></tr> <tr class="memdesc:a9241caf4492b2405e48db346205af62f"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a MPI value from an integer ASN.1 tag. <a href="#a9241caf4492b2405e48db346205af62f">More...</a><br/></td></tr> <tr class="separator:a9241caf4492b2405e48db346205af62f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a463ec10966603ad423eefdb3dbcf5993"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a463ec10966603ad423eefdb3dbcf5993">asn1_get_alg</a> (unsigned char **p, const unsigned char *end, <a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a> *alg, <a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a> *params)</td></tr> <tr class="memdesc:a463ec10966603ad423eefdb3dbcf5993"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an AlgorithmIdentifier ASN.1 sequence. <a href="#a463ec10966603ad423eefdb3dbcf5993">More...</a><br/></td></tr> <tr class="separator:a463ec10966603ad423eefdb3dbcf5993"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa967e6a2efe79187ef13f3177493d914"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#aa967e6a2efe79187ef13f3177493d914">asn1_get_alg_null</a> (unsigned char **p, const unsigned char *end, <a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a> *alg)</td></tr> <tr class="memdesc:aa967e6a2efe79187ef13f3177493d914"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no params. <a href="#aa967e6a2efe79187ef13f3177493d914">More...</a><br/></td></tr> <tr class="separator:aa967e6a2efe79187ef13f3177493d914"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aee053384989de6d77aa9c70450895427"><td class="memItemLeft" align="right" valign="top"><a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#aee053384989de6d77aa9c70450895427">asn1_find_named_data</a> (<a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> *list, const char *oid, size_t len)</td></tr> <tr class="memdesc:aee053384989de6d77aa9c70450895427"><td class="mdescLeft"> </td><td class="mdescRight">Find a specific named_data entry in a sequence or list based on the OID. <a href="#aee053384989de6d77aa9c70450895427">More...</a><br/></td></tr> <tr class="separator:aee053384989de6d77aa9c70450895427"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a55085059941372208a74ce48ee904073"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#a55085059941372208a74ce48ee904073">asn1_free_named_data</a> (<a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> *entry)</td></tr> <tr class="memdesc:a55085059941372208a74ce48ee904073"><td class="mdescLeft"> </td><td class="mdescRight">Free a asn1_named_data entry. <a href="#a55085059941372208a74ce48ee904073">More...</a><br/></td></tr> <tr class="separator:a55085059941372208a74ce48ee904073"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acefe3b9de9d702dc1f5cf64e48283e37"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="asn1_8h.html#acefe3b9de9d702dc1f5cf64e48283e37">asn1_free_named_data_list</a> (<a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> **head)</td></tr> <tr class="memdesc:acefe3b9de9d702dc1f5cf64e48283e37"><td class="mdescLeft"> </td><td class="mdescRight">Free all entries in a asn1_named_data list Head will be set to NULL. <a href="#acefe3b9de9d702dc1f5cf64e48283e37">More...</a><br/></td></tr> <tr class="separator:acefe3b9de9d702dc1f5cf64e48283e37"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Generic ASN.1 parsing. </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 <polarssl_maintainer at polarssl.org></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="asn1_8h_source.html">asn1.h</a>.</p> </div><h2 class="groupheader">Macro Definition Documentation</h2> <a class="anchor" id="a068fd58b6b0011021a516695ff14a41e"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OID_CMP</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">oid_str, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">oid_buf </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line">( ( <a class="code" href="asn1_8h.html#a79358b9b589d5cf11497945672ea7fd7">OID_SIZE</a>(oid_str) == (oid_buf)->len ) && \</div> <div class="line"> memcmp( (oid_str), (oid_buf)->p, (oid_buf)->len) == 0 )</div> <div class="ttc" id="asn1_8h_html_a79358b9b589d5cf11497945672ea7fd7"><div class="ttname"><a href="asn1_8h.html#a79358b9b589d5cf11497945672ea7fd7">OID_SIZE</a></div><div class="ttdeci">#define OID_SIZE(x)</div><div class="ttdoc">Returns the size of the binary string, without the trailing \0. </div><div class="ttdef"><b>Definition:</b> <a href="asn1_8h_source.html#l00098">asn1.h:98</a></div></div> </div><!-- fragment --> <p>Compares an asn1_buf structure to a reference OID. </p> <p>Only works for 'defined' oid_str values (OID_HMAC_SHA1), you cannot use a 'unsigned char *oid' here!</p> <p>Warning: returns true when the OIDs are equal (unlike memcmp)! </p> <p>Definition at line <a class="el" href="asn1_8h_source.html#l00108">108</a> of file <a class="el" href="asn1_8h_source.html">asn1.h</a>.</p> </div> </div> <a class="anchor" id="a79358b9b589d5cf11497945672ea7fd7"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OID_SIZE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">x</td><td>)</td> <td>   (sizeof(x) - 1)</td> </tr> </table> </div><div class="memdoc"> <p>Returns the size of the binary string, without the trailing \0. </p> <p>Definition at line <a class="el" href="asn1_8h_source.html#l00098">98</a> of file <a class="el" href="asn1_8h_source.html">asn1.h</a>.</p> </div> </div> <h2 class="groupheader">Typedef Documentation</h2> <a class="anchor" id="a087073ffe1db16e6e3fce23266513e6a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct <a class="el" href="struct__asn1__bitstring.html">_asn1_bitstring</a> <a class="el" href="asn1_8h.html#a087073ffe1db16e6e3fce23266513e6a">asn1_bitstring</a></td> </tr> </table> </div><div class="memdoc"> <p>Container for ASN1 bit strings. </p> </div> </div> <a class="anchor" id="a494fbc8ee39d97c8118aa420070db04f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct <a class="el" href="struct__asn1__buf.html">_asn1_buf</a> <a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a></td> </tr> </table> </div><div class="memdoc"> <p>Type-length-value structure that allows for ASN1 using DER. </p> </div> </div> <a class="anchor" id="a4f35635976d2b59cc08444099ebcbd6a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct <a class="el" href="struct__asn1__named__data.html">_asn1_named_data</a> <a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a></td> </tr> </table> </div><div class="memdoc"> <p>Container for a sequence or list of 'named' ASN.1 data items. </p> </div> </div> <a class="anchor" id="a6e1b233f294affd535a3102d7eb893e9"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct <a class="el" href="struct__asn1__sequence.html">_asn1_sequence</a> <a class="el" href="asn1_8h.html#a6e1b233f294affd535a3102d7eb893e9">asn1_sequence</a></td> </tr> </table> </div><div class="memdoc"> <p>Container for a sequence of ASN.1 items. </p> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="aee053384989de6d77aa9c70450895427"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a>* asn1_find_named_data </td> <td>(</td> <td class="paramtype"><a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> * </td> <td class="paramname"><em>list</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>oid</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Find a specific named_data entry in a sequence or list based on the OID. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">list</td><td>The list to seek through </td></tr> <tr><td class="paramname">oid</td><td>The OID to look for </td></tr> <tr><td class="paramname">len</td><td>Size of the OID</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>NULL if not found, or a pointer to the existing entry. </dd></dl> </div> </div> <a class="anchor" id="a55085059941372208a74ce48ee904073"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void asn1_free_named_data </td> <td>(</td> <td class="paramtype"><a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> * </td> <td class="paramname"><em>entry</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Free a asn1_named_data entry. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">entry</td><td>The named data entry to free </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="acefe3b9de9d702dc1f5cf64e48283e37"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void asn1_free_named_data_list </td> <td>(</td> <td class="paramtype"><a class="el" href="asn1_8h.html#a4f35635976d2b59cc08444099ebcbd6a">asn1_named_data</a> ** </td> <td class="paramname"><em>head</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Free all entries in a asn1_named_data list Head will be set to NULL. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">head</td><td>Pointer to the head of the list of named data entries to free </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a463ec10966603ad423eefdb3dbcf5993"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_alg </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a> * </td> <td class="paramname"><em>alg</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a> * </td> <td class="paramname"><em>params</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve an AlgorithmIdentifier ASN.1 sequence. </p> <pre class="fragment"> Updates the pointer to immediately behind the full AlgorithmIdentifier. </pre><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 data </td></tr> <tr><td class="paramname">alg</td><td>The buffer to receive the OID </td></tr> <tr><td class="paramname">params</td><td>The buffer to receive the params (if any)</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 or MPI error code. </dd></dl> </div> </div> <a class="anchor" id="aa967e6a2efe79187ef13f3177493d914"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_alg_null </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="asn1_8h.html#a494fbc8ee39d97c8118aa420070db04f">asn1_buf</a> * </td> <td class="paramname"><em>alg</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no params. </p> <pre class="fragment"> Updates the pointer to immediately behind the full AlgorithmIdentifier. </pre><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 data </td></tr> <tr><td class="paramname">alg</td><td>The buffer to receive the OID</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 or MPI error code. </dd></dl> </div> </div> <a class="anchor" id="a8cb7d558ab80268d8a01ad05c2a7804a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_bitstring </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="asn1_8h.html#a087073ffe1db16e6e3fce23266513e6a">asn1_bitstring</a> * </td> <td class="paramname"><em>bs</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve a bitstring ASN.1 tag and its value. </p> <pre class="fragment"> Updates the pointer to immediately behind the full tag. </pre><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 data </td></tr> <tr><td class="paramname">bs</td><td>The variable that will receive the value</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 error code. </dd></dl> </div> </div> <a class="anchor" id="a4eea0ac1585372e535c06e91a16f7126"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_bitstring_null </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t * </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve a bitstring ASN.1 tag without unused bits and its value. </p> <pre class="fragment"> Updates the pointer to the beginning of the bit/octet string. </pre><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 data </td></tr> <tr><td class="paramname">len</td><td>Length of the actual bit/octect string in bytes</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 error code. </dd></dl> </div> </div> <a class="anchor" id="a099cac848d0bbdc60dd440153e794a1c"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_bool </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"><em>val</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve a boolean ASN.1 tag and its value. </p> <pre class="fragment"> Updates the pointer to immediately behind the full tag. </pre><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 data </td></tr> <tr><td class="paramname">val</td><td>The variable that will receive the value</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 error code. </dd></dl> </div> </div> <a class="anchor" id="ac1ec6c9510754709ffbe5ed9b746d009"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_int </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"><em>val</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve an integer ASN.1 tag and its value. </p> <pre class="fragment"> Updates the pointer to immediately behind the full tag. </pre><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 data </td></tr> <tr><td class="paramname">val</td><td>The variable that will receive the value</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 error code. </dd></dl> </div> </div> <a class="anchor" id="acebb8b02851a2f8dfa866d1b8e7f2ebd"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_len </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t * </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Get the length of an ASN.1 element. </p> <pre class="fragment"> Updates the pointer to immediately behind the length. </pre><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 data </td></tr> <tr><td class="paramname">len</td><td>The variable that will receive the value</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_ASN1_OUT_OF_DATA on reaching end of data, POLARSSL_ERR_ASN1_INVALID_LENGTH if length is unparseable. </dd></dl> </div> </div> <a class="anchor" id="a9241caf4492b2405e48db346205af62f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_mpi </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> * </td> <td class="paramname"><em>X</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Retrieve a MPI value from an integer ASN.1 tag. </p> <pre class="fragment"> Updates the pointer to immediately behind the full tag. </pre><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 data </td></tr> <tr><td class="paramname">X</td><td>The MPI that will receive the value</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 or MPI error code. </dd></dl> </div> </div> <a class="anchor" id="aff5e02b8136105bacb05e350678bad0d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_sequence_of </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="asn1_8h.html#a6e1b233f294affd535a3102d7eb893e9">asn1_sequence</a> * </td> <td class="paramname"><em>cur</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>tag</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Parses and splits an ASN.1 "SEQUENCE OF <tag>" Updated the pointer to immediately behind the full sequence tag. </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 data </td></tr> <tr><td class="paramname">cur</td><td>First variable in the chain to fill </td></tr> <tr><td class="paramname">tag</td><td>Type of sequence</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful or a specific ASN.1 error code. </dd></dl> </div> </div> <a class="anchor" id="af7d10ad8e91ae5cb4a78f7d7dc1a8ac6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int asn1_get_tag </td> <td>(</td> <td class="paramtype">unsigned char ** </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"><em>end</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t * </td> <td class="paramname"><em>len</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>tag</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Get the tag and length of the tag. </p> <p>Check for the requested tag. Updates the pointer to immediately behind the tag and length.</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 data </td></tr> <tr><td class="paramname">len</td><td>The variable that will receive the length </td></tr> <tr><td class="paramname">tag</td><td>The expected tag</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_ASN1_UNEXPECTED_TAG if tag did not match requested tag, or another specific ASN.1 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:55 for PolarSSL v1.3.8 by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>