Sophie

Sophie

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

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.c 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.c File Reference</h1>This file contains helper functions for the validator module.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="val__nsec3_8h.html">validator/val_nsec3.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="validator_8h.html">validator/validator.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="val__kentry_8h.html">validator/val_kentry.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="regional_8h.html">util/regional.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="rbtree_8h.html">util/rbtree.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="module_8h.html">util/module.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="net__help_8h.html">util/net_help.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>
<code>#include &quot;<a class="el" href="dname_8h.html">util/data/dname.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgreply_8h.html">util/data/msgreply.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="val__nsec_8h.html">validator/val_nsec.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="structce__response.html">ce_response</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closest encloser (ce) proof results Contains the ce and the next-closer (nc) proof.  <a href="structce__response.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnsec3__filter.html">nsec3_filter</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Filter conditions for NSEC3 proof Used to iterate over the applicable NSEC3 RRs.  <a href="structnsec3__filter.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1131c0b74b8b1d94d673aa222d0ef54b"></a><!-- doxytag: member="val_nsec3.c::ldns_b32_ntop_extended_hex" ref="1131c0b74b8b1d94d673aa222d0ef54b" args="(uint8_t const *src, size_t srclength, char *target, size_t targsize)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#1131c0b74b8b1d94d673aa222d0ef54b">ldns_b32_ntop_extended_hex</a> (uint8_t const *src, size_t srclength, char *target, size_t targsize)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function we get from ldns-compat or from base system it returns the number of data bytes stored at the target, or &lt;0 on error. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="acd27728d568173b4e84b920c93f4141"></a><!-- doxytag: member="val_nsec3.c::ldns_b32_pton_extended_hex" ref="acd27728d568173b4e84b920c93f4141" args="(char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#acd27728d568173b4e84b920c93f4141">ldns_b32_pton_extended_hex</a> (char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function we get from ldns-compat or from base system it returns the number of data bytes stored at the target, or &lt;0 on error. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64585332719f1fa845686a5c666d1b43"></a><!-- doxytag: member="val_nsec3.c::rrset_get_count" ref="64585332719f1fa845686a5c666d1b43" args="(struct ub_packed_rrset_key *rrset)" -->
static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#64585332719f1fa845686a5c666d1b43">rrset_get_count</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return number of rrs in an rrset <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="551a0f73d6d8d663a4dffab50a1519e1"></a><!-- doxytag: member="val_nsec3.c::nsec3_unknown_flags" ref="551a0f73d6d8d663a4dffab50a1519e1" args="(struct ub_packed_rrset_key *rrset, int r)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#551a0f73d6d8d663a4dffab50a1519e1">nsec3_unknown_flags</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 unknown flags <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_8c.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"><a class="anchor" name="858d81471ad2e62b2970c01a0f539879"></a><!-- doxytag: member="val_nsec3.c::nsec3_get_algo" ref="858d81471ad2e62b2970c01a0f539879" args="(struct ub_packed_rrset_key *rrset, int r)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#858d81471ad2e62b2970c01a0f539879">nsec3_get_algo</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 nsec3 RR algorithm <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f40b6c99ca3781f0a74032a226216202"></a><!-- doxytag: member="val_nsec3.c::nsec3_known_algo" ref="f40b6c99ca3781f0a74032a226216202" args="(struct ub_packed_rrset_key *rrset, int r)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#f40b6c99ca3781f0a74032a226216202">nsec3_known_algo</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 known algorithm <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="53dc9ef9a10ed1b5a09912a4727d0c03"></a><!-- doxytag: member="val_nsec3.c::nsec3_get_iter" ref="53dc9ef9a10ed1b5a09912a4727d0c03" args="(struct ub_packed_rrset_key *rrset, int r)" -->
static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#53dc9ef9a10ed1b5a09912a4727d0c03">nsec3_get_iter</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 nsec3 RR iteration count <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="99bda58e39d185354fec605244e51ac0"></a><!-- doxytag: member="val_nsec3.c::nsec3_get_salt" ref="99bda58e39d185354fec605244e51ac0" args="(struct ub_packed_rrset_key *rrset, int r, uint8_t **salt, size_t *saltlen)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#99bda58e39d185354fec605244e51ac0">nsec3_get_salt</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *rrset, int r, uint8_t **salt, size_t *saltlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return nsec3 RR salt <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_8c.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">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.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">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.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">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.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">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.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">static struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#5e12773cda2b159cc58f0562b0c07ca0">filter_next</a> (struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *filter, size_t *rrsetnum, int *rrnum)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Iterate through NSEC3 list, per RR This routine gives the next RR in the list (or sets rrset null).  <a href="#5e12773cda2b159cc58f0562b0c07ca0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#946ca2485dc50ca8f6f619b87fbb361c">filter_first</a> (struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *filter, size_t *rrsetnum, int *rrnum)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Start iterating over NSEC3 records.  <a href="#946ca2485dc50ca8f6f619b87fbb361c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1675622dd8ac763b241e8a87db727d41"></a><!-- doxytag: member="val_nsec3.c::nsec3_rrset_has_known" ref="1675622dd8ac763b241e8a87db727d41" args="(struct ub_packed_rrset_key *s)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#1675622dd8ac763b241e8a87db727d41">nsec3_rrset_has_known</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see if at least one RR is known (flags, algo) <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#5800e128feb9da456aad1d615cce6295">filter_init</a> (struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *filter, 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)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the filter structure.  <a href="#5800e128feb9da456aad1d615cce6295"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#b7310cd4b4eb52618fa7434e8f85d0d0">get_max_iter</a> (struct <a class="el" href="structval__env.html">val_env</a> *ve, size_t bits)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find max iteration count using config settings and key size.  <a href="#b7310cd4b4eb52618fa7434e8f85d0d0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#1a1d8c25189ec5987a301fa94598ce24">nsec3_iteration_count_high</a> (struct <a class="el" href="structval__env.html">val_env</a> *ve, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *filter, 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 any of the NSEC3 rrs iteration count is too high, from key.  <a href="#1a1d8c25189ec5987a301fa94598ce24"></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_8c.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">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.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"><a class="anchor" name="34a1e92a5ffc730092de93a4954393f0"></a><!-- doxytag: member="val_nsec3.c::nsec3_calc_hash" ref="34a1e92a5ffc730092de93a4954393f0" args="(struct regional *region, ldns_buffer *buf, struct nsec3_cached_hash *c)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#34a1e92a5ffc730092de93a4954393f0">nsec3_calc_hash</a> (struct <a class="el" href="structregional.html">regional</a> *region, ldns_buffer *buf, struct <a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a> *c)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">perform hash of name <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="752bbd934e907c7cd554c2b68de45c31"></a><!-- doxytag: member="val_nsec3.c::nsec3_calc_b32" ref="752bbd934e907c7cd554c2b68de45c31" args="(struct regional *region, ldns_buffer *buf, struct nsec3_cached_hash *c)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#752bbd934e907c7cd554c2b68de45c31">nsec3_calc_b32</a> (struct <a class="el" href="structregional.html">regional</a> *region, ldns_buffer *buf, struct <a class="el" href="structnsec3__cached__hash.html">nsec3_cached_hash</a> *c)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">perform b32 encoding of hash <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_8c.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"><a class="anchor" name="52def17b1b5f01dd398ce56c5494b88d"></a><!-- doxytag: member="val_nsec3.c::label_compare_lower" ref="52def17b1b5f01dd398ce56c5494b88d" args="(uint8_t *lab1, uint8_t *lab2, size_t lablen)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#52def17b1b5f01dd398ce56c5494b88d">label_compare_lower</a> (uint8_t *lab1, uint8_t *lab2, size_t lablen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare a label lowercased <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#5060e0dac0b02418552bcd687e7152f9">nsec3_hash_matches_owner</a> (struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, 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> *s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare a hashed name with the owner name of an NSEC3 RRset.  <a href="#5060e0dac0b02418552bcd687e7152f9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#98acc47f6905898cae9417969a07a8a6">find_matching_nsec3</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, <a class="el" href="structrbtree__t.html">rbtree_t</a> *ct, uint8_t *nm, size_t nmlen, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **rrset, int *rr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find matching NSEC3 Find the NSEC3Record that matches a hash of a name.  <a href="#98acc47f6905898cae9417969a07a8a6"></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_8c.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>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#77e62de9a00658e9b96f38fa839dd890">find_covering_nsec3</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, <a class="el" href="structrbtree__t.html">rbtree_t</a> *ct, uint8_t *nm, size_t nmlen, struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> **rrset, int *rr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">findCoveringNSEC3 Given a name, find a covering NSEC3 from among a list of NSEC3s.  <a href="#77e62de9a00658e9b96f38fa839dd890"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#b9eef15e0b9696b2f530b97e0258b5ca">nsec3_find_closest_encloser</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, <a class="el" href="structrbtree__t.html">rbtree_t</a> *ct, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structce__response.html">ce_response</a> *ce)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">findClosestEncloser Given a name and a list of NSEC3s, find the candidate closest encloser.  <a href="#b9eef15e0b9696b2f530b97e0258b5ca"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#63758a95975e9709dc85471486b58566">next_closer</a> (uint8_t *qname, size_t qnamelen, uint8_t *ce, uint8_t **nm, size_t *nmlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Given a qname and its proven closest encloser, calculate the "next closest" name.  <a href="#63758a95975e9709dc85471486b58566"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#effd6ae0f125ed6e00efd900bdf3acf5">nsec3_prove_closest_encloser</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, <a class="el" href="structrbtree__t.html">rbtree_t</a> *ct, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, int prove_does_not_exist, struct <a class="el" href="structce__response.html">ce_response</a> *ce)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">proveClosestEncloser Given a List of nsec3 RRs, find and prove the closest encloser to qname.  <a href="#effd6ae0f125ed6e00efd900bdf3acf5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bae137a1ff1f709246d67e876bf54ffa"></a><!-- doxytag: member="val_nsec3.c::nsec3_ce_wildcard" ref="bae137a1ff1f709246d67e876bf54ffa" args="(struct regional *region, uint8_t *ce, size_t celen, size_t *len)" -->
static uint8_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#bae137a1ff1f709246d67e876bf54ffa">nsec3_ce_wildcard</a> (struct <a class="el" href="structregional.html">regional</a> *region, uint8_t *ce, size_t celen, size_t *len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">allocate a wildcard for the closest encloser <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="12d2c5287108f266b99b264e29076fc7"></a><!-- doxytag: member="val_nsec3.c::nsec3_do_prove_nameerror" ref="12d2c5287108f266b99b264e29076fc7" args="(struct module_env *env, struct nsec3_filter *flt, rbtree_t *ct, struct query_info *qinfo)" -->
static 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_8c.html#12d2c5287108f266b99b264e29076fc7">nsec3_do_prove_nameerror</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, <a class="el" href="structrbtree__t.html">rbtree_t</a> *ct, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Do the name error proof. <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_8c.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"><a class="anchor" name="b8aaea141997f0df41813ea5939db14e"></a><!-- doxytag: member="val_nsec3.c::nsec3_do_prove_nodata" ref="b8aaea141997f0df41813ea5939db14e" args="(struct module_env *env, struct nsec3_filter *flt, rbtree_t *ct, struct query_info *qinfo)" -->
static 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_8c.html#b8aaea141997f0df41813ea5939db14e">nsec3_do_prove_nodata</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *flt, <a class="el" href="structrbtree__t.html">rbtree_t</a> *ct, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Do the nodata proof. <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_8c.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_8c.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"><a class="anchor" name="dfbd1a1403234179634f44511f0842f3"></a><!-- doxytag: member="val_nsec3.c::list_is_secure" ref="dfbd1a1403234179634f44511f0842f3" args="(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key **list, size_t num, struct key_entry_key *kkey)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="val__nsec3_8c.html#dfbd1a1403234179634f44511f0842f3">list_is_secure</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="structkey__entry__key.html">key_entry_key</a> *kkey)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">test if list is all secure <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_8c.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_8c.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>
</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. <hr><h2>Function Documentation</h2>
<a class="anchor" name="3e8d935b4eda5b48c13faaeb030b5bf0"></a><!-- doxytag: member="val_nsec3.c::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="f20c6194776a6e624c7f734cf81f4788"></a><!-- doxytag: member="val_nsec3.c::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="d71212ee0d0d0ac92d3a619123941a06"></a><!-- doxytag: member="val_nsec3.c::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="2ccf4b8ba989b38db954c028e6fcee2e"></a><!-- doxytag: member="val_nsec3.c::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="26bcd491cdc50e060759dc634dcd1aec"></a><!-- doxytag: member="val_nsec3.c::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="cdee5a5978b6ad2317dc46e74a58c9eb"></a><!-- doxytag: member="val_nsec3.c::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="5e12773cda2b159cc58f0562b0c07ca0"></a><!-- doxytag: member="val_nsec3.c::filter_next" ref="5e12773cda2b159cc58f0562b0c07ca0" args="(struct nsec3_filter *filter, size_t *rrsetnum, int *rrnum)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a>* filter_next           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>filter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>rrsetnum</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>rrnum</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static, read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Iterate through NSEC3 list, per RR This routine gives the next RR in the list (or sets rrset null). 
<p>
Usage:<p>
size_t rrsetnum; int rrnum; struct ub_packed_rrset_key* rrset; for(rrset=filter_first(filter, &amp;rrsetnum, &amp;rrnum); rrset; rrset=filter_next(filter, &amp;rrsetnum, &amp;rrnum)) do_stuff;<p>
Also filters out o unknown flag NSEC3s o unknown algorithm NSEC3s. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>filter,:</em>&nbsp;</td><td>nsec3 filter structure. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrsetnum,:</em>&nbsp;</td><td>in/out rrset number to look at. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrnum,:</em>&nbsp;</td><td>in/out rr number in rrset to look at. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>ptr to the next rrset (or NULL at end). </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#l00103">nsec3_filter::fclass</a>, <a class="el" href="val__nsec3_8c_source.html#l00099">nsec3_filter::list</a>, <a class="el" href="val__nsec3_8c_source.html#l00153">nsec3_known_algo()</a>, <a class="el" href="val__nsec3_8c_source.html#l00118">nsec3_unknown_flags()</a>, <a class="el" href="val__nsec3_8c_source.html#l00101">nsec3_filter::num</a>, <a class="el" href="dname_8c_source.html#l00096">query_dname_compare()</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="packed__rrset_8h_source.html#l00077">packed_rrset_key::rrset_class</a>, <a class="el" href="val__nsec3_8c_source.html#l00108">rrset_get_count()</a>, <a class="el" href="packed__rrset_8h_source.html#l00075">packed_rrset_key::type</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00369">filter_first()</a>, <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="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>.</p>

