Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 435

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: validator/val_nsec3.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_d2a455e92b602458a2b0ed9b207bdda1.html">validator</a>
  </div>
</div>
<div class="contents">
<h1>val_nsec3.h File Reference</h1>This file contains helper functions for the validator module.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="rbtree_8h.html">util/rbtree.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="packed__rrset_8h.html">util/data/packed_rrset.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The NSEC3 hash result storage.  <a href="structnsec3__cached__hash.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#3feecd6425ae96825a0a07f208ea8839">NSEC3_OPTOUT</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ | |O| +-+-+-+-+-+-+-+-+ The OPT-OUT bit in the NSEC3 flags field.  <a href="#3feecd6425ae96825a0a07f208ea8839"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#81375837401d38e06d5eacf6a13c2b4c">NSEC3_UNKNOWN_FLAGS</a>&nbsp;&nbsp;&nbsp;0xFE</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The unknown flags in the NSEC3 flags field.  <a href="#81375837401d38e06d5eacf6a13c2b4c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9011b8971f5b357ad557d929eee022c7"></a><!-- doxytag: member="val_nsec3.h::NSEC3_HASH_SHA1" ref="9011b8971f5b357ad557d929eee022c7" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#9011b8971f5b357ad557d929eee022c7">NSEC3_HASH_SHA1</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SHA1 hash algorithm for NSEC3. <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#ec098bd6e018f6bdc18d644dd1f032c2">nsec3_prove_nameerror</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structval__env.html">val_env</a> *ve, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **list, size_t num, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *kkey)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if the set of NSEC3 records provided with a response prove NAME ERROR.  <a href="#ec098bd6e018f6bdc18d644dd1f032c2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#83a9f028fc21c824e06bb5b46748a93a">nsec3_prove_nodata</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structval__env.html">val_env</a> *ve, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **list, size_t num, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *kkey)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if the NSEC3s provided in a response prove the NOERROR/NODATA status.  <a href="#83a9f028fc21c824e06bb5b46748a93a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#8ee94272bab896f05e9a46d48e200fc4">nsec3_prove_wildcard</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structval__env.html">val_env</a> *ve, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **list, size_t num, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *kkey, uint8_t *wc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prove that a positive wildcard match was appropriate (no direct match RRset).  <a href="#8ee94272bab896f05e9a46d48e200fc4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#3355280807ef45dac4e07cb066c15447">nsec3_prove_nods</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structval__env.html">val_env</a> *ve, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **list, size_t num, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *kkey)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prove that a DS response either had no DS, or wasn't a delegation point.  <a href="#3355280807ef45dac4e07cb066c15447"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#148d819f64c3a651054bb65db5960c64">nsec3_prove_nxornodata</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structval__env.html">val_env</a> *ve, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **list, size_t num, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *kkey, int *nodata)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prove NXDOMAIN or NODATA.  <a href="#148d819f64c3a651054bb65db5960c64"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#1815492a67a8108923c660fd13e626ba">nsec3_hash_cmp</a> (const void *c1, const void *c2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Rbtree for hash cache comparison function.  <a href="#1815492a67a8108923c660fd13e626ba"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#02eda756f78e0a2d5dbe2e16b45082d4">nsec3_hash_name</a> (<a class="el" href="structrbtree__t.html">rbtree_t</a> *table, struct <a class="el" href="structregional.html">regional</a> *region, ldns_buffer *buf, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *nsec3, int rr, uint8_t *dname, size_t dname_len, struct <a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a> **hash)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtain the hash of an owner name.  <a href="#02eda756f78e0a2d5dbe2e16b45082d4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#26bcd491cdc50e060759dc634dcd1aec">nsec3_get_nextowner_b32</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int r, uint8_t *buf, size_t max)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get next owner name, converted to base32 encoding and with the zone name (taken from the nsec3 owner name) appended.  <a href="#26bcd491cdc50e060759dc634dcd1aec"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#2ccf4b8ba989b38db954c028e6fcee2e">nsec3_hash_to_b32</a> (uint8_t *hash, size_t hashlen, uint8_t *zone, size_t zonelen, uint8_t *buf, size_t max)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convert hash into base32 encoding and with the zone name appended.  <a href="#2ccf4b8ba989b38db954c028e6fcee2e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#f20c6194776a6e624c7f734cf81f4788">nsec3_get_params</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int r, int *algo, size_t *iter, uint8_t **salt, size_t *saltlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get NSEC3 parameters out of rr.  <a href="#f20c6194776a6e624c7f734cf81f4788"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#3d8ea090d16afe3524345890005611ac">nsec3_get_hashed</a> (ldns_buffer *buf, uint8_t *nm, size_t nmlen, int algo, size_t iter, uint8_t *salt, size_t saltlen, uint8_t *res, size_t max)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get NSEC3 hashed in a buffer.  <a href="#3d8ea090d16afe3524345890005611ac"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#cdee5a5978b6ad2317dc46e74a58c9eb">nsec3_has_type</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int r, uint16_t type)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see if NSEC3 RR contains given type  <a href="#cdee5a5978b6ad2317dc46e74a58c9eb"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#3e8d935b4eda5b48c13faaeb030b5bf0">nsec3_has_optout</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int r)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return if nsec3 RR has the optout flag  <a href="#3e8d935b4eda5b48c13faaeb030b5bf0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#d71212ee0d0d0ac92d3a619123941a06">nsec3_get_nextowner</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int r, uint8_t **next, size_t *nextlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return nsec3 RR next hashed owner name.  <a href="#d71212ee0d0d0ac92d3a619123941a06"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8h.html#5d4f894d6bd12faffdbc6ce258d73e17">nsec3_covers</a> (uint8_t *zone, struct <a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a> *hash, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int rr, ldns_buffer *buf)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">nsec3Covers Given a hash and a candidate NSEC3Record, determine if that NSEC3Record covers the hash.  <a href="#5d4f894d6bd12faffdbc6ce258d73e17"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains helper functions for the validator module. 
<p>
The functions help with NSEC3 checking, the different NSEC3 proofs for denial of existance, and proofs for presence of types.<p>
NSEC3 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hash Alg. | Flags | Iterations | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Salt Length | Salt / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hash Length | Next Hashed Owner Name / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Type Bit Maps / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<p>
NSEC3PARAM 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hash Alg. | Flags | Iterations | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Salt Length | Salt / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <hr><h2>Define Documentation</h2>
<a class="anchor" name="3feecd6425ae96825a0a07f208ea8839"></a><!-- doxytag: member="val_nsec3.h::NSEC3_OPTOUT" ref="3feecd6425ae96825a0a07f208ea8839" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NSEC3_OPTOUT&nbsp;&nbsp;&nbsp;0x01          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ | |O| +-+-+-+-+-+-+-+-+ The OPT-OUT bit in the NSEC3 flags field. 
<p>
If enabled, there can be zero or more unsigned delegations in the span. If disabled, there are zero unsigned delegations in the span. 
<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00129">nsec3_has_optout()</a>.</p>

