#include <datasrc/zone.h>
#include <dns/rdataclass.h>
-#include <dns/nsec3hash.h>
#include <boost/scoped_ptr.hpp>
}
}
+const NSEC3Hash*
+ZoneDataUpdater::getNSEC3Hash() {
+ if (hash_ == NULL) {
+ NSEC3Data* nsec3_data = zone_data_.getNSEC3Data();
+ // This should never be NULL in this codepath.
+ assert(nsec3_data != NULL);
+
+ hash_ = NSEC3Hash::create(nsec3_data->hashalg,
+ nsec3_data->iterations,
+ nsec3_data->getSaltData(),
+ nsec3_data->getSaltLen());
+ }
+
+ return (hash_);
+}
+
template <typename T>
void
ZoneDataUpdater::setupNSEC3(const ConstRRsetPtr rrset) {
zone_data_.setNSEC3Data(nsec3_data);
zone_data_.setSigned(true);
} else {
- const boost::scoped_ptr<NSEC3Hash> hash
- (NSEC3Hash::create(nsec3_data->hashalg,
- nsec3_data->iterations,
- nsec3_data->getSaltData(),
- nsec3_data->getSaltLen()));
-
+ const NSEC3Hash* hash = getNSEC3Hash();
if (!hash->match(nsec3_rdata)) {
isc_throw(AddError,
rrset->getType() << " with inconsistent parameters: "
#include <dns/name.h>
#include <dns/rrclass.h>
#include <dns/rrset.h>
+#include <dns/nsec3hash.h>
#include <util/memory_segment.h>
#include <boost/noncopyable.hpp>
mem_sgmt_(mem_sgmt),
rrclass_(rrclass),
zone_name_(zone_name),
- zone_data_(zone_data)
+ zone_data_(zone_data),
+ hash_(NULL)
{}
/// The destructor.
- ~ZoneDataUpdater()
- {}
+ ~ZoneDataUpdater() {
+ delete hash_;
+ }
//@}
// the strong exception guarantee.
void validate(const isc::dns::ConstRRsetPtr rrset) const;
+ const isc::dns::NSEC3Hash* getNSEC3Hash();
template <typename T>
void setupNSEC3(const isc::dns::ConstRRsetPtr rrset);
void addNSEC3(const isc::dns::ConstRRsetPtr rrset,
const isc::dns::Name& zone_name_;
ZoneData& zone_data_;
RdataEncoder encoder_;
+ isc::dns::NSEC3Hash* hash_;
};
} // namespace memory