</div>
</div><p>
<a class="anchor" name="946ca2485dc50ca8f6f619b87fbb361c"></a><!-- doxytag: member="val_nsec3.c::filter_first" ref="946ca2485dc50ca8f6f619b87fbb361c" args="(struct nsec3_filter *filter, size_t *rrsetnum, int *rrnum)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a>* filter_first           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>filter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>rrsetnum</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>rrnum</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static, read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Start iterating over NSEC3 records. 
<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>filter,:</em>&nbsp;</td><td>the filter structure, must have been filter_init-ed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrsetnum,:</em>&nbsp;</td><td>can be undefined on call, inited. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrnum,:</em>&nbsp;</td><td>can be undefined on call, inited. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>first rrset of an NSEC3, together with rrnum this points to the first RR to examine. Is NULL on empty list. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00323">filter_next()</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="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5800e128feb9da456aad1d615cce6295"></a><!-- doxytag: member="val_nsec3.c::filter_init" ref="5800e128feb9da456aad1d615cce6295" args="(struct nsec3_filter *filter, struct ub_packed_rrset_key **list, size_t num, struct query_info *qinfo)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void filter_init           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>filter</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><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Initialize the filter structure. 
<p>
Finds the zone by looking at available NSEC3 records and best match. (skips the unknown flag and unknown algo NSEC3s).<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>filter,:</em>&nbsp;</td><td>nsec3 filter structure. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>list,:</em>&nbsp;</td><td>list of rrsets, an array of them. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num,:</em>&nbsp;</td><td>number of rrsets in list. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query name to match a zone for. query type (if DS a higher zone must be chosen) qclass, to filter NSEC3s with. </td></tr>
  </table>