</div>
</div><p>
<a class="anchor" name="81375837401d38e06d5eacf6a13c2b4c"></a><!-- doxytag: member="val_nsec3.h::NSEC3_UNKNOWN_FLAGS" ref="81375837401d38e06d5eacf6a13c2b4c" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NSEC3_UNKNOWN_FLAGS&nbsp;&nbsp;&nbsp;0xFE          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
The unknown flags in the NSEC3 flags field. 
<p>
They must be zero, or the NSEC3 is ignored. 
<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00118">nsec3_unknown_flags()</a>.</p>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="ec098bd6e018f6bdc18d644dd1f032c2"></a><!-- doxytag: member="val_nsec3.h::nsec3_prove_nameerror" ref="ec098bd6e018f6bdc18d644dd1f032c2" args="(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key **list, size_t num, struct query_info *qinfo, struct key_entry_key *kkey)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> nsec3_prove_nameerror           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structval__env.html">val_env</a> *&nbsp;</td>
          <td class="paramname"> <em>ve</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **&nbsp;</td>
          <td class="paramname"> <em>list</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *&nbsp;</td>
          <td class="paramname"> <em>kkey</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Determine if the set of NSEC3 records provided with a response prove NAME ERROR. 
<p>
This means that the NSEC3s prove a) the closest encloser exists, b) the direct child of the closest encloser towards qname doesn't exist, and c) *.closest encloser does not exist.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>env,:</em>&nbsp;</td><td>module environment with temporary region and buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ve,:</em>&nbsp;</td><td>validator environment, with iteration count settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>array of RRsets, some of which are NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num,:</em>&nbsp;</td><td>number of RRsets in the array to examine. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query that is verified for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>kkey,:</em>&nbsp;</td><td>key <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> that signed the NSEC3s. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: sec_status SECURE of the Name Error is proven by the NSEC3 RRs, BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="val__kentry_8c_source.html#l00187">key_entry_isgood()</a>, <a class="el" href="net__help_8c_source.html#l00265">log_nametypeclass()</a>, <a class="el" href="val__nsec3_8c_source.html#l01012">nsec3_do_prove_nameerror()</a>, <a class="el" href="val__nsec3_8c_source.html#l00491">nsec3_hash_cmp()</a>, <a class="el" href="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="packed__rrset_8h_source.html#l00162">sec_status_bogus</a>, <a class="el" href="packed__rrset_8h_source.html#l00170">sec_status_insecure</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="validator_8c_source.html#l00715">validate_nameerror_response()</a>.</p>

