<trclass="memdesc:ga67612ac824c9cd2bf19ef54463aa03d6"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Iterate over the list of secret keys. <ahref="#ga67612ac824c9cd2bf19ef54463aa03d6"></a><br/></td></tr>
<trclass="memdesc:gadf7bf61c0ae9de0800550e66649cbe74"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Iterate over the list of public keys. <ahref="#gadf7bf61c0ae9de0800550e66649cbe74"></a><br/></td></tr>
<trclass="memdesc:ga032631be7ae7bfda7a7d3a6ec6c470e9"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Initialize the global hashes. <ahref="#ga032631be7ae7bfda7a7d3a6ec6c470e9"></a><br/></td></tr>
<trclass="memitem:ga6ec2d68ebc58d0291f1a3df489f60137"><tdclass="memItemLeft"align="right"valign="top">void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="group__KEYHASH.html#ga6ec2d68ebc58d0291f1a3df489f60137">pcphash_del</a> (void *key, int type)</td></tr>
<trclass="memdesc:ga6ec2d68ebc58d0291f1a3df489f60137"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Delete an entry from a hash. <ahref="#ga6ec2d68ebc58d0291f1a3df489f60137"></a><br/></td></tr>
<trclass="memdesc:ga29bb3dbb781b383f0ded40ee149b8917"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Frees the memory allocated by the hashes. <ahref="#ga29bb3dbb781b383f0ded40ee149b8917"></a><br/></td></tr>
<trclass="memdesc:ga16be3ae351e715ae60801e9bae56a672"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Check if a secret key with a given key-id exists in the hash. <ahref="#ga16be3ae351e715ae60801e9bae56a672"></a><br/></td></tr>
<trclass="memdesc:gad8bdc1bfa1e646032ff7ceadbec0b2b1"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Check if a publickey with a given key-id exists in the hash. <ahref="#gad8bdc1bfa1e646032ff7ceadbec0b2b1"></a><br/></td></tr>
<trclass="memitem:ga334bc5afda6c8bfa53d9c73390a4743f"><tdclass="memItemLeft"align="right"valign="top">void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="group__KEYHASH.html#ga334bc5afda6c8bfa53d9c73390a4743f">pcphash_add</a> (void *key, int type)</td></tr>
<trclass="memdesc:ga334bc5afda6c8bfa53d9c73390a4743f"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Add a key structure to the hash list. <ahref="#ga334bc5afda6c8bfa53d9c73390a4743f"></a><br/></td></tr>
<trclass="memdesc:gabf4f54f18a5ad15606ce8a43ea4b1d89"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Returns the number of secret keys in the hash. <ahref="#gabf4f54f18a5ad15606ce8a43ea4b1d89"></a><br/></td></tr>
<trclass="memdesc:gababf062b31ee773f739d1411b2b72317"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Returns the number of public keys in the hash. <ahref="#gababf062b31ee773f739d1411b2b72317"></a><br/></td></tr>
<trclass="memdesc:ga2953fd446079220a948693dfab5d6055"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Global hash for public keys. <ahref="#ga2953fd446079220a948693dfab5d6055"></a><br/></td></tr>
<p>Uthashes of secret and public key structures. </p>
<p>Libpcp uses the <ahref="http://troydhanson.github.io/uthash/">uthash</a> system to maintain lists of keys. There's one hash per key type. The hash has the same type as the key structure itself, but is global. </p>
<divclass="line"> HASH_ITER(hh, <aclass="code"href="group__KEYHASH.html#ga816334866b4b71819101952713f957d3"title="Global hash for secret keys.">pcpkey_hash</a>, key, __k)</div>
</div><!-- fragment -->
<p>Iterate over the list of secret keys. </p>
<p>Sample use:</p>
<divclass="fragment"><divclass="line"><aclass="code"href="struct__pcp__key__t.html"title="PCP private key structure.">pcp_key_t</a> k = NULL;</div>
<divclass="line"><aclass="code"href="group__KEYHASH.html#ga67612ac824c9cd2bf19ef54463aa03d6"title="Iterate over the list of secret keys.">pcphash_iterate</a>(k) {</div>
<divclass="line"><aclass="code"href="group__KEYS.html#ga8aa66f20f7671d80e75d7b05a7e692c4"title="Dump a secret key structure to stderr.">pcp_dumpkey</a>(k);</div>
<divclass="line">}</div>
</div><!-- fragment --><p>Also, don't free() the keyhash or the temporary key pointer yourself. Use <aclass="el"href="group__KEYHASH.html#ga29bb3dbb781b383f0ded40ee149b8917"title="Frees the memory allocated by the hashes.">pcphash_clean()</a> instead when done. </p>
<p>Definition at line <aclass="el"href="keyhash_8h_source.html#l00064">64</a> of file <aclass="el"href="keyhash_8h_source.html">keyhash.h</a>.</p>
<divclass="line"> HASH_ITER(hh, <aclass="code"href="group__KEYHASH.html#ga2953fd446079220a948693dfab5d6055"title="Global hash for public keys.">pcppubkey_hash</a>, key, __p)</div>
</div><!-- fragment -->
<p>Iterate over the list of public keys. </p>
<p>Sample use:</p>
<divclass="fragment"><divclass="line"><aclass="code"href="struct__pcp__pubkey__t.html"title="PCP public key structure.">pcp_pubkey_t</a> k = NULL;</div>
<divclass="line"><aclass="code"href="group__KEYHASH.html#gadf7bf61c0ae9de0800550e66649cbe74"title="Iterate over the list of public keys.">pcphash_iteratepub</a>(k) {</div>
<divclass="line"><aclass="code"href="group__KEYS.html#gaf37d43db0d210b3fbeab0929e3a76ebf"title="Dump a public key structure to stderr.">pcp_dumppubkey</a>(k);</div>
<divclass="line">}</div>
</div><!-- fragment --><p>Also, don't free() the keyhash or the temporary key pointer yourself. Use <aclass="el"href="group__KEYHASH.html#ga29bb3dbb781b383f0ded40ee149b8917"title="Frees the memory allocated by the hashes.">pcphash_clean()</a> instead when done. </p>
<p>Definition at line <aclass="el"href="keyhash_8h_source.html#l00083">83</a> of file <aclass="el"href="keyhash_8h_source.html">keyhash.h</a>.</p>