</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="dname_8c_source.html#l00587">dname_subdomain_c()</a>, <a class="el" href="val__nsec3_8c_source.html#l00103">nsec3_filter::fclass</a>, <a class="el" href="val__nsec3_8c_source.html#l00099">nsec3_filter::list</a>, <a class="el" href="val__nsec3_8c_source.html#l00378">nsec3_rrset_has_known()</a>, <a class="el" href="val__nsec3_8c_source.html#l00101">nsec3_filter::num</a>, <a class="el" href="msgreply_8h_source.html#l00070">query_info::qclass</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>, <a class="el" href="dname_8c_source.html#l00096">query_dname_compare()</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, <a class="el" href="packed__rrset_8h_source.html#l00077">packed_rrset_key::rrset_class</a>, <a class="el" href="packed__rrset_8h_source.html#l00075">packed_rrset_key::type</a>, <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>, and <a class="el" href="val__nsec3_8c_source.html#l00097">nsec3_filter::zone_len</a>.</p>

<p>Referenced by <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="b7310cd4b4eb52618fa7434e8f85d0d0"></a><!-- doxytag: member="val_nsec3.c::get_max_iter" ref="b7310cd4b4eb52618fa7434e8f85d0d0" args="(struct val_env *ve, size_t bits)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static size_t get_max_iter           </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">size_t&nbsp;</td>
          <td class="paramname"> <em>bits</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find max iteration count using config settings and key size. 