</div>
</div><p>
<a class="anchor" name="83a9f028fc21c824e06bb5b46748a93a"></a><!-- doxytag: member="val_nsec3.h::nsec3_prove_nodata" ref="83a9f028fc21c824e06bb5b46748a93a" args="(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key **list, size_t num, struct query_info *qinfo, struct key_entry_key *kkey)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> nsec3_prove_nodata           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structval__env.html">val_env</a> *&nbsp;</td>
          <td class="paramname"> <em>ve</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **&nbsp;</td>
          <td class="paramname"> <em>list</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *&nbsp;</td>
          <td class="paramname"> <em>kkey</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Determine if the NSEC3s provided in a response prove the NOERROR/NODATA status. 
<p>
There are a number of different variants to this:<p>
1) Normal NODATA -- qname is matched to an NSEC3 record, type is not present.<p>
2) ENT NODATA -- because there must be NSEC3 record for empty-non-terminals, this is the same as #1.<p>
3) NSEC3 ownername NODATA -- qname matched an existing, lone NSEC3 ownername, but qtype was not NSEC3. NOTE: as of nsec-05, this case no longer exists.<p>
4) Wildcard NODATA -- A wildcard matched the name, but not the type.<p>
5) Opt-In DS NODATA -- the qname is covered by an opt-in span and qtype == DS. (or maybe some future record with the same parent-side-only property)<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>env,:</em>&nbsp;</td><td>module environment with temporary region and buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ve,:</em>&nbsp;</td><td>validator environment, with iteration count settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>array of RRsets, some of which are NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num,:</em>&nbsp;</td><td>number of RRsets in the array to examine. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query that is verified for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>kkey,:</em>&nbsp;</td><td>key <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> that signed the NSEC3s. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: sec_status SECURE of the proposition is proven by the NSEC3 RRs, BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="val__kentry_8c_source.html#l00187">key_entry_isgood()</a>, <a class="el" href="val__nsec3_8c_source.html#l01072">nsec3_do_prove_nodata()</a>, <a class="el" href="val__nsec3_8c_source.html#l00491">nsec3_hash_cmp()</a>, <a class="el" href="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="packed__rrset_8h_source.html#l00162">sec_status_bogus</a>, <a class="el" href="packed__rrset_8h_source.html#l00170">sec_status_insecure</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="validator_8c_source.html#l00622">validate_nodata_response()</a>.</p>