<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>ve,:</em>&nbsp;</td><td>validator environment with iteration count config settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>bits,:</em>&nbsp;</td><td>key size </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>max iteration count </dd></dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="validator_8h_source.html#l00102">val_env::nsec3_keyiter_count</a>, and <a class="el" href="validator_8h_source.html#l00115">val_env::nsec3_maxiter</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00469">nsec3_iteration_count_high()</a>.</p>

</div>
</div><p>
<a class="anchor" name="1a1d8c25189ec5987a301fa94598ce24"></a><!-- doxytag: member="val_nsec3.c::nsec3_iteration_count_high" ref="1a1d8c25189ec5987a301fa94598ce24" args="(struct val_env *ve, struct nsec3_filter *filter, struct key_entry_key *kkey)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int nsec3_iteration_count_high           </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="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>filter</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><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Determine if any of the NSEC3 rrs iteration count is too high, from key. 
<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>ve,:</em>&nbsp;</td><td>validator environment with iteration count config settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>filter,:</em>&nbsp;</td><td>what NSEC3s to loop over. </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> used for verification; used for iteration counts. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if some nsec3s are above the max iteration count. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00369">filter_first()</a>, <a class="el" href="val__nsec3_8c_source.html#l00323">filter_next()</a>, <a class="el" href="val__nsec3_8c_source.html#l00448">get_max_iter()</a>, <a class="el" href="val__kentry_8c_source.html#l00332">key_entry_keysize()</a>, <a class="el" href="val__nsec3_8c_source.html#l00169">nsec3_get_iter()</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <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="1815492a67a8108923c660fd13e626ba"></a><!-- doxytag: member="val_nsec3.c::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="3d8ea090d16afe3524345890005611ac"></a><!-- doxytag: member="val_nsec3.c::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="02eda756f78e0a2d5dbe2e16b45082d4"></a><!-- doxytag: member="val_nsec3.c::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="5060e0dac0b02418552bcd687e7152f9"></a><!-- doxytag: member="val_nsec3.c::nsec3_hash_matches_owner" ref="5060e0dac0b02418552bcd687e7152f9" args="(struct nsec3_filter *flt, struct nsec3_cached_hash *hash, struct ub_packed_rrset_key *s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int nsec3_hash_matches_owner           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>flt</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>s</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compare a hashed name with the owner name of an NSEC3 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>flt,:</em>&nbsp;</td><td>filter with zone name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>the hashed name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>s,:</em>&nbsp;</td><td>rrset with owner name. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if matches exactly, 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_8c_source.html#l00677">label_compare_lower()</a>, <a class="el" href="dname_8c_source.html#l00096">query_dname_compare()</a>, <a class="el" href="packed__rrset_8h_source.html#l00105">ub_packed_rrset_key::rk</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00733">find_matching_nsec3()</a>.</p>