</div>
</div><p>
<a class="anchor" name="8ee94272bab896f05e9a46d48e200fc4"></a><!-- doxytag: member="val_nsec3.h::nsec3_prove_wildcard" ref="8ee94272bab896f05e9a46d48e200fc4" args="(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key **list, size_t num, struct query_info *qinfo, struct key_entry_key *kkey, uint8_t *wc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> nsec3_prove_wildcard           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structval__env.html">val_env</a> *&nbsp;</td>
          <td class="paramname"> <em>ve</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **&nbsp;</td>
          <td class="paramname"> <em>list</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *&nbsp;</td>
          <td class="paramname"> <em>kkey</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>wc</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Prove that a positive wildcard match was appropriate (no direct match RRset). 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>env,:</em>&nbsp;</td><td>module environment with temporary region and buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ve,:</em>&nbsp;</td><td>validator environment, with iteration count settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>array of RRsets, some of which are NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num,:</em>&nbsp;</td><td>number of RRsets in the array to examine. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query that is verified for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>kkey,:</em>&nbsp;</td><td>key <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> that signed the NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wc,:</em>&nbsp;</td><td>The purported wildcard that matched. This is the wildcard name as *.wildcard.name., with the *. label already removed. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: sec_status SECURE of the proposition is proven by the NSEC3 RRs, BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00076">ce_response::ce</a>, <a class="el" href="val__nsec3_8c_source.html#l00078">ce_response::ce_len</a>, <a class="el" href="dname_8c_source.html#l00384">dname_count_size_labels()</a>, <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="val__nsec3_8c_source.html#l00826">find_covering_nsec3()</a>, <a class="el" href="val__kentry_8c_source.html#l00187">key_entry_isgood()</a>, <a class="el" href="val__nsec3_8c_source.html#l00086">ce_response::nc_rr</a>, <a class="el" href="val__nsec3_8c_source.html#l00084">ce_response::nc_rrset</a>, <a class="el" href="val__nsec3_8c_source.html#l00911">next_closer()</a>, <a class="el" href="val__nsec3_8c_source.html#l00491">nsec3_hash_cmp()</a>, <a class="el" href="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00066">query_info::qname_len</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="packed__rrset_8h_source.html#l00162">sec_status_bogus</a>, <a class="el" href="packed__rrset_8h_source.html#l00170">sec_status_insecure</a>, <a class="el" href="packed__rrset_8h_source.html#l00173">sec_status_secure</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="validator_8c_source.html#l00827">validate_any_response()</a>, <a class="el" href="validator_8c_source.html#l00937">validate_cname_response()</a>, and <a class="el" href="validator_8c_source.html#l00526">validate_positive_response()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3355280807ef45dac4e07cb066c15447"></a><!-- doxytag: member="val_nsec3.h::nsec3_prove_nods" ref="3355280807ef45dac4e07cb066c15447" args="(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key **list, size_t num, struct query_info *qinfo, struct key_entry_key *kkey)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> nsec3_prove_nods           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structval__env.html">val_env</a> *&nbsp;</td>
          <td class="paramname"> <em>ve</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **&nbsp;</td>
          <td class="paramname"> <em>list</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *&nbsp;</td>
          <td class="paramname"> <em>kkey</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Prove that a DS response either had no DS, or wasn't a delegation point. 
<p>
Fundamentally there are two cases here: normal NODATA and Opt-In NODATA.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>env,:</em>&nbsp;</td><td>module environment with temporary region and buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ve,:</em>&nbsp;</td><td>validator environment, with iteration count settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>array of RRsets, some of which are NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num,:</em>&nbsp;</td><td>number of RRsets in the array to examine. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query that is verified for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>kkey,:</em>&nbsp;</td><td>key <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> that signed the NSEC3s. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: sec_status SECURE of the proposition is proven by the NSEC3 RRs, BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. or if there was no DS in an insecure (i.e., opt-in) way, INDETERMINATE if it was clear that this wasn't a delegation point. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="val__nsec3_8c_source.html#l00733">find_matching_nsec3()</a>, <a class="el" href="val__kentry_8c_source.html#l00187">key_entry_isgood()</a>, <a class="el" href="val__nsec3_8c_source.html#l01242">list_is_secure()</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="val__nsec3_8c_source.html#l00086">ce_response::nc_rr</a>, <a class="el" href="val__nsec3_8c_source.html#l00084">ce_response::nc_rrset</a>, <a class="el" href="val__nsec3_8c_source.html#l00129">nsec3_has_optout()</a>, <a class="el" href="val__nsec3_8c_source.html#l00279">nsec3_has_type()</a>, <a class="el" href="val__nsec3_8c_source.html#l00491">nsec3_hash_cmp()</a>, <a class="el" href="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>, <a class="el" href="val__nsec3_8c_source.html#l00937">nsec3_prove_closest_encloser()</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00066">query_info::qname_len</a>, <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="packed__rrset_8h_source.html#l00162">sec_status_bogus</a>, <a class="el" href="packed__rrset_8h_source.html#l00166">sec_status_indeterminate</a>, <a class="el" href="packed__rrset_8h_source.html#l00170">sec_status_insecure</a>, <a class="el" href="packed__rrset_8h_source.html#l00173">sec_status_secure</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="validator_8c_source.html#l02151">ds_response_to_ke()</a>.</p>