</div>
</div><p>
<a class="anchor" name="98acc47f6905898cae9417969a07a8a6"></a><!-- doxytag: member="val_nsec3.c::find_matching_nsec3" ref="98acc47f6905898cae9417969a07a8a6" args="(struct module_env *env, struct nsec3_filter *flt, rbtree_t *ct, uint8_t *nm, size_t nmlen, struct ub_packed_rrset_key **rrset, int *rr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int find_matching_nsec3           </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="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>flt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structrbtree__t.html">rbtree_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ct</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">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><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find matching NSEC3 Find the NSEC3Record that matches a hash of a 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>env,:</em>&nbsp;</td><td>module environment with temporary region and buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flt,:</em>&nbsp;</td><td>the NSEC3 RR filter, contains zone name and RRs. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ct,:</em>&nbsp;</td><td>cached hashes table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nm,:</em>&nbsp;</td><td>name to look for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nmlen,:</em>&nbsp;</td><td>length of name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>nsec3 that matches is returned here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rr,:</em>&nbsp;</td><td>rr number in nsec3 rrset that matches. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if a matching NSEC3 is found, false if not. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00369">filter_first()</a>, <a class="el" href="val__nsec3_8c_source.html#l00323">filter_next()</a>, <a class="el" href="val__nsec3_8h_source.html#l00235">nsec3_cached_hash::hash</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="val__nsec3_8c_source.html#l00700">nsec3_hash_matches_owner()</a>, <a class="el" href="val__nsec3_8c_source.html#l00634">nsec3_hash_name()</a>, <a class="el" href="module_8h_source.html#l00186">module_env::scratch</a>, and <a class="el" href="module_8h_source.html#l00188">module_env::scratch_buffer</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l01072">nsec3_do_prove_nodata()</a>, <a class="el" href="val__nsec3_8c_source.html#l00872">nsec3_find_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="5d4f894d6bd12faffdbc6ce258d73e17"></a><!-- doxytag: member="val_nsec3.c::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>
<a class="anchor" name="77e62de9a00658e9b96f38fa839dd890"></a><!-- doxytag: member="val_nsec3.c::find_covering_nsec3" ref="77e62de9a00658e9b96f38fa839dd890" args="(struct module_env *env, struct nsec3_filter *flt, rbtree_t *ct, uint8_t *nm, size_t nmlen, struct ub_packed_rrset_key **rrset, int *rr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int find_covering_nsec3           </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="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>flt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structrbtree__t.html">rbtree_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ct</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">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><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
findCoveringNSEC3 Given a name, find a covering NSEC3 from among a list of NSEC3s. 
<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>flt,:</em>&nbsp;</td><td>the NSEC3 RR filter, contains zone name and RRs. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ct,:</em>&nbsp;</td><td>cached hashes table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nm,:</em>&nbsp;</td><td>name to check if covered. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nmlen,:</em>&nbsp;</td><td>length of name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>covering NSEC3 rrset is returned here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rr,:</em>&nbsp;</td><td>rr of cover is returned here. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if a covering NSEC3 is found, false if not. </dd></dl>

<p>References <a class="el" href="val__nsec3_8c_source.html#l00369">filter_first()</a>, <a class="el" href="val__nsec3_8c_source.html#l00323">filter_next()</a>, <a class="el" href="val__nsec3_8h_source.html#l00235">nsec3_cached_hash::hash</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="val__nsec3_8c_source.html#l00766">nsec3_covers()</a>, <a class="el" href="val__nsec3_8c_source.html#l00634">nsec3_hash_name()</a>, <a class="el" href="module_8h_source.html#l00186">module_env::scratch</a>, <a class="el" href="module_8h_source.html#l00188">module_env::scratch_buffer</a>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l01012">nsec3_do_prove_nameerror()</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#l01199">nsec3_prove_wildcard()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b9eef15e0b9696b2f530b97e0258b5ca"></a><!-- doxytag: member="val_nsec3.c::nsec3_find_closest_encloser" ref="b9eef15e0b9696b2f530b97e0258b5ca" args="(struct module_env *env, struct nsec3_filter *flt, rbtree_t *ct, struct query_info *qinfo, struct ce_response *ce)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int nsec3_find_closest_encloser           </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="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>flt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structrbtree__t.html">rbtree_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ct</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="structce__response.html">ce_response</a> *&nbsp;</td>
          <td class="paramname"> <em>ce</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