</div>
</div><p>
<a class="anchor" name="148d819f64c3a651054bb65db5960c64"></a><!-- doxytag: member="val_nsec3.h::nsec3_prove_nxornodata" ref="148d819f64c3a651054bb65db5960c64" args="(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key **list, size_t num, struct query_info *qinfo, struct key_entry_key *kkey, int *nodata)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> nsec3_prove_nxornodata           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structval__env.html">val_env</a> *&nbsp;</td>
          <td class="paramname"> <em>ve</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **&nbsp;</td>
          <td class="paramname"> <em>list</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structkey__entry__key.html">key_entry_key</a> *&nbsp;</td>
          <td class="paramname"> <em>kkey</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>nodata</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Prove NXDOMAIN or NODATA. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>env,:</em>&nbsp;</td><td>module environment with temporary region and buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ve,:</em>&nbsp;</td><td>validator environment, with iteration count settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>array of RRsets, some of which are NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num,:</em>&nbsp;</td><td>number of RRsets in the array to examine. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query that is verified for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>kkey,:</em>&nbsp;</td><td>key <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> that signed the NSEC3s. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nodata,:</em>&nbsp;</td><td>if return value is secure, this indicates if nodata or nxdomain was proven. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: sec_status SECURE of the proposition is proven by the NSEC3 RRs, BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00402">filter_init()</a>, <a class="el" href="val__kentry_8c_source.html#l00187">key_entry_isgood()</a>, <a class="el" href="val__nsec3_8c_source.html#l01012">nsec3_do_prove_nameerror()</a>, <a class="el" href="val__nsec3_8c_source.html#l01072">nsec3_do_prove_nodata()</a>, <a class="el" href="val__nsec3_8c_source.html#l00491">nsec3_hash_cmp()</a>, <a class="el" href="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="packed__rrset_8h_source.html#l00162">sec_status_bogus</a>, <a class="el" href="packed__rrset_8h_source.html#l00170">sec_status_insecure</a>, <a class="el" href="packed__rrset_8h_source.html#l00173">sec_status_secure</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="validator_8c_source.html#l01043">validate_cname_noanswer_response()</a>.</p>