findClosestEncloser Given a name and a list of NSEC3s, find the candidate closest encloser. 
<p>
This will be the first ancestor of 'name' (including itself) to have a matching NSEC3 RR. <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>flt,:</em>&nbsp;</td><td>the NSEC3 RR filter, contains zone name and RRs. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ct,:</em>&nbsp;</td><td>cached hashes table. </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>ce,:</em>&nbsp;</td><td>closest encloser information is returned in here. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if a closest encloser candidate is found, false if not. </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="val__nsec3_8c_source.html#l00082">ce_response::ce_rr</a>, <a class="el" href="val__nsec3_8c_source.html#l00080">ce_response::ce_rrset</a>, <a class="el" href="dname_8c_source.html#l00615">dname_remove_label()</a>, <a class="el" href="dname_8c_source.html#l00587">dname_subdomain_c()</a>, <a class="el" href="val__nsec3_8c_source.html#l00733">find_matching_nsec3()</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>, and <a class="el" href="val__nsec3_8c_source.html#l00095">nsec3_filter::zone</a>.</p>

<p>Referenced by <a class="el" href="val__nsec3_8c_source.html#l00937">nsec3_prove_closest_encloser()</a>.</p>

</div>
</div><p>
<a class="anchor" name="63758a95975e9709dc85471486b58566"></a><!-- doxytag: member="val_nsec3.c::next_closer" ref="63758a95975e9709dc85471486b58566" args="(uint8_t *qname, size_t qnamelen, uint8_t *ce, uint8_t **nm, size_t *nmlen)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void next_closer           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>qname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>qnamelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>ce</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><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Given a qname and its proven closest encloser, calculate the "next closest" name. 
<p>
Basically, this is the name that is one label longer than the closest encloser that is still a subdomain of qname.<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>qname,:</em>&nbsp;</td><td>query name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qnamelen,:</em>&nbsp;</td><td>length of qname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ce,:</em>&nbsp;</td><td>closest encloser </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nm,:</em>&nbsp;</td><td>result name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>nmlen,:</em>&nbsp;</td><td>length of nm. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="dname_8c_source.html#l00369">dname_count_labels()</a>, and <a class="el" href="dname_8c_source.html#l00629">dname_remove_labels()</a>.</p>

<p>Referenced by <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#l01199">nsec3_prove_wildcard()</a>.</p>

</div>
</div><p>
<a class="anchor" name="effd6ae0f125ed6e00efd900bdf3acf5"></a><!-- doxytag: member="val_nsec3.c::nsec3_prove_closest_encloser" ref="effd6ae0f125ed6e00efd900bdf3acf5" args="(struct module_env *env, struct nsec3_filter *flt, rbtree_t *ct, struct query_info *qinfo, int prove_does_not_exist, struct ce_response *ce)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int nsec3_prove_closest_encloser           </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="structnsec3__filter.html">nsec3_filter</a> *&nbsp;</td>
          <td class="paramname"> <em>flt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structrbtree__t.html">rbtree_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ct</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">int&nbsp;</td>
          <td class="paramname"> <em>prove_does_not_exist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structce__response.html">ce_response</a> *&nbsp;</td>
          <td class="paramname"> <em>ce</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
proveClosestEncloser Given a List of nsec3 RRs, find and prove the closest encloser to qname. 
<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>flt,:</em>&nbsp;</td><td>the NSEC3 RR filter, contains zone name and RRs. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ct,:</em>&nbsp;</td><td>cached hashes table. </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>prove_does_not_exist,:</em>&nbsp;</td><td>If true, then if the closest encloser turns out to be qname, then null is returned. If set true, and the return value is true, then you can be certain that the ce.nc_rrset and ce.nc_rr are set properly. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ce,:</em>&nbsp;</td><td>closest encloser information is returned in here. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>false if no closest encloser could be proven. true if a closest encloser could be proven, ce is set. </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#l00082">ce_response::ce_rr</a>, <a class="el" href="val__nsec3_8c_source.html#l00080">ce_response::ce_rrset</a>, <a class="el" href="val__nsec3_8c_source.html#l00826">find_covering_nsec3()</a>, <a class="el" href="net__help_8c_source.html#l00265">log_nametypeclass()</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#l00872">nsec3_find_closest_encloser()</a>, <a class="el" href="val__nsec3_8c_source.html#l00279">nsec3_has_type()</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="dname_8c_source.html#l00096">query_dname_compare()</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <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>, and <a class="el" href="val__nsec3_8c_source.html#l01261">nsec3_prove_nods()</a>.</p>

</div>
</div><p>
<a class="anchor" name="ec098bd6e018f6bdc18d644dd1f032c2"></a><!-- doxytag: member="val_nsec3.c::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.c::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.c::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.c::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.c::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>
</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>