</div>
</div><p>
<a class="anchor" name="1815492a67a8108923c660fd13e626ba"></a><!-- doxytag: member="val_nsec3.h::nsec3_hash_cmp" ref="1815492a67a8108923c660fd13e626ba" args="(const void *c1, const void *c2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_hash_cmp           </td>
          <td>(</td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>c1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>c2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Rbtree for hash cache comparison function. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>c1,:</em>&nbsp;</td><td>key 1. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>c2,:</em>&nbsp;</td><td>key 2. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: comparison code, -1, 0, 1, of the keys. </dd></dl>

<p>References <a class="el" href="val__nsec3_8h_source.html#l00231">nsec3_cached_hash::dname</a>, <a class="el" href="val__nsec3_8h_source.html#l00227">nsec3_cached_hash::nsec3</a>, <a class="el" href="val__nsec3_8c_source.html#l00141">nsec3_get_algo()</a>, <a class="el" href="val__nsec3_8c_source.html#l00169">nsec3_get_iter()</a>, <a class="el" href="val__nsec3_8c_source.html#l00184">nsec3_get_salt()</a>, <a class="el" href="dname_8c_source.html#l00096">query_dname_compare()</a>, and <a class="el" href="val__nsec3_8h_source.html#l00229">nsec3_cached_hash::rr</a>.</p>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00164">fptr_whitelist_rbtree_cmp()</a>, <a class="el" href="unitverify_8c_source.html#l00429">nsec3_hash_test()</a>, <a class="el" href="val__nsec3_8c_source.html#l01045">nsec3_prove_nameerror()</a>, <a class="el" href="val__nsec3_8c_source.html#l01180">nsec3_prove_nodata()</a>, <a class="el" href="val__nsec3_8c_source.html#l01261">nsec3_prove_nods()</a>, <a class="el" href="val__nsec3_8c_source.html#l01329">nsec3_prove_nxornodata()</a>, and <a class="el" href="val__nsec3_8c_source.html#l01199">nsec3_prove_wildcard()</a>.</p>

</div>
</div><p>
<a class="anchor" name="02eda756f78e0a2d5dbe2e16b45082d4"></a><!-- doxytag: member="val_nsec3.h::nsec3_hash_name" ref="02eda756f78e0a2d5dbe2e16b45082d4" args="(rbtree_t *table, struct regional *region, ldns_buffer *buf, struct ub_packed_rrset_key *nsec3, int rr, uint8_t *dname, size_t dname_len, struct nsec3_cached_hash **hash)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_hash_name           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structrbtree__t.html">rbtree_t</a> *&nbsp;</td>
          <td class="paramname"> <em>table</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structregional.html">regional</a> *&nbsp;</td>
          <td class="paramname"> <em>region</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>nsec3</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>rr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>dname_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a> **&nbsp;</td>
          <td class="paramname"> <em>hash</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Obtain the hash of an owner name. 
<p>
Used internally by the nsec3 proof functions in this file. published to enable unit testing of hash algorithms and cache.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>table,:</em>&nbsp;</td><td>the cache table. Must be inited at start. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>scratch region to use for allocation. This region holds the tree, if you wipe the region, reinit the tree. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>temporary buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nsec3,:</em>&nbsp;</td><td>the rrset with parameters </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rr,:</em>&nbsp;</td><td>rr number from d that has the NSEC3 parameters to hash to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>name to hash This pointer is used inside the tree, assumed region-alloced. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname_len,:</em>&nbsp;</td><td>the length of the name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>the hash node is returned on success. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 1 on success, either from cache or newly hashed hash is returned. 0 on a malloc failure. -1 if the NSEC3 rr was badly formatted (i.e. formerr). </dd></dl>

<p>References <a class="el" href="val__nsec3_8h_source.html#l00231">nsec3_cached_hash::dname</a>, <a class="el" href="val__nsec3_8h_source.html#l00233">nsec3_cached_hash::dname_len</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="val__nsec3_8h_source.html#l00225">nsec3_cached_hash::node</a>, <a class="el" href="val__nsec3_8h_source.html#l00227">nsec3_cached_hash::nsec3</a>, <a class="el" href="val__nsec3_8c_source.html#l00614">nsec3_calc_b32()</a>, <a class="el" href="val__nsec3_8c_source.html#l00567">nsec3_calc_hash()</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="rbtree_8c_source.html#l00280">rbtree_search()</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, and <a class="el" href="val__nsec3_8h_source.html#l00229">nsec3_cached_hash::rr</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00826">find_covering_nsec3()</a>, <a class="el" href="val__nsec3_8c_source.html#l00733">find_matching_nsec3()</a>, and <a class="el" href="unitverify_8c_source.html#l00386">nsec3_hash_test_entry()</a>.</p>

</div>
</div><p>
<a class="anchor" name="26bcd491cdc50e060759dc634dcd1aec"></a><!-- doxytag: member="val_nsec3.h::nsec3_get_nextowner_b32" ref="26bcd491cdc50e060759dc634dcd1aec" args="(struct ub_packed_rrset_key *rrset, int r, uint8_t *buf, size_t max)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t nsec3_get_nextowner_b32           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>max</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get next owner name, converted to base32 encoding and with the zone name (taken from the nsec3 owner name) appended. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>the NSEC3 rrset. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rr num of the nsec3 in the rrset. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>buffer to store name in </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>max,:</em>&nbsp;</td><td>size of buffer. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>length of name on success. 0 on failure (buffer too short or bad format nsec3 record). </dd></dl>

<p>References <a class="el" href="packed__rrset_8h_source.html#l00064">packed_rrset_key::dname</a>, <a class="el" href="packed__rrset_8h_source.html#l00068">packed_rrset_key::dname_len</a>, <a class="el" href="dname_8c_source.html#l00615">dname_remove_label()</a>, <a class="el" href="val__nsec3_8c_source.html#l00218">nsec3_get_nextowner()</a>, <a class="el" href="val__nsec3_8c_source.html#l00246">nsec3_hash_to_b32()</a>, and <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l00664">wipeout()</a>.</p>

</div>
</div><p>
<a class="anchor" name="2ccf4b8ba989b38db954c028e6fcee2e"></a><!-- doxytag: member="val_nsec3.h::nsec3_hash_to_b32" ref="2ccf4b8ba989b38db954c028e6fcee2e" args="(uint8_t *hash, size_t hashlen, uint8_t *zone, size_t zonelen, uint8_t *buf, size_t max)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t nsec3_hash_to_b32           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>hashlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>zone</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>zonelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>max</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Convert hash into base32 encoding and with the zone name appended. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hashed buffer </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hashlen,:</em>&nbsp;</td><td>length of hash </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>zone,:</em>&nbsp;</td><td>name of zone </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>zonelen,:</em>&nbsp;</td><td>length of zonename. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>buffer to store name in </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>max,:</em>&nbsp;</td><td>size of buffer. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>length of name on success. 0 on failure (buffer too short or bad format nsec3 record). </dd></dl>

<p>References <a class="el" href="val__nsec3_8c.html#1131c0b74b8b1d94d673aa222d0ef54b">ldns_b32_ntop_extended_hex()</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l01149">neg_find_nsec3_ce()</a>, <a class="el" href="val__neg_8c_source.html#l01199">neg_nsec3_getnc()</a>, and <a class="el" href="val__nsec3_8c_source.html#l00264">nsec3_get_nextowner_b32()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f20c6194776a6e624c7f734cf81f4788"></a><!-- doxytag: member="val_nsec3.h::nsec3_get_params" ref="f20c6194776a6e624c7f734cf81f4788" args="(struct ub_packed_rrset_key *rrset, int r, int *algo, size_t *iter, uint8_t **salt, size_t *saltlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_get_params           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>algo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>iter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t **&nbsp;</td>
          <td class="paramname"> <em>salt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>saltlen</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get NSEC3 parameters out of rr. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>the NSEC3 rrset. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>the rr num of the nsec3 in the rrset. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>algo,:</em>&nbsp;</td><td>nsec3 hash algo. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>iter,:</em>&nbsp;</td><td>iteration count. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>salt,:</em>&nbsp;</td><td>ptr to salt inside rdata. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>saltlen,:</em>&nbsp;</td><td>length of salt. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if bad formatted, unknown nsec3 hash algo, or unknown flags set. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00141">nsec3_get_algo()</a>, <a class="el" href="val__nsec3_8c_source.html#l00169">nsec3_get_iter()</a>, <a class="el" href="val__nsec3_8c_source.html#l00184">nsec3_get_salt()</a>, <a class="el" href="val__nsec3_8c_source.html#l00153">nsec3_known_algo()</a>, and <a class="el" href="val__nsec3_8c_source.html#l00118">nsec3_unknown_flags()</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l00739">neg_insert_data()</a>, and <a class="el" href="val__neg_8c_source.html#l01185">neg_params_ok()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3d8ea090d16afe3524345890005611ac"></a><!-- doxytag: member="val_nsec3.h::nsec3_get_hashed" ref="3d8ea090d16afe3524345890005611ac" args="(ldns_buffer *buf, uint8_t *nm, size_t nmlen, int algo, size_t iter, uint8_t *salt, size_t saltlen, uint8_t *res, size_t max)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t nsec3_get_hashed           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>nm</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>nmlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>algo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>iter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>salt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>saltlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>res</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>max</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get NSEC3 hashed in a buffer. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>buffer for temp use. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nm,:</em>&nbsp;</td><td>name to hash </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nmlen,:</em>&nbsp;</td><td>length of nm. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>algo,:</em>&nbsp;</td><td>algo to use, must be known. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>iter,:</em>&nbsp;</td><td>iterations </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>salt,:</em>&nbsp;</td><td>salt for nsec3 </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>saltlen,:</em>&nbsp;</td><td>length of salt. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>res,:</em>&nbsp;</td><td>result of hash stored here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>max,:</em>&nbsp;</td><td>maximum space for result. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, otherwise bytelength stored. </dd></dl>

<p>References <a class="el" href="val__nsec3_8h_source.html#l00237">nsec3_cached_hash::hash_len</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="val__nsec3_8h_source.html#l00096">NSEC3_HASH_SHA1</a>, and <a class="el" href="dname_8c_source.html#l00131">query_dname_tolower()</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l01149">neg_find_nsec3_ce()</a>.</p>

</div>
</div><p>
<a class="anchor" name="cdee5a5978b6ad2317dc46e74a58c9eb"></a><!-- doxytag: member="val_nsec3.h::nsec3_has_type" ref="cdee5a5978b6ad2317dc46e74a58c9eb" args="(struct ub_packed_rrset_key *rrset, int r, uint16_t type)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_has_type           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>type</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
see if NSEC3 RR contains given type 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>NSEC3 rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>RR in rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>type,:</em>&nbsp;</td><td>in host order to check bit for. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if bit set, false if not or error. </dd></dl>

<p>References <a class="el" href="packed__rrset_8h_source.html#l00211">packed_rrset_data::count</a>, <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="val__nsec_8c_source.html#l00059">nsecbitmap_has_type_rdata()</a>, <a class="el" href="packed__rrset_8h_source.html#l00229">packed_rrset_data::rr_data</a>, and <a class="el" href="packed__rrset_8h_source.html#l00219">packed_rrset_data::rr_len</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l01232">neg_nsec3_proof_ds()</a>, <a class="el" href="val__nsec3_8c_source.html#l01072">nsec3_do_prove_nodata()</a>, <a class="el" href="val__nsec3_8c_source.html#l00937">nsec3_prove_closest_encloser()</a>, and <a class="el" href="val__nsec3_8c_source.html#l01261">nsec3_prove_nods()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3e8d935b4eda5b48c13faaeb030b5bf0"></a><!-- doxytag: member="val_nsec3.h::nsec3_has_optout" ref="3e8d935b4eda5b48c13faaeb030b5bf0" args="(struct ub_packed_rrset_key *rrset, int r)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_has_optout           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>r</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
return if nsec3 RR has the optout flag 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>NSEC3 rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>RR in rrset </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if optout, false on error or not optout </dd></dl>

<p>References <a class="el" href="packed__rrset_8h_source.html#l00211">packed_rrset_data::count</a>, <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="val__nsec3_8h_source.html#l00088">NSEC3_OPTOUT</a>, <a class="el" href="packed__rrset_8h_source.html#l00229">packed_rrset_data::rr_data</a>, and <a class="el" href="packed__rrset_8h_source.html#l00219">packed_rrset_data::rr_len</a>.</p>

<p>Referenced by <a class="el" href="val__neg_8c_source.html#l01232">neg_nsec3_proof_ds()</a>, <a class="el" href="val__nsec3_8c_source.html#l01072">nsec3_do_prove_nodata()</a>, and <a class="el" href="val__nsec3_8c_source.html#l01261">nsec3_prove_nods()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d71212ee0d0d0ac92d3a619123941a06"></a><!-- doxytag: member="val_nsec3.h::nsec3_get_nextowner" ref="d71212ee0d0d0ac92d3a619123941a06" args="(struct ub_packed_rrset_key *rrset, int r, uint8_t **next, size_t *nextlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_get_nextowner           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t **&nbsp;</td>
          <td class="paramname"> <em>next</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>nextlen</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return nsec3 RR next hashed owner name. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>NSEC3 rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>RR in rrset </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>next,:</em>&nbsp;</td><td>ptr into rdata to next owner hash </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nextlen,:</em>&nbsp;</td><td>length of hash. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>false on malformed </dd></dl>

<p>References <a class="el" href="packed__rrset_8h_source.html#l00211">packed_rrset_data::count</a>, <a class="el" href="lruhash_8h_source.html#l00222">lruhash_entry::data</a>, <a class="el" href="packed__rrset_8h_source.html#l00094">ub_packed_rrset_key::entry</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="packed__rrset_8h_source.html#l00229">packed_rrset_data::rr_data</a>, and <a class="el" href="packed__rrset_8h_source.html#l00219">packed_rrset_data::rr_len</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00766">nsec3_covers()</a>, and <a class="el" href="val__nsec3_8c_source.html#l00264">nsec3_get_nextowner_b32()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5d4f894d6bd12faffdbc6ce258d73e17"></a><!-- doxytag: member="val_nsec3.h::nsec3_covers" ref="5d4f894d6bd12faffdbc6ce258d73e17" args="(uint8_t *zone, struct nsec3_cached_hash *hash, struct ub_packed_rrset_key *rrset, int rr, ldns_buffer *buf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int nsec3_covers           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>zone</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a> *&nbsp;</td>
          <td class="paramname"> <em>hash</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>rr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buf</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
nsec3Covers Given a hash and a candidate NSEC3Record, determine if that NSEC3Record covers the hash. 
<p>
Covers specifically means that the hash is in between the owner and next hashes and does not equal either.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>zone,:</em>&nbsp;</td><td>the zone name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>the hash of the name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>the rrset of the NSEC3. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rr,:</em>&nbsp;</td><td>which rr in the rrset. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>temporary buffer. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if covers, false if not. </dd></dl>

<p>References <a class="el" href="val__nsec3_8h_source.html#l00239">nsec3_cached_hash::b32</a>, <a class="el" href="val__nsec3_8h_source.html#l00241">nsec3_cached_hash::b32_len</a>, <a class="el" href="packed__rrset_8h_source.html#l00064">packed_rrset_key::dname</a>, <a class="el" href="val__nsec3_8h_source.html#l00235">nsec3_cached_hash::hash</a>, <a class="el" href="val__nsec3_8h_source.html#l00237">nsec3_cached_hash::hash_len</a>, <a class="el" href="val__nsec3_8c_source.html#l00677">label_compare_lower()</a>, <a class="el" href="val__nsec3_8c.html#acd27728d568173b4e84b920c93f4141">ldns_b32_pton_extended_hex()</a>, <a class="el" href="val__nsec3_8c_source.html#l00218">nsec3_get_nextowner()</a>, <a class="el" href="dname_8c_source.html#l00096">query_dname_compare()</a>, and <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00826">find_covering_nsec3()</a>, and <a class="el" href="val__neg_8c_source.html#l01232">neg_nsec3_proof_ds()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:33 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>