BIND 10 trac749, updated. 36dd3d4b0bdd8c40695ac186955196bd268db586 [trac749] refactor more C++ utility code

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Apr 12 07:27:08 UTC 2011


The branch, trac749 has been updated
       via  36dd3d4b0bdd8c40695ac186955196bd268db586 (commit)
       via  f6aa7d59569e492326499898a0e3f183c8748970 (commit)
      from  ea679d6d1fc5105027de1f0243817c66a32fa8ac (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 36dd3d4b0bdd8c40695ac186955196bd268db586
Author: chenzhengzhang <jerry.zzpku at gmail.com>
Date:   Tue Apr 12 15:26:09 2011 +0800

    [trac749] refactor more C++ utility code

commit f6aa7d59569e492326499898a0e3f183c8748970
Author: chenzhengzhang <jerry.zzpku at gmail.com>
Date:   Mon Apr 11 19:08:19 2011 +0800

    [trac749] refactor C++ utility library

-----------------------------------------------------------------------

Summary of changes:
 configure.ac                                       |    2 +
 src/bin/auth/auth_srv.cc                           |    4 +-
 src/bin/auth/auth_srv.h                            |    2 +-
 src/bin/auth/benchmarks/query_bench.cc             |    3 +-
 src/bin/auth/main.cc                               |    4 +-
 src/bin/auth/tests/auth_srv_unittest.cc            |    1 +
 src/bin/host/host.cc                               |    4 +-
 src/bin/resolver/main.cc                           |    2 +-
 src/bin/resolver/resolver.cc                       |    4 +-
 src/bin/resolver/resolver.h                        |    2 +-
 src/lib/Makefile.am                                |    4 +-
 src/lib/asiolink/Makefile.am                       |    2 -
 src/lib/asiolink/asiolink_utilities.h              |   61 ---
 src/lib/asiolink/dns_answer.h                      |    2 +-
 src/lib/asiolink/dns_lookup.h                      |    4 +-
 src/lib/asiolink/io_asio_socket.h                  |    6 +-
 src/lib/asiolink/io_fetch.cc                       |   15 +-
 src/lib/asiolink/io_fetch.h                        |    4 +-
 src/lib/asiolink/qid_gen.cc                        |   54 ---
 src/lib/asiolink/qid_gen.h                         |   85 ----
 src/lib/asiolink/tcp_server.cc                     |    3 +
 src/lib/asiolink/tcp_server.h                      |    2 +-
 src/lib/asiolink/tcp_socket.h                      |   14 +-
 src/lib/asiolink/tests/Makefile.am                 |    4 +-
 .../asiolink/tests/asiolink_utilities_unittest.cc  |   74 ---
 src/lib/asiolink/tests/dns_server_unittest.cc      |    5 +-
 src/lib/asiolink/tests/io_fetch_unittest.cc        |    6 +-
 src/lib/asiolink/tests/qid_gen_unittest.cc         |   59 ---
 src/lib/asiolink/tests/tcp_socket_unittest.cc      |    6 +-
 src/lib/asiolink/tests/udp_socket_unittest.cc      |    6 +-
 src/lib/asiolink/udp_server.cc                     |    3 +-
 src/lib/asiolink/udp_socket.h                      |    4 +-
 src/lib/bench/benchmark_util.cc                    |    3 +-
 src/lib/bench/tests/Makefile.am                    |    1 +
 src/lib/bench/tests/loadquery_unittest.cc          |    3 +-
 src/lib/cache/Makefile.am                          |    1 +
 src/lib/cache/message_cache.h                      |    4 +-
 src/lib/cache/rrset_cache.h                        |    5 +-
 src/lib/cache/tests/Makefile.am                    |    2 +
 src/lib/cache/tests/cache_test_messagefromfile.h   |    4 +-
 src/lib/cache/tests/cache_test_sectioncount.h      |    2 +-
 src/lib/cache/tests/message_cache_unittest.cc      |    3 +-
 src/lib/cache/tests/message_entry_unittest.cc      |    2 +-
 src/lib/datasrc/data_source.cc                     |    9 +-
 src/lib/datasrc/tests/datasrc_unittest.cc          |    4 +-
 src/lib/dns/Makefile.am                            |   15 +-
 src/lib/dns/buffer.h                               |  446 ------------------
 src/lib/dns/dnssectime.cc                          |  211 ---------
 src/lib/dns/dnssectime.h                           |  145 ------
 src/lib/dns/edns.cc                                |    1 +
 src/lib/dns/edns.h                                 |    8 +-
 src/lib/dns/message.cc                             |    4 +-
 src/lib/dns/message.h                              |   11 +-
 src/lib/dns/messagerenderer.cc                     |    4 +-
 src/lib/dns/messagerenderer.h                      |    9 +-
 src/lib/dns/name.cc                                |    3 +-
 src/lib/dns/name.h                                 |   11 +-
 src/lib/dns/python/edns_python.cc                  |    1 +
 src/lib/dns/python/message_python.cc               |    1 +
 src/lib/dns/python/messagerenderer_python.cc       |    1 +
 src/lib/dns/python/name_python.cc                  |    1 +
 src/lib/dns/python/pydnspp.cc                      |    2 +-
 src/lib/dns/python/rdata_python.cc                 |    1 +
 src/lib/dns/python/rrclass_python.cc               |    1 +
 src/lib/dns/python/rrset_python.cc                 |    1 +
 src/lib/dns/python/rrttl_python.cc                 |    1 +
 src/lib/dns/python/rrtype_python.cc                |    1 +
 src/lib/dns/question.cc                            |    3 +-
 src/lib/dns/question.h                             |   12 +-
 src/lib/dns/rdata.cc                               |    3 +-
 src/lib/dns/rdata.h                                |   14 +-
 src/lib/dns/rdata/any_255/tsig_250.cc              |    7 +-
 src/lib/dns/rdata/ch_3/a_1.cc                      |    3 +-
 src/lib/dns/rdata/generic/cname_5.cc               |    3 +-
 src/lib/dns/rdata/generic/dname_39.cc              |    3 +-
 src/lib/dns/rdata/generic/dnskey_48.cc             |    6 +-
 src/lib/dns/rdata/generic/ds_43.cc                 |    7 +-
 src/lib/dns/rdata/generic/mx_15.cc                 |    3 +-
 src/lib/dns/rdata/generic/ns_2.cc                  |    3 +-
 src/lib/dns/rdata/generic/nsec3_50.cc              |    9 +-
 src/lib/dns/rdata/generic/nsec3param_51.cc         |    6 +-
 src/lib/dns/rdata/generic/nsec_47.cc               |    6 +-
 src/lib/dns/rdata/generic/opt_41.cc                |    3 +-
 src/lib/dns/rdata/generic/ptr_12.cc                |    3 +-
 src/lib/dns/rdata/generic/rrsig_46.cc              |    9 +-
 src/lib/dns/rdata/generic/soa_6.cc                 |    3 +-
 src/lib/dns/rdata/generic/txt_16.cc                |    3 +-
 src/lib/dns/rdata/hs_4/a_1.cc                      |    3 +-
 src/lib/dns/rdata/in_1/a_1.cc                      |    3 +-
 src/lib/dns/rdata/in_1/aaaa_28.cc                  |    3 +-
 src/lib/dns/rdata/template.cc                      |    3 +-
 src/lib/dns/rrclass.cc                             |    3 +-
 src/lib/dns/rrparamregistry.h                      |    4 +-
 src/lib/dns/rrset.cc                               |    3 +-
 src/lib/dns/rrset.h                                |   11 +-
 src/lib/dns/rrttl.cc                               |    3 +-
 src/lib/dns/rrttl.h                                |   13 +-
 src/lib/dns/rrtype.cc                              |    4 +-
 src/lib/dns/tests/Makefile.am                      |    8 +-
 src/lib/dns/tests/base32hex_unittest.cc            |  159 -------
 src/lib/dns/tests/base64_unittest.cc               |   93 ----
 src/lib/dns/tests/buffer_unittest.cc               |  193 --------
 src/lib/dns/tests/dnssectime_unittest.cc           |  163 -------
 src/lib/dns/tests/edns_unittest.cc                 |    3 +-
 src/lib/dns/tests/hex_unittest.cc                  |  120 -----
 src/lib/dns/tests/message_unittest.cc              |    3 +-
 src/lib/dns/tests/messagerenderer_unittest.cc      |    4 +-
 src/lib/dns/tests/name_unittest.cc                 |    3 +-
 src/lib/dns/tests/question_unittest.cc             |    3 +-
 src/lib/dns/tests/rdata_cname_unittest.cc          |    3 +-
 src/lib/dns/tests/rdata_dname_unittest.cc          |    3 +-
 src/lib/dns/tests/rdata_dnskey_unittest.cc         |    3 +-
 src/lib/dns/tests/rdata_ds_unittest.cc             |    3 +-
 src/lib/dns/tests/rdata_in_a_unittest.cc           |    3 +-
 src/lib/dns/tests/rdata_in_aaaa_unittest.cc        |    3 +-
 src/lib/dns/tests/rdata_mx_unittest.cc             |    3 +-
 src/lib/dns/tests/rdata_ns_unittest.cc             |    3 +-
 src/lib/dns/tests/rdata_nsec3_unittest.cc          |    6 +-
 src/lib/dns/tests/rdata_nsec3param_unittest.cc     |    8 +-
 src/lib/dns/tests/rdata_nsec_unittest.cc           |    3 +-
 src/lib/dns/tests/rdata_opt_unittest.cc            |    3 +-
 src/lib/dns/tests/rdata_ptr_unittest.cc            |    3 +-
 src/lib/dns/tests/rdata_rrsig_unittest.cc          |    6 +-
 src/lib/dns/tests/rdata_soa_unittest.cc            |    3 +-
 src/lib/dns/tests/rdata_tsig_unittest.cc           |    3 +-
 src/lib/dns/tests/rdata_txt_unittest.cc            |    3 +-
 src/lib/dns/tests/rdata_unittest.cc                |    3 +-
 src/lib/dns/tests/rdata_unittest.h                 |    4 +-
 src/lib/dns/tests/rrclass_unittest.cc              |    3 +-
 src/lib/dns/tests/rrparamregistry_unittest.cc      |    1 +
 src/lib/dns/tests/rrset_unittest.cc                |    3 +-
 src/lib/dns/tests/rrttl_unittest.cc                |    3 +-
 src/lib/dns/tests/rrtype_unittest.cc               |    3 +-
 src/lib/dns/tests/sha1_unittest.cc                 |  108 -----
 src/lib/dns/util/README                            |   31 --
 src/lib/dns/util/base16_from_binary.h              |  108 -----
 src/lib/dns/util/base32hex.h                       |   61 ---
 src/lib/dns/util/base32hex_from_binary.h           |  110 -----
 src/lib/dns/util/base64.h                          |   76 ---
 src/lib/dns/util/base_n.cc                         |  398 ----------------
 src/lib/dns/util/binary_from_base16.h              |  120 -----
 src/lib/dns/util/binary_from_base32hex.h           |  123 -----
 src/lib/dns/util/hex.h                             |   62 ---
 src/lib/dns/util/sha1.cc                           |  484 --------------------
 src/lib/dns/util/sha1.h                            |   84 ----
 src/lib/log/Makefile.am                            |    4 +-
 src/lib/log/compiler/Makefile.am                   |    2 +
 src/lib/log/compiler/message.cc                    |    6 +-
 src/lib/log/filename.cc                            |  138 ------
 src/lib/log/filename.h                             |  161 -------
 src/lib/log/logger.cc                              |    3 +-
 src/lib/log/logger_impl.cc                         |    3 +-
 src/lib/log/logger_impl_log4cxx.cc                 |    3 +-
 src/lib/log/message_reader.cc                      |    2 +-
 src/lib/log/strutil.cc                             |  135 ------
 src/lib/log/strutil.h                              |  145 ------
 src/lib/log/tests/Makefile.am                      |    5 +-
 src/lib/log/tests/filename_unittest.cc             |  179 --------
 src/lib/log/tests/strutil_unittest.cc              |  214 ---------
 src/lib/nsas/Makefile.am                           |    4 +-
 src/lib/nsas/hash_deleter.h                        |    5 +-
 src/lib/nsas/hash_table.h                          |    3 +-
 src/lib/nsas/locks.h                               |  116 -----
 src/lib/nsas/lru_list.h                            |  260 -----------
 src/lib/nsas/nameserver_address_store.cc           |   10 +-
 src/lib/nsas/nameserver_address_store.h            |    9 +-
 src/lib/nsas/nameserver_entry.h                    |    3 +-
 src/lib/nsas/nsas_entry.h                          |   10 +-
 src/lib/nsas/random_number_generator.h             |  207 ---------
 src/lib/nsas/tests/Makefile.am                     |    4 +-
 src/lib/nsas/tests/hash_deleter_unittest.cc        |    3 +-
 src/lib/nsas/tests/lru_list_unittest.cc            |  318 -------------
 .../tests/nameserver_address_store_unittest.cc     |    1 +
 src/lib/nsas/tests/nsas_test.h                     |    3 +-
 .../nsas/tests/random_number_generator_unittest.cc |  309 -------------
 src/lib/nsas/tests/zone_entry_unittest.cc          |    1 +
 src/lib/nsas/zone_entry.cc                         |    4 +-
 src/lib/nsas/zone_entry.h                          |   11 +-
 src/lib/resolve/recursive_query.cc                 |    1 +
 src/lib/resolve/recursive_query.h                  |    4 +-
 src/lib/resolve/tests/recursive_query_unittest.cc  |    5 +-
 .../resolve/tests/recursive_query_unittest_2.cc    |    6 +-
 src/lib/testutils/srv_test.cc                      |    3 +-
 src/lib/testutils/srv_test.h                       |    6 +-
 184 files changed, 400 insertions(+), 6040 deletions(-)
 delete mode 100644 src/lib/asiolink/asiolink_utilities.h
 delete mode 100644 src/lib/asiolink/qid_gen.cc
 delete mode 100644 src/lib/asiolink/qid_gen.h
 delete mode 100644 src/lib/asiolink/tests/asiolink_utilities_unittest.cc
 delete mode 100644 src/lib/asiolink/tests/qid_gen_unittest.cc
 delete mode 100644 src/lib/dns/buffer.h
 delete mode 100644 src/lib/dns/dnssectime.cc
 delete mode 100644 src/lib/dns/dnssectime.h
 delete mode 100644 src/lib/dns/tests/base32hex_unittest.cc
 delete mode 100644 src/lib/dns/tests/base64_unittest.cc
 delete mode 100644 src/lib/dns/tests/buffer_unittest.cc
 delete mode 100644 src/lib/dns/tests/dnssectime_unittest.cc
 delete mode 100644 src/lib/dns/tests/hex_unittest.cc
 delete mode 100644 src/lib/dns/tests/sha1_unittest.cc
 delete mode 100644 src/lib/dns/util/README
 delete mode 100644 src/lib/dns/util/base16_from_binary.h
 delete mode 100644 src/lib/dns/util/base32hex.h
 delete mode 100644 src/lib/dns/util/base32hex_from_binary.h
 delete mode 100644 src/lib/dns/util/base64.h
 delete mode 100644 src/lib/dns/util/base_n.cc
 delete mode 100644 src/lib/dns/util/binary_from_base16.h
 delete mode 100644 src/lib/dns/util/binary_from_base32hex.h
 delete mode 100644 src/lib/dns/util/hex.h
 delete mode 100644 src/lib/dns/util/sha1.cc
 delete mode 100644 src/lib/dns/util/sha1.h
 delete mode 100644 src/lib/log/filename.cc
 delete mode 100644 src/lib/log/filename.h
 delete mode 100644 src/lib/log/strutil.cc
 delete mode 100644 src/lib/log/strutil.h
 delete mode 100644 src/lib/log/tests/filename_unittest.cc
 delete mode 100644 src/lib/log/tests/strutil_unittest.cc
 delete mode 100644 src/lib/nsas/locks.h
 delete mode 100644 src/lib/nsas/lru_list.h
 delete mode 100644 src/lib/nsas/random_number_generator.h
 delete mode 100644 src/lib/nsas/tests/lru_list_unittest.cc
 delete mode 100644 src/lib/nsas/tests/random_number_generator_unittest.cc

-----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 1c063c4..aac4abe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -677,6 +677,8 @@ AC_CONFIG_FILES([Makefile
                  src/lib/datasrc/Makefile
                  src/lib/datasrc/tests/Makefile
                  src/lib/xfr/Makefile
+                 src/lib/util/Makefile
+                 src/lib/util/tests/Makefile
                  src/lib/log/Makefile
                  src/lib/log/compiler/Makefile
                  src/lib/log/tests/Makefile
diff --git a/src/bin/auth/auth_srv.cc b/src/bin/auth/auth_srv.cc
index f46752a..caef9a0 100644
--- a/src/bin/auth/auth_srv.cc
+++ b/src/bin/auth/auth_srv.cc
@@ -31,7 +31,8 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+
 #include <dns/edns.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
@@ -63,6 +64,7 @@ using namespace isc;
 using namespace isc::cc;
 using namespace isc::datasrc;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::auth;
 using namespace isc::dns::rdata;
 using namespace isc::data;
diff --git a/src/bin/auth/auth_srv.h b/src/bin/auth/auth_srv.h
index 8253c85..3d26eea 100644
--- a/src/bin/auth/auth_srv.h
+++ b/src/bin/auth/auth_srv.h
@@ -109,7 +109,7 @@ public:
     /// \throw isc::Unexpected Protocol type of \a message is unexpected
     void processMessage(const asiolink::IOMessage& io_message,
                         isc::dns::MessagePtr message,
-                        isc::dns::OutputBufferPtr buffer,
+                        isc::util::io::OutputBufferPtr buffer,
                         asiolink::DNSServer* server);
 
     /// \brief Set verbose flag
diff --git a/src/bin/auth/benchmarks/query_bench.cc b/src/bin/auth/benchmarks/query_bench.cc
index 5e69134..fc98569 100644
--- a/src/bin/auth/benchmarks/query_bench.cc
+++ b/src/bin/auth/benchmarks/query_bench.cc
@@ -22,7 +22,7 @@
 #include <bench/benchmark.h>
 #include <bench/benchmark_util.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/message.h>
 #include <dns/name.h>
 #include <dns/question.h>
@@ -41,6 +41,7 @@ using namespace isc;
 using namespace isc::data;
 using namespace isc::auth;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::xfr;
 using namespace isc::bench;
 using namespace asiolink;
diff --git a/src/bin/auth/main.cc b/src/bin/auth/main.cc
index fad4a72..3154b40 100644
--- a/src/bin/auth/main.cc
+++ b/src/bin/auth/main.cc
@@ -25,7 +25,8 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
 
@@ -49,6 +50,7 @@ using namespace isc::data;
 using namespace isc::cc;
 using namespace isc::config;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::xfr;
 using namespace asiolink;
 
diff --git a/src/bin/auth/tests/auth_srv_unittest.cc b/src/bin/auth/tests/auth_srv_unittest.cc
index 379342e..41d9d65 100644
--- a/src/bin/auth/tests/auth_srv_unittest.cc
+++ b/src/bin/auth/tests/auth_srv_unittest.cc
@@ -41,6 +41,7 @@
 using namespace std;
 using namespace isc::cc;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 using namespace isc::data;
 using namespace isc::xfr;
diff --git a/src/bin/host/host.cc b/src/bin/host/host.cc
index c513b5a..a8ec026 100644
--- a/src/bin/host/host.cc
+++ b/src/bin/host/host.cc
@@ -24,7 +24,8 @@
 #include <string>
 #include <iostream>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+
 #include <dns/name.h>
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
@@ -37,6 +38,7 @@
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 char* dns_type = NULL;    // not set, so A, AAAA, MX
diff --git a/src/bin/resolver/main.cc b/src/bin/resolver/main.cc
index 1d76e0b..8a858de 100644
--- a/src/bin/resolver/main.cc
+++ b/src/bin/resolver/main.cc
@@ -29,7 +29,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/rcode.h>
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
diff --git a/src/bin/resolver/resolver.cc b/src/bin/resolver/resolver.cc
index 2322076..51b27c1 100644
--- a/src/bin/resolver/resolver.cc
+++ b/src/bin/resolver/resolver.cc
@@ -29,9 +29,10 @@
 
 #include <exceptions/exceptions.h>
 
+#include <util/io/buffer.h>
+
 #include <dns/opcode.h>
 #include <dns/rcode.h>
-#include <dns/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/name.h>
 #include <dns/question.h>
@@ -50,6 +51,7 @@
 using namespace std;
 
 using namespace isc;
+using namespace isc::util::io;
 using namespace isc::dns;
 using namespace isc::data;
 using namespace isc::config;
diff --git a/src/bin/resolver/resolver.h b/src/bin/resolver/resolver.h
index 002e58b..30d222c 100644
--- a/src/bin/resolver/resolver.h
+++ b/src/bin/resolver/resolver.h
@@ -77,7 +77,7 @@ public:
     void processMessage(const asiolink::IOMessage& io_message,
                         isc::dns::MessagePtr query_message,
                         isc::dns::MessagePtr answer_message,
-                        isc::dns::OutputBufferPtr buffer,
+                        isc::util::io::OutputBufferPtr buffer,
                         asiolink::DNSServer* server);
 
     /// \brief Set and get the config session
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 8525b8d..d620c6c 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -1,2 +1,2 @@
-SUBDIRS = exceptions dns cc config python xfr bench log asiolink \
-          nsas cache resolve testutils datasrc server_common
+SUBDIRS = exceptions util dns cc config python xfr bench log \
+          asiolink nsas cache resolve testutils datasrc server_common
diff --git a/src/lib/asiolink/Makefile.am b/src/lib/asiolink/Makefile.am
index 2fda728..f4a9028 100644
--- a/src/lib/asiolink/Makefile.am
+++ b/src/lib/asiolink/Makefile.am
@@ -13,7 +13,6 @@ CLEANFILES = *.gcno *.gcda
 # which would make the build fail with -Werror (our default setting).
 lib_LTLIBRARIES = libasiolink.la
 libasiolink_la_SOURCES  = asiolink.h
-libasiolink_la_SOURCES += asiolink_utilities.h
 libasiolink_la_SOURCES += asiodef.cc asiodef.h
 libasiolink_la_SOURCES += dns_answer.h
 libasiolink_la_SOURCES += dns_lookup.h
@@ -27,7 +26,6 @@ libasiolink_la_SOURCES += io_endpoint.cc io_endpoint.h
 libasiolink_la_SOURCES += io_error.h
 libasiolink_la_SOURCES += io_fetch.cc io_fetch.h
 libasiolink_la_SOURCES += io_message.h
-libasiolink_la_SOURCES += qid_gen.cc qid_gen.h
 libasiolink_la_SOURCES += io_service.h io_service.cc
 libasiolink_la_SOURCES += io_socket.h io_socket.cc
 libasiolink_la_SOURCES += simple_callback.h
diff --git a/src/lib/asiolink/asiolink_utilities.h b/src/lib/asiolink/asiolink_utilities.h
deleted file mode 100644
index 659e6a0..0000000
--- a/src/lib/asiolink/asiolink_utilities.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __ASIOLINK_UTILITIES_H
-#define __ASIOLINK_UTILITIES_H
-
-#include <cstddef>
-
-namespace asiolink {
-
-/// \brief Read Unsigned 16-Bit Integer from Buffer
-///
-/// This is essentially a copy of the isc::dns::InputBuffer::readUint16.  It
-/// should really be moved into a separate library.
-///
-/// \param buffer Data buffer at least two bytes long of which the first two
-///        bytes are assumed to represent a 16-bit integer in network-byte
-///        order.
-///
-/// \return Value of 16-bit integer
-inline uint16_t
-readUint16(const void* buffer) {
-    const uint8_t* byte_buffer = static_cast<const uint8_t*>(buffer);
-
-    uint16_t result = (static_cast<uint16_t>(byte_buffer[0])) << 8;
-    result |= static_cast<uint16_t>(byte_buffer[1]);
-
-    return (result);
-}
-
-/// \brief Write Unisgned 16-Bit Integer to Buffer
-///
-/// This is essentially a copy of isc::dns::OutputBuffer::writeUint16.  It
-/// should really be moved into a separate library.
-///
-/// \param value 16-bit value to convert
-/// \param buffer Data buffer at least two bytes long into which the 16-bit
-///        value is written in network-byte order.
-
-inline void
-writeUint16(uint16_t value, void* buffer) {
-    uint8_t* byte_buffer = static_cast<uint8_t*>(buffer);
-
-    byte_buffer[0] = static_cast<uint8_t>((value & 0xff00U) >> 8);
-    byte_buffer[1] = static_cast<uint8_t>(value & 0x00ffU);
-}
-
-} // namespace asiolink
-
-#endif // __ASIOLINK_UTILITIES_H
diff --git a/src/lib/asiolink/dns_answer.h b/src/lib/asiolink/dns_answer.h
index 84e1f6f..b6c3211 100644
--- a/src/lib/asiolink/dns_answer.h
+++ b/src/lib/asiolink/dns_answer.h
@@ -66,7 +66,7 @@ public:
     virtual void operator()(const IOMessage& io_message,
                             isc::dns::MessagePtr query_message,
                             isc::dns::MessagePtr answer_message,
-                            isc::dns::OutputBufferPtr buffer) const = 0;
+                            isc::util::io::OutputBufferPtr buffer) const = 0;
 };
 
 }      // namespace asiolink
diff --git a/src/lib/asiolink/dns_lookup.h b/src/lib/asiolink/dns_lookup.h
index a79976f..99d75bd 100644
--- a/src/lib/asiolink/dns_lookup.h
+++ b/src/lib/asiolink/dns_lookup.h
@@ -17,7 +17,7 @@
 
 #include <asiolink/io_message.h>
 #include <asiolink/dns_server.h>
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/message.h>
 
 namespace asiolink {
@@ -70,7 +70,7 @@ public:
     virtual void operator()(const IOMessage& io_message,
                             isc::dns::MessagePtr message,
                             isc::dns::MessagePtr answer_message,
-                            isc::dns::OutputBufferPtr buffer,
+                            isc::util::io::OutputBufferPtr buffer,
                             DNSServer* server) const
     {
         (*self_)(io_message, message, answer_message, buffer, server);
diff --git a/src/lib/asiolink/io_asio_socket.h b/src/lib/asiolink/io_asio_socket.h
index ac793a6..8aaabee 100644
--- a/src/lib/asiolink/io_asio_socket.h
+++ b/src/lib/asiolink/io_asio_socket.h
@@ -26,7 +26,7 @@
 #include <exceptions/exceptions.h>
 #include <coroutine.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 
 #include <asiolink/io_error.h>
 #include <asiolink/io_socket.h>
@@ -270,7 +270,7 @@ public:
     virtual bool processReceivedData(const void* staging, size_t length,
                                      size_t& cumulative, size_t& offset,
                                      size_t& expected,
-                                     isc::dns::OutputBufferPtr& outbuff) = 0;
+                                     isc::util::io::OutputBufferPtr& outbuff) = 0;
 
     /// \brief Cancel I/O On AsioSocket
     virtual void cancel() = 0;
@@ -372,7 +372,7 @@ public:
     virtual bool receiveComplete(const void* staging, size_t length,
                                  size_t& cumulative, size_t& offset,
                                  size_t& expected,
-                                 isc::dns::OutputBufferPtr& outbuff)
+                                 isc::util::io::OutputBufferPtr& outbuff)
     {
         return (true);
     }
diff --git a/src/lib/asiolink/io_fetch.cc b/src/lib/asiolink/io_fetch.cc
index fdc1f2e..bfa756e 100644
--- a/src/lib/asiolink/io_fetch.cc
+++ b/src/lib/asiolink/io_fetch.cc
@@ -28,7 +28,8 @@
 #include <dns/rcode.h>
 #include <log/logger.h>
 
-#include <asiolink/qid_gen.h>
+#include <util/io/buffer.h>
+#include <util/random/qid_gen.h>
 
 #include <asio.hpp>
 #include <asio/deadline_timer.hpp>
@@ -43,12 +44,13 @@
 #include <asiolink/tcp_socket.h>
 #include <asiolink/udp_endpoint.h>
 #include <asiolink/udp_socket.h>
-#include <asiolink/qid_gen.h>
 
 #include <stdint.h>
 
 using namespace asio;
 using namespace isc::dns;
+using namespace isc::util::io;
+using namespace isc::util::random;
 using namespace isc::log;
 using namespace std;
 
@@ -76,8 +78,8 @@ struct IOFetchData {
     boost::scoped_ptr<IOEndpoint> remote_snd;///< Where the fetch is sent
     boost::scoped_ptr<IOEndpoint> remote_rcv;///< Where the response came from
     isc::dns::Question          question;    ///< Question to be asked
-    isc::dns::OutputBufferPtr   msgbuf;      ///< Wire buffer for question
-    isc::dns::OutputBufferPtr   received;    ///< Received data put here
+    OutputBufferPtr   msgbuf;      ///< Wire buffer for question
+    OutputBufferPtr   received;    ///< Received data put here
     IOFetch::Callback*          callback;    ///< Called on I/O Completion
     asio::deadline_timer        timer;       ///< Timer to measure timeouts
     IOFetch::Protocol           protocol;    ///< Protocol being used
@@ -117,8 +119,7 @@ struct IOFetchData {
     /// TODO: May need to alter constructor (see comment 4 in Trac ticket #554)
     IOFetchData(IOFetch::Protocol proto, IOService& service,
         const isc::dns::Question& query, const IOAddress& address,
-        uint16_t port, isc::dns::OutputBufferPtr& buff, IOFetch::Callback* cb,
-        int wait)
+        uint16_t port, OutputBufferPtr& buff, IOFetch::Callback* cb, int wait)
         :
         socket((proto == IOFetch::UDP) ?
             static_cast<IOAsioSocket<IOFetch>*>(
@@ -135,7 +136,7 @@ struct IOFetchData {
             static_cast<IOEndpoint*>(new TCPEndpoint(address, port))
             ),
         question(query),
-        msgbuf(new isc::dns::OutputBuffer(512)),
+        msgbuf(new OutputBuffer(512)),
         received(buff),
 
         callback(cb),
diff --git a/src/lib/asiolink/io_fetch.h b/src/lib/asiolink/io_fetch.h
index 0723777..19aee10 100644
--- a/src/lib/asiolink/io_fetch.h
+++ b/src/lib/asiolink/io_fetch.h
@@ -25,7 +25,7 @@
 
 #include <asio/error_code.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/question.h>
 
 namespace asiolink {
@@ -134,7 +134,7 @@ public:
     ///     -1 indicates no timeout.
     IOFetch(Protocol protocol, IOService& service,
         const isc::dns::Question& question, const IOAddress& address,
-        uint16_t port, isc::dns::OutputBufferPtr& buff, Callback* cb,
+        uint16_t port, isc::util::io::OutputBufferPtr& buff, Callback* cb,
         int wait = -1);
 
     /// \brief Return Current Protocol
diff --git a/src/lib/asiolink/qid_gen.cc b/src/lib/asiolink/qid_gen.cc
deleted file mode 100644
index 4063b39..0000000
--- a/src/lib/asiolink/qid_gen.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-// qid_gen defines a generator for query id's
-//
-// We probably want to merge this with the weighted random in the nsas
-// (and other parts where we need randomness, perhaps another thing
-// for a general libutil?)
-
-#include <asiolink/qid_gen.h>
-
-#include <sys/time.h>
-
-namespace {
-    asiolink::QidGenerator qid_generator_instance;
-}
-
-namespace asiolink {
-
-QidGenerator&
-QidGenerator::getInstance() {
-    return (qid_generator_instance);
-}
-
-QidGenerator::QidGenerator() : dist_(0, 65535),
-                               vgen_(generator_, dist_)
-{
-    seed();
-}
-
-void
-QidGenerator::seed() {
-    struct timeval tv;
-    gettimeofday(&tv, 0);
-    generator_.seed((tv.tv_sec * 1000000) + tv.tv_usec);
-}
-
-isc::dns::qid_t
-QidGenerator::generateQid() {
-    return (vgen_());
-}
-
-} // namespace asiolink
diff --git a/src/lib/asiolink/qid_gen.h b/src/lib/asiolink/qid_gen.h
deleted file mode 100644
index a5caa17..0000000
--- a/src/lib/asiolink/qid_gen.h
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-// qid_gen defines a generator for query id's
-//
-// We probably want to merge this with the weighted random in the nsas
-// (and other parts where we need randomness, perhaps another thing
-// for a general libutil?)
-
-#ifndef __QID_GEN_H
-#define __QID_GEN_H
-
-#include <dns/message.h>
-#include <boost/random/mersenne_twister.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/variate_generator.hpp>
-
-
-namespace asiolink {
-
-/// This class generates Qids for outgoing queries
-///
-/// It is implemented as a singleton; the public way to access it
-/// is to call getInstance()->generateQid().
-///
-/// It automatically seeds it with the current time when it is first
-/// used.
-class QidGenerator {
-public:
-    /// \brief Returns the singleton instance of the QidGenerator
-    ///
-    /// Returns a reference to the singleton instance of the generator
-    static QidGenerator& getInstance();
-
-    /// \brief Default constructor
-    ///
-    /// It is recommended that getInstance is used rather than creating
-    /// separate instances of this class.
-    ///
-    /// The constructor automatically seeds the generator with the
-    /// current time.
-    QidGenerator();
-
-    /// Generate a Qid
-    ///
-    /// \return A random Qid
-    isc::dns::qid_t generateQid();
-
-    /// \brief Seeds the QidGenerator (based on the current time)
-    ///
-    /// This is automatically called by the constructor
-    void seed();
-
-private:
-    // "Mersenne Twister: A 623-dimensionally equidistributed
-    // uniform pseudo-random number generator", Makoto Matsumoto and
-    // Takuji Nishimura, ACM Transactions on Modeling and Computer
-    // Simulation: Special Issue on Uniform Random Number Generation,
-    // Vol. 8, No. 1, January 1998, pp. 3-30.
-    //
-    // mt19937 is an implementation of one of the pseudo random
-    // generators described in this paper.
-    boost::mt19937 generator_;
-
-    // For qid's we want a uniform distribution
-    boost::uniform_int<> dist_;
-
-    boost::variate_generator<boost::mt19937&, boost::uniform_int<> > vgen_;
-};
-
-
-} // namespace asiolink
-
-#endif // __QID_GEN_H
diff --git a/src/lib/asiolink/tcp_server.cc b/src/lib/asiolink/tcp_server.cc
index db59551..68af8e0 100644
--- a/src/lib/asiolink/tcp_server.cc
+++ b/src/lib/asiolink/tcp_server.cc
@@ -23,6 +23,8 @@
 
 #include <log/dummylog.h>
 
+#include <util/io/buffer.h>
+
 #include <asio.hpp>
 #include <asiolink/dummy_io_cb.h>
 #include <asiolink/tcp_endpoint.h>
@@ -36,6 +38,7 @@ using asio::ip::tcp;
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace asiolink {
 
diff --git a/src/lib/asiolink/tcp_server.h b/src/lib/asiolink/tcp_server.h
index 2fe0d37..64e4dda 100644
--- a/src/lib/asiolink/tcp_server.h
+++ b/src/lib/asiolink/tcp_server.h
@@ -91,7 +91,7 @@ private:
     boost::shared_ptr<asio::ip::tcp::socket> socket_;
 
     // The buffer into which the response is written
-    boost::shared_ptr<isc::dns::OutputBuffer> respbuf_;
+    boost::shared_ptr<isc::util::io::OutputBuffer> respbuf_;
 
     // \c IOMessage and \c Message objects to be passed to the
     // DNS lookup and answer providers
diff --git a/src/lib/asiolink/tcp_socket.h b/src/lib/asiolink/tcp_socket.h
index e6e0863..0b9ef69 100644
--- a/src/lib/asiolink/tcp_socket.h
+++ b/src/lib/asiolink/tcp_socket.h
@@ -33,9 +33,9 @@
 
 #include <config.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/io/io_utilities.h>
 
-#include <asiolink/asiolink_utilities.h>
 #include <asiolink/io_asio_socket.h>
 #include <asiolink/io_endpoint.h>
 #include <asiolink/io_service.h>
@@ -155,7 +155,7 @@ public:
     virtual bool processReceivedData(const void* staging, size_t length,
                                      size_t& cumulative, size_t& offset,
                                      size_t& expected,
-                                     isc::dns::OutputBufferPtr& outbuff);
+                                     isc::util::io::OutputBufferPtr& outbuff);
 
     /// \brief Cancel I/O On Socket
     virtual void cancel();
@@ -185,7 +185,7 @@ private:
     // The option of sending the data in two operations, the count followed by
     // the data was discounted as that would lead to two callbacks which would
     // cause problems with the stackless coroutine code.
-    isc::dns::OutputBufferPtr   send_buffer_;   ///< Send buffer
+    isc::util::io::OutputBufferPtr   send_buffer_;   ///< Send buffer
 };
 
 // Constructor - caller manages socket
@@ -268,7 +268,7 @@ TCPSocket<C>::asyncSend(const void* data, size_t length,
             uint16_t count = boost::numeric_cast<uint16_t>(length);
 
             // Copy data into a buffer preceded by the count field.
-            send_buffer_.reset(new isc::dns::OutputBuffer(length + 2));
+            send_buffer_.reset(new isc::util::io::OutputBuffer(length + 2));
             send_buffer_->writeUint16(count);
             send_buffer_->writeData(data, length);
 
@@ -333,7 +333,7 @@ template <typename C> bool
 TCPSocket<C>::processReceivedData(const void* staging, size_t length,
                                   size_t& cumulative, size_t& offset,
                                   size_t& expected,
-                                  isc::dns::OutputBufferPtr& outbuff)
+                                  isc::util::io::OutputBufferPtr& outbuff)
 {
     // Point to the data in the staging buffer and note how much there is.
     const uint8_t* data = static_cast<const uint8_t*>(staging);
@@ -358,7 +358,7 @@ TCPSocket<C>::processReceivedData(const void* staging, size_t length,
         }
 
         // Have enough data to interpret the packet count, so do so now.
-        expected = readUint16(data);
+        expected = isc::util::io::readUint16(data);
 
         // We have two bytes less of data to process.  Point to the start of the
         // data and adjust the packet size.  Note that at this point,
diff --git a/src/lib/asiolink/tests/Makefile.am b/src/lib/asiolink/tests/Makefile.am
index f67e547..4e9216a 100644
--- a/src/lib/asiolink/tests/Makefile.am
+++ b/src/lib/asiolink/tests/Makefile.am
@@ -1,6 +1,7 @@
 AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES)
 AM_CPPFLAGS += -I$(top_builddir)/src/lib/dns -I$(top_srcdir)/src/bin
+AM_CPPFLAGS += -I$(top_builddir)/src/lib/util -I$(top_srcdir)/src/util
 AM_CPPFLAGS += -I$(top_builddir)/src/lib/cc
 AM_CPPFLAGS += -DTEST_DATA_DIR=\"$(srcdir)/testdata\"
 
@@ -18,7 +19,6 @@ TESTS += run_unittests
 run_unittests_SOURCES  = run_unittests.cc
 run_unittests_SOURCES += $(top_srcdir)/src/lib/dns/tests/unittest_util.h
 run_unittests_SOURCES += $(top_srcdir)/src/lib/dns/tests/unittest_util.cc
-run_unittests_SOURCES += asiolink_utilities_unittest.cc
 run_unittests_SOURCES += io_address_unittest.cc
 run_unittests_SOURCES += io_endpoint_unittest.cc
 run_unittests_SOURCES += io_fetch_unittest.cc
@@ -30,7 +30,6 @@ run_unittests_SOURCES += tcp_socket_unittest.cc
 run_unittests_SOURCES += udp_endpoint_unittest.cc
 run_unittests_SOURCES += udp_socket_unittest.cc
 run_unittests_SOURCES += dns_server_unittest.cc
-run_unittests_SOURCES += qid_gen_unittest.cc
 
 run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
 
@@ -38,6 +37,7 @@ run_unittests_LDADD  = $(GTEST_LDADD)
 run_unittests_LDADD += $(SQLITE_LIBS)
 run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la
 run_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libasiolink.la
+run_unittests_LDADD += $(top_builddir)/src/lib/util/libutil.la
 run_unittests_LDADD += $(top_builddir)/src/lib/log/liblog.la
 run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
 
diff --git a/src/lib/asiolink/tests/asiolink_utilities_unittest.cc b/src/lib/asiolink/tests/asiolink_utilities_unittest.cc
deleted file mode 100644
index 51f565f..0000000
--- a/src/lib/asiolink/tests/asiolink_utilities_unittest.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-/// \brief Test of asiolink utilties
-///
-/// Tests the fuctionality of the asiolink utilities code by comparing them
-/// with the equivalent methods in isc::dns::[Input/Output]Buffer.
-
-#include <cstddef>
-
-#include <gtest/gtest.h>
-
-#include <dns/buffer.h>
-#include <asiolink/asiolink_utilities.h>
-
-using namespace asiolink;
-using namespace isc::dns;
-
-TEST(asioutil, readUint16) {
-
-    // Reference buffer
-    uint8_t data[2];
-    isc::dns::InputBuffer buffer(data, sizeof(data));
-
-    // Avoid possible compiler warnings by only setting uint8_t variables to
-    // uint8_t values.
-    uint8_t i8 = 0;
-    uint8_t j8 = 0;
-    for (int i = 0; i < (2 << 8); ++i, ++i8) {
-        for (int j = 0; j < (2 << 8); ++j, ++j8) {
-            data[0] = i8;
-            data[1] = j8;
-            buffer.setPosition(0);
-            EXPECT_EQ(buffer.readUint16(), readUint16(data));
-        }
-    }
-}
-
-
-TEST(asioutil, writeUint16) {
-
-    // Reference buffer
-    isc::dns::OutputBuffer buffer(2);
-    uint8_t test[2];
-
-    // Avoid possible compiler warnings by only setting uint16_t variables to
-    // uint16_t values.
-    uint16_t i16 = 0;
-    for (uint32_t i = 0; i < (2 << 16); ++i, ++i16) {
-
-        // Write the reference data
-        buffer.clear();
-        buffer.writeUint16(i16);
-
-        // ... and the test data
-        writeUint16(i16, test);
-
-        // ... and compare
-        const uint8_t* ref = static_cast<const uint8_t*>(buffer.getData());
-        EXPECT_EQ(ref[0], test[0]);
-        EXPECT_EQ(ref[1], test[1]);
-    }
-}
diff --git a/src/lib/asiolink/tests/dns_server_unittest.cc b/src/lib/asiolink/tests/dns_server_unittest.cc
index 5b8b683..2e07e3f 100644
--- a/src/lib/asiolink/tests/dns_server_unittest.cc
+++ b/src/lib/asiolink/tests/dns_server_unittest.cc
@@ -67,6 +67,7 @@
 
 using namespace asiolink;
 using namespace asio;
+
 namespace {
 static const std::string server_ip = "127.0.0.1";
 const int server_port = 5553;
@@ -109,7 +110,7 @@ class DummyLookup : public DNSLookup, public ServerStopper {
         void operator()(const IOMessage& io_message,
                 isc::dns::MessagePtr message,
                 isc::dns::MessagePtr answer_message,
-                isc::dns::OutputBufferPtr buffer,
+                isc::util::io::OutputBufferPtr buffer,
                 DNSServer* server) const {
             stopServer();
             server->resume(true);
@@ -123,7 +124,7 @@ class SimpleAnswer : public DNSAnswer, public ServerStopper {
         void operator()(const IOMessage& message,
                 isc::dns::MessagePtr query_message,
                 isc::dns::MessagePtr answer_message,
-                isc::dns::OutputBufferPtr buffer) const
+                isc::util::io::OutputBufferPtr buffer) const
         {
             //copy what we get from user
             buffer->writeData(message.getData(), message.getDataSize());
diff --git a/src/lib/asiolink/tests/io_fetch_unittest.cc b/src/lib/asiolink/tests/io_fetch_unittest.cc
index 2b258b8..c65fc69 100644
--- a/src/lib/asiolink/tests/io_fetch_unittest.cc
+++ b/src/lib/asiolink/tests/io_fetch_unittest.cc
@@ -26,7 +26,9 @@
 
 #include <asio.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/io/io_utilities.h>
+
 #include <dns/question.h>
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
@@ -34,7 +36,6 @@
 #include <dns/name.h>
 #include <dns/rcode.h>
 
-#include <asiolink/asiolink_utilities.h>
 #include <asiolink/io_address.h>
 #include <asiolink/io_endpoint.h>
 #include <asiolink/io_fetch.h>
@@ -42,6 +43,7 @@
 
 using namespace asio;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace asio::ip;
 using namespace std;
 
diff --git a/src/lib/asiolink/tests/qid_gen_unittest.cc b/src/lib/asiolink/tests/qid_gen_unittest.cc
deleted file mode 100644
index 3ad8a03..0000000
--- a/src/lib/asiolink/tests/qid_gen_unittest.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-
-/// \brief Test of QidGenerator
-///
-
-#include <gtest/gtest.h>
-
-#include <asiolink/qid_gen.h>
-#include <dns/message.h>
-
-// Tests the operation of the Qid generator
-
-// Check that getInstance returns a singleton
-TEST(QidGenerator, singleton) {
-    asiolink::QidGenerator& g1 = asiolink::QidGenerator::getInstance();
-    asiolink::QidGenerator& g2 = asiolink::QidGenerator::getInstance();
-
-    EXPECT_TRUE(&g1 == &g2);
-}
-
-TEST(QidGenerator, generate) {
-    // We'll assume that boost's generator is 'good enough', and won't
-    // do full statistical checking here. Let's just call it the xkcd
-    // test (http://xkcd.com/221/), and check if three consecutive
-    // generates are not all the same.
-    isc::dns::qid_t one, two, three;
-    asiolink::QidGenerator& gen = asiolink::QidGenerator::getInstance();
-    one = gen.generateQid();
-    two = gen.generateQid();
-    three = gen.generateQid();
-    ASSERT_FALSE((one == two) && (one == three));
-}
diff --git a/src/lib/asiolink/tests/tcp_socket_unittest.cc b/src/lib/asiolink/tests/tcp_socket_unittest.cc
index f0a45ee..28f0d9e 100644
--- a/src/lib/asiolink/tests/tcp_socket_unittest.cc
+++ b/src/lib/asiolink/tests/tcp_socket_unittest.cc
@@ -35,11 +35,11 @@
 #include <boost/bind.hpp>
 #include <boost/shared_ptr.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/io/io_utilities.h>
 
 #include <asio.hpp>
 
-#include <asiolink/asiolink_utilities.h>
 #include <asiolink/io_service.h>
 #include <asiolink/tcp_endpoint.h>
 #include <asiolink/tcp_socket.h>
@@ -47,7 +47,7 @@
 using namespace asio;
 using namespace asio::ip;
 using namespace asiolink;
-using namespace isc::dns;
+using namespace isc::util::io;
 using namespace std;
 
 namespace {
diff --git a/src/lib/asiolink/tests/udp_socket_unittest.cc b/src/lib/asiolink/tests/udp_socket_unittest.cc
index 8563d22..f006991 100644
--- a/src/lib/asiolink/tests/udp_socket_unittest.cc
+++ b/src/lib/asiolink/tests/udp_socket_unittest.cc
@@ -35,18 +35,18 @@
 #include <boost/bind.hpp>
 #include <boost/shared_ptr.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/io/io_utilities.h>
 
 #include <asio.hpp>
 
-#include <asiolink/asiolink_utilities.h>
 #include <asiolink/io_service.h>
 #include <asiolink/udp_endpoint.h>
 #include <asiolink/udp_socket.h>
 
 using namespace asio;
 using namespace asiolink;
-using namespace isc::dns;
+using namespace isc::util::io;
 using namespace std;
 
 namespace {
diff --git a/src/lib/asiolink/udp_server.cc b/src/lib/asiolink/udp_server.cc
index 5b48f28..afbc754 100644
--- a/src/lib/asiolink/udp_server.cc
+++ b/src/lib/asiolink/udp_server.cc
@@ -38,6 +38,7 @@ using isc::log::dlog;
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace asiolink {
 
@@ -134,7 +135,7 @@ struct UDPServer::Data {
     isc::dns::MessagePtr answer_message_;
 
     // The buffer into which the response is written
-    isc::dns::OutputBufferPtr respbuf_;
+    isc::util::io::OutputBufferPtr respbuf_;
 
     // The buffer into which the query packet is written
     boost::shared_array<char> data_;
diff --git a/src/lib/asiolink/udp_socket.h b/src/lib/asiolink/udp_socket.h
index 35fc7b1..c378ea7 100644
--- a/src/lib/asiolink/udp_socket.h
+++ b/src/lib/asiolink/udp_socket.h
@@ -141,7 +141,7 @@ public:
     virtual bool processReceivedData(const void* staging, size_t length,
                                      size_t& cumulative, size_t& offset,
                                      size_t& expected,
-                                     isc::dns::OutputBufferPtr& outbuff);
+                                     isc::util::io::OutputBufferPtr& outbuff);
 
     /// \brief Cancel I/O On Socket
     virtual void cancel();
@@ -283,7 +283,7 @@ template <typename C> bool
 UDPSocket<C>::processReceivedData(const void* staging, size_t length,
                                   size_t& cumulative, size_t& offset,
                                   size_t& expected,
-                                  isc::dns::OutputBufferPtr& outbuff)
+                                  isc::util::io::OutputBufferPtr& outbuff)
 {
     // Set return values to what we should expect.
     cumulative = length;
diff --git a/src/lib/bench/benchmark_util.cc b/src/lib/bench/benchmark_util.cc
index ca2ca1b..dbc28fd 100644
--- a/src/lib/bench/benchmark_util.cc
+++ b/src/lib/bench/benchmark_util.cc
@@ -19,7 +19,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/name.h>
 #include <dns/message.h>
@@ -35,6 +35,7 @@
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace isc {
 namespace bench {
diff --git a/src/lib/bench/tests/Makefile.am b/src/lib/bench/tests/Makefile.am
index 63d3c87..4259b0e 100644
--- a/src/lib/bench/tests/Makefile.am
+++ b/src/lib/bench/tests/Makefile.am
@@ -16,6 +16,7 @@ run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
 run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
 run_unittests_LDADD = $(top_builddir)/src/lib/exceptions/libexceptions.la
 run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la
+run_unittests_LDADD += $(top_builddir)/src/lib/util/libutil.la
 run_unittests_LDADD += $(top_builddir)/src/lib/bench/libbench.la
 run_unittests_LDADD += $(GTEST_LDADD)
 endif
diff --git a/src/lib/bench/tests/loadquery_unittest.cc b/src/lib/bench/tests/loadquery_unittest.cc
index a53e191..acb7ac2 100644
--- a/src/lib/bench/tests/loadquery_unittest.cc
+++ b/src/lib/bench/tests/loadquery_unittest.cc
@@ -17,7 +17,7 @@
 #include <vector>
 #include <sstream>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/message.h>
 #include <dns/name.h>
 #include <dns/opcode.h>
@@ -32,6 +32,7 @@
 using namespace std;
 using namespace isc::bench;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 typedef pair<string, string> QueryParam;
diff --git a/src/lib/cache/Makefile.am b/src/lib/cache/Makefile.am
index 107fc9a..bfbe24a 100644
--- a/src/lib/cache/Makefile.am
+++ b/src/lib/cache/Makefile.am
@@ -2,6 +2,7 @@ SUBDIRS = . tests
 
 AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES) $(MULTITHREADING_FLAG)
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/dns -I$(top_builddir)/src/lib/dns
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/nsas -I$(top_builddir)/src/lib/nsas
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/cache -I$(top_builddir)/src/lib/cache
diff --git a/src/lib/cache/message_cache.h b/src/lib/cache/message_cache.h
index 790ed83..7455f66 100644
--- a/src/lib/cache/message_cache.h
+++ b/src/lib/cache/message_cache.h
@@ -20,7 +20,7 @@
 #include <dns/message.h>
 #include "message_entry.h"
 #include <nsas/hash_table.h>
-#include <nsas/lru_list.h>
+#include <util/lru_list.h>
 #include "rrset_cache.h"
 
 namespace isc {
@@ -92,7 +92,7 @@ protected:
     RRsetCachePtr rrset_cache_;
     RRsetCachePtr negative_soa_cache_;
     isc::nsas::HashTable<MessageEntry> message_table_;
-    isc::nsas::LruList<MessageEntry> message_lru_;
+    isc::util::LruList<MessageEntry> message_lru_;
 };
 
 typedef boost::shared_ptr<MessageCache> MessageCachePtr;
diff --git a/src/lib/cache/rrset_cache.h b/src/lib/cache/rrset_cache.h
index 104c2a5..0e1b08f 100644
--- a/src/lib/cache/rrset_cache.h
+++ b/src/lib/cache/rrset_cache.h
@@ -17,7 +17,8 @@
 
 #include <cache/rrset_entry.h>
 #include <nsas/hash_table.h>
-#include <nsas/lru_list.h>
+
+#include <util/lru_list.h>
 
 using namespace isc::nsas;
 
@@ -98,7 +99,7 @@ public:
 protected:
     uint16_t class_; // The class of the rrset cache.
     isc::nsas::HashTable<RRsetEntry> rrset_table_;
-    isc::nsas::LruList<RRsetEntry> rrset_lru_;
+    isc::util::LruList<RRsetEntry> rrset_lru_;
 };
 
 typedef boost::shared_ptr<RRsetCache> RRsetCachePtr;
diff --git a/src/lib/cache/tests/Makefile.am b/src/lib/cache/tests/Makefile.am
index 4763f55..68a8425 100644
--- a/src/lib/cache/tests/Makefile.am
+++ b/src/lib/cache/tests/Makefile.am
@@ -2,6 +2,7 @@ SUBDIRS = .
 
 AM_CPPFLAGS  = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES) $(MULTITHREADING_FLAG)
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/dns -I$(top_builddir)/src/lib/dns
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/cache -I$(top_builddir)/src/lib/cache
 AM_CPPFLAGS += -DTEST_DATA_SRCDIR=\"$(srcdir)/testdata\"
@@ -54,6 +55,7 @@ endif
 run_unittests_LDADD += $(top_builddir)/src/lib/cache/libcache.la
 run_unittests_LDADD += $(top_builddir)/src/lib/nsas/libnsas.la
 run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la
+run_unittests_LDADD += $(top_builddir)/src/lib/util/libutil.la
 run_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libasiolink.la
 run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
 endif
diff --git a/src/lib/cache/tests/cache_test_messagefromfile.h b/src/lib/cache/tests/cache_test_messagefromfile.h
index 62e237c..611386c 100644
--- a/src/lib/cache/tests/cache_test_messagefromfile.h
+++ b/src/lib/cache/tests/cache_test_messagefromfile.h
@@ -14,7 +14,7 @@
 
 #include <vector>
 #include <dns/tests/unittest_util.h>
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/message.h>
 
 using namespace isc;
@@ -31,7 +31,7 @@ messageFromFile(Message& message, const char* datafile) {
     std::vector<unsigned char> data;
     UnitTestUtil::readWireData(datafile, data);
 
-    InputBuffer buffer(&data[0], data.size());
+    isc::util::io::InputBuffer buffer(&data[0], data.size());
     message.fromWire(buffer);
 }
 
diff --git a/src/lib/cache/tests/cache_test_sectioncount.h b/src/lib/cache/tests/cache_test_sectioncount.h
index 537ca81..6cb37a5 100644
--- a/src/lib/cache/tests/cache_test_sectioncount.h
+++ b/src/lib/cache/tests/cache_test_sectioncount.h
@@ -14,7 +14,7 @@
 
 #include <vector>
 #include <dns/tests/unittest_util.h>
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/message.h>
 
 using namespace isc;
diff --git a/src/lib/cache/tests/message_cache_unittest.cc b/src/lib/cache/tests/message_cache_unittest.cc
index fc62e21..c9f816f 100644
--- a/src/lib/cache/tests/message_cache_unittest.cc
+++ b/src/lib/cache/tests/message_cache_unittest.cc
@@ -16,7 +16,7 @@
 #include <string>
 #include <gtest/gtest.h>
 #include <dns/tests/unittest_util.h>
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include "../message_cache.h"
 #include "../rrset_cache.h"
 #include "../resolver_cache.h"
@@ -25,6 +25,7 @@
 using namespace isc::cache;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace std;
 
 namespace {
diff --git a/src/lib/cache/tests/message_entry_unittest.cc b/src/lib/cache/tests/message_entry_unittest.cc
index 2ca33ec..cb6df76 100644
--- a/src/lib/cache/tests/message_entry_unittest.cc
+++ b/src/lib/cache/tests/message_entry_unittest.cc
@@ -15,7 +15,7 @@
 #include <gtest/gtest.h>
 #include <dns/tests/unittest_util.h>
 #include <dns/message.h>
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include "../message_entry.h"
 #include "../rrset_cache.h"
 #include "../resolver_cache.h"
diff --git a/src/lib/datasrc/data_source.cc b/src/lib/datasrc/data_source.cc
index c9819bb..c242ef5 100644
--- a/src/lib/datasrc/data_source.cc
+++ b/src/lib/datasrc/data_source.cc
@@ -26,15 +26,16 @@
 #include <datasrc/data_source.h>
 #include <datasrc/query.h>
 
-#include <dns/util/base32hex.h>
-#include <dns/buffer.h>
+#include <util/compat/base32hex.h>
+#include <util/compat/sha1.h>
+#include <util/io/buffer.h>
+
 #include <dns/message.h>
 #include <dns/name.h>
 #include <dns/rcode.h>
 #include <dns/rdataclass.h>
 #include <dns/rrset.h>
 #include <dns/rrsetlist.h>
-#include <dns/util/sha1.h>
 
 #include <cc/data.h>
 
@@ -45,6 +46,8 @@
                       } while (0)
 
 using namespace std;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 using namespace isc::dns;
 using namespace isc::dns::rdata;
 
diff --git a/src/lib/datasrc/tests/datasrc_unittest.cc b/src/lib/datasrc/tests/datasrc_unittest.cc
index 810aef9..8d36e73 100644
--- a/src/lib/datasrc/tests/datasrc_unittest.cc
+++ b/src/lib/datasrc/tests/datasrc_unittest.cc
@@ -20,7 +20,8 @@
 
 #include <gtest/gtest.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
 #include <dns/question.h>
@@ -44,6 +45,7 @@
 
 using isc::UnitTestUtil;
 using namespace std;
+using namespace isc::util::io;
 using namespace isc::dns;
 using namespace isc::dns::rdata;
 using namespace isc::datasrc;
diff --git a/src/lib/dns/Makefile.am b/src/lib/dns/Makefile.am
index c5c5cd1..b7fb9b1 100644
--- a/src/lib/dns/Makefile.am
+++ b/src/lib/dns/Makefile.am
@@ -1,6 +1,7 @@
 SUBDIRS = . tests python
 
 AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += $(BOOST_INCLUDES)
 AM_CXXFLAGS = $(B10_CXXFLAGS)
 
@@ -60,15 +61,9 @@ BUILT_SOURCES = rrclass.h rrtype.h rrparamregistry.cc
 
 lib_LTLIBRARIES = libdns++.la
 
-libdns___la_SOURCES = util/base32hex.h util/base64.h util/base_n.cc
-libdns___la_SOURCES += util/base32hex_from_binary.h
-libdns___la_SOURCES += util/binary_from_base32hex.h
-libdns___la_SOURCES += util/base16_from_binary.h util/binary_from_base16.h
-libdns___la_SOURCES += buffer.h
-libdns___la_SOURCES += dnssectime.h dnssectime.cc
+libdns___la_SOURCES =
 libdns___la_SOURCES += edns.h edns.cc
 libdns___la_SOURCES += exceptions.h exceptions.cc
-libdns___la_SOURCES += util/hex.h
 libdns___la_SOURCES += masterload.h masterload.cc
 libdns___la_SOURCES += message.h message.cc
 libdns___la_SOURCES += messagerenderer.h messagerenderer.cc
@@ -83,11 +78,13 @@ libdns___la_SOURCES += rrsetlist.h rrsetlist.cc
 libdns___la_SOURCES += rrttl.h rrttl.cc
 libdns___la_SOURCES += rrtype.cc
 libdns___la_SOURCES += question.h question.cc
-libdns___la_SOURCES += util/sha1.h util/sha1.cc
 libdns___la_SOURCES += tsigkey.h tsigkey.cc
 libdns___la_SOURCES += rdata/generic/detail/nsec_bitmap.h
 libdns___la_SOURCES += rdata/generic/detail/nsec_bitmap.cc
 
+libdns___la_CPPFLAGS = $(AM_CPPFLAGS)
+libdns___la_LIBADD = $(top_builddir)/src/lib/util/libutil.la
+
 nodist_libdns___la_SOURCES = rdataclass.cc rrclass.h rrtype.h
 nodist_libdns___la_SOURCES += rrparamregistry.cc
 
@@ -99,8 +96,6 @@ rrclass.h rrtype.h rrparamregistry.cc rdataclass.h rdataclass.cc: Makefile
 
 libdns___includedir = $(includedir)/dns
 libdns___include_HEADERS = \
-	buffer.h \
-	dnssectime.h \
 	edns.h \
 	exceptions.h \
 	message.h \
diff --git a/src/lib/dns/buffer.h b/src/lib/dns/buffer.h
deleted file mode 100644
index c824154..0000000
--- a/src/lib/dns/buffer.h
+++ /dev/null
@@ -1,446 +0,0 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __BUFFER_H
-#define __BUFFER_H 1
-
-#include <vector>
-
-#include <string.h>
-
-#include <stdint.h>
-
-#include <exceptions/exceptions.h>
-
-#include <boost/shared_ptr.hpp>
-
-namespace isc {
-namespace dns {
-
-///
-/// \brief A standard DNS module exception that is thrown if an out-of-range
-/// buffer operation is being performed.
-///
-class InvalidBufferPosition : public Exception {
-public:
-    InvalidBufferPosition(const char* file, size_t line, const char* what) :
-        isc::Exception(file, line, what) {}
-};
-
-///\brief The \c InputBuffer class is a buffer abstraction for manipulating
-/// read-only data.
-///
-/// The main purpose of this class is to provide a safe placeholder for
-/// examining wire-format data received from a network.
-///
-/// Applications normally use this class only in a limited situation: as an
-/// interface between legacy I/O operation (such as receiving data from a BSD
-/// socket) and the rest of the BIND10 DNS library.  One common usage of this
-/// class for an application would therefore be something like this:
-///
-/// \code unsigned char buf[1024];
-/// struct sockaddr addr;
-/// socklen_t addrlen = sizeof(addr);
-/// int cc = recvfrom(s, buf, sizeof(buf), 0, &addr, &addrlen);
-/// InputBuffer buffer(buf, cc);
-/// // pass the buffer to a DNS message object to parse the message \endcode
-///
-/// Other BIND10 DNS classes will then use methods of this class to get access
-/// to the data, but the application normally doesn't have to care about the
-/// details.
-///
-/// An \c InputBuffer object internally holds a reference to the given data,
-/// rather than make a local copy of the data.  Also, it does not have an
-/// ownership of the given data.  It is application's responsibility to ensure
-/// the data remains valid throughout the lifetime of the \c InputBuffer
-/// object.  Likewise, this object generally assumes the data isn't modified
-/// throughout its lifetime; if the application modifies the data while this
-/// object retains a reference to it, the result is undefined.  The application
-/// will also be responsible for releasing the data when it's not needed if it
-/// was dynamically acquired.
-///
-/// This is a deliberate design choice: although it's safer to make a local
-/// copy of the given data on construction, it would cause unacceptable
-/// performance overhead, especially considering that a DNS message can be
-/// as large as a few KB.  Alternatively, we could allow the object to allocate
-/// memory internally and expose it to the application to store network data
-/// in it.  This is also a bad design, however, in that we would effectively
-/// break the abstraction employed in the class, and do so by publishing
-/// "read-only" stuff as a writable memory region.  Since there doesn't seem to
-/// be a perfect solution, we have adopted what we thought a "least bad" one.
-///
-/// Methods for reading data from the buffer generally work like an input
-/// stream: it begins with the head of the data, and once some length of data
-/// is read from the buffer, the next read operation will take place from the
-/// head of the unread data.  An object of this class internally holds (a
-/// notion of) where the next read operation should start.  We call it the
-/// <em>read position</em> in this document.
-class InputBuffer {
-public:
-    ///
-    /// \name Constructors and Destructor
-    //@{
-    /// \brief Constructor from variable length of data.
-    ///
-    /// It is caller's responsibility to ensure that the data is valid as long
-    /// as the buffer exists.
-    /// \param data A pointer to the data stored in the buffer.
-    /// \param len The length of the data in bytes.
-    InputBuffer(const void* data, size_t len) :
-        position_(0), data_(static_cast<const uint8_t*>(data)), len_(len) {}
-    //@}
-
-    ///
-    /// \name Getter Methods
-    //@{
-    /// \brief Return the length of the data stored in the buffer.
-    size_t getLength() const { return (len_); }
-    /// \brief Return the current read position.
-    size_t getPosition() const { return (position_); }
-    //@}
-
-    ///
-    /// \name Setter Methods
-    ///
-    //@{
-    /// \brief Set the read position of the buffer to the given value.
-    ///
-    /// The new position must be in the valid range of the buffer; otherwise
-    /// an exception of class \c isc::dns::InvalidBufferPosition will be thrown.
-    /// \param position The new position (offset from the beginning of the
-    /// buffer).
-    void setPosition(size_t position)
-    {
-        if (position > len_)
-            isc_throw(InvalidBufferPosition, "position is too large");
-        position_ = position;
-    }
-    //@}
-
-    ///
-    /// \name Methods for reading data from the buffer.
-    //@{
-    /// \brief Read an unsigned 8-bit integer from the buffer and return it.
-    ///
-    /// If the remaining length of the buffer is smaller than 8-bit, an
-    /// exception of class \c isc::dns::InvalidBufferPosition will be thrown.
-    uint8_t readUint8()
-    {
-        if (position_ + sizeof(uint8_t) > len_) {
-            isc_throw(InvalidBufferPosition, "read beyond end of buffer");
-        }
-
-        return (data_[position_++]);
-    }
-    /// \brief Read an unsigned 16-bit integer in network byte order from the
-    /// buffer, convert it to host byte order, and return it.
-    ///
-    /// If the remaining length of the buffer is smaller than 16-bit, an
-    /// exception of class \c isc::dns::InvalidBufferPosition will be thrown.
-    uint16_t readUint16()
-    {
-        uint16_t data;
-        const uint8_t* cp;
-
-        if (position_ + sizeof(data) > len_) {
-            isc_throw(InvalidBufferPosition, "read beyond end of buffer");
-        }
-
-        cp = &data_[position_];
-        data = ((unsigned int)(cp[0])) << 8;
-        data |= ((unsigned int)(cp[1]));
-        position_ += sizeof(data);
-
-        return (data);
-    }
-    /// \brief Read an unsigned 32-bit integer in network byte order from the
-    /// buffer, convert it to host byte order, and return it.
-    ///
-    /// If the remaining length of the buffer is smaller than 32-bit, an
-    /// exception of class \c isc::dns::InvalidBufferPosition will be thrown.
-    uint32_t readUint32()
-    {
-        uint32_t data;
-        const uint8_t* cp;
-
-        if (position_ + sizeof(data) > len_) {
-            isc_throw(InvalidBufferPosition, "read beyond end of buffer");
-        }
-
-        cp = &data_[position_];
-        data = ((unsigned int)(cp[0])) << 24;
-        data |= ((unsigned int)(cp[1])) << 16;
-        data |= ((unsigned int)(cp[2])) << 8;
-        data |= ((unsigned int)(cp[3]));
-        position_ += sizeof(data);
-
-        return (data);
-    }
-    /// \brief Read data of the specified length from the buffer and copy it to
-    /// the caller supplied buffer.
-    ///
-    /// The data is copied as stored in the buffer; no conversion is performed.
-    /// If the remaining length of the buffer is smaller than the specified
-    /// length, an exception of class \c isc::dns::InvalidBufferPosition will
-    /// be thrown.
-    void readData(void* data, size_t len)
-    {
-        if (position_ + len > len_) {
-            isc_throw(InvalidBufferPosition, "read beyond end of buffer");
-        }
-
-        memcpy(data, &data_[position_], len);
-        position_ += len;
-    }
-    //@}
-
-private:
-    size_t position_;
-
-    // XXX: The following must be private, but for a short term workaround with
-    // Boost.Python binding, we changed it to protected.  We should soon
-    // revisit it.
-protected:
-    const uint8_t* data_;
-    size_t len_;
-};
-
-///
-///\brief The \c OutputBuffer class is a buffer abstraction for manipulating
-/// mutable data.
-///
-/// The main purpose of this class is to provide a safe workplace for
-/// constructing wire-format data to be sent out to a network.  Here,
-/// <em>safe</em> means that it automatically allocates necessary memory and
-/// avoid buffer overrun.
-///
-/// Like for the \c InputBuffer class, applications normally use this class only
-/// in a limited situation.  One common usage of this class for an application
-/// would be something like this:
-///
-/// \code OutputBuffer buffer(4096); // give a sufficiently large initial size
-/// // pass the buffer to a DNS message object to construct a wire-format
-/// // DNS message.
-/// struct sockaddr to;
-/// sendto(s, buffer.getData(), buffer.getLength(), 0, &to, sizeof(to));
-/// \endcode
-///
-/// where the \c getData() method gives a reference to the internal memory
-/// region stored in the \c buffer object.  This is a suboptimal design in that
-/// it exposes an encapsulated "handle" of an object to its user.
-/// Unfortunately, there is no easy way to avoid this without involving
-/// expensive data copy if we want to use this object with a legacy API such as
-/// a BSD socket interface.  And, indeed, this is one major purpose for this
-/// object.  Applications should use this method only under such a special
-/// circumstance.  It should also be noted that the memory region returned by
-/// \c getData() may be invalidated after a subsequent write operation.
-///
-/// An \c OutputBuffer class object automatically extends its memory region when
-/// data is written beyond the end of the current buffer.  However, it will
-/// involve performance overhead such as reallocating more memory and copying
-/// data.  It is therefore recommended to construct the buffer object with a
-/// sufficiently large initial size.
-/// The \c getCapacity() method provides the current maximum size of data
-/// (including the portion already written) that can be written into the buffer
-/// without causing memory reallocation.
-///
-/// Methods for writing data into the buffer generally work like an output
-/// stream: it begins with the head of the buffer, and once some length of data
-/// is written into the buffer, the next write operation will take place from
-/// the end of the buffer.  Other methods to emulate "random access" are also
-/// provided (e.g., \c writeUint16At()).  The normal write operations are
-/// normally exception-free as this class automatically extends the buffer
-/// when necessary.  However, in extreme cases such as an attempt of writing
-/// multi-GB data, a separate exception (e.g., \c std::bad_alloc) may be thrown
-/// by the system.  This also applies to the constructor with a very large
-/// initial size.
-///
-/// Note to developers: it may make more sense to introduce an abstract base
-/// class for the \c OutputBuffer and define the simple implementation as a
-/// a concrete derived class.  That way we can provide flexibility for future
-/// extension such as more efficient buffer implementation or allowing users
-/// to have their own customized version without modifying the source code.
-/// We in fact considered that option, but at the moment chose the simpler
-/// approach with a single concrete class because it may make the
-/// implementation unnecessarily complicated while we were still not certain
-/// if we really want that flexibility.  We may revisit the class design as
-/// we see more applications of the class.  The same considerations apply to
-/// the \c InputBuffer and \c MessageRenderer classes.
-class OutputBuffer {
-public:
-    ///
-    /// \name Constructors and Destructor
-    ///
-    //@{
-    /// \brief Constructor from the initial size of the buffer.
-    ///
-    /// \param len The initial length of the buffer in bytes.
-    OutputBuffer(size_t len) { data_.reserve(len); }
-    //@}
-
-    ///
-    /// \name Getter Methods
-    ///
-    //@{
-    /// \brief Return the current capacity of the buffer.
-    size_t getCapacity() const { return (data_.capacity()); }
-    /// \brief Return a pointer to the head of the data stored in the buffer.
-    ///
-    /// The caller can assume that the subsequent \c getLength() bytes are
-    /// identical to the stored data of the buffer.
-    ///
-    /// Note: The pointer returned by this method may be invalidated after a
-    /// subsequent write operation.
-    const void* getData() const { return (&data_[0]); }
-    /// \brief Return the length of data written in the buffer.
-    size_t getLength() const { return (data_.size()); }
-    /// \brief Return the value of the buffer at the specified position.
-    ///
-    /// \c pos must specify the valid position of the buffer; otherwise an
-    /// exception class of \c InvalidBufferPosition will be thrown.
-    ///
-    /// \param pos The position in the buffer to be returned.
-    const uint8_t& operator[](size_t pos) const
-    {
-        if (pos >= data_.size()) {
-            isc_throw(InvalidBufferPosition, "read at invalid position");
-        }
-        return (data_[pos]);
-    }
-    //@}
-
-    ///
-    /// \name Methods for writing data into the buffer.
-    ///
-    //@{
-    /// \brief Insert a specified length of gap at the end of the buffer.
-    ///
-    /// The caller should not assume any particular value to be inserted.
-    /// This method is provided as a shortcut to make a hole in the buffer
-    /// that is to be filled in later, e.g, by \ref writeUint16At().
-    /// \param len The length of the gap to be inserted in bytes.
-    void skip(size_t len) { data_.insert(data_.end(), len, 0); }
-
-    /// \brief Trim the specified length of data from the end of the buffer.
-    ///
-    /// The specified length must not exceed the current data size of the
-    /// buffer; otherwise an exception of class \c isc::OutOfRange will
-    /// be thrown.
-    ///
-    /// \param len The length of data that should be trimmed.
-    void trim(size_t len)
-    {
-        if (len > data_.size()) {
-            isc_throw(OutOfRange, "trimming too large from output buffer");
-        }
-        data_.resize(data_.size() - len);
-    }
-    /// \brief Clear buffer content.
-    ///
-    /// This method can be used to re-initialize and reuse the buffer without
-    /// constructing a new one.
-    void clear() { data_.clear(); }
-    /// \brief Write an unsigned 8-bit integer into the buffer.
-    ///
-    /// \param data The 8-bit integer to be written into the buffer.
-    void writeUint8(uint8_t data) { data_.push_back(data); }
-
-    /// \brief Write an unsigned 8-bit integer into the buffer.
-    ///
-    /// The position must be lower than the size of the buffer,
-    /// otherwise an exception of class \c isc::dns::InvalidBufferPosition
-    /// will be thrown.
-    ///
-    /// \param data The 8-bit integer to be written into the buffer.
-    /// \param pos The position in the buffer to write the data.
-    void writeUint8At(uint8_t data, size_t pos) {
-        if (pos + sizeof(data) > data_.size()) {
-            isc_throw(InvalidBufferPosition, "write at invalid position");
-        }
-        data_[pos] = data;
-    }
-
-    /// \brief Write an unsigned 16-bit integer in host byte order into the
-    /// buffer in network byte order.
-    ///
-    /// \param data The 16-bit integer to be written into the buffer.
-    void writeUint16(uint16_t data)
-    {
-        data_.push_back(static_cast<uint8_t>((data & 0xff00U) >> 8));
-        data_.push_back(static_cast<uint8_t>(data & 0x00ffU));
-    }
-    /// \brief Write an unsigned 16-bit integer in host byte order at the
-    /// specified position of the buffer in network byte order.
-    ///
-    /// The buffer must have a sufficient room to store the given data at the
-    /// given position, that is, <code>pos + 2 < getLength()</code>;
-    /// otherwise an exception of class \c isc::dns::InvalidBufferPosition will
-    /// be thrown.
-    /// Note also that this method never extends the buffer.
-    ///
-    /// \param data The 16-bit integer to be written into the buffer.
-    /// \param pos The beginning position in the buffer to write the data.
-    void writeUint16At(uint16_t data, size_t pos)
-    {
-        if (pos + sizeof(data) > data_.size()) {
-            isc_throw(InvalidBufferPosition, "write at invalid position");
-        }
-
-        data_[pos] = static_cast<uint8_t>((data & 0xff00U) >> 8);
-        data_[pos + 1] = static_cast<uint8_t>(data & 0x00ffU);
-    }
-    /// \brief Write an unsigned 32-bit integer in host byte order
-    /// into the buffer in network byte order.
-    ///
-    /// \param data The 32-bit integer to be written into the buffer.
-    void writeUint32(uint32_t data)
-    {
-        data_.push_back(static_cast<uint8_t>((data & 0xff000000) >> 24));
-        data_.push_back(static_cast<uint8_t>((data & 0x00ff0000) >> 16));
-        data_.push_back(static_cast<uint8_t>((data & 0x0000ff00) >> 8));
-        data_.push_back(static_cast<uint8_t>(data & 0x000000ff));
-    }
-    /// \brief Copy an arbitrary length of data into the buffer.
-    ///
-    /// No conversion on the copied data is performed.
-    ///
-    /// \param data A pointer to the data to be copied into the buffer.
-    /// \param len The length of the data in bytes.
-    void writeData(const void *data, size_t len)
-    {
-        const uint8_t* cp = static_cast<const uint8_t*>(data);
-        data_.insert(data_.end(), cp, cp + len);
-    }
-    //@}
-    
-private:
-    std::vector<uint8_t> data_;
-};
-
-/// \brief Pointer-like types pointing to \c InputBuffer or \c OutputBuffer
-///
-/// These types are expected to be used as an argument in asynchronous
-/// callback functions.  The internal reference-counting will ensure that
-/// that ongoing state information will not be lost if the object
-/// that originated the asynchronous call falls out of scope.
-typedef boost::shared_ptr<InputBuffer> InputBufferPtr;
-typedef boost::shared_ptr<OutputBuffer> OutputBufferPtr;
-
-}
-}
-#endif  // __BUFFER_H
-
-// Local Variables: 
-// mode: c++
-// End: 
diff --git a/src/lib/dns/dnssectime.cc b/src/lib/dns/dnssectime.cc
deleted file mode 100644
index c889178..0000000
--- a/src/lib/dns/dnssectime.cc
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <stdint.h>
-
-#include <sys/time.h>
-
-#include <string>
-#include <iomanip>
-#include <iostream>
-#include <sstream>
-
-#include <stdio.h>
-#include <time.h>
-
-#include <exceptions/exceptions.h>
-
-#include <dns/dnssectime.h>
-
-using namespace std;
-
-namespace {
-int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
-inline bool
-isLeap(const int y) {
-    return ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0);
-}
-
-unsigned int
-yearSecs(const int year) {
-    return ((isLeap(year) ? 366 : 365 ) * 86400);
-}
-
-unsigned int
-monthSecs(const int month, const int year) {
-    return ((days[month] + ((month == 1 && isLeap(year)) ? 1 : 0 )) * 86400);
-}
-}
-
-namespace isc {
-namespace dns {
-
-string
-timeToText64(uint64_t value) {
-    struct tm tm;
-    unsigned int secs;
-
-    // We cannot rely on gmtime() because time_t may not be of 64 bit
-    // integer.  The following conversion logic is borrowed from BIND 9.
-    tm.tm_year = 70;
-    while ((secs = yearSecs(tm.tm_year + 1900)) <= value) {
-        value -= secs;
-        ++tm.tm_year;
-        if (tm.tm_year + 1900 > 9999) {
-            isc_throw(InvalidTime,
-                      "Time value out of range (year > 9999): " <<
-                      tm.tm_year + 1900);
-        }
-    }
-    tm.tm_mon = 0;
-    while ((secs = monthSecs(tm.tm_mon, tm.tm_year + 1900)) <= value) {
-        value -= secs;
-        tm.tm_mon++;
-    }
-    tm.tm_mday = 1;
-    while (86400 <= value) {
-        value -= 86400;
-        ++tm.tm_mday;
-    }
-    tm.tm_hour = 0;
-    while (3600 <= value) {
-        value -= 3600;
-        ++tm.tm_hour;
-    }
-    tm.tm_min = 0;
-    while (60 <= value) {
-        value -= 60;
-        ++tm.tm_min;
-    }
-    tm.tm_sec = value;    // now t < 60, so this substitution is safe.
-
-    ostringstream oss;
-    oss << setfill('0')
-        << setw(4) << tm.tm_year + 1900
-        << setw(2) << tm.tm_mon + 1
-        << setw(2) << tm.tm_mday
-        << setw(2) << tm.tm_hour
-        << setw(2) << tm.tm_min
-        << setw(2) << tm.tm_sec;
-    return (oss.str());
-}
-
-// timeToText32() below uses the current system time.  To test it with
-// unusual current time values we introduce the following function pointer;
-// when it's non NULL, we call it to get the (normally faked) current time.
-// Otherwise we use the standard gettimeofday(2).  This hook is specifically
-// intended for testing purposes, so, even if it's visible outside of this
-// library, it's not even declared in a header file.
-namespace dnssectime {
-namespace detail {
-int64_t (*gettimeFunction)() = NULL;
-}
-}
-
-namespace {
-int64_t
-gettimeofdayWrapper() {
-    using namespace dnssectime::detail;
-    if (gettimeFunction != NULL) {
-        return (gettimeFunction());
-    }
-
-    struct timeval now;
-    gettimeofday(&now, NULL);
-
-    return (static_cast<int64_t>(now.tv_sec));
-}
-}
-
-string
-timeToText32(const uint32_t value) {
-    // We first adjust the time to the closest epoch based on the current time.
-    // Note that the following variables must be signed in order to handle
-    // time until year 2038 correctly.
-    const int64_t start = gettimeofdayWrapper() - 0x7fffffff;
-    int64_t base = 0;
-    int64_t t;
-    while ((t = (base + value)) < start) {
-        base += 0x100000000LL;
-    }
-
-    // Then convert it to text.
-    return (timeToText64(t));
-}
-
-namespace {
-const size_t DATE_LEN = 14;      // YYYYMMDDHHmmSS
-
-inline void
-checkRange(const int min, const int max, const int value,
-           const string& valname)
-{
-    if ((value >= min) && (value <= max)) {
-        return;
-    }
-    isc_throw(InvalidTime, "Invalid " << valname << "value: " << value);
-}
-}
-
-uint64_t
-timeFromText64(const string& time_txt) {
-    // Confirm the source only consists digits.  sscanf() allows some
-    // minor exceptions.
-    for (int i = 0; i < time_txt.length(); ++i) {
-        if (!isdigit(time_txt.at(i))) {
-            isc_throw(InvalidTime, "Couldn't convert non-numeric time value: "
-                      << time_txt);
-        }
-    }
-
-    int year, month, day, hour, minute, second;
-    if (time_txt.length() != DATE_LEN ||
-        sscanf(time_txt.c_str(), "%4d%2d%2d%2d%2d%2d",
-               &year, &month, &day, &hour, &minute, &second) != 6)
-    {
-        isc_throw(InvalidTime, "Couldn't convert time value: " << time_txt);
-    }
-
-    checkRange(1970, 9999, year, "year");
-    checkRange(1, 12, month, "month");
-    checkRange(1, days[month - 1] + ((month == 2 && isLeap(year)) ? 1 : 0),
-            day, "day");
-    checkRange(0, 23, hour, "hour");
-    checkRange(0, 59, minute, "minute");
-    checkRange(0, 60, second, "second"); // 60 == leap second.
-
-    uint64_t timeval = second + (60 * minute) + (3600 * hour) +
-        ((day - 1) * 86400);
-    for (int m = 0; m < (month - 1); ++m) {
-            timeval += days[m] * 86400;
-    }
-    if (isLeap(year) && month > 2) {
-            timeval += 86400;
-    }
-    for (int y = 1970; y < year; ++y) {
-        timeval += ((isLeap(y) ? 366 : 365 ) * 86400);
-    }
-
-    return (timeval);
-}
-
-uint32_t
-timeFromText32(const string& time_txt) {
-    // The implicit conversion from uint64_t to uint32_t should just work here,
-    // because we only need to drop higher 32 bits.
-    return (timeFromText64(time_txt));
-}
-}
-}
diff --git a/src/lib/dns/dnssectime.h b/src/lib/dns/dnssectime.h
deleted file mode 100644
index baf866f..0000000
--- a/src/lib/dns/dnssectime.h
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __DNSSECTIME_H
-#define __DNSSECTIME_H 1
-
-#include <sys/types.h>
-#include <stdint.h>
-
-#include <exceptions/exceptions.h>
-
-//
-// Note: this helper module isn't specific to the DNS protocol per se.
-// We should probably move this to somewhere else, possibly in some common
-// utility area.
-//
-
-namespace isc {
-namespace dns {
-
-///
-/// \brief A standard DNS (or ISC) module exception that is thrown if 
-/// a time conversion function encounters bad input
-///
-class InvalidTime : public Exception {
-public:
-    InvalidTime(const char* file, size_t line, const char* what) :
-        isc::Exception(file, line, what) {}
-};
-
-///
-/// \name DNSSEC time conversion functions.
-///
-/// These functions convert between times represented in seconds (in integer)
-/// since epoch and those in the textual form used in the RRSIG records.
-/// For integers we provide both 32-bit and 64-bit versions.
-/// The RRSIG expiration and inception fields are both 32-bit unsigned
-/// integers, so 32-bit versions would be more useful for protocol operations.
-/// However, with 32-bit integers we need to take into account wrap-around
-/// points and compare values using the serial number arithmetic as specified
-/// in RFC4034, which would be more error prone.  We therefore provide 64-bit
-/// versions, too.
-///
-/// The timezone is always UTC for these functions.
-//@{
-/// Convert textual DNSSEC time to integer, 64-bit version.
-///
-/// The textual form must only consist of digits and be in the form of
-/// YYYYMMDDHHmmSS, where:
-/// - YYYY must be between 1970 and 9999
-/// - MM must be between 01 and 12
-/// - DD must be between 01 and 31 and must be a valid day for the month
-///   represented in 'MM'.  For example, if MM is 04, DD cannot be 31.
-///   DD can be 29 when MM is 02 only when YYYY is a leap year.
-/// - HH must be between 00 and 23
-/// - mm must be between 00 and 59
-/// - SS must be between 00 and 60
-///
-/// For all fields the range includes the begin and end values.  Note that
-/// 60 is allowed for 'SS', intending a leap second, although in real operation
-/// it's unlikely to be specified.
-///
-/// If the given text is valid, this function converts it to an unsigned
-/// 64-bit number of seconds since epoch (1 January 1970 00:00:00) and returns
-/// the converted value.  64 bits are sufficient to represent all possible
-/// values for the valid format uniquely, so there is no overflow.
-///
-/// \note RFC4034 also defines the textual form of an unsigned decimal integer
-/// for the corresponding time in seconds.  This function doesn't support
-/// this form, and if given it throws an exception of class \c InvalidTime.
-///
-/// \exception InvalidTime The given textual representation is invalid.
-///
-/// \param time_txt Textual time in the form of YYYYMMDDHHmmSS
-/// \return Seconds since epoch corresponding to \c time_txt
-uint64_t
-timeFromText64(const std::string& time_txt);
-
-/// Convert textual DNSSEC time to integer, 32-bit version.
-///
-/// This version is the same as \c timeFromText64() except that the return
-/// value is wrapped around to an unsigned 32-bit integer, simply dropping
-/// the upper 32 bits.
-uint32_t
-timeFromText32(const std::string& time_txt);
-
-/// Convert integral DNSSEC time to textual form, 64-bit version.
-///
-/// This function takes an integer that would be seconds since epoch and
-/// converts it in the form of YYYYMMDDHHmmSS.  For example, if \c value is
-/// 0, it returns "19700101000000".  If the value corresponds to a point
-/// of time on and after year 10,000, which cannot be represented in the
-/// YYYY... form, an exception of class \c InvalidTime will be thrown.
-///
-/// \exception InvalidTime The given time specifies on or after year 10,000.
-/// \exception Other A standard exception, if resource allocation for the
-/// returned text fails.
-///
-/// \param value Seconds since epoch to be converted.
-/// \return Textual representation of \c value in the form of YYYYMMDDHHmmSS.
-std::string
-timeToText64(uint64_t value);
-
-/// Convert integral DNSSEC time to textual form, 32-bit version.
-///
-/// This version is the same as \c timeToText64(), but the time value
-/// is expected to be the lower 32 bits of the full 64-bit value.
-/// These two will be different on and after a certain point of time
-/// in year 2106, so this function internally resolves the ambiguity
-/// using the current system time at the time of function call;
-/// it first identifies the range of [N*2^32 - 2^31, N*2^32 + 2^31)
-/// that contains the current time, and interprets \c value in the context
-/// of that range.  It then applies the same process as \c timeToText64().
-///
-/// There is one important exception in this processing, however.
-/// Until 19 Jan 2038 03:14:08 (2^31 seconds since epoch), this range
-/// would contain time before epoch.  In order to ensure the returned
-/// value is also a valid input to \c timeFromText, this function uses
-/// a special range [0, 2^32) until that time.  As a result, all upper
-/// half of the 32-bit values are treated as a future time.  For example,
-/// 2^32-1 (the highest value in 32-bit unsigned integers) will be converted
-/// to "21060207062815", instead of "19691231235959".
-std::string
-timeToText32(const uint32_t value);
-
-//@}
-}
-}
-
-#endif  // __DNSSECTIME_H
-
-// Local Variables: 
-// mode: c++
-// End: 
diff --git a/src/lib/dns/edns.cc b/src/lib/dns/edns.cc
index 6e25624..ebdad81 100644
--- a/src/lib/dns/edns.cc
+++ b/src/lib/dns/edns.cc
@@ -36,6 +36,7 @@
 using namespace std;
 using namespace boost;
 using namespace isc::dns::rdata;
+using namespace isc::util::io;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/edns.h b/src/lib/dns/edns.h
index ca3db47..fea0e2a 100644
--- a/src/lib/dns/edns.h
+++ b/src/lib/dns/edns.h
@@ -24,6 +24,12 @@
 #include <dns/rdata.h>
 
 namespace isc {
+namespace util {
+namespace io {
+class OutputBuffer;
+}
+}
+
 namespace dns {
 
 class EDNS;
@@ -319,7 +325,7 @@ public:
     /// except it renders the OPT RR in an \c OutputBuffer and therefore
     /// does not care about message size limit.
     /// As a consequence it always returns 1.
-    unsigned int toWire(OutputBuffer& buffer,
+    unsigned int toWire(isc::util::io::OutputBuffer& buffer,
                         const uint8_t extended_rcode) const;
 
     /// \brief Convert the EDNS to a string.
diff --git a/src/lib/dns/message.cc b/src/lib/dns/message.cc
index 9eae605..3516f6a 100644
--- a/src/lib/dns/message.cc
+++ b/src/lib/dns/message.cc
@@ -25,7 +25,8 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+
 #include <dns/edns.h>
 #include <dns/exceptions.h>
 #include <dns/message.h>
@@ -43,6 +44,7 @@
 using namespace std;
 using namespace boost;
 using namespace isc::dns::rdata;
+using namespace isc::util::io;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/message.h b/src/lib/dns/message.h
index 0bbb9ea..2b6af9b 100644
--- a/src/lib/dns/message.h
+++ b/src/lib/dns/message.h
@@ -28,6 +28,12 @@
 #include <dns/rrset.h>
 
 namespace isc {
+namespace util {
+namespace io {
+class InputBuffer;
+}
+}
+
 namespace dns {
 
 ///
@@ -76,7 +82,6 @@ public:
 
 typedef uint16_t qid_t;
 
-class InputBuffer;
 class MessageRenderer;
 class Message;
 class MessageImpl;
@@ -529,10 +534,10 @@ public:
     void toWire(MessageRenderer& renderer);
 
     /// \brief Parse the header section of the \c Message.
-    void parseHeader(InputBuffer& buffer);
+    void parseHeader(isc::util::io::InputBuffer& buffer);
 
     /// \brief Parse the \c Message.
-    void fromWire(InputBuffer& buffer);
+    void fromWire(isc::util::io::InputBuffer& buffer);
 
     ///
     /// \name Protocol constants
diff --git a/src/lib/dns/messagerenderer.cc b/src/lib/dns/messagerenderer.cc
index 212411a..eeb1f1c 100644
--- a/src/lib/dns/messagerenderer.cc
+++ b/src/lib/dns/messagerenderer.cc
@@ -16,10 +16,12 @@
 #include <cassert>
 #include <set>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 
+using namespace isc::util::io;
+
 namespace isc {
 namespace dns {
 
diff --git a/src/lib/dns/messagerenderer.h b/src/lib/dns/messagerenderer.h
index 9a7f149..41507aa 100644
--- a/src/lib/dns/messagerenderer.h
+++ b/src/lib/dns/messagerenderer.h
@@ -16,9 +16,14 @@
 #define __MESSAGERENDERER_H 1
 
 namespace isc {
+namespace util {
+namespace io {
+class OutputBuffer;
+}
+}
+
 namespace dns {
 // forward declarations
-class OutputBuffer;
 class Name;
 
 ///
@@ -101,7 +106,7 @@ public:
     ///
     /// \param buffer An \c OutputBuffer object to which wire format data is
     /// written.
-    MessageRenderer(OutputBuffer& buffer);
+    MessageRenderer(isc::util::io::OutputBuffer& buffer);
     /// \brief The destructor.
     ///
     /// The destructor does nothing on the given \c buffer on construction;
diff --git a/src/lib/dns/name.cc b/src/lib/dns/name.cc
index 8786bcf..5ff419c 100644
--- a/src/lib/dns/name.cc
+++ b/src/lib/dns/name.cc
@@ -20,12 +20,13 @@
 #include <iostream>
 #include <algorithm>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 
 using namespace std;
+using namespace isc::util::io;
 using isc::dns::NameComparisonResult;
 using isc::dns::MessageRenderer;
 
diff --git a/src/lib/dns/name.h b/src/lib/dns/name.h
index dc1b5b3..562a1d5 100644
--- a/src/lib/dns/name.h
+++ b/src/lib/dns/name.h
@@ -23,9 +23,14 @@
 #include <exceptions/exceptions.h>
 
 namespace isc {
-namespace dns {
+namespace util {
+namespace io {
 class InputBuffer;
 class OutputBuffer;
+}
+}
+
+namespace dns {
 class MessageRenderer;
 
 ///
@@ -247,7 +252,7 @@ public:
     ///
     /// \param buffer A buffer storing the wire format %data.
     /// \param downcase Whether to convert upper case alphabets to lower case.
-    explicit Name(InputBuffer& buffer, bool downcase = false);
+    explicit Name(isc::util::io::InputBuffer& buffer, bool downcase = false);
     ///
     /// We use the default copy constructor intentionally.
     //@}
@@ -359,7 +364,7 @@ public:
     /// then this method should not throw an exception.
     ///
     /// \param buffer An output buffer to store the wire %data.
-    void toWire(OutputBuffer& buffer) const;
+    void toWire(isc::util::io::OutputBuffer& buffer) const;
     //@}
 
     ///
diff --git a/src/lib/dns/python/edns_python.cc b/src/lib/dns/python/edns_python.cc
index e54dba0..bceee7a 100644
--- a/src/lib/dns/python/edns_python.cc
+++ b/src/lib/dns/python/edns_python.cc
@@ -17,6 +17,7 @@
 #include <dns/edns.h>
 
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 //
diff --git a/src/lib/dns/python/message_python.cc b/src/lib/dns/python/message_python.cc
index e19547e..42af4d4 100644
--- a/src/lib/dns/python/message_python.cc
+++ b/src/lib/dns/python/message_python.cc
@@ -15,6 +15,7 @@
 #include <exceptions/exceptions.h>
 #include <dns/message.h>
 using namespace isc::dns;
+using namespace isc::util::io;
 
 //
 // Declaration of the custom exceptions
diff --git a/src/lib/dns/python/messagerenderer_python.cc b/src/lib/dns/python/messagerenderer_python.cc
index a00d8d4..9da2a63 100644
--- a/src/lib/dns/python/messagerenderer_python.cc
+++ b/src/lib/dns/python/messagerenderer_python.cc
@@ -18,6 +18,7 @@
 // and static wrappers around the methods we export), a list of methods,
 // and a type description
 using namespace isc::dns;
+using namespace isc::util::io;
 
 // MessageRenderer
 
diff --git a/src/lib/dns/python/name_python.cc b/src/lib/dns/python/name_python.cc
index 3d7a196..d8070b8 100644
--- a/src/lib/dns/python/name_python.cc
+++ b/src/lib/dns/python/name_python.cc
@@ -41,6 +41,7 @@ static PyObject* po_NameRelation;
 // and static wrappers around the methods we export), a list of methods,
 // and a type description
 using namespace isc::dns;
+using namespace isc::util::io;
 
 // NameComparisonResult
 class s_NameComparisonResult : public PyObject {
diff --git a/src/lib/dns/python/pydnspp.cc b/src/lib/dns/python/pydnspp.cc
index 7b41598..8fd1e17 100644
--- a/src/lib/dns/python/pydnspp.cc
+++ b/src/lib/dns/python/pydnspp.cc
@@ -31,7 +31,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
diff --git a/src/lib/dns/python/rdata_python.cc b/src/lib/dns/python/rdata_python.cc
index 8579b7e..8f07ef2 100644
--- a/src/lib/dns/python/rdata_python.cc
+++ b/src/lib/dns/python/rdata_python.cc
@@ -14,6 +14,7 @@
 
 #include <dns/rdata.h>
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 //
diff --git a/src/lib/dns/python/rrclass_python.cc b/src/lib/dns/python/rrclass_python.cc
index 3cfed4c..66611a3 100644
--- a/src/lib/dns/python/rrclass_python.cc
+++ b/src/lib/dns/python/rrclass_python.cc
@@ -14,6 +14,7 @@
 
 #include <dns/rrclass.h>
 using namespace isc::dns;
+using namespace isc::util::io;
 
 //
 // Declaration of the custom exceptions
diff --git a/src/lib/dns/python/rrset_python.cc b/src/lib/dns/python/rrset_python.cc
index 2292784..952503c 100644
--- a/src/lib/dns/python/rrset_python.cc
+++ b/src/lib/dns/python/rrset_python.cc
@@ -29,6 +29,7 @@ static PyObject* po_EmptyRRset;
 // and static wrappers around the methods we export), a list of methods,
 // and a type description
 using namespace isc::dns;
+using namespace isc::util::io;
 
 // RRset
 
diff --git a/src/lib/dns/python/rrttl_python.cc b/src/lib/dns/python/rrttl_python.cc
index e7391d0..7d244e8 100644
--- a/src/lib/dns/python/rrttl_python.cc
+++ b/src/lib/dns/python/rrttl_python.cc
@@ -18,6 +18,7 @@
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 //
 // Declaration of the custom exceptions
diff --git a/src/lib/dns/python/rrtype_python.cc b/src/lib/dns/python/rrtype_python.cc
index 012f251..a31bb54 100644
--- a/src/lib/dns/python/rrtype_python.cc
+++ b/src/lib/dns/python/rrtype_python.cc
@@ -18,6 +18,7 @@
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 //
 // Declaration of the custom exceptions
diff --git a/src/lib/dns/question.cc b/src/lib/dns/question.cc
index 3e14c78..86f1d48 100644
--- a/src/lib/dns/question.cc
+++ b/src/lib/dns/question.cc
@@ -15,7 +15,7 @@
 #include <iostream>
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/question.h>
@@ -23,6 +23,7 @@
 #include <dns/rrtype.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/question.h b/src/lib/dns/question.h
index 520207b..42d2dfe 100644
--- a/src/lib/dns/question.h
+++ b/src/lib/dns/question.h
@@ -25,9 +25,15 @@
 #include <dns/rrtype.h>
 
 namespace isc {
+namespace util {
+namespace io {
+class InputBuffer;
+class OutputBuffer;
+}
+}
+
 namespace dns {
 
-class InputBuffer;
 class MessageRenderer;
 class Question;
 
@@ -118,7 +124,7 @@ public:
     /// classes fails.
     ///
     /// \param buffer A buffer storing the wire format data.
-    Question(InputBuffer& buffer);
+    Question(isc::util::io::InputBuffer& buffer);
 
     /// \brief Constructor from fixed parameters of the \c Question.
     ///
@@ -224,7 +230,7 @@ public:
     ///
     /// \param buffer An output buffer to store the wire data.
     /// \return 1
-    unsigned int toWire(OutputBuffer& buffer) const;
+    unsigned int toWire(isc::util::io::OutputBuffer& buffer) const;
     //@}
 
     ///
diff --git a/src/lib/dns/rdata.cc b/src/lib/dns/rdata.cc
index 17fee25..4e5ec0e 100644
--- a/src/lib/dns/rdata.cc
+++ b/src/lib/dns/rdata.cc
@@ -27,7 +27,7 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/shared_ptr.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -36,6 +36,7 @@
 
 using namespace std;
 using namespace boost;
+using namespace isc::util::io;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/rdata.h b/src/lib/dns/rdata.h
index 8eaedd3..ab15918 100644
--- a/src/lib/dns/rdata.h
+++ b/src/lib/dns/rdata.h
@@ -22,9 +22,13 @@
 #include <exceptions/exceptions.h>
 
 namespace isc {
-namespace dns {
+namespace util {
+namespace io {
 class InputBuffer;
 class OutputBuffer;
+}
+}
+namespace dns {
 class MessageRenderer;
 class RRType;
 class RRClass;
@@ -168,7 +172,7 @@ public:
     /// should be explicitly defined in the derived class.
     ///
     /// \param buffer An output buffer to store the wire data.
-    virtual void toWire(OutputBuffer& buffer) const = 0;
+    virtual void toWire(isc::util::io::OutputBuffer& buffer) const = 0;
     /// \brief Render the \c Rdata in the wire format into a
     /// \c MessageRenderer object.
     ///
@@ -272,7 +276,7 @@ public:
     /// \param buffer A reference to an \c InputBuffer object storing the
     /// \c Rdata to parse.
     /// \param rdata_len The length in buffer of the \c Rdata.  In bytes.
-    Generic(InputBuffer& buffer, size_t rdata_len);
+    Generic(isc::util::io::InputBuffer& buffer, size_t rdata_len);
     ///
     /// \brief The destructor.
     virtual ~Generic();
@@ -316,7 +320,7 @@ public:
     /// be thrown.
     ///
     /// \param buffer An output buffer to store the wire data.
-    virtual void toWire(OutputBuffer& buffer) const;
+    virtual void toWire(isc::util::io::OutputBuffer& buffer) const;
     /// \brief Render the \c generic::Generic in the wire format into a
     /// \c MessageRenderer object.
     ///
@@ -443,7 +447,7 @@ RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
 /// \return An \c RdataPtr object pointing to the created \c Rdata
 /// object.
 RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
-                     InputBuffer& buffer, size_t len);
+                     isc::util::io::InputBuffer& buffer, size_t len);
 /// \brief Create RDATA of a given pair of RR type and class, copying
 /// of another RDATA of same kind.
 ///
diff --git a/src/lib/dns/rdata/any_255/tsig_250.cc b/src/lib/dns/rdata/any_255/tsig_250.cc
index e025ce4..994623d 100644
--- a/src/lib/dns/rdata/any_255/tsig_250.cc
+++ b/src/lib/dns/rdata/any_255/tsig_250.cc
@@ -18,15 +18,18 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/compat/base64.h>
+
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
-#include <dns/util/base64.h>
 
 using namespace std;
 using namespace boost;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/ch_3/a_1.cc b/src/lib/dns/rdata/ch_3/a_1.cc
index 376cbdd..dbd5613 100644
--- a/src/lib/dns/rdata/ch_3/a_1.cc
+++ b/src/lib/dns/rdata/ch_3/a_1.cc
@@ -16,12 +16,13 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/cname_5.cc b/src/lib/dns/rdata/generic/cname_5.cc
index c7f97d0..a970b41 100644
--- a/src/lib/dns/rdata/generic/cname_5.cc
+++ b/src/lib/dns/rdata/generic/cname_5.cc
@@ -16,13 +16,14 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/dname_39.cc b/src/lib/dns/rdata/generic/dname_39.cc
index b88720e..a2a685b 100644
--- a/src/lib/dns/rdata/generic/dname_39.cc
+++ b/src/lib/dns/rdata/generic/dname_39.cc
@@ -16,13 +16,14 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/dnskey_48.cc b/src/lib/dns/rdata/generic/dnskey_48.cc
index 16a748e..823e60d 100644
--- a/src/lib/dns/rdata/generic/dnskey_48.cc
+++ b/src/lib/dns/rdata/generic/dnskey_48.cc
@@ -20,8 +20,8 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/foreach.hpp>
 
-#include <dns/util/base64.h>
-#include <dns/buffer.h>
+#include <util/compat/base64.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rdata.h>
@@ -31,6 +31,8 @@
 #include <time.h>
 
 using namespace std;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/ds_43.cc b/src/lib/dns/rdata/generic/ds_43.cc
index cca19ae..69eb2a3 100644
--- a/src/lib/dns/rdata/generic/ds_43.cc
+++ b/src/lib/dns/rdata/generic/ds_43.cc
@@ -19,8 +19,9 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/buffer.h>
-#include <dns/util/hex.h>
+#include <util/io/buffer.h>
+#include <util/compat/hex.h>
+
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rdata.h>
@@ -30,6 +31,8 @@
 #include <time.h>
 
 using namespace std;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/mx_15.cc b/src/lib/dns/rdata/generic/mx_15.cc
index 0ae2251..858ca92 100644
--- a/src/lib/dns/rdata/generic/mx_15.cc
+++ b/src/lib/dns/rdata/generic/mx_15.cc
@@ -20,7 +20,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 
 using namespace std;
 using namespace boost;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/ns_2.cc b/src/lib/dns/rdata/generic/ns_2.cc
index 0e56911..e2a2b23 100644
--- a/src/lib/dns/rdata/generic/ns_2.cc
+++ b/src/lib/dns/rdata/generic/ns_2.cc
@@ -16,13 +16,14 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/nsec3_50.cc b/src/lib/dns/rdata/generic/nsec3_50.cc
index fbe6612..3efdfeb 100644
--- a/src/lib/dns/rdata/generic/nsec3_50.cc
+++ b/src/lib/dns/rdata/generic/nsec3_50.cc
@@ -20,10 +20,11 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/util/base32hex.h>
-#include <dns/buffer.h>
+#include <util/compat/base32hex.h>
+#include <util/compat/hex.h>
+#include <util/io/buffer.h>
+
 #include <dns/exceptions.h>
-#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rrtype.h>
@@ -37,6 +38,8 @@
 
 using namespace std;
 using namespace isc::dns::rdata::generic::detail::nsec;
+using namespace isc::util::comapt;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/nsec3param_51.cc b/src/lib/dns/rdata/generic/nsec3param_51.cc
index 639feed..c190cb2 100644
--- a/src/lib/dns/rdata/generic/nsec3param_51.cc
+++ b/src/lib/dns/rdata/generic/nsec3param_51.cc
@@ -19,8 +19,8 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/buffer.h>
-#include <dns/util/hex.h>
+#include <util/io/buffer.h>
+#include <util/compat/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rdata.h>
@@ -30,6 +30,8 @@
 #include <time.h>
 
 using namespace std;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/nsec_47.cc b/src/lib/dns/rdata/generic/nsec_47.cc
index 72eb946..040a83a 100644
--- a/src/lib/dns/rdata/generic/nsec_47.cc
+++ b/src/lib/dns/rdata/generic/nsec_47.cc
@@ -17,8 +17,8 @@
 #include <sstream>
 #include <vector>
 
-#include <dns/util/base64.h>
-#include <dns/buffer.h>
+#include <util/compat/base64.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
@@ -32,6 +32,8 @@
 #include <time.h>
 
 using namespace std;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 using namespace isc::dns::rdata::generic::detail::nsec;
 
 // BEGIN_ISC_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/opt_41.cc b/src/lib/dns/rdata/generic/opt_41.cc
index 1aae810..cb80256 100644
--- a/src/lib/dns/rdata/generic/opt_41.cc
+++ b/src/lib/dns/rdata/generic/opt_41.cc
@@ -16,12 +16,13 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/ptr_12.cc b/src/lib/dns/rdata/generic/ptr_12.cc
index dc656b8..304da08 100644
--- a/src/lib/dns/rdata/generic/ptr_12.cc
+++ b/src/lib/dns/rdata/generic/ptr_12.cc
@@ -16,13 +16,14 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/rrsig_46.cc b/src/lib/dns/rdata/generic/rrsig_46.cc
index c9d1e52..65eb0c7 100644
--- a/src/lib/dns/rdata/generic/rrsig_46.cc
+++ b/src/lib/dns/rdata/generic/rrsig_46.cc
@@ -20,9 +20,9 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/util/base64.h>
-#include <dns/buffer.h>
-#include <dns/dnssectime.h>
+#include <util/compat/base64.h>
+#include <util/io/buffer.h>
+#include <util/compat/time_utilities.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rrtype.h>
@@ -34,6 +34,9 @@
 #include <time.h>
 
 using namespace std;
+using namespace isc::util;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/soa_6.cc b/src/lib/dns/rdata/generic/soa_6.cc
index c4b87c6..01cde31 100644
--- a/src/lib/dns/rdata/generic/soa_6.cc
+++ b/src/lib/dns/rdata/generic/soa_6.cc
@@ -20,7 +20,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 
 using namespace std;
 using namespace boost;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/generic/txt_16.cc b/src/lib/dns/rdata/generic/txt_16.cc
index 0e20f4e..c7c6dde 100644
--- a/src/lib/dns/rdata/generic/txt_16.cc
+++ b/src/lib/dns/rdata/generic/txt_16.cc
@@ -18,13 +18,14 @@
 #include <string>
 #include <vector>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/hs_4/a_1.cc b/src/lib/dns/rdata/hs_4/a_1.cc
index 376cbdd..dbd5613 100644
--- a/src/lib/dns/rdata/hs_4/a_1.cc
+++ b/src/lib/dns/rdata/hs_4/a_1.cc
@@ -16,12 +16,13 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/in_1/a_1.cc b/src/lib/dns/rdata/in_1/a_1.cc
index ddd03f8..21f5a73 100644
--- a/src/lib/dns/rdata/in_1/a_1.cc
+++ b/src/lib/dns/rdata/in_1/a_1.cc
@@ -22,13 +22,14 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/in_1/aaaa_28.cc b/src/lib/dns/rdata/in_1/aaaa_28.cc
index 45c4682..edaa190 100644
--- a/src/lib/dns/rdata/in_1/aaaa_28.cc
+++ b/src/lib/dns/rdata/in_1/aaaa_28.cc
@@ -22,13 +22,14 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rdata/template.cc b/src/lib/dns/rdata/template.cc
index 0e0bf46..617ce2a 100644
--- a/src/lib/dns/rdata/template.cc
+++ b/src/lib/dns/rdata/template.cc
@@ -14,12 +14,13 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 
 using namespace std;
+using namespace isc::util::io;
 
 // BEGIN_ISC_NAMESPACE
 // BEGIN_RDATA_NAMESPACE
diff --git a/src/lib/dns/rrclass.cc b/src/lib/dns/rrclass.cc
index 04ff59c..43a6b9d 100644
--- a/src/lib/dns/rrclass.cc
+++ b/src/lib/dns/rrclass.cc
@@ -18,13 +18,14 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrparamregistry.h>
 #include <dns/rrclass.h>
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/rrparamregistry.h b/src/lib/dns/rrparamregistry.h
index a856423..7244d7f 100644
--- a/src/lib/dns/rrparamregistry.h
+++ b/src/lib/dns/rrparamregistry.h
@@ -102,7 +102,7 @@ public:
     /// \c Rdata to parse.
     /// \param rdata_len The length in buffer of the \c Rdata.  In bytes.
     /// \return An \c RdataPtr object pointing to the created \c Rdata object.
-    virtual RdataPtr create(InputBuffer& buffer, size_t rdata_len) const = 0;
+    virtual RdataPtr create(isc::util::io::InputBuffer& buffer, size_t rdata_len) const = 0;
     ///
     /// \brief Create RDATA from another \c Rdata object of the same type.
     ///
@@ -473,7 +473,7 @@ public:
     /// \return An \c rdata::RdataPtr object pointing to the created \c Rdata
     /// object.
     rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
-                                InputBuffer& buffer, size_t len);
+                                isc::util::io::InputBuffer& buffer, size_t len);
     /// \brief Create RDATA of a given pair of RR type and class, copying
     /// of another RDATA of same kind.
     ///
diff --git a/src/lib/dns/rrset.cc b/src/lib/dns/rrset.cc
index b931bec..fd95817 100644
--- a/src/lib/dns/rrset.cc
+++ b/src/lib/dns/rrset.cc
@@ -18,7 +18,7 @@
 
 #include <boost/shared_ptr.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rrclass.h>
@@ -28,6 +28,7 @@
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace isc {
diff --git a/src/lib/dns/rrset.h b/src/lib/dns/rrset.h
index 926a58f..996bec1 100644
--- a/src/lib/dns/rrset.h
+++ b/src/lib/dns/rrset.h
@@ -26,6 +26,12 @@
 #include <dns/rrtype.h>
 
 namespace isc {
+namespace util {
+namespace io {
+class OututBuffer;
+}
+}
+
 namespace dns {
 
 ///
@@ -43,7 +49,6 @@ class Name;
 class RRType;
 class RRClass;
 class RRTTL;
-class OututBuffer;
 class MessageRenderer;
 class AbstractRRset;
 class BasicRRset;
@@ -316,7 +321,7 @@ public:
     ///
     /// \param buffer An output buffer to store the wire data.
     /// \return The number of RRs rendered.
-    virtual unsigned int toWire(OutputBuffer& buffer) const = 0;
+    virtual unsigned int toWire(isc::util::io::OutputBuffer& buffer) const = 0;
     //@}
 
     ///
@@ -620,7 +625,7 @@ public:
     ///
     /// This method simply uses the default implementation.
     /// See \c AbstractRRset::toWire(OutputBuffer&)const.
-    virtual unsigned int toWire(OutputBuffer& buffer) const;
+    virtual unsigned int toWire(isc::util::io::OutputBuffer& buffer) const;
     //@}
 
     ///
diff --git a/src/lib/dns/rrttl.cc b/src/lib/dns/rrttl.cc
index 78bb355..b85a440 100644
--- a/src/lib/dns/rrttl.cc
+++ b/src/lib/dns/rrttl.cc
@@ -17,12 +17,13 @@
 #include <sstream>
 #include <ostream>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrttl.h>
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/rrttl.h b/src/lib/dns/rrttl.h
index 695306a..f37b040 100644
--- a/src/lib/dns/rrttl.h
+++ b/src/lib/dns/rrttl.h
@@ -20,11 +20,16 @@
 #include <exceptions/exceptions.h>
 
 namespace isc {
+namespace util {
+namespace io {
+class InputBuffer;
+class OutputBuffer;
+}
+}
+
 namespace dns {
 
 // forward declarations
-class InputBuffer;
-class OutputBuffer;
 class MessageRenderer;
 
 ///
@@ -91,7 +96,7 @@ public:
     /// an exception of class \c IncompleteRRTTL will be thrown.
     ///
     /// \param buffer A buffer storing the wire format data.
-    explicit RRTTL(InputBuffer& buffer);
+    explicit RRTTL(isc::util::io::InputBuffer& buffer);
     ///
     //@}
 
@@ -130,7 +135,7 @@ public:
     /// standard exception will be thrown.
     ///
     /// \param buffer An output buffer to store the wire data.
-    void toWire(OutputBuffer& buffer) const;
+    void toWire(isc::util::io::OutputBuffer& buffer) const;
     //@}
 
     ///
diff --git a/src/lib/dns/rrtype.cc b/src/lib/dns/rrtype.cc
index 44377f5..c54fce5 100644
--- a/src/lib/dns/rrtype.cc
+++ b/src/lib/dns/rrtype.cc
@@ -19,14 +19,14 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrparamregistry.h>
 #include <dns/rrtype.h>
 
 using namespace std;
+using namespace isc::util::io;
 using isc::dns::RRType;
-using isc::dns::OutputBuffer;
 
 namespace isc {
 namespace dns {
diff --git a/src/lib/dns/tests/Makefile.am b/src/lib/dns/tests/Makefile.am
index 246adb7..8882e18 100644
--- a/src/lib/dns/tests/Makefile.am
+++ b/src/lib/dns/tests/Makefile.am
@@ -3,6 +3,7 @@ SUBDIRS = testdata .
 AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES)
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/dns -I$(top_builddir)/src/lib/dns
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += -DTEST_DATA_SRCDIR=\"$(srcdir)/testdata\"
 AM_CPPFLAGS += -DTEST_DATA_BUILDDIR=\"$(abs_top_builddir)/src/lib/dns/tests/testdata\"
 AM_CXXFLAGS = $(B10_CXXFLAGS)
@@ -17,12 +18,10 @@ TESTS =
 if HAVE_GTEST
 TESTS += run_unittests
 run_unittests_SOURCES = unittest_util.h unittest_util.cc
-run_unittests_SOURCES += buffer_unittest.cc name_unittest.cc
 run_unittests_SOURCES += edns_unittest.cc
 run_unittests_SOURCES += messagerenderer_unittest.cc
 run_unittests_SOURCES += rrclass_unittest.cc rrtype_unittest.cc
 run_unittests_SOURCES += rrttl_unittest.cc
-run_unittests_SOURCES += dnssectime_unittest.cc
 run_unittests_SOURCES += opcode_unittest.cc
 run_unittests_SOURCES += rcode_unittest.cc
 run_unittests_SOURCES += rdata_unittest.h rdata_unittest.cc
@@ -45,10 +44,6 @@ run_unittests_SOURCES += question_unittest.cc
 run_unittests_SOURCES += rrparamregistry_unittest.cc
 run_unittests_SOURCES += masterload_unittest.cc
 run_unittests_SOURCES += message_unittest.cc
-run_unittests_SOURCES += base32hex_unittest.cc
-run_unittests_SOURCES += base64_unittest.cc
-run_unittests_SOURCES += hex_unittest.cc
-run_unittests_SOURCES += sha1_unittest.cc
 run_unittests_SOURCES += tsigkey_unittest.cc
 run_unittests_SOURCES += run_unittests.cc
 run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
@@ -56,6 +51,7 @@ run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
 run_unittests_LDADD = $(GTEST_LDADD)
 run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la
 run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
+run_unittests_LDADD += $(top_builddir)/src/lib/util/libutil.la
 endif
 
 noinst_PROGRAMS = $(TESTS)
diff --git a/src/lib/dns/tests/base32hex_unittest.cc b/src/lib/dns/tests/base32hex_unittest.cc
deleted file mode 100644
index 253d310..0000000
--- a/src/lib/dns/tests/base32hex_unittest.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <stdint.h>
-
-#include <cctype>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <exceptions/exceptions.h>
-
-#include <dns/util/base32hex.h>
-
-#include <gtest/gtest.h>
-
-using namespace std;
-using namespace isc;
-using namespace isc::dns;
-
-namespace {
-
-typedef pair<string, string> StringPair;
-
-class Base32HexTest : public ::testing::Test {
-protected:
-    Base32HexTest() : encoding_chars("0123456789ABCDEFGHIJKLMNOPQRSTUV=") {
-        // test vectors from RFC4648
-        test_sequence.push_back(StringPair("", ""));
-        test_sequence.push_back(StringPair("f", "CO======"));
-        test_sequence.push_back(StringPair("fo", "CPNG===="));
-        test_sequence.push_back(StringPair("foo", "CPNMU==="));
-        test_sequence.push_back(StringPair("foob", "CPNMUOG="));
-        test_sequence.push_back(StringPair("fooba", "CPNMUOJ1"));
-        test_sequence.push_back(StringPair("foobar", "CPNMUOJ1E8======"));
-
-        // the same data, encoded using lower case chars (testable only
-        // for the decode side)
-        test_sequence_lower.push_back(StringPair("f", "co======"));
-        test_sequence_lower.push_back(StringPair("fo", "cpng===="));
-        test_sequence_lower.push_back(StringPair("foo", "cpnmu==="));
-        test_sequence_lower.push_back(StringPair("foob", "cpnmuog="));
-        test_sequence_lower.push_back(StringPair("fooba", "cpnmuoj1"));
-        test_sequence_lower.push_back(StringPair("foobar",
-                                                 "cpnmuoj1e8======"));
-    }
-    vector<StringPair> test_sequence;
-    vector<StringPair> test_sequence_lower;
-    vector<uint8_t> decoded_data;
-    const string encoding_chars;
-};
-
-void
-decodeCheck(const string& input_string, vector<uint8_t>& output,
-            const string& expected)
-{
-    decodeBase32Hex(input_string, output);
-    EXPECT_EQ(expected, string(&output[0], &output[0] + output.size()));
-}
-
-TEST_F(Base32HexTest, decode) {
-    for (vector<StringPair>::const_iterator it = test_sequence.begin();
-         it != test_sequence.end();
-         ++it) {
-        decodeCheck((*it).second, decoded_data, (*it).first);
-    }
-
-    // whitespace should be allowed
-    decodeCheck("CP NM\tUOG=", decoded_data, "foob");
-    decodeCheck("CPNMU===\n", decoded_data, "foo");
-
-    // invalid number of padding characters
-    EXPECT_THROW(decodeBase32Hex("CPNMU0==", decoded_data), BadValue);
-    EXPECT_THROW(decodeBase32Hex("CO0=====", decoded_data), BadValue);
-    EXPECT_THROW(decodeBase32Hex("CO=======", decoded_data), // too many ='s
-                 BadValue);
-
-    // intermediate padding isn't allowed
-    EXPECT_THROW(decodeBase32Hex("CPNMUOG=CPNMUOG=", decoded_data), BadValue);
-
-    // Non canonical form isn't allowed.
-    // P => 25(11001), so the padding byte would be 01000000
-    EXPECT_THROW(decodeBase32Hex("0P======", decoded_data), BadValue);
-}
-
-TEST_F(Base32HexTest, decodeLower) {
-    for (vector<StringPair>::const_iterator it = test_sequence_lower.begin();
-         it != test_sequence_lower.end();
-         ++it) {
-        decodeCheck((*it).second, decoded_data, (*it).first);
-    }
-}
-
-TEST_F(Base32HexTest, encode) {
-    for (vector<StringPair>::const_iterator it = test_sequence.begin();
-         it != test_sequence.end();
-         ++it) {
-        decoded_data.assign((*it).first.begin(), (*it).first.end());
-        EXPECT_EQ((*it).second, encodeBase32Hex(decoded_data));
-    }
-}
-
-// For Base32Hex we use handmade mappings, so it's prudent to test the
-// entire mapping table explicitly.
-TEST_F(Base32HexTest, decodeMap) {
-    string input(8, '0');       // input placeholder
-
-    // We're going to populate an input string with only the last character
-    // not equal to the zero character ('0') for each valid base32hex encoding
-    // character.  Decoding that input should result in a data stream with
-    // the last byte equal to the numeric value represented by the that
-    // character.  For example, we'll generate and confirm the following:
-    // "00000000" => should be 0 (as a 40bit integer)
-    // "00000001" => should be 1 (as a 40bit integer)
-    // ...
-    // "0000000V" => should be 31 (as a 40bit integer)
-    // We also check the use of an invalid character for the last character
-    // surely fails. '=' should be accepted as a valid padding in this
-    // context; space characters shouldn't be allowed in this context.
-
-    for (int i = 0; i < 256; ++i) {
-        input[7] = i;
-
-        const char ch = toupper(i);
-        const size_t pos = encoding_chars.find(ch);
-        if (pos == string::npos) {
-            EXPECT_THROW(decodeBase32Hex(input, decoded_data), BadValue);
-        } else {
-            decodeBase32Hex(input, decoded_data);
-            if (ch == '=') {
-                EXPECT_EQ(4, decoded_data.size());
-            } else {
-                EXPECT_EQ(5, decoded_data.size());
-                EXPECT_EQ(pos, decoded_data[4]);
-            }
-        }
-    }
-}
-
-TEST_F(Base32HexTest, encodeMap) {
-    for (int i = 0; i < 32; ++i) {
-        decoded_data.assign(4, 0);
-        decoded_data.push_back(i);
-        EXPECT_EQ(encoding_chars[i], encodeBase32Hex(decoded_data)[7]);
-    }
-}
-
-}
diff --git a/src/lib/dns/tests/base64_unittest.cc b/src/lib/dns/tests/base64_unittest.cc
deleted file mode 100644
index 7333793..0000000
--- a/src/lib/dns/tests/base64_unittest.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <exceptions/exceptions.h>
-
-#include <dns/util/base64.h>
-
-#include <gtest/gtest.h>
-
-using namespace std;
-using namespace isc;
-using namespace isc::dns;
-
-namespace {
-
-typedef pair<string, string> StringPair;
-
-class Base64Test : public ::testing::Test {
-protected:
-    Base64Test()
-    {
-        // test vectors from RFC4648
-        test_sequence.push_back(StringPair("", ""));
-        test_sequence.push_back(StringPair("f", "Zg=="));
-        test_sequence.push_back(StringPair("fo", "Zm8="));
-        test_sequence.push_back(StringPair("foo", "Zm9v"));
-        test_sequence.push_back(StringPair("foob", "Zm9vYg=="));
-        test_sequence.push_back(StringPair("fooba", "Zm9vYmE="));
-        test_sequence.push_back(StringPair("foobar", "Zm9vYmFy"));
-    }
-    vector<StringPair> test_sequence;
-    vector<uint8_t> decoded_data;
-};
-
-void
-decodeCheck(const string& input_string, vector<uint8_t>& output,
-            const string& expected)
-{
-    decodeBase64(input_string, output);
-    EXPECT_EQ(expected, string(&output[0], &output[0] + output.size()));
-}
-
-TEST_F(Base64Test, decode) {
-    for (vector<StringPair>::const_iterator it = test_sequence.begin();
-         it != test_sequence.end();
-         ++it) {
-        decodeCheck((*it).second, decoded_data, (*it).first);
-    }
-
-    // whitespace should be allowed
-    decodeCheck("Zm 9v\tYmF\ny", decoded_data, "foobar");
-    decodeCheck("Zm9vYg==", decoded_data, "foob");
-    decodeCheck("Zm9vYmE=\n", decoded_data, "fooba");
-
-    // only up to 2 padding characters are allowed
-    EXPECT_THROW(decodeBase64("A===", decoded_data), BadValue);
-    EXPECT_THROW(decodeBase64("A= ==", decoded_data), BadValue);
-
-    // intermediate padding isn't allowed
-    EXPECT_THROW(decodeBase64("YmE=YmE=", decoded_data), BadValue);
-
-    // Non canonical form isn't allowed.
-    // Z => 25(011001), m => 38(100110), 9 => 60(111101), so the padding
-    // byte would be 0100 0000.
-    EXPECT_THROW(decodeBase64("Zm9=", decoded_data), BadValue);
-    // Same for the 1st padding byte.  This would make it 01100000.
-    EXPECT_THROW(decodeBase64("Zm==", decoded_data), BadValue);
-}
-
-TEST_F(Base64Test, encode) {
-    for (vector<StringPair>::const_iterator it = test_sequence.begin();
-         it != test_sequence.end();
-         ++it) {
-        decoded_data.assign((*it).first.begin(), (*it).first.end());
-        EXPECT_EQ((*it).second, encodeBase64(decoded_data));
-    }
-}
-}
diff --git a/src/lib/dns/tests/buffer_unittest.cc b/src/lib/dns/tests/buffer_unittest.cc
deleted file mode 100644
index 2fe5a10..0000000
--- a/src/lib/dns/tests/buffer_unittest.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <exceptions/exceptions.h>
-
-#include <dns/buffer.h>
-
-#include <gtest/gtest.h>
-
-using namespace isc;
-
-namespace {
-
-using isc::dns::InputBuffer;
-using isc::dns::OutputBuffer;
-
-class BufferTest : public ::testing::Test {
-protected:
-    BufferTest() : ibuffer(testdata, sizeof(testdata)), obuffer(0),
-                   expected_size(0)
-    {
-        data16 = (2 << 8) | 3;
-        data32 = (4 << 24) | (5 << 16) | (6 << 8) | 7;
-        memset(vdata, 0, sizeof(testdata));
-    }
-
-    InputBuffer ibuffer;
-    OutputBuffer obuffer;
-    static const uint8_t testdata[5];
-    uint8_t vdata[sizeof(testdata)];
-    size_t expected_size;
-    uint16_t data16;
-    uint32_t data32;
-};
-
-const uint8_t BufferTest::testdata[5] = {1, 2, 3, 4, 5};
-
-TEST_F(BufferTest, inputBufferRead) {
-    EXPECT_EQ(5, ibuffer.getLength());
-    EXPECT_EQ(1, ibuffer.readUint8());
-    EXPECT_EQ(1, ibuffer.getPosition());
-    data16 = ibuffer.readUint16();
-    EXPECT_EQ((2 << 8) | 3, data16);
-    EXPECT_EQ(3, ibuffer.getPosition());
-    ibuffer.setPosition(1);
-    EXPECT_EQ(1, ibuffer.getPosition());
-    data32 = ibuffer.readUint32();
-    EXPECT_EQ((2 << 24) | (3 << 16) | (4 << 8) | 5, data32);
-    ibuffer.setPosition(0);
-    memset(vdata, 0, sizeof(vdata));
-    ibuffer.readData(vdata, sizeof(vdata));
-    EXPECT_EQ(0, memcmp(vdata, testdata, sizeof(testdata)));
-}
-
-TEST_F(BufferTest, inputBufferException) {
-    EXPECT_THROW(ibuffer.setPosition(6), isc::dns::InvalidBufferPosition);
-
-    ibuffer.setPosition(sizeof(testdata));
-    EXPECT_THROW(ibuffer.readUint8(), isc::dns::InvalidBufferPosition);
-
-    ibuffer.setPosition(sizeof(testdata) - 1);
-    EXPECT_THROW(ibuffer.readUint16(), isc::dns::InvalidBufferPosition);
-
-    ibuffer.setPosition(sizeof(testdata) - 3);
-    EXPECT_THROW(ibuffer.readUint32(), isc::dns::InvalidBufferPosition);
-
-    ibuffer.setPosition(sizeof(testdata) - 4);
-    EXPECT_THROW(ibuffer.readData(vdata, sizeof(vdata)),
-                 isc::dns::InvalidBufferPosition);
-}
-
-TEST_F(BufferTest, outputBufferExtend) {
-    EXPECT_EQ(0, obuffer.getCapacity());
-    EXPECT_EQ(0, obuffer.getLength());
-    obuffer.writeUint8(10);
-    EXPECT_LT(0, obuffer.getCapacity());
-    EXPECT_EQ(1, obuffer.getLength());
-}
-
-TEST_F(BufferTest, outputBufferWrite) {
-    const uint8_t* cp;
-
-    obuffer.writeUint8(1);
-    expected_size += sizeof(uint8_t);
-    EXPECT_EQ(expected_size, obuffer.getLength());
-    cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(1, *cp);
-
-    obuffer.writeUint16(data16);
-    expected_size += sizeof(data16);
-    cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(expected_size, obuffer.getLength());
-    EXPECT_EQ(2, *(cp + 1));
-    EXPECT_EQ(3, *(cp + 2));
-
-    obuffer.writeUint32(data32);
-    expected_size += sizeof(data32);
-    cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(expected_size, obuffer.getLength());
-    EXPECT_EQ(4, *(cp + 3));
-    EXPECT_EQ(5, *(cp + 4));
-    EXPECT_EQ(6, *(cp + 5));
-    EXPECT_EQ(7, *(cp + 6));
-
-    obuffer.writeData(testdata, sizeof(testdata));
-    expected_size += sizeof(testdata);
-    EXPECT_EQ(expected_size, obuffer.getLength());
-    cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(0, memcmp(cp + 7, testdata, sizeof(testdata)));
-}
-
-TEST_F(BufferTest, outputBufferWriteat) {
-    obuffer.writeUint32(data32);
-    expected_size += sizeof(data32);
-
-    // overwrite 2nd byte
-    obuffer.writeUint8At(4, 1);
-    EXPECT_EQ(expected_size, obuffer.getLength()); // length shouldn't change
-    const uint8_t* cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(4, *(cp + 1));
-
-    // overwrite 2nd and 3rd bytes
-    obuffer.writeUint16At(data16, 1);
-    EXPECT_EQ(expected_size, obuffer.getLength()); // length shouldn't change
-    cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(2, *(cp + 1));
-    EXPECT_EQ(3, *(cp + 2));
-
-    // overwrite 3rd and 4th bytes
-    obuffer.writeUint16At(data16, 2);
-    EXPECT_EQ(expected_size, obuffer.getLength());
-    cp = static_cast<const uint8_t*>(obuffer.getData());
-    EXPECT_EQ(2, *(cp + 2));
-    EXPECT_EQ(3, *(cp + 3));
-
-    EXPECT_THROW(obuffer.writeUint8At(data16, 5),
-                 isc::dns::InvalidBufferPosition);
-    EXPECT_THROW(obuffer.writeUint8At(data16, 4),
-                 isc::dns::InvalidBufferPosition);
-    EXPECT_THROW(obuffer.writeUint16At(data16, 3),
-                 isc::dns::InvalidBufferPosition);
-    EXPECT_THROW(obuffer.writeUint16At(data16, 4),
-                 isc::dns::InvalidBufferPosition);
-    EXPECT_THROW(obuffer.writeUint16At(data16, 5),
-                 isc::dns::InvalidBufferPosition);
-}
-
-TEST_F(BufferTest, outputBufferSkip) {
-    obuffer.skip(4);
-    EXPECT_EQ(4, obuffer.getLength());
-
-    obuffer.skip(2);
-    EXPECT_EQ(6, obuffer.getLength());
-}
-
-TEST_F(BufferTest, outputBufferTrim) {
-    obuffer.writeData(testdata, sizeof(testdata));
-    EXPECT_EQ(5, obuffer.getLength());
-
-    obuffer.trim(1);
-    EXPECT_EQ(4, obuffer.getLength());
-
-    obuffer.trim(2);
-    EXPECT_EQ(2, obuffer.getLength());
-
-    EXPECT_THROW(obuffer.trim(3), OutOfRange);
-}
-
-TEST_F(BufferTest, outputBufferReadat) {
-    obuffer.writeData(testdata, sizeof(testdata));
-    for (int i = 0; i < sizeof(testdata); i ++) {
-        EXPECT_EQ(testdata[i], obuffer[i]);
-    }
-    EXPECT_THROW(obuffer[sizeof(testdata)], isc::dns::InvalidBufferPosition);
-}
-
-TEST_F(BufferTest, outputBufferClear) {
-    obuffer.writeData(testdata, sizeof(testdata));
-    obuffer.clear();
-    EXPECT_EQ(0, obuffer.getLength());
-}
-}
diff --git a/src/lib/dns/tests/dnssectime_unittest.cc b/src/lib/dns/tests/dnssectime_unittest.cc
deleted file mode 100644
index b2708cc..0000000
--- a/src/lib/dns/tests/dnssectime_unittest.cc
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <string>
-
-#include <time.h>
-
-#include <dns/dnssectime.h>
-
-#include <gtest/gtest.h>
-
-using namespace std;
-using namespace isc::dns;
-
-// See dnssectime.cc
-namespace isc {
-namespace dns {
-namespace dnssectime {
-namespace detail {
-extern int64_t (*gettimeFunction)();
-}
-}
-}
-}
-
-namespace {
-
-class DNSSECTimeTest : public ::testing::Test {
-protected:
-    ~DNSSECTimeTest() {
-        dnssectime::detail::gettimeFunction = NULL;
-    }
-};
-
-TEST_F(DNSSECTimeTest, fromText) {
-    // In most cases (in practice) the 32-bit and 64-bit versions should
-    // behave identically, so we'll mainly test the 32-bit version, which
-    // will be more commonly used in actual code (because many of the wire
-    // format time field are 32-bit).  The subtle cases where these two
-    // return different values will be tested at the end of this test case.
-
-    // These are bogus and should be rejected
-    EXPECT_THROW(timeFromText32("2011 101120000"), InvalidTime);
-    EXPECT_THROW(timeFromText32("201101011200-0"), InvalidTime);
-
-    // Short length (or "decimal integer" version of representation;
-    // it's valid per RFC4034, but is not supported in this implementation)
-    EXPECT_THROW(timeFromText32("20100223"), InvalidTime);
-
-    // Leap year checks
-    EXPECT_THROW(timeFromText32("20110229120000"), InvalidTime);
-    EXPECT_THROW(timeFromText32("21000229120000"), InvalidTime);
-    EXPECT_NO_THROW(timeFromText32("20000229120000"));
-    EXPECT_NO_THROW(timeFromText32("20120229120000"));
-
-    // unusual case: this implementation allows SS=60 for "leap seconds"
-    EXPECT_NO_THROW(timeFromText32("20110101120060"));
-
-    // Out of range parameters
-    EXPECT_THROW(timeFromText32("19100223214617"), InvalidTime); // YY<1970
-    EXPECT_THROW(timeFromText32("20110001120000"), InvalidTime); // MM=00
-    EXPECT_THROW(timeFromText32("20111301120000"), InvalidTime); // MM=13
-    EXPECT_THROW(timeFromText32("20110100120000"), InvalidTime); // DD=00
-    EXPECT_THROW(timeFromText32("20110132120000"), InvalidTime); // DD=32
-    EXPECT_THROW(timeFromText32("20110431120000"), InvalidTime); // 'Apr31'
-    EXPECT_THROW(timeFromText32("20110101250000"), InvalidTime); // HH=25
-    EXPECT_THROW(timeFromText32("20110101126000"), InvalidTime); // mm=60
-    EXPECT_THROW(timeFromText32("20110101120061"), InvalidTime); // SS=61
-
-    // Feb 7, 06:28:15 UTC 2106 is the possible maximum time that can be
-    // represented as an unsigned 32bit integer without overflow.
-    EXPECT_EQ(4294967295LU, timeFromText32("21060207062815"));
-
-    // After that, timeFromText32() should start returning the second count
-    // modulo 2^32.
-    EXPECT_EQ(0, timeFromText32("21060207062816"));
-    EXPECT_EQ(10, timeFromText32("21060207062826"));
-
-    // On the other hand, the 64-bit version should return monotonically
-    // increasing counters.
-    EXPECT_EQ(4294967296LL, timeFromText64("21060207062816"));
-    EXPECT_EQ(4294967306LL, timeFromText64("21060207062826"));
-}
-
-// This helper templated function tells timeToText32 a faked current time.
-// The template parameter is that faked time in the form of int64_t seconds
-// since epoch.
-template <int64_t NOW>
-int64_t
-testGetTime() {
-    return (NOW);
-}
-
-// Seconds since epoch for the year 10K eve.  Commonly used in some tests
-// below.
-const uint64_t YEAR10K_EVE = 253402300799LL;
-
-TEST_F(DNSSECTimeTest, toText) {
-    // Check a basic case with the default (normal) gettimeFunction
-    // based on the "real current time".
-    // Note: this will fail after year 2078, but at that point we won't use
-    // this program anyway:-)
-    EXPECT_EQ("20100311233000", timeToText32(1268350200));
-
-    // Set the current time to: Feb 18 09:04:14 UTC 2012 (an arbitrary choice
-    // in the range of the first half of uint32 since epoch).
-    dnssectime::detail::gettimeFunction = testGetTime<1329555854LL>;
-
-    // Test the "year 2038" problem.
-    // Check the result of toText() for "INT_MIN" in int32_t.  It's in the
-    // 68-year range from the faked current time, so the result should be
-    // in year 2038, instead of 1901.
-    EXPECT_EQ("20380119031408", timeToText64(0x80000000L));
-    EXPECT_EQ("20380119031408", timeToText32(0x80000000L));
-
-    // A controversial case: what should we do with "-1"?  It's out of range
-    // in future, but according to RFC time before epoch doesn't seem to be
-    // considered "in-range" either.  Our toText() implementation handles
-    // this range as a special case and always treats them as future time
-    // until year 2038.  This won't be a real issue in practice, though,
-    // since such too large values won't be used in actual deployment by then.
-    EXPECT_EQ("21060207062815", timeToText32(0xffffffffL));
-
-    // After the singular point of year 2038, the first half of uint32 can
-    // point to a future time.
-    // Set the current time to: Apr 1 00:00:00 UTC 2038:
-    dnssectime::detail::gettimeFunction = testGetTime<2153692800LL>;
-    // then time "10" is Feb 7 06:28:26 UTC 2106
-    EXPECT_EQ("21060207062826", timeToText32(10));
-    // in 64-bit, it's 2^32 + 10
-    EXPECT_EQ("21060207062826", timeToText64(0x10000000aLL));
-
-    // After year 2106, the upper half of uint32 can point to past time
-    // (as it should).
-    dnssectime::detail::gettimeFunction = testGetTime<0x10000000aLL>;
-    EXPECT_EQ("21060207062815", timeToText32(0xffffffffL));
-
-    // Try very large time value.  Actually it's the possible farthest time
-    // that can be represented in the form of YYYYMMDDHHmmSS.
-    EXPECT_EQ("99991231235959", timeToText64(YEAR10K_EVE));
-    dnssectime::detail::gettimeFunction = testGetTime<YEAR10K_EVE - 10>;
-    EXPECT_EQ("99991231235959", timeToText32(4294197631LU));
-}
-
-TEST_F(DNSSECTimeTest, overflow) {
-    // Jan 1, Year 10,000.
-    EXPECT_THROW(timeToText64(253402300800LL), InvalidTime);
-    dnssectime::detail::gettimeFunction = testGetTime<YEAR10K_EVE - 10>;
-    EXPECT_THROW(timeToText32(4294197632LU), InvalidTime);
-}
-
-}
diff --git a/src/lib/dns/tests/edns_unittest.cc b/src/lib/dns/tests/edns_unittest.cc
index fb9a7c2..292a4f9 100644
--- a/src/lib/dns/tests/edns_unittest.cc
+++ b/src/lib/dns/tests/edns_unittest.cc
@@ -16,7 +16,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/edns.h>
 #include <dns/exceptions.h>
 #include <dns/message.h>
@@ -35,6 +35,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 const uint8_t EDNS::SUPPORTED_VERSION;
diff --git a/src/lib/dns/tests/hex_unittest.cc b/src/lib/dns/tests/hex_unittest.cc
deleted file mode 100644
index 6f82b17..0000000
--- a/src/lib/dns/tests/hex_unittest.cc
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <stdint.h>
-
-#include <vector>
-#include <string>
-
-#include <exceptions/exceptions.h>
-
-#include <dns/util/hex.h>
-
-#include <gtest/gtest.h>
-
-using namespace std;
-using namespace isc;
-using namespace isc::dns;
-
-namespace {
-const string hex_txt("DEADBEEFDECADE");
-const string hex_txt_space("DEAD BEEF DECADE");
-const string hex_txt_lower("deadbeefdecade");
-
-class HexTest : public ::testing::Test {
-protected:
-    HexTest() : encoding_chars("0123456789ABCDEF") {}
-    vector<uint8_t> decoded_data;
-    const string encoding_chars;
-};
-
-TEST_F(HexTest, encodeHex) {
-    std::vector<uint8_t> data;
-
-    data.push_back(0xde);
-    data.push_back(0xad);
-    data.push_back(0xbe);
-    data.push_back(0xef);
-    data.push_back(0xde);
-    data.push_back(0xca);
-    data.push_back(0xde);
-    EXPECT_EQ(hex_txt, encodeHex(data));
-}
-
-void
-compareData(const std::vector<uint8_t>& data) {
-    EXPECT_EQ(0xde, data[0]);
-    EXPECT_EQ(0xad, data[1]);
-    EXPECT_EQ(0xbe, data[2]);
-    EXPECT_EQ(0xef, data[3]);
-    EXPECT_EQ(0xde, data[4]);
-    EXPECT_EQ(0xca, data[5]);
-    EXPECT_EQ(0xde, data[6]);
-}
-
-TEST_F(HexTest, decodeHex) {
-    std::vector<uint8_t> result;
-
-    decodeHex(hex_txt, result);
-    compareData(result);
-
-    // lower case hex digits should be accepted
-    result.clear();
-    decodeHex(hex_txt_lower, result);
-    compareData(result);
-
-    // white space should be ignored
-    result.clear();
-    decodeHex(hex_txt_space, result);
-    compareData(result);
-
-    // Bogus input: should fail
-    result.clear();
-    EXPECT_THROW(decodeHex("1x", result), BadValue);
-
-    // Bogus input: encoded string must have an even number of characters.
-    result.clear();
-    EXPECT_THROW(decodeHex("dea", result), BadValue);
-}
-
-// For Hex encode/decode we use handmade mappings, so it's prudent to test the
-// entire mapping table explicitly.
-TEST_F(HexTest, decodeMap) {
-    string input("00");       // input placeholder
-
-    // See Base32HexTest.decodeMap for details of the following tests.
-    for (int i = 0; i < 256; ++i) {
-        input[1] = i;
-
-        const char ch = toupper(i);
-        const size_t pos = encoding_chars.find(ch);
-        if (pos == string::npos) {
-            EXPECT_THROW(decodeHex(input, decoded_data), BadValue);
-        } else {
-            decodeHex(input, decoded_data);
-            EXPECT_EQ(1, decoded_data.size());
-            EXPECT_EQ(pos, decoded_data[0]);
-        }
-    }
-}
-
-TEST_F(HexTest, encodeMap) {
-    for (int i = 0; i < 16; ++i) {
-        decoded_data.clear();
-        decoded_data.push_back(i);
-        EXPECT_EQ(encoding_chars[i], encodeHex(decoded_data)[1]);
-    }
-}
-
-}
diff --git a/src/lib/dns/tests/message_unittest.cc b/src/lib/dns/tests/message_unittest.cc
index 92adbc9..d8ed6a8 100644
--- a/src/lib/dns/tests/message_unittest.cc
+++ b/src/lib/dns/tests/message_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/edns.h>
 #include <dns/exceptions.h>
 #include <dns/message.h>
@@ -35,6 +35,7 @@ using isc::UnitTestUtil;
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 //
diff --git a/src/lib/dns/tests/messagerenderer_unittest.cc b/src/lib/dns/tests/messagerenderer_unittest.cc
index c3d3edb..645e5f3 100644
--- a/src/lib/dns/tests/messagerenderer_unittest.cc
+++ b/src/lib/dns/tests/messagerenderer_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <vector>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
 
@@ -23,9 +23,9 @@
 #include <gtest/gtest.h>
 
 using isc::UnitTestUtil;
-using isc::dns::OutputBuffer;
 using isc::dns::Name;
 using isc::dns::MessageRenderer;
+using isc::util::io::OutputBuffer;
 
 namespace {
 class MessageRendererTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/name_unittest.cc b/src/lib/dns/tests/name_unittest.cc
index 5daba9c..6d4ae82 100644
--- a/src/lib/dns/tests/name_unittest.cc
+++ b/src/lib/dns/tests/name_unittest.cc
@@ -19,7 +19,7 @@
 #include <limits>
 #include <stdexcept>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/name.h>
 #include <dns/messagerenderer.h>
@@ -31,6 +31,7 @@
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 //
 // XXX: these are defined as class static constants, but some compilers
diff --git a/src/lib/dns/tests/question_unittest.cc b/src/lib/dns/tests/question_unittest.cc
index 59a4815..3e10e3f 100644
--- a/src/lib/dns/tests/question_unittest.cc
+++ b/src/lib/dns/tests/question_unittest.cc
@@ -17,7 +17,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
@@ -32,6 +32,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 class QuestionTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/rdata_cname_unittest.cc b/src/lib/dns/tests/rdata_cname_unittest.cc
index e3137a7..cc27d99 100644
--- a/src/lib/dns/tests/rdata_cname_unittest.cc
+++ b/src/lib/dns/tests/rdata_cname_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_dname_unittest.cc b/src/lib/dns/tests/rdata_dname_unittest.cc
index c2384b6..3c26c5a 100644
--- a/src/lib/dns/tests/rdata_dname_unittest.cc
+++ b/src/lib/dns/tests/rdata_dname_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_dnskey_unittest.cc b/src/lib/dns/tests/rdata_dnskey_unittest.cc
index e26bf57..5ddacbc 100644
--- a/src/lib/dns/tests/rdata_dnskey_unittest.cc
+++ b/src/lib/dns/tests/rdata_dnskey_unittest.cc
@@ -16,7 +16,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -32,6 +32,7 @@ using isc::UnitTestUtil;
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_ds_unittest.cc b/src/lib/dns/tests/rdata_ds_unittest.cc
index d7e3f88..57c688d 100644
--- a/src/lib/dns/tests/rdata_ds_unittest.cc
+++ b/src/lib/dns/tests/rdata_ds_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -29,6 +29,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_in_a_unittest.cc b/src/lib/dns/tests/rdata_in_a_unittest.cc
index 7302881..a54988f 100644
--- a/src/lib/dns/tests/rdata_in_a_unittest.cc
+++ b/src/lib/dns/tests/rdata_in_a_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_in_aaaa_unittest.cc b/src/lib/dns/tests/rdata_in_aaaa_unittest.cc
index c1953d6..2e46b4c 100644
--- a/src/lib/dns/tests/rdata_in_aaaa_unittest.cc
+++ b/src/lib/dns/tests/rdata_in_aaaa_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_mx_unittest.cc b/src/lib/dns/tests/rdata_mx_unittest.cc
index dd7677d..ef65ef9 100644
--- a/src/lib/dns/tests/rdata_mx_unittest.cc
+++ b/src/lib/dns/tests/rdata_mx_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -27,6 +27,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_ns_unittest.cc b/src/lib/dns/tests/rdata_ns_unittest.cc
index 6d4a69e..996d49d 100644
--- a/src/lib/dns/tests/rdata_ns_unittest.cc
+++ b/src/lib/dns/tests/rdata_ns_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_nsec3_unittest.cc b/src/lib/dns/tests/rdata_nsec3_unittest.cc
index 749e262..bc0697e 100644
--- a/src/lib/dns/tests/rdata_nsec3_unittest.cc
+++ b/src/lib/dns/tests/rdata_nsec3_unittest.cc
@@ -16,9 +16,9 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/compat/hex.h>
 #include <dns/exceptions.h>
-#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -34,6 +34,8 @@ using isc::UnitTestUtil;
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_nsec3param_unittest.cc b/src/lib/dns/tests/rdata_nsec3param_unittest.cc
index 53e9126..e8732cb 100644
--- a/src/lib/dns/tests/rdata_nsec3param_unittest.cc
+++ b/src/lib/dns/tests/rdata_nsec3param_unittest.cc
@@ -16,9 +16,9 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/util/base32hex.h>
-#include <dns/buffer.h>
-#include <dns/util/hex.h>
+#include <util/compat/base32hex.h>
+#include <util/compat/hex.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -34,6 +34,8 @@ using isc::UnitTestUtil;
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_nsec_unittest.cc b/src/lib/dns/tests/rdata_nsec_unittest.cc
index 8286dee..8e2ca12 100644
--- a/src/lib/dns/tests/rdata_nsec_unittest.cc
+++ b/src/lib/dns/tests/rdata_nsec_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <string>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -30,6 +30,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_opt_unittest.cc b/src/lib/dns/tests/rdata_opt_unittest.cc
index be92b91..e009ba2 100644
--- a/src/lib/dns/tests/rdata_opt_unittest.cc
+++ b/src/lib/dns/tests/rdata_opt_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -27,6 +27,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_ptr_unittest.cc b/src/lib/dns/tests/rdata_ptr_unittest.cc
index da13dcb..5e18fd4 100644
--- a/src/lib/dns/tests/rdata_ptr_unittest.cc
+++ b/src/lib/dns/tests/rdata_ptr_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 //
diff --git a/src/lib/dns/tests/rdata_rrsig_unittest.cc b/src/lib/dns/tests/rdata_rrsig_unittest.cc
index 04d9469..7aa6c05 100644
--- a/src/lib/dns/tests/rdata_rrsig_unittest.cc
+++ b/src/lib/dns/tests/rdata_rrsig_unittest.cc
@@ -14,8 +14,8 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
-#include <dns/dnssectime.h>
+#include <util/io/buffer.h>
+#include <util/compat/time_utilities.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -31,6 +31,8 @@ using isc::UnitTestUtil;
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
+using namespace isc::util::compat;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_soa_unittest.cc b/src/lib/dns/tests/rdata_soa_unittest.cc
index 6858a0b..4786d63 100644
--- a/src/lib/dns/tests/rdata_soa_unittest.cc
+++ b/src/lib/dns/tests/rdata_soa_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -27,6 +27,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_tsig_unittest.cc b/src/lib/dns/tests/rdata_tsig_unittest.cc
index 5c9a14f..5bf04ba 100644
--- a/src/lib/dns/tests/rdata_tsig_unittest.cc
+++ b/src/lib/dns/tests/rdata_tsig_unittest.cc
@@ -16,7 +16,7 @@
 
 #include <exceptions/exceptions.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -32,6 +32,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_txt_unittest.cc b/src/lib/dns/tests/rdata_txt_unittest.cc
index 54993e1..e71ee54 100644
--- a/src/lib/dns/tests/rdata_txt_unittest.cc
+++ b/src/lib/dns/tests/rdata_txt_unittest.cc
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -28,6 +28,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rdata_unittest.cc b/src/lib/dns/tests/rdata_unittest.cc
index 5ce4c03..2506af9 100644
--- a/src/lib/dns/tests/rdata_unittest.cc
+++ b/src/lib/dns/tests/rdata_unittest.cc
@@ -16,7 +16,7 @@
 #include <string>
 #include <sstream>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -31,6 +31,7 @@
 using isc::UnitTestUtil;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace isc {
diff --git a/src/lib/dns/tests/rdata_unittest.h b/src/lib/dns/tests/rdata_unittest.h
index 748c8d3..8b4813b 100644
--- a/src/lib/dns/tests/rdata_unittest.h
+++ b/src/lib/dns/tests/rdata_unittest.h
@@ -15,7 +15,7 @@
 #ifndef __RDATA_UNITTEST_H
 #define __RDATA_UNITTEST_H 1
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrclass.h>
 #include <dns/rrtype.h>
@@ -23,6 +23,8 @@
 
 #include <gtest/gtest.h>
 
+using namespace isc::util::io;
+
 namespace isc {
 namespace dns {
 namespace rdata {
diff --git a/src/lib/dns/tests/rrclass_unittest.cc b/src/lib/dns/tests/rrclass_unittest.cc
index 4eeb1e0..fcfcb95 100644
--- a/src/lib/dns/tests/rrclass_unittest.cc
+++ b/src/lib/dns/tests/rrclass_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <gtest/gtest.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrclass.h>
 
@@ -23,6 +23,7 @@
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 class RRClassTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/rrparamregistry_unittest.cc b/src/lib/dns/tests/rrparamregistry_unittest.cc
index a75eed5..15efff1 100644
--- a/src/lib/dns/tests/rrparamregistry_unittest.cc
+++ b/src/lib/dns/tests/rrparamregistry_unittest.cc
@@ -27,6 +27,7 @@
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rrset_unittest.cc b/src/lib/dns/tests/rrset_unittest.cc
index c704cc8..42a98a6 100644
--- a/src/lib/dns/tests/rrset_unittest.cc
+++ b/src/lib/dns/tests/rrset_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <stdexcept>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rdata.h>
@@ -32,6 +32,7 @@ using isc::UnitTestUtil;
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util::io;
 using namespace isc::dns::rdata;
 
 namespace {
diff --git a/src/lib/dns/tests/rrttl_unittest.cc b/src/lib/dns/tests/rrttl_unittest.cc
index b8f5ac2..7eb6ee4 100644
--- a/src/lib/dns/tests/rrttl_unittest.cc
+++ b/src/lib/dns/tests/rrttl_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <gtest/gtest.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrttl.h>
 
@@ -23,6 +23,7 @@
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 class RRTTLTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/rrtype_unittest.cc b/src/lib/dns/tests/rrtype_unittest.cc
index 6da7381..c3a1bfc 100644
--- a/src/lib/dns/tests/rrtype_unittest.cc
+++ b/src/lib/dns/tests/rrtype_unittest.cc
@@ -14,7 +14,7 @@
 
 #include <gtest/gtest.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rrtype.h>
 
@@ -23,6 +23,7 @@
 using namespace std;
 using namespace isc;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 class RRTypeTest : public ::testing::Test {
diff --git a/src/lib/dns/tests/sha1_unittest.cc b/src/lib/dns/tests/sha1_unittest.cc
deleted file mode 100644
index 79bc37d..0000000
--- a/src/lib/dns/tests/sha1_unittest.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <stdint.h>
-#include <string>
-
-#include <dns/util/sha1.h>
-
-#include <gtest/gtest.h>
-
-#include <dns/tests/unittest_util.h>
-
-using isc::UnitTestUtil;
-using namespace std;
-using namespace isc::dns;
-
-namespace {
-class Sha1Test : public ::testing::Test {
-protected:
-    Sha1Test() {}
-};
-
-// Tests copied from RFC 3174
-TEST_F(Sha1Test, Test1) {
-    SHA1Context sha;
-    uint8_t digest[SHA1_HASHSIZE];
-    uint8_t expected[SHA1_HASHSIZE] = {
-        0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e,
-        0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, 0x9c, 0xd0, 0xd8, 0x9d
-    };
-
-    EXPECT_EQ(0, SHA1Reset(&sha));
-    EXPECT_EQ(0, SHA1Input(&sha, (const uint8_t *) "abc", 3));
-    EXPECT_EQ(0, SHA1Result(&sha, digest));
-    for (int i = 0; i < SHA1_HASHSIZE; i++) {
-        EXPECT_EQ(digest[i], expected[i]);
-    }
-}
-
-TEST_F(Sha1Test, Test2) {
-    SHA1Context sha;
-    string test("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
-    uint8_t digest[SHA1_HASHSIZE];
-    uint8_t expected[SHA1_HASHSIZE] = {
-        0x84, 0x98, 0x3e, 0x44, 0x1c, 0x3b, 0xd2, 0x6e, 0xba, 0xae,
-        0x4a, 0xa1, 0xf9, 0x51, 0x29, 0xe5, 0xe5, 0x46, 0x70, 0xf1
-    };
-
-    EXPECT_EQ(0, SHA1Reset(&sha));
-    EXPECT_EQ(0, SHA1Input(&sha, (const uint8_t *) test.c_str(),
-                           test.length()));
-    EXPECT_EQ(0, SHA1Result(&sha, digest));
-    for (int i = 0; i < SHA1_HASHSIZE; i++) {
-        EXPECT_EQ(digest[i], expected[i]);
-    }
-}
-
-TEST_F(Sha1Test, Test3) {
-    SHA1Context sha;
-    uint8_t digest[SHA1_HASHSIZE];
-    uint8_t expected[SHA1_HASHSIZE] = {
-        0x34, 0xaa, 0x97, 0x3c, 0xd4, 0xc4, 0xda, 0xa4, 0xf6, 0x1e,
-        0xeb, 0x2b, 0xdb, 0xad, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6f
-    };
-
-    EXPECT_EQ(0, SHA1Reset(&sha));
-    for (int i = 0; i < 1000000; i++) {
-        EXPECT_EQ(0, SHA1Input(&sha, (const uint8_t *) "a", 1));
-    }
-    EXPECT_EQ(0, SHA1Result(&sha, digest));
-    for (int i = 0; i < SHA1_HASHSIZE; i++) {
-        EXPECT_EQ(digest[i], expected[i]);
-    }
-}
-
-TEST_F(Sha1Test, Test4) {
-    SHA1Context sha;
-    string test("01234567012345670123456701234567"
-                "01234567012345670123456701234567");
-    uint8_t digest[SHA1_HASHSIZE];
-    uint8_t expected[SHA1_HASHSIZE] = {
-        0xde, 0xa3, 0x56, 0xa2, 0xcd, 0xdd, 0x90, 0xc7, 0xa7, 0xec,
-        0xed, 0xc5, 0xeb, 0xb5, 0x63, 0x93, 0x4f, 0x46, 0x04, 0x52
-    };
-
-    EXPECT_EQ(0, SHA1Reset(&sha));
-    for (int i = 0; i < 10; i++) {
-        EXPECT_EQ(0, SHA1Input(&sha, (const uint8_t *) test.c_str(),
-                               test.length()));
-    }
-    EXPECT_EQ(0, SHA1Result(&sha, digest));
-    for (int i = 0; i < SHA1_HASHSIZE; i++) {
-        EXPECT_EQ(digest[i], expected[i]);
-    }
-}
-}
-
diff --git a/src/lib/dns/util/README b/src/lib/dns/util/README
deleted file mode 100644
index 1b9d1e8..0000000
--- a/src/lib/dns/util/README
+++ /dev/null
@@ -1,31 +0,0 @@
-This "util" directory is provided for utility header files and
-implementations that are internally used in the DNS library
-(libdns++).
-
-The functionality provided in these tools is generally available in
-other external or perhaps system supplied libraries.  The basic
-development policy of BIND 10 is to avoid "reinventing wheels" unless
-they belong to the exact technology area that BIND 10 targets (e.g.,
-DNS).  However, libdns++ is a very core part of BIND 10, and is also
-intended to be used as a public library, so dependency from libdns++
-to external libraries should be minimized.  The utilities in this
-directory are provided balancing two policies and as a kind of
-compromise.
-
-The header files in this directory are therefore not intended to be
-installed.  Likewise, classes and public functions defined in this
-directory are not intended to be used outside libdns++, although we
-cannot prohibit it at the language level.
-
-They are not even expected to be used in other modules of BIND 10 than
-libdns++ based on the basic policy explained above.  Other modules
-should only rely on the DNS specific interface that may internally
-rely on these utility interfaces, or should use external libraries if
-the other module really needs to use the utility feature directly.
-There seem to be some violations as of this writing, but we should
-eventually fix it.  A notable example is the SHA1 interfaces.  They
-are defined here in the context of NSEC3 processing, but, in fact,
-they are not even used from any of the other libdns++ classes or
-functions.  The SHA1 related interfaces should be moved to the
-application that needs it or the application should only access it
-through DNS specific interfaces defined in libdns++.
diff --git a/src/lib/dns/util/base16_from_binary.h b/src/lib/dns/util/base16_from_binary.h
deleted file mode 100644
index 8606c61..0000000
--- a/src/lib/dns/util/base16_from_binary.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef BOOST_ARCHIVE_ITERATORS_BASE16_FROM_BINARY_HPP
-#define BOOST_ARCHIVE_ITERATORS_BASE16_FROM_BINARY_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// base16_from_binary.h (derived from boost base64_from_binary.hpp)
-
-// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-//  See http://www.boost.org for updates, documentation, and revision history.
-
-#include <cassert>
-
-#include <cstddef> // size_t
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
-#if defined(BOOST_NO_STDC_NAMESPACE)
-namespace std{ 
-    using ::size_t; 
-} // namespace std
-#endif
-
-// See base32hex_from_binary.h for why we need base64_from...hpp here.
-#include <boost/archive/iterators/base64_from_binary.hpp>
-
-namespace boost { 
-namespace archive {
-namespace iterators {
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// convert binary integers to base16 characters
-
-namespace detail {
-
-template<class CharType>
-struct from_4_bit {
-    typedef CharType result_type;
-    CharType operator()(CharType t) const{
-        const char * lookup_table = 
-            "0123456789"
-            "ABCDEF";
-        assert(t < 16);
-        return (lookup_table[static_cast<size_t>(t)]);
-    }
-};
-
-} // namespace detail
-
-// note: what we would like to do is
-// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
-//  typedef transform_iterator<
-//      from_4_bit<CharType>,
-//      transform_width<Base, 4, sizeof(Base::value_type) * 8, CharType>
-//  > base16_from_binary;
-// but C++ won't accept this.  Rather than using a "type generator" and
-// using a different syntax, make a derivation which should be equivalent.
-//
-// Another issue addressed here is that the transform_iterator doesn't have
-// a templated constructor.  This makes it incompatible with the dataflow
-// ideal.  This is also addressed here.
-
-//template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
-template<
-    class Base, 
-    class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
->
-class base16_from_binary : 
-    public transform_iterator<
-        detail::from_4_bit<CharType>,
-        Base
-    >
-{
-    friend class boost::iterator_core_access;
-    typedef transform_iterator<
-        BOOST_DEDUCED_TYPENAME detail::from_4_bit<CharType>,
-        Base
-    > super_t;
-
-public:
-    // make composible buy using templated constructor
-    template<class T>
-    base16_from_binary(BOOST_PFTO_WRAPPER(T) start) :
-        super_t(
-            Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))),
-            detail::from_4_bit<CharType>()
-        )
-    {}
-    // intel 7.1 doesn't like default copy constructor
-    base16_from_binary(const base16_from_binary & rhs) : 
-        super_t(
-            Base(rhs.base_reference()),
-            detail::from_4_bit<CharType>()
-        )
-    {}
-//    base16_from_binary(){};
-};
-
-} // namespace iterators
-} // namespace archive
-} // namespace boost
-
-#endif // BOOST_ARCHIVE_ITERATORS_BASE16_FROM_BINARY_HPP
diff --git a/src/lib/dns/util/base32hex.h b/src/lib/dns/util/base32hex.h
deleted file mode 100644
index cba172e..0000000
--- a/src/lib/dns/util/base32hex.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __BASE32HEX_H
-#define __BASE32HEX_H 1
-
-#include <stdint.h>
-#include <string>
-#include <vector>
-
-//
-// Note: this helper module isn't specific to the DNS protocol per se.
-// We should probably move this to somewhere else, possibly in some common
-// utility area.
-//
-
-namespace isc {
-namespace dns {
-
-/// \brief Encode binary data in the base32hex format.
-///
-/// The underlying implementation is shared with \c encodeBase64, and all
-/// description except the format (base32hex) equally applies.
-///
-/// Note: the encoding format is base32hex, not base32.
-///
-/// \param binary A vector object storing the data to be encoded. 
-/// \return A newly created string that stores base32hex encoded value for
-/// binary.
-std::string encodeBase32Hex(const std::vector<uint8_t>& binary);
-
-/// \brief Decode a text encoded in the base32hex format into the
-/// original %data.
-///
-/// The underlying implementation is shared with \c decodeBase64, and all
-/// description except the format (base32hex) equally applies.
-///
-/// Note: the encoding format is base32hex, not base32.
-///
-/// \param input A text encoded in the base32hex format.
-/// \param result A vector in which the decoded %data is to be stored.
-void decodeBase32Hex(const std::string& input, std::vector<uint8_t>& result);
-}
-}
-
-#endif  // __BASE32HEX_H
-
-// Local Variables:
-// mode: c++
-// End:
diff --git a/src/lib/dns/util/base32hex_from_binary.h b/src/lib/dns/util/base32hex_from_binary.h
deleted file mode 100644
index 5d16d04..0000000
--- a/src/lib/dns/util/base32hex_from_binary.h
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef BOOST_ARCHIVE_ITERATORS_BASE32HEX_FROM_BINARY_HPP
-#define BOOST_ARCHIVE_ITERATORS_BASE32HEX_FROM_BINARY_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// base32hex_from_binary.h (derived from boost base64_from_binary.hpp)
-
-// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-//  See http://www.boost.org for updates, documentation, and revision history.
-
-#include <cassert>
-
-#include <cstddef> // size_t
-#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
-#if defined(BOOST_NO_STDC_NAMESPACE)
-namespace std{ 
-    using ::size_t; 
-} // namespace std
-#endif
-
-// We use the same boost header files used in "base64_from_".  Since the
-// precise path to these headers may vary depending on the boost version we
-// simply include the base64 header here.
-#include <boost/archive/iterators/base64_from_binary.hpp>
-
-namespace boost { 
-namespace archive {
-namespace iterators {
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// convert binary integers to base32hex characters
-
-namespace detail {
-
-template<class CharType>
-struct from_5_bit {
-    typedef CharType result_type;
-    CharType operator()(CharType t) const{
-        const char * lookup_table = 
-            "0123456789"
-            "ABCDEFGHIJKLMNOPQRSTUV";
-        assert(t < 32);
-        return (lookup_table[static_cast<size_t>(t)]);
-    }
-};
-
-} // namespace detail
-
-// note: what we would like to do is
-// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
-//  typedef transform_iterator<
-//      from_5_bit<CharType>,
-//      transform_width<Base, 5, sizeof(Base::value_type) * 8, CharType>
-//  > base32hex_from_binary;
-// but C++ won't accept this.  Rather than using a "type generator" and
-// using a different syntax, make a derivation which should be equivalent.
-//
-// Another issue addressed here is that the transform_iterator doesn't have
-// a templated constructor.  This makes it incompatible with the dataflow
-// ideal.  This is also addressed here.
-
-//template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
-template<
-    class Base, 
-    class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
->
-class base32hex_from_binary : 
-    public transform_iterator<
-        detail::from_5_bit<CharType>,
-        Base
-    >
-{
-    friend class boost::iterator_core_access;
-    typedef transform_iterator<
-        BOOST_DEDUCED_TYPENAME detail::from_5_bit<CharType>,
-        Base
-    > super_t;
-
-public:
-    // make composible buy using templated constructor
-    template<class T>
-    base32hex_from_binary(BOOST_PFTO_WRAPPER(T) start) :
-        super_t(
-            Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))),
-            detail::from_5_bit<CharType>()
-        )
-    {}
-    // intel 7.1 doesn't like default copy constructor
-    base32hex_from_binary(const base32hex_from_binary & rhs) : 
-        super_t(
-            Base(rhs.base_reference()),
-            detail::from_5_bit<CharType>()
-        )
-    {}
-//    base32hex_from_binary(){};
-};
-
-} // namespace iterators
-} // namespace archive
-} // namespace boost
-
-#endif // BOOST_ARCHIVE_ITERATORS_BASE32HEX_FROM_BINARY_HPP
diff --git a/src/lib/dns/util/base64.h b/src/lib/dns/util/base64.h
deleted file mode 100644
index 46e10a6..0000000
--- a/src/lib/dns/util/base64.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __BASE64_H
-#define __BASE64_H 1
-
-#include <stdint.h>
-#include <string>
-#include <vector>
-
-//
-// Note: this helper module isn't specific to the DNS protocol per se.
-// We should probably move this to somewhere else, possibly in some common
-// utility area.
-//
-
-namespace isc {
-namespace dns {
-
-/// \brief Encode binary data in the base64 format.
-///
-/// This function returns a new \c std::string object that stores a text
-/// encoded in the base64 format for the given \c binary %data.
-/// The resulting string will be a valid, canonical form of base64
-/// representation as specified in RFC4648.
-///
-/// If memory allocation for the returned string fails, a corresponding
-/// standard exception will be thrown.  This function never throws exceptions
-/// otherwise.
-///
-/// \param binary A vector object storing the data to be encoded. 
-/// \return A newly created string that stores base64 encoded value for binary.
-std::string encodeBase64(const std::vector<uint8_t>& binary);
-
-/// \brief Decode a text encoded in the base64 format into the original %data.
-///
-/// The \c input argument must be a valid string represented in the base64
-/// format as specified in RFC4648.  Space characters (spaces, tabs, newlines)
-/// can be included in \c input and will be ignored.  Without spaces, the
-/// length of string must be a multiple of 4 bytes with necessary paddings.
-/// Also it must be encoded using the canonical encoding (see RFC4648).
-/// If any of these conditions is not met, an exception of class
-/// \c isc::BadValue will be thrown.
-///
-/// If \c result doesn't have sufficient capacity to store all decoded %data
-/// and memory allocation fails, a corresponding standard exception will be
-/// thrown.  If the caller knows the necessary length (which can in theory
-/// be calculated from the input string), this situation can be avoided by
-/// reserving sufficient space for \c result beforehand.
-///
-/// Any existing %data in \c result will be removed.  This is the case in some
-/// of the cases where an exception is thrown; that is, this function only
-/// provides the basic exception guarantee.
-///
-/// \param input A text encoded in the base64 format.
-/// \param result A vector in which the decoded %data is to be stored.
-void decodeBase64(const std::string& input, std::vector<uint8_t>& result);
-}
-}
-
-#endif  // __BASE64_H
-
-// Local Variables: 
-// mode: c++
-// End: 
diff --git a/src/lib/dns/util/base_n.cc b/src/lib/dns/util/base_n.cc
deleted file mode 100644
index 9d0c777..0000000
--- a/src/lib/dns/util/base_n.cc
+++ /dev/null
@@ -1,398 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <stdint.h>
-#include <cassert>
-#include <iterator>
-#include <string>
-#include <vector>
-
-#include <boost/archive/iterators/base64_from_binary.hpp>
-#include <boost/archive/iterators/binary_from_base64.hpp>
-#include <boost/archive/iterators/transform_width.hpp>
-#include <boost/math/common_factor.hpp>
-
-#include <dns/util/base32hex_from_binary.h>
-#include <dns/util/binary_from_base32hex.h>
-
-#include <dns/util/base16_from_binary.h>
-#include <dns/util/binary_from_base16.h>
-
-#include <exceptions/exceptions.h>
-
-#include <dns/util/base32hex.h>
-#include <dns/util/base64.h>
-
-using namespace std;
-using namespace boost::archive::iterators;
-
-namespace isc {
-namespace dns {
-
-// In the following anonymous namespace, we provide a generic framework
-// to encode/decode baseN format.  We use the following tools:
-// - boost base64_from_binary/binary_from_base64: provide mapping table for
-//   base64.
-//   These classes take another iterator (Base) as a template argument, and
-//   their dereference operator (operator*()) first retrieves an input value
-//   from Base via Base::operator* and converts the value using their mapping
-//   table.  The converted value is returned as their own operator*.
-// - base{32hex,16}_from_binary/binary_from_base{32hex,16}: provide mapping
-//   table for base32hex and base16.  A straightforward variation of their
-//   base64 counterparts.
-// - EncodeNormalizer/DecodeNormalizer: supplemental filter handling baseN
-//   padding characters (=)
-// - boost transform_width: an iterator framework for handling data stream
-//   per bit-group.  It takes another iterator (Base) and output/input bit
-//   numbers (BitsOut/BitsIn) template arguments.  A transform_width object
-//   internally maintains a bit stream, which can be retrieved per BitsOut
-//   bits via its dereference operator (operator*()).  It builds the stream
-//   by internally iterating over the Base object via Base::operator++ and
-//   Base::operator*, using the least BitsIn bits of the result of
-//   Base::operator*.  In our usage BitsIn for encoding and BitsOut for
-//   decoding are always 8 (# of bits for one byte).
-//
-// Its dereference operator
-//   retrieves BitsIn bits from the result of "*Base" (if necessary it
-//   internally calls ++Base) 
-//
-// A conceptual description of how the encoding and decoding work is as
-// follows:
-// Encoding:
-//   input binary data => Normalizer (append sufficient number of 0 bits)
-//                     => transform_width (extract bit groups from the original
-//                                         stream)
-//                     => baseXX_from_binary (convert each bit group to an
-//                                            encoded byte using the mapping)
-// Decoding:
-//   input baseXX text => Normalizer (convert '='s to the encoded characters
-//                                    corresponding to 0, e.g. 'A's in base64)
-//                     => binary_from_baseXX (convert each encoded byte into
-//                                            the original group bit)
-//                     => transform_width (build original byte stream by
-//                                         concatenating the decoded bit
-//                                         stream)
-//
-// Below, we define a set of templated classes to handle different parameters
-// for different encoding algorithms.
-namespace {
-// Common constants used for all baseN encoding.
-const char BASE_PADDING_CHAR = '=';
-const uint8_t BINARY_ZERO_CODE = 0;
-  
-// EncodeNormalizer is an input iterator intended to be used as a filter
-// between the binary stream and baseXX_from_binary translator (via
-// transform_width).  An EncodeNormalizer object is configured with two
-// iterators (base and base_end), specifying the head and end of the input
-// stream.  It internally iterators over the original stream, and return
-// each byte of the stream intact via its dereference operator until it
-// reaches the end of the stream.  After that the EncodeNormalizer object
-// will return 0 no matter how many times it is subsequently incremented.
-// This is necessary because the input binary stream may not contain
-// sufficient bits for a full encoded text while baseXX_from_binary expects
-// a sufficient length of input.
-// Note: this class is intended to be used within this implementation file,
-// and assumes "base < base_end" on construction without validating the
-// arguments.  The behavior is undefined if this assumption doesn't hold.
-class EncodeNormalizer : public iterator<input_iterator_tag, uint8_t> {
-public:
-    EncodeNormalizer(const vector<uint8_t>::const_iterator& base,
-                     const vector<uint8_t>::const_iterator& base_end) :
-        base_(base), base_end_(base_end), in_pad_(false)
-    {}
-    EncodeNormalizer& operator++() {
-        if (!in_pad_) {
-            ++base_;
-        }
-        if (base_ == base_end_) {
-            in_pad_ = true;
-        }
-        return (*this);
-    }
-    const uint8_t& operator*() const {
-        if (in_pad_) {
-            return (BINARY_ZERO_CODE);
-        } else {
-            return (*base_);
-        }
-    }
-    bool operator==(const EncodeNormalizer& other) const {
-        return (base_ == other.base_);
-    }
-private:
-    vector<uint8_t>::const_iterator base_;
-    const vector<uint8_t>::const_iterator base_end_;
-    bool in_pad_;
-};
-
-// DecodeNormalizer is an input iterator intended to be used as a filter
-// between the encoded baseX stream and binary_from_baseXX.
-// A DecodeNormalizer object is configured with three string iterators
-// (base, base_beinpad, and base_beginpad), specifying the head of the string,
-// the beginning position of baseX padding (when there's padding), and
-// end of the string, respectively.  It internally iterators over the original
-// stream, and return each character of the encoded string via its dereference
-// operator until it reaches base_beginpad.  After that the DecodeNormalizer
-// will return the encoding character corresponding to the all-0 value
-// (which is specified on construction via base_zero_code.  see also
-// BaseZeroCode below).  This translation is necessary because
-// binary_from_baseXX doesn't accept the padding character (i.e. '=').
-// Note: this class is intended to be used within this implementation file,
-// and for simplicity assumes "base < base_beginpad <= base_end" on
-// construction without validating the arguments.  The behavior is undefined
-// if this assumption doesn't hold.
-class DecodeNormalizer : public iterator<input_iterator_tag, char> {
-public:
-    DecodeNormalizer(const char base_zero_code,
-                     const string::const_iterator& base,
-                     const string::const_iterator& base_beginpad,
-                     const string::const_iterator& base_end) :
-        base_zero_code_(base_zero_code),
-        base_(base), base_beginpad_(base_beginpad), base_end_(base_end),
-        in_pad_(false)
-    {}
-    DecodeNormalizer& operator++() {
-        ++base_;
-        while (base_ != base_end_ && isspace(*base_)) {
-            ++base_;
-        }
-        if (base_ == base_beginpad_) {
-            in_pad_ = true;
-        }
-        return (*this);
-    }
-    const char& operator*() const {
-        if (in_pad_ && *base_ == BASE_PADDING_CHAR) {
-            return (base_zero_code_);
-        } else {
-            return (*base_);
-        }
-    }
-    bool operator==(const DecodeNormalizer& other) const {
-        return (base_ == other.base_);
-    }
-private:
-    const char base_zero_code_;
-    string::const_iterator base_;
-    const string::const_iterator base_beginpad_;
-    const string::const_iterator base_end_;
-    bool in_pad_;
-};
-
-// BitsPerChunk: number of bits to be converted using the baseN mapping table.
-//               e.g. 6 for base64.
-// BaseZeroCode: the byte character that represents a value of 0 in
-//               the corresponding encoding.  e.g. 'A' for base64.
-// Encoder: baseX_from_binary<transform_width<EncodeNormalizer,
-//                                            BitsPerChunk, 8> >
-// Decoder: transform_width<binary_from_baseX<DecodeNormalizer>,
-//                          8, BitsPerChunk>
-template <int BitsPerChunk, char BaseZeroCode,
-          typename Encoder, typename Decoder>
-struct BaseNTransformer {
-    static string encode(const vector<uint8_t>& binary);
-    static void decode(const char* algorithm,
-                       const string& base64, vector<uint8_t>& result);
-
-    // BITS_PER_GROUP is the number of bits for the smallest possible (non
-    // empty) bit string that can be converted to a valid baseN encoded text
-    // without padding.  It's the least common multiple of 8 and BitsPerChunk,
-    // e.g. 24 for base64.
-    static const int BITS_PER_GROUP =
-        boost::math::static_lcm<BitsPerChunk, 8>::value;
-
-    // MAX_PADDING_CHARS is the maximum number of padding characters
-    // that can appear in a valid baseN encoded text.
-    // It's group_len - chars_for_byte, where group_len is the number of
-    // encoded characters to represent BITS_PER_GROUP bits, and
-    // chars_for_byte is the number of encoded character that is needed to
-    // represent a single byte, which is ceil(8 / BitsPerChunk).
-    // For example, for base64 we need two encoded characters to represent a
-    // byte, and each group consists of 4 encoded characters, so
-    // MAX_PADDING_CHARS is 4 - 2 = 2.
-    static const int MAX_PADDING_CHARS =
-        BITS_PER_GROUP / BitsPerChunk -
-        (8 / BitsPerChunk + ((8 % BitsPerChunk) == 0 ? 0 : 1));
-}; 
-
-template <int BitsPerChunk, char BaseZeroCode,
-          typename Encoder, typename Decoder>
-string
-BaseNTransformer<BitsPerChunk, BaseZeroCode, Encoder, Decoder>::encode(
-    const vector<uint8_t>& binary)
-{
-    // calculate the resulting length.
-    size_t bits = binary.size() * 8;
-    if (bits % BITS_PER_GROUP > 0) {
-        bits += (BITS_PER_GROUP - (bits % BITS_PER_GROUP));
-    }
-    const size_t len = bits / BitsPerChunk;
-
-    string result;
-    result.reserve(len);
-    result.assign(Encoder(EncodeNormalizer(binary.begin(), binary.end())),
-                  Encoder(EncodeNormalizer(binary.end(), binary.end())));
-    assert(len >= result.length());
-    result.append(len - result.length(), BASE_PADDING_CHAR);
-    return (result);
-}
-
-template <int BitsPerChunk, char BaseZeroCode,
-          typename Encoder, typename Decoder>
-void
-BaseNTransformer<BitsPerChunk, BaseZeroCode, Encoder, Decoder>::decode(
-    const char* const algorithm,
-    const string& input,
-    vector<uint8_t>& result)
-{
-    // enumerate the number of trailing padding characters (=), ignoring
-    // white spaces.  since baseN_from_binary doesn't accept padding,
-    // we handle it explicitly.
-    size_t padchars = 0;
-    string::const_reverse_iterator srit = input.rbegin();
-    string::const_reverse_iterator srit_end = input.rend();
-    while (srit != srit_end) {
-        char ch = *srit;
-        if (ch == BASE_PADDING_CHAR) {
-            if (++padchars > MAX_PADDING_CHARS) {
-                isc_throw(BadValue, "Too many " << algorithm
-                          << " padding characters: " << input);
-            }
-        } else if (!isspace(ch)) {
-            break;
-        }
-        ++srit;
-    }
-    // then calculate the number of padding bits corresponding to the padding
-    // characters.  In general, the padding bits consist of all-zero
-    // trailing bits of the last encoded character followed by zero bits
-    // represented by the padding characters:
-    // 1st pad  2nd pad  3rd pad...
-    // +++===== =======  ===...    (+: from encoded chars, =: from pad chars)
-    // 0000...0 0......0 000...
-    // 0      7 8     15 16.... (bits)
-    // The number of bits for the '==...' part is padchars * BitsPerChunk.
-    // So the total number of padding bits is the smallest multiple of 8 
-    // that is >= padchars * BitsPerChunk.
-    // (Below, note the common idiom of the bitwise AND with ~7.  It clears the
-    // lowest three bits, so has the effect of rounding the result down to the
-    // nearest multiple of 8)
-    const size_t padbits = (padchars * BitsPerChunk + 7) & ~7;
-
-    // In some encoding algorithm, it could happen that a padding byte would
-    // contain a full set of encoded bits, which is not allowed by definition
-    // of padding.  For example, if BitsPerChunk is 5, the following
-    // representation could happen:
-    // ++00000= (+: from encoded chars, 0: encoded char for '0', =: pad chars)
-    // 0      7 (bits)
-    // This must actually be encoded as follows:
-    // ++======
-    // 0      7 (bits)
-    // The following check rejects this type of invalid encoding.
-    if (padbits > BitsPerChunk * (padchars + 1)) {
-        isc_throw(BadValue, "Invalid " << algorithm << "padding: " << input);
-    }
-
-    // convert the number of bits in bytes for convenience.
-    const size_t padbytes = padbits / 8;
-
-    try {
-        result.assign(Decoder(DecodeNormalizer(BaseZeroCode, input.begin(),
-                                               srit.base(), input.end())),
-                      Decoder(DecodeNormalizer(BaseZeroCode, input.end(),
-                                               input.end(), input.end())));
-    } catch (const dataflow_exception& ex) {
-        // convert any boost exceptions into our local one.
-        isc_throw(BadValue, ex.what());
-    }
-
-    // Confirm the original BaseX text is the canonical encoding of the
-    // data, that is, that the first byte of padding is indeed 0.
-    // (DecodeNormalizer and binary_from_baseXX ensure that the rest of the
-    // padding is all zero).
-    assert(result.size() >= padbytes);
-    if (padbytes > 0 && *(result.end() - padbytes) != 0) {
-            isc_throw(BadValue, "Non 0 bits included in " << algorithm
-                      << " padding: " << input);
-    }
-
-    // strip the padded zero-bit fields
-    result.resize(result.size() - padbytes);
-}
-
-//
-// Instantiation for BASE-64
-//
-typedef
-base64_from_binary<transform_width<EncodeNormalizer, 6, 8> > base64_encoder;
-typedef
-transform_width<binary_from_base64<DecodeNormalizer>, 8, 6> base64_decoder;
-typedef BaseNTransformer<6, 'A', base64_encoder, base64_decoder>
-Base64Transformer;
-
-//
-// Instantiation for BASE-32HEX
-//
-typedef
-base32hex_from_binary<transform_width<EncodeNormalizer, 5, 8> >
-base32hex_encoder;
-typedef
-transform_width<binary_from_base32hex<DecodeNormalizer>, 8, 5>
-base32hex_decoder;
-typedef BaseNTransformer<5, '0', base32hex_encoder, base32hex_decoder>
-Base32HexTransformer;
-
-//
-// Instantiation for BASE-16 (HEX)
-//
-typedef
-base16_from_binary<transform_width<EncodeNormalizer, 4, 8> > base16_encoder;
-typedef
-transform_width<binary_from_base16<DecodeNormalizer>, 8, 4> base16_decoder;
-typedef BaseNTransformer<4, '0', base16_encoder, base16_decoder>
-Base16Transformer;
-}
-
-string
-encodeBase64(const vector<uint8_t>& binary) {
-    return (Base64Transformer::encode(binary));
-}
-
-void
-decodeBase64(const string& input, vector<uint8_t>& result) {
-    Base64Transformer::decode("base64", input, result);
-}
-
-string
-encodeBase32Hex(const vector<uint8_t>& binary) {
-    return (Base32HexTransformer::encode(binary));
-}
-
-void
-decodeBase32Hex(const string& input, vector<uint8_t>& result) {
-    Base32HexTransformer::decode("base32hex", input, result);
-}
-
-string
-encodeHex(const vector<uint8_t>& binary) {
-    return (Base16Transformer::encode(binary));
-}
-
-void
-decodeHex(const string& input, vector<uint8_t>& result) {
-    Base16Transformer::decode("base16", input, result);
-}
-
-}
-}
diff --git a/src/lib/dns/util/binary_from_base16.h b/src/lib/dns/util/binary_from_base16.h
deleted file mode 100644
index 50342f1..0000000
--- a/src/lib/dns/util/binary_from_base16.h
+++ /dev/null
@@ -1,120 +0,0 @@
-#ifndef BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE16_HPP
-#define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE16_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// binary_from_base16.h (derived from boost binary_from_base64.hpp)
-
-// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-//  See http://www.boost.org for updates, documentation, and revision history.
-
-#include <cassert>
-
-// See binary_from_base32hex.h for why we need _from_base64.hpp here.
-#include <boost/archive/iterators/binary_from_base64.hpp>
-
-#include <exceptions/exceptions.h>
-
-namespace boost { 
-namespace archive {
-namespace iterators {
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// convert base16 characters to binary data
-
-namespace detail {
-
-template<class CharType>
-struct to_4_bit {
-    typedef CharType result_type;
-    CharType operator()(CharType t) const{
-        const char lookup_table[] = {
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 00-0f
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 10-1f
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 20-2f
-             0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, // 30-3f
-            -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 40-4f
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 50-5f
-            -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1  // 60-6f
-        };
-        // metrowerks trips this assertion - how come?
-        #if ! defined(__MWERKS__)
-        BOOST_STATIC_ASSERT(0x70 == sizeof(lookup_table));
-        #endif
-        signed char value = -1;
-        if((unsigned)t < sizeof(lookup_table))
-            value = lookup_table[(unsigned)t];
-        if(-1 == value) { 
-            isc_throw(isc::BadValue,
-                      "attempt to decode a value not in base16 char set");
-        }
-        return (value);
-    }
-};
-
-} // namespace detail
-
-// note: what we would like to do is
-// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
-//  typedef transform_iterator<
-//      from_4_bit<CharType>,
-//      transform_width<Base, 4, sizeof(Base::value_type) * 8, CharType>
-//  > base16_from_binary;
-// but C++ won't accept this.  Rather than using a "type generator" and
-// using a different syntax, make a derivation which should be equivalent.
-//
-// Another issue addressed here is that the transform_iterator doesn't have
-// a templated constructor.  This makes it incompatible with the dataflow
-// ideal.  This is also addressed here.
-
-template<
-    class Base, 
-    class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
->
-class binary_from_base16 : public
-    transform_iterator<
-        detail::to_4_bit<CharType>,
-        Base
-    >
-{
-    friend class boost::iterator_core_access;
-    typedef transform_iterator<
-        detail::to_4_bit<CharType>,
-        Base
-    > super_t;
-public:
-    // make composible buy using templated constructor
-    template<class T>
-    binary_from_base16(BOOST_PFTO_WRAPPER(T)  start) :
-        super_t(
-            Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))), 
-            detail::to_4_bit<CharType>()
-        )
-    {}
-    // intel 7.1 doesn't like default copy constructor
-    binary_from_base16(const binary_from_base16 & rhs) : 
-        super_t(
-            Base(rhs.base_reference()),
-            detail::to_4_bit<CharType>()
-        )
-    {}
-//    binary_from_base16(){};
-};
-
-} // namespace iterators
-} // namespace archive
-} // namespace boost
-
-#endif // BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE16_HPP
-
-// Local Variables: 
-// mode: c++
-// End: 
diff --git a/src/lib/dns/util/binary_from_base32hex.h b/src/lib/dns/util/binary_from_base32hex.h
deleted file mode 100644
index 1d83f54..0000000
--- a/src/lib/dns/util/binary_from_base32hex.h
+++ /dev/null
@@ -1,123 +0,0 @@
-#ifndef BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE32HEX_HPP
-#define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE32HEX_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// binary_from_base32hex.h (derived from boost binary_from_base64.hpp)
-
-// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
-// Use, modification and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-//  See http://www.boost.org for updates, documentation, and revision history.
-
-#include <cassert>
-
-// We use the same boost header files used in "_from_base64".  Since the
-// precise path to these headers may vary depending on the boost version we
-// simply include the base64 header here.
-#include <boost/archive/iterators/binary_from_base64.hpp>
-
-#include <exceptions/exceptions.h>
-
-namespace boost { 
-namespace archive {
-namespace iterators {
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// convert base32hex characters to binary data
-
-namespace detail {
-
-template<class CharType>
-struct to_5_bit {
-    typedef CharType result_type;
-    CharType operator()(CharType t) const{
-        const char lookup_table[] = {
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 00-0f
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 10-1f
-            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 20-2f
-             0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, // 30-3f
-            -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, // 40-4f
-            25,26,27,28,29,30,31,-1,-1,-1,-1,-1,-1,-1,-1,-1, // 50-5f
-            -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, // 60-6f
-            25,26,27,28,29,30,31,-1,-1,-1,-1,-1,-1,-1,-1,-1  // 70-7f
-        };
-        // metrowerks trips this assertion - how come?
-        #if ! defined(__MWERKS__)
-        BOOST_STATIC_ASSERT(0x80 == sizeof(lookup_table));
-        #endif
-        signed char value = -1;
-        if((unsigned)t < sizeof(lookup_table))
-            value = lookup_table[(unsigned)t];
-        if(-1 == value) { 
-            isc_throw(isc::BadValue,
-                      "attempt to decode a value not in base32hex char set");
-        }
-        return (value);
-    }
-};
-
-} // namespace detail
-
-// note: what we would like to do is
-// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
-//  typedef transform_iterator<
-//      from_5_bit<CharType>,
-//      transform_width<Base, 5, sizeof(Base::value_type) * 8, CharType>
-//  > base32hex_from_binary;
-// but C++ won't accept this.  Rather than using a "type generator" and
-// using a different syntax, make a derivation which should be equivalent.
-//
-// Another issue addressed here is that the transform_iterator doesn't have
-// a templated constructor.  This makes it incompatible with the dataflow
-// ideal.  This is also addressed here.
-
-template<
-    class Base, 
-    class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
->
-class binary_from_base32hex : public
-    transform_iterator<
-        detail::to_5_bit<CharType>,
-        Base
-    >
-{
-    friend class boost::iterator_core_access;
-    typedef transform_iterator<
-        detail::to_5_bit<CharType>,
-        Base
-    > super_t;
-public:
-    // make composible buy using templated constructor
-    template<class T>
-    binary_from_base32hex(BOOST_PFTO_WRAPPER(T)  start) :
-        super_t(
-            Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))), 
-            detail::to_5_bit<CharType>()
-        )
-    {}
-    // intel 7.1 doesn't like default copy constructor
-    binary_from_base32hex(const binary_from_base32hex & rhs) : 
-        super_t(
-            Base(rhs.base_reference()),
-            detail::to_5_bit<CharType>()
-        )
-    {}
-//    binary_from_base32hex(){};
-};
-
-} // namespace iterators
-} // namespace archive
-} // namespace boost
-
-#endif // BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE32HEX_HPP
-
-// Local Variables: 
-// mode: c++
-// End: 
diff --git a/src/lib/dns/util/hex.h b/src/lib/dns/util/hex.h
deleted file mode 100644
index e2626bf..0000000
--- a/src/lib/dns/util/hex.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __HEX_H
-#define __HEX_H 1
-
-#include <stdint.h>
-#include <string>
-#include <vector>
-
-//
-// Note: this helper module isn't specific to the DNS protocol per se.
-// We should probably move this to somewhere else, possibly in some common
-// utility area.
-//
-
-namespace isc {
-namespace dns {
-/// \brief Encode binary data in the base16 ('hex') format.
-///
-/// The underlying implementation is shared with \c encodeBase64, and most of
-/// the description except the format (base16) equally applies.
-/// Another notable exception is that the base16 encoding doesn't require
-/// padding, so padding related considerations and the notion of canonical
-/// encoding don't apply.
-///
-/// \param binary A vector object storing the data to be encoded. 
-/// \return A newly created string that stores base16 encoded value for
-/// binary.
-std::string encodeHex(const std::vector<uint8_t>& binary);
-
-/// \brief Decode a text encoded in the base16 ('hex') format into the
-/// original %data.
-///
-/// The underlying implementation is shared with \c decodeBase64, and most
-/// of the description except the format (base16) equally applies.
-/// Another notable exception is that the base16 encoding doesn't require
-/// padding, so padding related considerations and the notion of canonical
-/// encoding don't apply.
-///
-/// \param input A text encoded in the base16 format.
-/// \param result A vector in which the decoded %data is to be stored.
-void decodeHex(const std::string& input, std::vector<uint8_t>& result);
-}
-}
-
-#endif  // __HEX_H
-
-// Local Variables: 
-// mode: c++
-// End: 
diff --git a/src/lib/dns/util/sha1.cc b/src/lib/dns/util/sha1.cc
deleted file mode 100644
index 62e885b..0000000
--- a/src/lib/dns/util/sha1.cc
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- *  Description:
- *      This file implements the Secure Hash Signature Standard
- *      algorithms as defined in the National Institute of Standards
- *      and Technology Federal Information Processing Standards
- *      Publication (FIPS PUB) 180-1 published on April 17, 1995, 180-2
- *      published on August 1, 2002, and the FIPS PUB 180-2 Change
- *      Notice published on February 28, 2004.
- *
- *      A combined document showing all algorithms is available at
- *              http://csrc.nist.gov/publications/fips/
- *              fips180-2/fips180-2withchangenotice.pdf
- *
- *      The SHA-1 algorithm produces a 160-bit message digest for a
- *      given data stream.  It should take about 2**n steps to find a
- *      message with the same digest as a given message and
- *      2**(n/2) to find any two messages with the same digest,
- *      when n is the digest size in bits.  Therefore, this
- *      algorithm can serve as a means of providing a
- *      "fingerprint" for a message.
- *
- *  Portability Issues:
- *      SHA-1 is defined in terms of 32-bit "words".  This code
- *      uses <stdint.h> (included via "sha.h") to define 32 and 8
- *      bit unsigned integer types.  If your C compiler does not
- *      support 32 bit unsigned integers, this code is not
- *      appropriate.
- *
- *  Caveats:
- *      SHA-1 is designed to work with messages less than 2^64 bits
- *      long. This implementation uses SHA1Input() to hash the bits
- *      that are a multiple of the size of an 8-bit character, and then
- *      uses SHA1FinalBits() to hash the final few bits of the input.
- *
- *  Authorship:
- *      This file is adapted from RFC 4634, by D. Eastlake et al.
- *      Copyright (C) The Internet Society (2006).
- *
- *      Permission is granted for all uses, commercial and non-commercial,
- *      of the sample code found in Section 8.  Royalty free license to
- *      use, copy, modify and distribute the software found in Section 8 is
- *      granted, provided that this document is identified in all material
- *      mentioning or referencing this software, and provided that
- *      redistributed derivative works do not contain misleading author or
- *      version information.
- *
- *      The authors make no representations concerning either the
- *      merchantability of this software or the suitability of this
- *      software for any particular purpose.  It is provided "as is"
- *      without express or implied warranty of any kind.
- *      
- */
-#include <dns/util/sha1.h>
-
-/* Local Function Prototyptes */
-static void SHA1Finalize(SHA1Context *, uint8_t Pad_Byte);
-static void SHA1PadMessage(SHA1Context *, uint8_t Pad_Byte);
-static void SHA1ProcessMessageBlock(SHA1Context *);
-
-/*
- * Define functions used by SHA1 hash
- */
-static inline uint32_t
-SHA_Ch(const uint32_t x, const uint32_t y, const uint32_t z) {
-    return (((x) & ((y) ^ (z))) ^ (z));
-}
-
-static inline uint32_t
-SHA_Maj(const uint32_t x, const uint32_t y, const uint32_t z) {
-    return (((x) & ((y) | (z))) | ((y) & (z)));
-}
-
-static inline uint32_t
-SHA_Parity(const uint32_t x, const uint32_t y, const uint32_t z) {
-    return ((x) ^ (y) ^ (z));
-}
-
-static inline int 
-SHA1CircularShift(uint8_t bits, uint32_t word) {
-    return ((word << bits) | (word >> (32 - bits)));
-}
-
-static inline bool
-SHA1AddLength(SHA1Context *context, uint32_t length) {
-    uint32_t addTemp = context->Length_Low;
-    context->Length_Low += length;
-    if (context->Length_Low < addTemp && ++context->Length_High == 0) {
-        return (true);
-    } else {
-        return (false);
-    }
-}
-
-/*
- *  SHA1Reset
- *
- *  Description:
- *      This function will initialize the SHA1Context in preparation
- *      for computing a new SHA1 message digest.
- *
- *  Parameters:
- *      context: [in/out]
- *          The context to reset.
- *
- *  Returns:
- *      sha Error Code.
- *
- */
-int
-SHA1Reset(SHA1Context *context) {
-    if (!context) {
-        return (SHA_NULL);
-    }
-
-    context->Length_Low             = 0;
-    context->Length_High            = 0;
-    context->Message_Block_Index    = 0;
-
-    context->Intermediate_Hash[0]   = 0x67452301;
-    context->Intermediate_Hash[1]   = 0xEFCDAB89;
-    context->Intermediate_Hash[2]   = 0x98BADCFE;
-    context->Intermediate_Hash[3]   = 0x10325476;
-    context->Intermediate_Hash[4]   = 0xC3D2E1F0;
-
-    context->Computed   = 0;
-    context->Corrupted  = 0;
-    return (SHA_SUCCESS);
-}
-
-
-/*
- *  SHA1Input
- *
- *  Description:
- *      This function accepts an array of octets as the next portion
- *      of the message.
- *
- *  Parameters:
- *      context: [in/out]
- *          The SHA context to update
- *      message_array: [in]
- *          An array of characters representing the next portion of
- *          the message.
- *      length: [in]
- *          The length of the message in message_array
- *
- *  Returns:
- *      sha Error Code.
- *
- */
-int
-SHA1Input(SHA1Context *context, const uint8_t *message_array, unsigned length) {
-    if (!length) {
-        return (SHA_SUCCESS);
-    }
-
-    if (!context || !message_array) {
-        return (SHA_NULL);
-    }
-
-    if (context->Computed) {
-        context->Corrupted = SHA_STATEERROR;
-        return (SHA_STATEERROR);
-    }
-
-    if (context->Corrupted) {
-         return (context->Corrupted);
-    }
-
-    while(length-- && !context->Corrupted) {
-        context->Message_Block[context->Message_Block_Index++] =
-                                                    (*message_array & 0xFF);
-
-        if (!SHA1AddLength(context, 8) &&
-            (context->Message_Block_Index == SHA1_BLOCKSIZE))
-        {
-            SHA1ProcessMessageBlock(context);
-        }
-
-        message_array++;
-    }
-
-    return (SHA_SUCCESS);
-}
-
-/*
- * SHA1FinalBits
- *
- * Description:
- *   This function will add in any final bits of the message.
- *
- * Parameters:
- *   context: [in/out]
- *     The SHA context to update
- *   message_bits: [in]
- *     The final bits of the message, in the upper portion of the
- *     byte. (Use 0b###00000 instead of 0b00000### to input the
- *     three bits ###.)
- *   length: [in]
- *     The number of bits in message_bits, between 1 and 7.
- *
- * Returns:
- *   sha Error Code.
- */
-int SHA1FinalBits(SHA1Context *context, const uint8_t message_bits,
-                  unsigned int length)
-{
-    uint8_t masks[8] = {
-        /* 0 0b00000000 */ 0x00,
-        /* 1 0b10000000 */ 0x80,
-        /* 2 0b11000000 */ 0xC0,
-        /* 3 0b11100000 */ 0xE0,
-        /* 4 0b11110000 */ 0xF0,
-        /* 5 0b11111000 */ 0xF8,
-        /* 6 0b11111100 */ 0xFC,
-        /* 7 0b11111110 */ 0xFE
-    };
-    uint8_t markbit[8] = {
-        /* 0 0b10000000 */ 0x80,
-        /* 1 0b01000000 */ 0x40,
-        /* 2 0b00100000 */ 0x20,
-        /* 3 0b00010000 */ 0x10,
-        /* 4 0b00001000 */ 0x08,
-        /* 5 0b00000100 */ 0x04,
-        /* 6 0b00000010 */ 0x02,
-        /* 7 0b00000001 */ 0x01
-    };
-
-    if (!length) {
-        return (SHA_SUCCESS);
-    }
-
-    if (!context) {
-        return (SHA_NULL);
-    }
-
-    if (context->Computed || (length >= 8) || (length == 0)) {
-        context->Corrupted = SHA_STATEERROR;
-        return (SHA_STATEERROR);
-    }
-
-    if (context->Corrupted) {
-        return (context->Corrupted);
-    }
-
-    SHA1AddLength(context, length);
-    SHA1Finalize(context,
-                 (uint8_t) ((message_bits & masks[length]) | markbit[length]));
-
-    return (SHA_SUCCESS);
-}
-
-/*
- *  SHA1Result
- *
- *  Description:
- *      This function will return the 160-bit message digest into the
- *      Message_Digest array  provided by the caller.
- *      NOTE: The first octet of hash is stored in the 0th element,
- *            the last octet of hash in the 19th element.
- *
- *  Parameters:
- *      context: [in/out]
- *          The context to use to calculate the SHA-1 hash.
- *      Message_Digest: [out]
- *          Where the digest is returned.
- *
- *  Returns:
- *      sha Error Code.
- *
- */
-int
-SHA1Result(SHA1Context *context, uint8_t Message_Digest[SHA1_HASHSIZE]) {
-    int i;
-
-    if (!context || !Message_Digest) {
-        return (SHA_NULL);
-    }
-
-    if (context->Corrupted) {
-        return (context->Corrupted);
-    }
-
-    if (!context->Computed) {
-        SHA1Finalize(context, 0x80);
-    }
-
-    for(i = 0; i < SHA1_HASHSIZE; ++i) {
-        Message_Digest[i] = context->Intermediate_Hash[i>>2]
-                            >> 8 * (3 - (i & 0x03));
-    }
-
-    return (SHA_SUCCESS);
-}
-
-/*
- * SHA1Finalize
- *
- * Description:
- *   This helper function finishes off the digest calculations.
- *
- * Parameters:
- *   context: [in/out]
- *     The SHA context to update
- *   Pad_Byte: [in]
- *     The last byte to add to the digest before the 0-padding
- *     and length. This will contain the last bits of the message
- *     followed by another single bit. If the message was an
- *     exact multiple of 8-bits long, Pad_Byte will be 0x80.
- *
- * Returns:
- *   sha Error Code.
- *
- */
-static void SHA1Finalize(SHA1Context *context, uint8_t Pad_Byte) {
-    int i;
-    SHA1PadMessage(context, Pad_Byte);
-    /* message may be sensitive, clear it out */
-    for (i = 0; i < SHA1_BLOCKSIZE; ++i)
-        context->Message_Block[i] = 0;
-    context->Length_Low = 0;  /* and clear length */
-    context->Length_High = 0;
-    context->Computed = 1;
-}
-
-/*
- *  SHA1PadMessage
- *
- *  Description:
- *      According to the standard, the message must be padded to an even
- *      512 bits.  The first padding bit must be a '1'.  The last 64
- *      bits represent the length of the original message.  All bits in
- *      between should be 0.  This function will pad the message
- *      according to those rules by filling the Message_Block array
- *      accordingly.  It will also call the ProcessMessageBlock function
- *      provided appropriately.  When it returns, it can be assumed that
- *      the message digest has been computed.
- *
- *  Parameters:
- *      context: [in/out]
- *          The context to pad
- *      Pad_Byte: [in]
- *          The last byte to add to the digest before the 0-padding
- *          and length. This will contain the last bits of the message
- *          followed by another single bit. If the message was an
- *          exact multiple of 8-bits long, Pad_Byte will be 0x80.
- *
- *  Returns:
- *      Nothing.
- *
- */
-static void SHA1PadMessage(SHA1Context *context, uint8_t Pad_Byte) {
-    /*
-     * Check to see if the current message block is too small to hold
-     * the initial padding bits and length. If so, we will pad the
-     * block, process it, and then continue padding into a second
-     * block.
-     */
-    if (context->Message_Block_Index >= (SHA1_BLOCKSIZE - 8)) {
-        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
-        while (context->Message_Block_Index < SHA1_BLOCKSIZE) {
-            context->Message_Block[context->Message_Block_Index++] = 0;
-        }
-
-        SHA1ProcessMessageBlock(context);
-    } else
-        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
-
-    while (context->Message_Block_Index < (SHA1_BLOCKSIZE - 8))
-        context->Message_Block[context->Message_Block_Index++] = 0;
-
-    /*
-     * Store the message length as the last 8 octets
-     */
-    context->Message_Block[56] = (uint8_t) (context->Length_High >> 24);
-    context->Message_Block[57] = (uint8_t) (context->Length_High >> 16);
-    context->Message_Block[58] = (uint8_t) (context->Length_High >> 8);
-    context->Message_Block[59] = (uint8_t) (context->Length_High);
-    context->Message_Block[60] = (uint8_t) (context->Length_Low >> 24);
-    context->Message_Block[61] = (uint8_t) (context->Length_Low >> 16);
-    context->Message_Block[62] = (uint8_t) (context->Length_Low >> 8);
-    context->Message_Block[63] = (uint8_t) (context->Length_Low);
-
-    SHA1ProcessMessageBlock(context);
-}
-
-/*
- *  SHA1ProcessMessageBlock
- *
- *  Description:
- *      This helper function will process the next 512 bits of the
- *      message stored in the Message_Block array.
- *
- *  Parameters:
- *      None.
- *
- *  Returns:
- *      Nothing.
- *
- *  Comments:
- *      Many of the variable names in this code, especially the
- *      single character names, were used because those were the
- *      names used in the publication.
- *
- *
- */
-static void
-SHA1ProcessMessageBlock(SHA1Context *context) {
-    /* Constants defined in FIPS-180-2, section 4.2.1 */
-    const uint32_t K[] = {
-        0x5A827999,
-        0x6ED9EBA1,
-        0x8F1BBCDC,
-        0xCA62C1D6
-    };
-    int           t;                 /* Loop counter                */
-    uint32_t      temp;              /* Temporary word value        */
-    uint32_t      W[80];             /* Word sequence               */
-    uint32_t      A, B, C, D, E;     /* Word buffers                */
-
-    /*
-     * Initialize the first 16 words in the array W
-     */
-    for (t = 0; t < 16; t++) {
-        W[t]  = ((uint32_t)context->Message_Block[t * 4]) << 24;
-        W[t] |= ((uint32_t)context->Message_Block[t * 4 + 1]) << 16;
-        W[t] |= ((uint32_t)context->Message_Block[t * 4 + 2]) << 8;
-        W[t] |= ((uint32_t)context->Message_Block[t * 4 + 3]);
-    }
-
-    for (t = 16; t < 80; t++) {
-        W[t] = SHA1CircularShift(1, W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
-    }
-
-    A = context->Intermediate_Hash[0];
-    B = context->Intermediate_Hash[1];
-    C = context->Intermediate_Hash[2];
-    D = context->Intermediate_Hash[3];
-    E = context->Intermediate_Hash[4];
-
-    for (t = 0; t < 20; t++) {
-        temp = SHA1CircularShift(5,A) + SHA_Ch(B, C, D) + E + W[t] + K[0];
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    for (t = 20; t < 40; t++) {
-        temp = SHA1CircularShift(5,A) + SHA_Parity(B, C, D) + E + W[t] + K[1];
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    for (t = 40; t < 60; t++) {
-        temp = SHA1CircularShift(5,A) + SHA_Maj(B, C, D) + E + W[t] + K[2];
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    for (t = 60; t < 80; t++) {
-        temp = SHA1CircularShift(5,A) + SHA_Parity(B, C, D) + E + W[t] + K[3];
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    context->Intermediate_Hash[0] += A;
-    context->Intermediate_Hash[1] += B;
-    context->Intermediate_Hash[2] += C;
-    context->Intermediate_Hash[3] += D;
-    context->Intermediate_Hash[4] += E;
-
-    context->Message_Block_Index = 0;
-}
diff --git a/src/lib/dns/util/sha1.h b/src/lib/dns/util/sha1.h
deleted file mode 100644
index f0f45f3..0000000
--- a/src/lib/dns/util/sha1.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  sha1.h
- *
- *  Description:
- *      This is the header file for code which implements the Secure
- *      Hashing Algorithm 1 as defined in FIPS PUB 180-1 published
- *      April 17, 1995.
- *
- *      Many of the variable names in this code, especially the
- *      single character names, were used because those were the names
- *      used in the publication.
- *
- *      Please read the file sha1.cc for more information.
- *
- *  Authorship:
- *      This file is adapted from RFC 4634, by D. Eastlake et al.
- *      Copyright (C) The Internet Society (2006).
- *
- *      Permission is granted for all uses, commercial and non-commercial,
- *      of the sample code found in Section 8.  Royalty free license to
- *      use, copy, modify and distribute the software found in Section 8 is
- *      granted, provided that this document is identified in all material
- *      mentioning or referencing this software, and provided that
- *      redistributed derivative works do not contain misleading author or
- *      version information.
- *
- *      The authors make no representations concerning either the
- *      merchantability of this software or the suitability of this
- *      software for any particular purpose.  It is provided "as is"
- *      without express or implied warranty of any kind.
- */
-
-#ifndef _SHA1_H_
-#define _SHA1_H_
-
-#include <stdint.h>
-/*
- * If you do not have the ISO standard stdint.h header file, then you
- * must typdef the following:
- *    name              meaning
- *  uint32_t         unsigned 32 bit integer
- *  uint8_t          unsigned 8 bit integer (i.e., unsigned char)
- *  int_least16_t    integer of >= 16 bits
- *
- */
-
-enum {
-    SHA_SUCCESS = 0,
-    SHA_NULL,            /* Null pointer parameter */
-    SHA_STATEERROR       /* called Input after Result */
-};
-
-enum {
-    SHA1_HASHSIZE = 20,
-    SHA1_HASHBITS = 20,
-    SHA1_BLOCKSIZE = 64
-};
-
-/*
- *  This structure will hold context information for the SHA-1
- *  hashing operation
- */
-typedef struct SHA1Context
-{
-    uint32_t Intermediate_Hash[SHA1_HASHSIZE/4]; /* Message Digest */
-    uint32_t Length_Low;                /* Message length in bits */
-    uint32_t Length_High;               /* Message length in bits */
-    int_least16_t Message_Block_Index;  /* Index into message block array */
-    uint8_t Message_Block[64];          /* 512-bit message blocks */
-    int Computed;                       /* Is the digest computed? */
-    int Corrupted;                      /* Is the message digest corrupted? */
-} SHA1Context;
-
-/*
- *  Function Prototypes
- */
-extern int SHA1Reset(SHA1Context *);
-extern int SHA1Input(SHA1Context *, const uint8_t *bytes,
-                     unsigned int bytecount);
-extern int SHA1FinalBits(SHA1Context *, const uint8_t bits,
-                         unsigned int bitcount);
-extern int SHA1Result(SHA1Context *, uint8_t Message_Digest[SHA1_HASHSIZE]);
-
-#endif
diff --git a/src/lib/log/Makefile.am b/src/lib/log/Makefile.am
index d941b01..5770564 100644
--- a/src/lib/log/Makefile.am
+++ b/src/lib/log/Makefile.am
@@ -3,6 +3,7 @@ SUBDIRS = . compiler tests
 AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES)
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/log -I$(top_builddir)/src/lib/log
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 
 CLEANFILES = *.gcno *.gcda
 
@@ -10,7 +11,6 @@ lib_LTLIBRARIES = liblog.la
 liblog_la_SOURCES  =
 liblog_la_SOURCES += debug_levels.h logger_levels.h
 liblog_la_SOURCES += dummylog.h dummylog.cc
-liblog_la_SOURCES += filename.h filename.cc
 liblog_la_SOURCES += logger.cc logger.h
 liblog_la_SOURCES += logger_impl.cc logger_impl.h
 liblog_la_SOURCES += logger_support.cc logger_support.h
@@ -21,7 +21,6 @@ liblog_la_SOURCES += message_initializer.cc message_initializer.h
 liblog_la_SOURCES += message_reader.cc message_reader.h
 liblog_la_SOURCES += message_types.h
 liblog_la_SOURCES += root_logger_name.cc root_logger_name.h
-liblog_la_SOURCES += strutil.h strutil.cc
 
 EXTRA_DIST  = README
 EXTRA_DIST += messagedef.mes
@@ -39,3 +38,4 @@ if USE_CLANGPP
 liblog_la_CXXFLAGS += -Wno-error
 endif
 liblog_la_CPPFLAGS = $(AM_CPPFLAGS)
+liblog_la_LIBADD = $(top_builddir)/src/lib/util/libutil.la
diff --git a/src/lib/log/compiler/Makefile.am b/src/lib/log/compiler/Makefile.am
index 9343793..d51ba05 100644
--- a/src/lib/log/compiler/Makefile.am
+++ b/src/lib/log/compiler/Makefile.am
@@ -2,6 +2,7 @@ SUBDIRS = .
 
 AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/log -I$(top_builddir)/src/lib/log
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += $(BOOST_INCLUDES)
 
 AM_CXXFLAGS = $(B10_CXXFLAGS)
@@ -15,4 +16,5 @@ CLEANFILES = *.gcno *.gcda
 noinst_PROGRAMS = message
 message_SOURCES = message.cc
 message_LDADD  = $(top_builddir)/src/lib/log/liblog.la
+message_LDADD += $(top_builddir)/src/lib/util/libutil.la
 
diff --git a/src/lib/log/compiler/message.cc b/src/lib/log/compiler/message.cc
index 6f9c4e0..faacd2d 100644
--- a/src/lib/log/compiler/message.cc
+++ b/src/lib/log/compiler/message.cc
@@ -25,17 +25,19 @@
 #include <time.h>
 #include <unistd.h>
 
-#include <log/filename.h>
+#include <util/filename.h>
+#include <util/strutil.h>
+
 #include <log/message_dictionary.h>
 #include <log/message_exception.h>
 #include <log/message_reader.h>
 #include <log/messagedef.h>
-#include <log/strutil.h>
 
 #include <log/logger.h>
 
 using namespace std;
 using namespace isc::log;
+using namespace isc::util;
 
 static const char* VERSION = "1.0-0";
 
diff --git a/src/lib/log/filename.cc b/src/lib/log/filename.cc
deleted file mode 100644
index 91835af..0000000
--- a/src/lib/log/filename.cc
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <iostream>
-#include <algorithm>
-#include <string>
-
-#include <ctype.h>
-
-#include <log/filename.h>
-#include <log/strutil.h>
-
-using namespace std;
-
-
-namespace isc {
-namespace log {
-
-// Split string into components.  Any backslashes are assumed to have
-// been replaced by forward slashes.
-
-void
-Filename::split(const string& full_name, string& directory,
-    string& name, string& extension) const
-{
-    directory = name = extension = "";
-    bool dir_present = false;
-    if (!full_name.empty()) {
-
-        // Find the directory.
-        size_t last_slash = full_name.find_last_of('/');
-        if (last_slash != string::npos) {
-
-            // Found the last slash, so extract directory component and
-            // set where the scan for the last_dot should terminate.
-            directory = full_name.substr(0, last_slash + 1);
-            if (last_slash == full_name.size()) {
-
-                // The entire string was a directory, so exit not and don't
-                // do any more searching.
-                return;
-            }
-
-            // Found a directory so note the fact.
-            dir_present = true;
-        }
-
-        // Now search backwards for the last ".".
-        size_t last_dot = full_name.find_last_of('.');
-        if ((last_dot == string::npos) ||
-            (dir_present && (last_dot < last_slash))) {
-
-            // Last "." either not found or it occurs to the left of the last
-            // slash if a directory was present (so it is part of a directory
-            // name).  In this case, the remainder of the string after the slash
-            // is the name part.
-            name = full_name.substr(last_slash + 1);
-            return;
-        }
-
-        // Did find a valid dot, so it and everything to the right is the
-        // extension...
-        extension = full_name.substr(last_dot);
-
-        // ... and the name of the file is everything in between.
-        if ((last_dot - last_slash) > 1) {
-            name = full_name.substr(last_slash + 1, last_dot - last_slash - 1);
-        }
-    }
-
-}
-
-// Expand the stored filename with the default.
-
-string
-Filename::expandWithDefault(const string& defname) const {
-
-    string def_directory("");
-    string def_name("");
-    string def_extension("");
-
-    // Normalize the input string.
-    string copy_defname = isc::strutil::trim(defname);
-#ifdef WIN32
-    isc::strutil::normalizeSlash(copy_defname);
-#endif
-
-    // Split into the components
-    split(copy_defname, def_directory, def_name, def_extension);
-
-    // Now construct the result.
-    string retstring =
-        (directory_.empty() ? def_directory : directory_) +
-        (name_.empty() ? def_name : name_) +
-        (extension_.empty() ? def_extension : extension_);
-    return (retstring);
-}
-
-// Use the stored name as default for a given name
-
-string
-Filename::useAsDefault(const string& name) const {
-
-    string name_directory("");
-    string name_name("");
-    string name_extension("");
-
-    // Normalize the input string.
-    string copy_name = isc::strutil::trim(name);
-#ifdef WIN32
-    isc::strutil::normalizeSlash(copy_name);
-#endif
-
-    // Split into the components
-    split(copy_name, name_directory, name_name, name_extension);
-
-    // Now construct the result.
-    string retstring =
-        (name_directory.empty() ? directory_ : name_directory) +
-        (name_name.empty() ? name_ : name_name) +
-        (name_extension.empty() ? extension_ : name_extension);
-    return (retstring);
-}
-
-
-} // namespace log
-} // namespace isc
diff --git a/src/lib/log/filename.h b/src/lib/log/filename.h
deleted file mode 100644
index e3cda16..0000000
--- a/src/lib/log/filename.h
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __FILENAME_H
-#define __FILENAME_H
-
-#include <string>
-
-#include <strutil.h>
-
-namespace isc {
-namespace log {
-
-/// \brief Class to Manipulate Filenames
-///
-/// This is a utility class to manipulate filenames.  It repeats some of the
-/// features found in the Boost filename class, but is self-contained so avoids
-/// the need to link in the Boost library.
-///
-/// A Unix-style filename comprises three parts:
-///
-/// Directory - everything up to and including the last "/".  If there is no
-/// "/" in the string, there is no directory component.  Note that the
-/// requirement of a trailing slash eliminates the ambiguity of whether a
-/// component is a directory or not, e.g. in /alpha/beta", "beta" could be the
-/// name of a directory or is could be a file.  The interpretation here is that
-/// "beta" is the name of a file (although that file could be a directory).
-///
-/// Note: Under Windows, the drive letter is considered to be part of the
-/// directory specification.  Unless this class becomes more widely-used on
-/// Windows, there is no point in adding redundant code.
-///
-/// Name - everthing from the character after the last "/" up to but not
-/// including the last ".".
-///
-/// Extension - everthing from the right-most "." (after the right-most "/") to
-/// the end of the string.  If there is no "." after the last "/", there is
-/// no file extension.
-///
-/// (Note that on Windows, this function will replace all "\" characters
-/// with "/" characters on input strings.)
-///
-/// This class provides functions for extracting the components and for
-/// substituting components.
-
-
-class Filename {
-public:
-
-    /// \brief Constructor
-    Filename(const std::string& name) :
-        full_name_(""), directory_(""), name_(""), extension_("")
-    {
-        setName(name);
-    }
-
-    /// \brief Sets Stored Filename
-    ///
-    /// \param name New name to replaced currently stored name
-    void setName(const std::string& name) {
-        full_name_ = isc::strutil::trim(name);
-#ifdef WIN32
-        isc::strutil::normalizeSlash(full_name_);
-#endif
-        split(full_name_, directory_, name_, extension_);
-    }
-
-    /// \return Stored Filename
-    std::string fullName() const {
-        return (full_name_);
-    }
-
-    /// \return Directory of Given File Name
-    std::string directory() const {
-        return (directory_);
-    }
-
-    /// \return Name of Given File Name
-    std::string name() const {
-        return (name_);
-    }
-
-    /// \return Extension of Given File Name
-    std::string extension() const {
-        return (extension_);
-    }
-
-    /// \brief Expand Name with Default
-    ///
-    /// A default file specified is supplied and used to fill in any missing
-    /// fields.  For example, if the name stored is "/a/b" and the supplied
-    /// name is "c.d", the result is "/a/b.d": the only field missing from the
-    /// stored name is the extension, which is supplied by the default.
-    /// Another example would be to store "a.b" and to supply a default of
-    /// "/c/d/" - the result is "/c/d/a.b".  (Note that if the supplied default
-    /// was "/c/d", the result would be "/c/a.b", even if "/c/d" were actually
-    /// a directory.)
-    ///
-    /// \param defname Default name
-    ///
-    /// \return Name expanded with defname.
-    std::string expandWithDefault(const std::string& defname) const;
-
-    /// \brief Use as Default and Substitute into String
-    ///
-    /// Does essentially the inverse of expand(); that filled in the stored
-    /// name with a default and returned the result.  This treats the stored
-    /// name as the default and uses it to fill in a given name.  In essence,
-    /// the code:
-    /// \code
-    ///       Filename f("/a/b");
-    ///       result = f.expandWithdefault("c.d");
-    /// \endcode
-    /// gives as a result "/a/b.d".  This is the same as:
-    /// \code
-    ///       Filename f("c.d");
-    ///       result = f.useAsDefault("/a/b");
-    /// \endcode
-    ///
-    /// \param name Name to expand
-    ///
-    /// \return Name expanded with stored name
-    std::string useAsDefault(const std::string& name) const;
-
-private:
-    /// \brief Split Name into Components
-    ///
-    /// Splits the file name into the directory, name and extension parts.
-    /// The name is assumed to have had back slashes replaced by forward
-    /// slashes (if appropriate).
-    ///
-    /// \param full_name Name to split
-    /// \param directory Returned directory part
-    /// \param name Returned name part
-    /// \param extension Returned extension part
-    void split(const std::string& full_name, std::string& directory,
-       std::string& name, std::string& extension) const;
-
-    // Members
-
-    std::string full_name_;     ///< Given name
-    std::string directory_;     ///< Directory part
-    std::string name_;          ///< Name part
-    std::string extension_;     ///< Extension part
-};
-
-} // namespace log
-} // namespace isc
-
-#endif // __FILENAME_H
diff --git a/src/lib/log/logger.cc b/src/lib/log/logger.cc
index a2465de..99dc3a1 100644
--- a/src/lib/log/logger.cc
+++ b/src/lib/log/logger.cc
@@ -20,7 +20,8 @@
 #include <log/message_dictionary.h>
 #include <log/message_types.h>
 #include <log/root_logger_name.h>
-#include <log/strutil.h>
+
+#include <util/strutil.h>
 
 using namespace std;
 
diff --git a/src/lib/log/logger_impl.cc b/src/lib/log/logger_impl.cc
index 4b19360..41153e9 100644
--- a/src/lib/log/logger_impl.cc
+++ b/src/lib/log/logger_impl.cc
@@ -26,7 +26,8 @@
 #include <log/message_dictionary.h>
 #include <log/message_types.h>
 #include <log/root_logger_name.h>
-#include <log/strutil.h>
+
+#include <util/strutil.h>
 
 using namespace std;
 
diff --git a/src/lib/log/logger_impl_log4cxx.cc b/src/lib/log/logger_impl_log4cxx.cc
index 404fd03..afe2d56 100644
--- a/src/lib/log/logger_impl_log4cxx.cc
+++ b/src/lib/log/logger_impl_log4cxx.cc
@@ -27,9 +27,10 @@
 #include <log/logger_impl.h>
 #include <log/message_dictionary.h>
 #include <log/message_types.h>
-#include <log/strutil.h>
 #include <log/xdebuglevel.h>
 
+#include <util/strutil.h>
+
 using namespace std;
 
 namespace isc {
diff --git a/src/lib/log/message_reader.cc b/src/lib/log/message_reader.cc
index 4402b0e..9d936a1 100644
--- a/src/lib/log/message_reader.cc
+++ b/src/lib/log/message_reader.cc
@@ -21,7 +21,7 @@
 #include <log/message_exception.h>
 #include <log/messagedef.h>
 #include <log/message_reader.h>
-#include <log/strutil.h>
+#include <util/strutil.h>
 
 using namespace std;
 
diff --git a/src/lib/log/strutil.cc b/src/lib/log/strutil.cc
deleted file mode 100644
index 65fb0cd..0000000
--- a/src/lib/log/strutil.cc
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <numeric>
-
-#include <string.h>
-#include <strutil.h>
-
-using namespace std;
-
-namespace isc {
-namespace strutil {
-
-// Normalize slashes
-
-void
-normalizeSlash(std::string& name) {
-    if (!name.empty()) {
-        size_t pos = 0;
-        while ((pos = name.find('\\', pos)) != std::string::npos) {
-            name[pos] = '/';
-        }
-    }
-}
-
-// Trim String
-
-string
-trim(const string& instring) {
-    static const char* blanks = " \t\n";
-
-    string retstring = "";
-    if (!instring.empty()) {
-
-        // Search for first non-blank character in the string
-        size_t first = instring.find_first_not_of(blanks);
-        if (first != string::npos) {
-
-            // String not all blanks, so look for last character
-            size_t last = instring.find_last_not_of(blanks);
-
-            // Extract the trimmed substring
-            retstring = instring.substr(first, (last - first + 1));
-        }
-    }
-
-    return (retstring);
-}
-
-// Tokenise string.  As noted in the header, this is locally written to avoid
-// another dependency on a Boost library.
-
-vector<string>
-tokens(const std::string& text, const std::string& delim) {
-    vector<string> result;
-
-    // Search for the first non-delimiter character
-    size_t start = text.find_first_not_of(delim);
-    while (start != string::npos) {
-
-        // Non-delimiter found, look for next delimiter
-        size_t end = text.find_first_of(delim, start);
-        if (end != string::npos) {
-
-            // Delimiter found, so extract string & search for start of next
-            // non-delimiter segment.
-            result.push_back(text.substr(start, (end - start)));
-            start = text.find_first_not_of(delim, end);
-
-        } else {
-
-            // End of string found, extract rest of string and flag to exit
-            result.push_back(text.substr(start));
-            start = string::npos;
-        }
-    }
-
-    return (result);
-}
-
-// Local function to pass to accumulate() for summing up string lengths.
-
-namespace {
-
-size_t
-lengthSum(string::size_type curlen, const string& cur_string) {
-    return (curlen + cur_string.size());
-}
-
-}
-
-// Provide printf-style formatting.
-
-std::string
-format(const std::string& format, const std::vector<std::string>& args) {
-
-    static const string flag = "%s";
-
-    // Initialize return string.  To speed things up, we'll reserve an
-    // appropriate amount of space - current string size, plus length of all
-    // the argument strings, less two characters for each argument (the %s in
-    // the format string is being replaced).
-    string result;
-    size_t length = accumulate(args.begin(), args.end(), format.size(),
-        lengthSum) - (args.size() * flag.size());
-    result.reserve(length);
-
-    // Iterate through replacing all tokens
-    result = format;
-    size_t tokenpos = 0;    // Position of last token replaced
-    int i = 0;              // Index into argument array
-
-    while ((i < args.size()) && (tokenpos != string::npos)) {
-        tokenpos = result.find(flag, tokenpos);
-        if (tokenpos != string::npos) {
-            result.replace(tokenpos, flag.size(), args[i++]);
-        }
-    }
-
-    return (result);
-}
-
-} // namespace log
-} // namespace isc
diff --git a/src/lib/log/strutil.h b/src/lib/log/strutil.h
deleted file mode 100644
index 087410f..0000000
--- a/src/lib/log/strutil.h
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __STRUTIL_H
-#define __STRUTIL_H
-
-#include <algorithm>
-#include <cctype>
-#include <string>
-#include <vector>
-
-namespace isc {
-namespace strutil {
-
-/// \brief A Set of C++ Utilities for Manipulating Strings
-
-/// \brief Normalize Backslash
-///
-/// Only relevant to Windows, this replaces all "\" in a string with "/" and
-/// returns the result.  On other systems it is a no-op.  Note that Windows does
-/// recognise file names with the "\" replaced by "/" (at least in system calls,
-/// if not the command line).
-///
-/// \param name Name to be substituted
-void normalizeSlash(std::string& name);
-
-
-/// \brief Trim Leading and Trailing Spaces
-///
-/// Returns a copy of the input string but with any leading or trailing spaces
-/// or tabs removed.
-///
-/// \param instring Input string to modify
-///
-/// \return String with leading and trailing spaces removed
-std::string trim(const std::string& instring);
-
-
-/// \brief Split String into Tokens
-///
-/// Splits a string into tokens (the tokens being delimited by one or more of
-/// the delimiter characters) and returns the tokens in a vector array. Note
-/// that adjacent delimiters are considered to be a single delimiter.
-///
-/// Special cases are:
-/// -# The empty string is considered to be zero tokens.
-/// -# A string comprising nothing but delimiters is considered to be zero
-///    tokens.
-///
-/// The reasoning behind this is that the string can be thought of as having
-/// invisible leading and trailing delimiter characters.  Therefore both cases
-/// reduce to a set of contiguous delimiters, which are considered a single
-/// delimiter (so getting rid of the string).
-///
-/// We could use Boost for this, but this (simple) function eliminates one
-/// dependency in the code.
-///
-/// \param text String to be split.  Passed by value as the internal copy is
-/// altered during the processing.
-/// \param delim Delimiter characters
-///
-/// \return Vector of tokens.
-std::vector<std::string> tokens(const std::string& text,
-        const std::string& delim = std::string(" \t\n"));
-
-
-/// \brief Uppercase Character
-///
-/// Used in uppercase() to pass as an argument to std::transform().  The
-/// function std::toupper() can't be used as it takes an "int" as its argument;
-/// this confuses the template expansion mechanism because dereferencing a
-/// string::iterator returns a char.
-///
-/// \param chr Character to be upper-cased.
-///
-/// \return Uppercase version of the argument
-inline char toUpper(char chr) {
-    return (static_cast<char>(std::toupper(static_cast<int>(chr))));
-}
-
-
-/// \brief Uppercase String
-///
-/// A convenience function to uppercase a string.
-///
-/// \param text String to be upper-cased.
-inline void uppercase(std::string& text) {
-    std::transform(text.begin(), text.end(), text.begin(),
-        isc::strutil::toUpper);
-}
-
-/// \brief Lowercase Character
-///
-/// Used in lowercase() to pass as an argument to std::transform().  The
-/// function std::tolower() can't be used as it takes an "int" as its argument;
-/// this confuses the template expansion mechanism because dereferencing a
-/// string::iterator returns a char.
-///
-/// \param chr Character to be lower-cased.
-///
-/// \return Lowercase version of the argument
-inline char toLower(char chr) {
-    return (static_cast<char>(std::tolower(static_cast<int>(chr))));
-}
-
-/// \brief Lowercase String
-///
-/// A convenience function to lowercase a string
-///
-/// \param text String to be lower-cased.
-inline void lowercase(std::string& text) {
-    std::transform(text.begin(), text.end(), text.begin(),
-        isc::strutil::toLower);
-}
-
-
-/// \brief Apply Formatting
-///
-/// Given a printf-style format string containing only "%s" place holders
-/// (others are ignored) and a vector of strings, this produces a single string
-/// with the placeholders replaced.
-///
-/// \param format Format string
-/// \param args Vector of argument strings
-///
-/// \return Resultant string
-std::string format(const std::string& format,
-    const std::vector<std::string>& args);
-
-
-} // namespace strutil
-} // namespace isc
-
-#endif // __STRUTIL_H
diff --git a/src/lib/log/tests/Makefile.am b/src/lib/log/tests/Makefile.am
index 1845706..b9fe150 100644
--- a/src/lib/log/tests/Makefile.am
+++ b/src/lib/log/tests/Makefile.am
@@ -3,6 +3,7 @@ SUBDIRS = .
 AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES)
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/log -I$(top_builddir)/src/lib/log
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CXXFLAGS = $(B10_CXXFLAGS)
 
 if USE_STATIC_LINK
@@ -15,13 +16,11 @@ TESTS =
 if HAVE_GTEST
 TESTS += run_unittests
 run_unittests_SOURCES  = root_logger_name_unittest.cc
-run_unittests_SOURCES += filename_unittest.cc
 run_unittests_SOURCES += logger_unittest.cc
 run_unittests_SOURCES += message_dictionary_unittest.cc
 run_unittests_SOURCES += message_reader_unittest.cc
 run_unittests_SOURCES += message_initializer_unittest.cc
 run_unittests_SOURCES += message_initializer_unittest_2.cc
-run_unittests_SOURCES += strutil_unittest.cc
 run_unittests_SOURCES += run_unittests.cc
 
 run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
@@ -29,6 +28,7 @@ run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
 
 run_unittests_LDADD  = $(GTEST_LDADD)
 run_unittests_LDADD += $(top_builddir)/src/lib/log/liblog.la
+run_unittests_LDADD += $(top_builddir)/src/lib/util/libutil.la
 endif
 
 TESTS += logger_support_test
@@ -36,6 +36,7 @@ logger_support_test_SOURCES = logger_support_test.cc
 logger_support_test_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
 logger_support_test_LDFLAGS = $(AM_LDFLAGS)
 logger_support_test_LDADD  = $(top_builddir)/src/lib/log/liblog.la
+logger_support_test_LDADD += $(top_builddir)/src/lib/util/libutil.la
 
 noinst_PROGRAMS = $(TESTS)
 
diff --git a/src/lib/log/tests/filename_unittest.cc b/src/lib/log/tests/filename_unittest.cc
deleted file mode 100644
index f3032eb..0000000
--- a/src/lib/log/tests/filename_unittest.cc
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <string>
-
-#include <gtest/gtest.h>
-
-#include <log/filename.h>
-
-using namespace isc;
-using namespace isc::log;
-using namespace std;
-
-class FilenameTest : public ::testing::Test {
-protected:
-    FilenameTest()
-    {
-    }
-};
-
-
-// Check that the name can be changed
-
-TEST_F(FilenameTest, SetName) {
-    Filename fname("/a/b/c.d");
-    EXPECT_EQ("/a/b/c.d", fname.fullName());
-
-    fname.setName("test.txt");
-    EXPECT_EQ("test.txt", fname.fullName());
-}
-
-
-// Check that the components are split correctly.  This is a check of the
-// private member split() method.
-
-TEST_F(FilenameTest, Components) {
-
-    // Complete name
-    Filename fname("/alpha/beta/gamma.delta");
-    EXPECT_EQ("/alpha/beta/", fname.directory());
-    EXPECT_EQ("gamma", fname.name());
-    EXPECT_EQ(".delta", fname.extension());
-
-    // Directory only
-    fname.setName("/gamma/delta/");
-    EXPECT_EQ("/gamma/delta/", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    // Filename only
-    fname.setName("epsilon");
-    EXPECT_EQ("", fname.directory());
-    EXPECT_EQ("epsilon", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    // Extension only
-    fname.setName(".zeta");
-    EXPECT_EQ("", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ(".zeta", fname.extension());
-
-    // Missing directory
-    fname.setName("eta.theta");
-    EXPECT_EQ("", fname.directory());
-    EXPECT_EQ("eta", fname.name());
-    EXPECT_EQ(".theta", fname.extension());
-
-    // Missing filename
-    fname.setName("/iota/.kappa");
-    EXPECT_EQ("/iota/", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ(".kappa", fname.extension());
-
-    // Missing extension
-    fname.setName("lambda/mu/nu");
-    EXPECT_EQ("lambda/mu/", fname.directory());
-    EXPECT_EQ("nu", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    // Check that the decomposition can occur in the presence of leading and
-    // trailing spaces
-    fname.setName("  lambda/mu/nu\t  ");
-    EXPECT_EQ("lambda/mu/", fname.directory());
-    EXPECT_EQ("nu", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    // Empty string
-    fname.setName("");
-    EXPECT_EQ("", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    // ... and just spaces
-    fname.setName("  ");
-    EXPECT_EQ("", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    // Check corner cases - where separators are present, but strings are
-    // absent.
-    fname.setName("/");
-    EXPECT_EQ("/", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ("", fname.extension());
-
-    fname.setName(".");
-    EXPECT_EQ("", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ(".", fname.extension());
-
-    fname.setName("/.");
-    EXPECT_EQ("/", fname.directory());
-    EXPECT_EQ("", fname.name());
-    EXPECT_EQ(".", fname.extension());
-
-    // Note that the space is a valid filename here; only leading and trailing
-    // spaces should be trimmed.
-    fname.setName("/ .");
-    EXPECT_EQ("/", fname.directory());
-    EXPECT_EQ(" ", fname.name());
-    EXPECT_EQ(".", fname.extension());
-
-    fname.setName(" / . ");
-    EXPECT_EQ("/", fname.directory());
-    EXPECT_EQ(" ", fname.name());
-    EXPECT_EQ(".", fname.extension());
-}
-
-// Check that the expansion with a default works.
-
-TEST_F(FilenameTest, ExpandWithDefault) {
-    Filename fname("a.b");
-
-    // These tests also check that the trimming of the default component is
-    // done properly.
-    EXPECT_EQ("/c/d/a.b", fname.expandWithDefault(" /c/d/  "));
-    EXPECT_EQ("/c/d/a.b", fname.expandWithDefault("/c/d/e.f"));
-    EXPECT_EQ("a.b", fname.expandWithDefault("e.f"));
-
-    fname.setName("/a/b/c");
-    EXPECT_EQ("/a/b/c.d", fname.expandWithDefault(".d"));
-    EXPECT_EQ("/a/b/c.d", fname.expandWithDefault("x.d"));
-    EXPECT_EQ("/a/b/c.d", fname.expandWithDefault("/s/t/u.d"));
-    EXPECT_EQ("/a/b/c", fname.expandWithDefault("/s/t/u"));
-
-    fname.setName(".h");
-    EXPECT_EQ("/a/b/c.h", fname.expandWithDefault("/a/b/c.msg"));
-}
-
-// Check that we can use this as a default in expanding a filename
-
-TEST_F(FilenameTest, UseAsDefault) {
-
-    Filename fname("a.b");
-
-    // These tests also check that the trimming of the default component is
-    // done properly.
-    EXPECT_EQ("/c/d/a.b", fname.useAsDefault(" /c/d/  "));
-    EXPECT_EQ("/c/d/e.f", fname.useAsDefault("/c/d/e.f"));
-    EXPECT_EQ("e.f", fname.useAsDefault("e.f"));
-
-    fname.setName("/a/b/c");
-    EXPECT_EQ("/a/b/c.d", fname.useAsDefault(".d"));
-    EXPECT_EQ("/a/b/x.d", fname.useAsDefault("x.d"));
-    EXPECT_EQ("/s/t/u.d", fname.useAsDefault("/s/t/u.d"));
-    EXPECT_EQ("/s/t/u", fname.useAsDefault("/s/t/u"));
-    EXPECT_EQ("/a/b/c", fname.useAsDefault(""));
-}
diff --git a/src/lib/log/tests/strutil_unittest.cc b/src/lib/log/tests/strutil_unittest.cc
deleted file mode 100644
index b3fceef..0000000
--- a/src/lib/log/tests/strutil_unittest.cc
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <string>
-
-#include <gtest/gtest.h>
-
-#include <log/strutil.h>
-
-using namespace isc;
-using namespace std;
-
-class StringUtilTest : public ::testing::Test {
-protected:
-    StringUtilTest()
-    {
-    }
-};
-
-
-// Check for slash replacement
-
-TEST_F(StringUtilTest, Slash) {
-
-    string instring = "";
-    isc::strutil::normalizeSlash(instring);
-    EXPECT_EQ("", instring);
-
-    instring = "C:\\A\\B\\C.D";
-    isc::strutil::normalizeSlash(instring);
-    EXPECT_EQ("C:/A/B/C.D", instring);
-
-    instring = "// \\ //";
-    isc::strutil::normalizeSlash(instring);
-    EXPECT_EQ("// / //", instring);
-}
-
-// Check that leading and trailing space trimming works
-
-TEST_F(StringUtilTest, Trim) {
-
-    // Empty and full string.
-    EXPECT_EQ("", isc::strutil::trim(""));
-    EXPECT_EQ("abcxyz", isc::strutil::trim("abcxyz"));
-
-    // Trim right-most blanks
-    EXPECT_EQ("ABC", isc::strutil::trim("ABC   "));
-    EXPECT_EQ("ABC", isc::strutil::trim("ABC\t\t  \n\t"));
-
-    // Left-most blank trimming
-    EXPECT_EQ("XYZ", isc::strutil::trim("  XYZ"));
-    EXPECT_EQ("XYZ", isc::strutil::trim("\t\t  \tXYZ"));
-
-    // Right and left, with embedded spaces
-    EXPECT_EQ("MN \t OP", isc::strutil::trim("\t\tMN \t OP \t"));
-}
-
-// Check tokenization.  Note that ASSERT_EQ is used to check the size of the
-// returned vector; if not as expected, the following references may be invalid
-// so should not be used.
-
-TEST_F(StringUtilTest, Tokens) {
-    vector<string>  result;
-
-    // Default delimiters
-
-    // Degenerate cases
-    result = isc::strutil::tokens("");          // Empty string
-    EXPECT_EQ(0, result.size());
-
-    result = isc::strutil::tokens(" \n ");      // String is all delimiters
-    EXPECT_EQ(0, result.size());
-
-    result = isc::strutil::tokens("abc");       // String has no delimiters
-    ASSERT_EQ(1, result.size());
-    EXPECT_EQ(string("abc"), result[0]);
-
-    // String containing leading and/or trailing delimiters, no embedded ones.
-    result = isc::strutil::tokens("\txyz");     // One leading delimiter
-    ASSERT_EQ(1, result.size());
-    EXPECT_EQ(string("xyz"), result[0]);
-
-    result = isc::strutil::tokens("\t \nxyz");  // Multiple leading delimiters
-    ASSERT_EQ(1, result.size());
-    EXPECT_EQ(string("xyz"), result[0]);
-
-    result = isc::strutil::tokens("xyz\n");     // One trailing delimiter
-    ASSERT_EQ(1, result.size());
-    EXPECT_EQ(string("xyz"), result[0]);
-
-    result = isc::strutil::tokens("xyz  \t");   // Multiple trailing
-    ASSERT_EQ(1, result.size());
-    EXPECT_EQ(string("xyz"), result[0]);
-
-    result = isc::strutil::tokens("\t xyz \n"); // Leading and trailing
-    ASSERT_EQ(1, result.size());
-    EXPECT_EQ(string("xyz"), result[0]);
-
-    // Embedded delimiters
-    result = isc::strutil::tokens("abc\ndef");  // 2 tokens, one separator
-    ASSERT_EQ(2, result.size());
-    EXPECT_EQ(string("abc"), result[0]);
-    EXPECT_EQ(string("def"), result[1]);
-
-    result = isc::strutil::tokens("abc\t\t\ndef");  // 2 tokens, 3 separators
-    ASSERT_EQ(2, result.size());
-    EXPECT_EQ(string("abc"), result[0]);
-    EXPECT_EQ(string("def"), result[1]);
-
-    result = isc::strutil::tokens("abc\n  \tdef\t\tghi");
-    ASSERT_EQ(3, result.size());                // Multiple tokens, many delims
-    EXPECT_EQ(string("abc"), result[0]);
-    EXPECT_EQ(string("def"), result[1]);
-    EXPECT_EQ(string("ghi"), result[2]);
-
-    // Embedded and non-embedded delimiters
-
-    result = isc::strutil::tokens("\t\t  \nabc\n  \tdef\t\tghi   \n\n");
-    ASSERT_EQ(3, result.size());                // Multiple tokens, many delims
-    EXPECT_EQ(string("abc"), result[0]);
-    EXPECT_EQ(string("def"), result[1]);
-    EXPECT_EQ(string("ghi"), result[2]);
-
-    // Non-default delimiter
-    result = isc::strutil::tokens("alpha/beta/ /gamma//delta/epsilon/", "/");
-    ASSERT_EQ(6, result.size());
-    EXPECT_EQ(string("alpha"), result[0]);
-    EXPECT_EQ(string("beta"), result[1]);
-    EXPECT_EQ(string(" "), result[2]);
-    EXPECT_EQ(string("gamma"), result[3]);
-    EXPECT_EQ(string("delta"), result[4]);
-    EXPECT_EQ(string("epsilon"), result[5]);
-
-    // Non-default delimiters (plural)
-    result = isc::strutil::tokens("+*--alpha*beta+ -gamma**delta+epsilon-+**",
-        "*+-");
-    ASSERT_EQ(6, result.size());
-    EXPECT_EQ(string("alpha"), result[0]);
-    EXPECT_EQ(string("beta"), result[1]);
-    EXPECT_EQ(string(" "), result[2]);
-    EXPECT_EQ(string("gamma"), result[3]);
-    EXPECT_EQ(string("delta"), result[4]);
-    EXPECT_EQ(string("epsilon"), result[5]);
-}
-
-// Changing case
-
-TEST_F(StringUtilTest, ChangeCase) {
-    string mixed("abcDEFghiJKLmno123[]{=+--+]}");
-    string upper("ABCDEFGHIJKLMNO123[]{=+--+]}");
-    string lower("abcdefghijklmno123[]{=+--+]}");
-
-    string test = mixed;
-    isc::strutil::lowercase(test);
-    EXPECT_EQ(lower, test);
-
-    test = mixed;
-    isc::strutil::uppercase(test);
-    EXPECT_EQ(upper, test);
-}
-
-// Formatting
-
-TEST_F(StringUtilTest, Formatting) {
-
-    vector<string> args;
-    args.push_back("arg1");
-    args.push_back("arg2");
-    args.push_back("arg3");
-
-    string format1 = "This is a string with no tokens";
-    EXPECT_EQ(format1, isc::strutil::format(format1, args));
-
-    string format2 = "";    // Empty string
-    EXPECT_EQ(format2, isc::strutil::format(format2, args));
-
-    string format3 = "   ";    // Empty string
-    EXPECT_EQ(format3, isc::strutil::format(format3, args));
-
-    string format4 = "String with %d non-string tokens %lf";
-    EXPECT_EQ(format4, isc::strutil::format(format4, args));
-
-    string format5 = "String with %s correct %s number of tokens %s";
-    string result5 = "String with arg1 correct arg2 number of tokens arg3";
-    EXPECT_EQ(result5, isc::strutil::format(format5, args));
-
-    string format6 = "String with %s too %s few tokens";
-    string result6 = "String with arg1 too arg2 few tokens";
-    EXPECT_EQ(result6, isc::strutil::format(format6, args));
-
-    string format7 = "String with %s too %s many %s tokens %s !";
-    string result7 = "String with arg1 too arg2 many arg3 tokens %s !";
-    EXPECT_EQ(result7, isc::strutil::format(format7, args));
-
-    string format8 = "String with embedded%s%s%stokens";
-    string result8 = "String with embeddedarg1arg2arg3tokens";
-    EXPECT_EQ(result8, isc::strutil::format(format8, args));
-
-    // Handle an empty vector
-    args.clear();
-    string format9 = "%s %s";
-    EXPECT_EQ(format9, isc::strutil::format(format9, args));
-}
diff --git a/src/lib/nsas/Makefile.am b/src/lib/nsas/Makefile.am
index 43300f6..5f05f1b 100644
--- a/src/lib/nsas/Makefile.am
+++ b/src/lib/nsas/Makefile.am
@@ -3,6 +3,7 @@ SUBDIRS = . tests
 AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES) $(MULTITHREADING_FLAG)
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/dns -I$(top_builddir)/src/lib/dns
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/nsas -I$(top_builddir)/src/lib/nsas
 AM_CPPFLAGS += $(SQLITE_CFLAGS)
 AM_CXXFLAGS = $(B10_CXXFLAGS)
@@ -25,9 +26,7 @@ libnsas_la_SOURCES += asiolink.h
 libnsas_la_SOURCES += hash.cc hash.h
 libnsas_la_SOURCES += hash_deleter.h
 libnsas_la_SOURCES += hash_key.cc hash_key.h
-libnsas_la_SOURCES += locks.h
 libnsas_la_SOURCES += hash_table.h
-libnsas_la_SOURCES += lru_list.h
 libnsas_la_SOURCES += nameserver_address_store.cc nameserver_address_store.h
 libnsas_la_SOURCES += nameserver_address.h nameserver_address.cc
 libnsas_la_SOURCES += nameserver_entry.cc nameserver_entry.h
@@ -36,7 +35,6 @@ libnsas_la_SOURCES += nsas_entry.h nsas_types.h
 libnsas_la_SOURCES += zone_entry.cc zone_entry.h
 libnsas_la_SOURCES += fetchable.h
 libnsas_la_SOURCES += address_request_callback.h
-libnsas_la_SOURCES += random_number_generator.h
 libnsas_la_SOURCES += glue_hints.h glue_hints.cc
 
 CLEANFILES = *.gcno *.gcda
diff --git a/src/lib/nsas/hash_deleter.h b/src/lib/nsas/hash_deleter.h
index 29a32d7..27f066e 100644
--- a/src/lib/nsas/hash_deleter.h
+++ b/src/lib/nsas/hash_deleter.h
@@ -16,8 +16,9 @@
 #define __HASH_DELETER_H
 
 #include <boost/shared_ptr.hpp>
+#include <util/lru_list.h>
+
 #include "hash_table.h"
-#include "lru_list.h"
 
 namespace isc {
 namespace nsas {
@@ -31,7 +32,7 @@ namespace nsas {
 /// hash table without the need to be declared as "friend" or the need
 /// to define accessor methods.
 template <typename T>
-class HashDeleter : public LruList<T>::Dropped {
+class HashDeleter : public isc::util::LruList<T>::Dropped {
 public:
 
     /// \brief Constructor
diff --git a/src/lib/nsas/hash_table.h b/src/lib/nsas/hash_table.h
index c4a9913..1a9de5e 100644
--- a/src/lib/nsas/hash_table.h
+++ b/src/lib/nsas/hash_table.h
@@ -19,7 +19,8 @@
 
 #include <boost/shared_ptr.hpp>
 
-#include "locks.h"
+#include <util/locks.h>
+
 #include "hash.h"
 #include "hash_key.h"
 
diff --git a/src/lib/nsas/locks.h b/src/lib/nsas/locks.h
deleted file mode 100644
index 98197c3..0000000
--- a/src/lib/nsas/locks.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-/// This file (right now) provides dummy locks
-/// It also contains code to use boost/threads locks:
-///
-/// if USE_BOOST_THREADS is defined, we typedef the relevant classes
-/// and derive from the relevant templates so our dummy locks are
-/// replaced by the boost locks (--enable-boost-threads)
-///
-/// If USE_BOOST_THREADS is NOT defined, all locks are dummy classes
-/// that don't actually do anything. At this moment, only the very
-/// minimal set of methods that we actually use is defined.
-///
-/// Note that we need to include <config.h> in our .cc files for that
-/// to be set. we might want to enfore this at compile time with a check
-/// (TODO)
-/// Note that this also contains a workaround for Sunstudio; which
-/// probably won't completely work right now (that is, if the TODO
-/// above is completed), since that would also require some changes
-/// in most (at first glance unrelated) Makefiles
-/// (TODO2)
-
-#ifndef __LOCKS_
-#define __LOCKS_
-
-#ifndef USE_BOOST_THREADS
-
-namespace isc {
-namespace locks {
-
-class mutex {
-};
-
-class recursive_mutex {
-};
-
-class upgradable_mutex {
-};
-
-template <typename T>
-class sharable_lock {
-public:
-    sharable_lock(T) { }
-};
-
-template <typename T>
-class scoped_lock {
-public:
-    scoped_lock(T) { }
-
-    void lock() {}
-    void unlock() {}
-};
-
-}
-}
-
-#else // USE_BOOST_THREADS
-
-// Workaround for a problem with boost and sunstudio 5.10
-// There is a version check in there that appears wrong,
-// which makes including boost/thread.hpp fail
-// This will probably be fixed in a future version of boost,
-// in which case this part can be removed then
-#ifdef NEED_SUNPRO_WORKAROUND
-#if defined(__SUNPRO_CC) && __SUNPRO_CC == 0x5100
-#undef __SUNPRO_CC
-#define __SUNPRO_CC 0x5090
-#endif
-#endif // NEED_SUNPRO_WORKAROUND
-
-#include <boost/thread.hpp>
-#include <boost/interprocess/sync/sharable_lock.hpp>
-#include <boost/interprocess/sync/scoped_lock.hpp>
-#include <boost/interprocess/sync/interprocess_upgradable_mutex.hpp>
-#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>
-
-namespace isc {
-namespace locks {
-
-typedef boost::mutex mutex;
-typedef boost::interprocess::interprocess_upgradable_mutex upgradable_mutex;
-typedef boost::interprocess::interprocess_recursive_mutex recursive_mutex;
-
-template <typename T>
-struct sharable_lock : public boost::interprocess::sharable_lock<T> {
-public:
-    sharable_lock(T&  mtype) : boost::interprocess::sharable_lock<T>(mtype) {}
-};
-
-
-template <class T>
-struct scoped_lock : public boost::interprocess::scoped_lock<T> {
-public:
-    scoped_lock(T& mtype) : boost::interprocess::scoped_lock<T>(mtype) { }
-};
-
-}
-}
-
-
-#endif // USE_BOOST_THREADS
-
-#endif // __LOCKS_
diff --git a/src/lib/nsas/lru_list.h b/src/lib/nsas/lru_list.h
deleted file mode 100644
index b057baf..0000000
--- a/src/lib/nsas/lru_list.h
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __LRU_LIST_H
-#define __LRU_LIST_H
-
-#include <list>
-#include <string>
-
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include "locks.h"
-
-namespace isc {
-namespace nsas {
-
-/// \brief LRU List
-///
-/// Provides the LRU list for the zone and nameserver objects.  The list is
-/// created with a specific size.  Entries are added to the back of the list
-/// and removed from the front.  It is also possible to pull an element out
-/// of the middle of the list and add it to the end of the list, an action that
-/// should be done when the element is referenced.
-///
-/// It is not intended that the class be copied, and the derivation from
-/// boost::noncopyable enforces this.
-template <typename T>
-class LruList : boost::noncopyable {
-public:
-    typedef typename std::list<boost::shared_ptr<T> > lru_list;
-    typedef typename lru_list::iterator               iterator;
-
-    /// \brief Dropped Operation
-    ///
-    /// When an object is dropped from the LRU list because it has not been
-    /// accessed for some time, it is possible that the action should trigger
-    /// some other functions.  For this reason, it is possible to register
-    /// a list-wide functor object to execute in this casee.
-    ///
-    /// Note that the function does not execute as the result of a call to
-    /// remove() - that is an explicit call and it is assumed that the caller
-    /// will handle any additional operations needed.
-    class Dropped {
-    public:
-        /// \brief Constructor
-        Dropped(){}
-
-        /// \brief Virtual Destructor
-        virtual ~Dropped(){}
-
-        /// \brief Dropped Object Handler
-        ///
-        /// Function object called when the object drops off the end of the
-        /// LRU list.
-        ///
-        /// \param drop Object being dropped.
-        virtual void operator()(T* drop) const = 0;
-    };
-
-    /// \brief Constructor
-    ///
-    /// \param max_size Maximum size of the list before elements are dropped.
-    /// \param dropped Pointer to a function object that will get called as
-    /// elements are dropped.  This object will be stored using a shared_ptr,
-    /// so should be allocated with new().
-    LruList(uint32_t max_size = 1000, Dropped* dropped = NULL) :
-        max_size_(max_size), count_(0), dropped_(dropped)
-    {}
-
-    /// \brief Virtual Destructor
-    virtual ~LruList()
-    {}
-
-    /// \brief Add Element
-    ///
-    /// Add a new element to the end of the list.
-    ///
-    /// \param element Reference to the element to add.
-    ///
-    /// \return Handle describing the element in the LRU list.
-    virtual void add(boost::shared_ptr<T>& element);
-
-    /// \brief Remove Element
-    ///
-    /// Removes an element from the list.  If the element is not present (i.e.
-    /// its internal list pointer is invalid), this is a no-op.
-    ///
-    /// \param element Reference to the element to remove.
-    virtual void remove(boost::shared_ptr<T>& element);
-
-    /// \brief Touch Element
-    ///
-    /// The name comes from the Unix "touch" command.  All this does is to
-    /// move the specified entry from the middle of the list to the end of
-    /// the list.
-    ///
-    /// \param element Reference to the element to touch.
-    virtual void touch(boost::shared_ptr<T>& element);
-
-    /// \brief Drop All the Elements in the List .
-    ///
-    /// All the elements will be dropped from the list container, and their
-    /// drop handler(if there is one) will be called, when done, the size of
-    /// of list will be 0.
-    virtual void clear();
-
-    /// \brief Return Size of the List
-    ///
-    /// An independent count is kept of the list size, as list.size() may take
-    /// some time if the list is big.
-    ///
-    /// \return Number of elements in the list
-    virtual uint32_t size() const {
-
-        // Don't bother to lock the mutex.  If an update is in progress, we
-        // receive either the value just before the update or just after it.
-        // Either way, this call could have come just before or just after
-        // that operation, so the value would have been just as uncertain.
-        return count_;
-    }
-
-    /// \brief Return Maximum Size
-    ///
-    /// \return Maximum size of the list
-    virtual uint32_t getMaxSize() const {
-        return max_size_;
-    }
-
-    /// \brief Set Maximum Size
-    ///
-    /// \param max_size New maximum list size
-    virtual void setMaxSize(uint32_t max_size) {
-        max_size_ = max_size;
-    }
-
-private:
-    isc::locks::mutex                   mutex_;     ///< List protection
-    std::list<boost::shared_ptr<T> >    lru_;       ///< The LRU list itself
-    uint32_t                            max_size_;  ///< Max size of the list
-    uint32_t                            count_;     ///< Count of elements
-    boost::shared_ptr<Dropped>          dropped_;   ///< Dropped object
-};
-
-// Add entry to the list
-template <typename T>
-void LruList<T>::add(boost::shared_ptr<T>& element) {
-
-    // Protect list against concurrent access
-    isc::locks::scoped_lock<isc::locks::mutex> lock(mutex_);
-
-    // Add the entry and set its pointer field to point into the list.
-    // insert() is used to get the pointer.
-    element->setLruIterator(lru_.insert(lru_.end(), element));
-
-    // ... and update the count while we have the mutex.
-    ++count_;
-
-    // If the count takes us above the maximum size of the list, remove elements
-    // from the front.  The current list size could be more than one above the
-    // maximum size of the list if the maximum size was changed after
-    // construction.
-    while (count_ > max_size_) {
-        if (!lru_.empty()) {
-
-            // Run the drop handler (if there is one) on the
-
-            // to-be-dropped object.
-            if (dropped_) {
-                (*dropped_)(lru_.begin()->get());
-            }
-
-            // ... and get rid of it from the list
-            lru_.pop_front();
-            --count_;
-        }
-        else {
-
-            // TODO: Log this condition (count_ > 0 when list empty) -
-            // it should not happen
-            count_ = 0;
-            break;
-        }
-    }
-}
-
-// Remove an element from the list
-template <typename T>
-void LruList<T>::remove(boost::shared_ptr<T>& element) {
-
-    // An element can only be removed it its internal pointer is valid.
-    // If it is, the pointer can be used to access the list because no matter
-    // what other elements are added or removed, the pointer remains valid.
-    //
-    // If the pointer is not valid, this is a no-op.
-    if (element->iteratorValid()) {
-
-        // Is valid, so protect list against concurrent access
-        isc::locks::scoped_lock<isc::locks::mutex> lock(mutex_);
-
-        lru_.erase(element->getLruIterator());  // Remove element from list
-        element->invalidateIterator();          // Invalidate pointer
-        --count_;                               // One less element
-    }
-}
-
-// Touch an element - remove it from the list and add to the end
-template <typename T>
-void LruList<T>::touch(boost::shared_ptr<T>& element) {
-
-    // As before, if the pointer is not valid, this is a no-op.
-    if (element->iteratorValid()) {
-
-        // Protect list against concurrent access
-        isc::locks::scoped_lock<isc::locks::mutex> lock(mutex_);
-
-        // Move the element to the end of the list.
-        lru_.splice(lru_.end(), lru_, element->getLruIterator());
-
-        // Update the iterator in the element to point to it.  We can
-        // offset from end() as a list has a bidirectional iterator.
-        iterator i = lru_.end();
-        element->setLruIterator(--i);
-    }
-}
-
-// Clear the list-  when done, the size of list will be 0.
-template <typename T>
-void LruList<T>::clear() {
-    // Protect list against concurrent access
-    isc::locks::scoped_lock<isc::locks::mutex> lock(mutex_);
-
-    // ... and update the count while we have the mutex.
-    count_ = 0;
-    typename std::list<boost::shared_ptr<T> >::iterator iter;
-    if (dropped_) {
-        for (iter = lru_.begin(); iter != lru_.end(); ++iter) {
-            // Call the drop handler.
-            (*dropped_)(iter->get());
-        }
-    }
-
-    lru_.clear();
-}
-
-}   // namespace nsas
-}   // namespace isc
-
-#endif // __LRU_LIST_H
diff --git a/src/lib/nsas/nameserver_address_store.cc b/src/lib/nsas/nameserver_address_store.cc
index e92c177..3cef38d 100644
--- a/src/lib/nsas/nameserver_address_store.cc
+++ b/src/lib/nsas/nameserver_address_store.cc
@@ -20,10 +20,10 @@
 
 #include <config.h>
 #include <dns/rdataclass.h>
+#include <util/locks.h>
+#include <util/lru_list.h>
 
-#include "locks.h"
 #include "hash_table.h"
-#include "lru_list.h"
 #include "hash_deleter.h"
 #include "nsas_entry_compare.h"
 #include "nameserver_entry.h"
@@ -50,9 +50,9 @@ NameserverAddressStore::NameserverAddressStore(
         zonehashsize)),
     nameserver_hash_(new HashTable<NameserverEntry>(
         new NsasEntryCompare<NameserverEntry>, nshashsize)),
-    zone_lru_(new LruList<ZoneEntry>((3 * zonehashsize),
+    zone_lru_(new isc::util::LruList<ZoneEntry>((3 * zonehashsize),
         new HashDeleter<ZoneEntry>(*zone_hash_))),
-    nameserver_lru_(new LruList<NameserverEntry>((3 * nshashsize),
+    nameserver_lru_(new isc::util::LruList<NameserverEntry>((3 * nshashsize),
         new HashDeleter<NameserverEntry>(*nameserver_hash_))),
     resolver_(resolver.get())
 { }
@@ -70,7 +70,7 @@ newZone(
     isc::resolve::ResolverInterface* resolver,
     const string* zone, const RRClass* class_code,
     const boost::shared_ptr<HashTable<NameserverEntry> >* ns_hash,
-    const boost::shared_ptr<LruList<NameserverEntry> >* ns_lru)
+    const boost::shared_ptr<isc::util::LruList<NameserverEntry> >* ns_lru)
 {
     boost::shared_ptr<ZoneEntry> result(new ZoneEntry(resolver, *zone, *class_code,
         *ns_hash, *ns_lru));
diff --git a/src/lib/nsas/nameserver_address_store.h b/src/lib/nsas/nameserver_address_store.h
index d54be84..148052d 100644
--- a/src/lib/nsas/nameserver_address_store.h
+++ b/src/lib/nsas/nameserver_address_store.h
@@ -32,11 +32,14 @@ namespace dns {
 class RRClass;
 }
 
+namespace util {
+template<class T> class LruList;
+}
+
 namespace nsas {
 
 class ResolverInterface;
 template<class T> class HashTable;
-template<class T> class LruList;
 class ZoneEntry;
 class NameserverEntry;
 class AddressRequestCallback;
@@ -112,8 +115,8 @@ protected:
     boost::shared_ptr<HashTable<NameserverEntry> > nameserver_hash_;
 
     // ... and the LRU lists
-    boost::shared_ptr<LruList<ZoneEntry> > zone_lru_;
-    boost::shared_ptr<LruList<NameserverEntry> > nameserver_lru_;
+    boost::shared_ptr<isc::util::LruList<ZoneEntry> > zone_lru_;
+    boost::shared_ptr<isc::util::LruList<NameserverEntry> > nameserver_lru_;
     // The resolver we use
 private:
     isc::resolve::ResolverInterface* resolver_;
diff --git a/src/lib/nsas/nameserver_entry.h b/src/lib/nsas/nameserver_entry.h
index 99d7ff5..fe3b23b 100644
--- a/src/lib/nsas/nameserver_entry.h
+++ b/src/lib/nsas/nameserver_entry.h
@@ -25,11 +25,12 @@
 
 #include <resolve/resolver_interface.h>
 
+#include <util/lru_list.h>
+
 #include "address_entry.h"
 #include "asiolink.h"
 #include "nsas_types.h"
 #include "hash_key.h"
-#include "lru_list.h"
 #include "fetchable.h"
 #include "nsas_entry.h"
 #include "nameserver_address.h"
diff --git a/src/lib/nsas/nsas_entry.h b/src/lib/nsas/nsas_entry.h
index f739e8d..9cbed11 100644
--- a/src/lib/nsas/nsas_entry.h
+++ b/src/lib/nsas/nsas_entry.h
@@ -19,10 +19,10 @@
 #include <iostream>
 
 #include <exceptions/exceptions.h>
+#include <util/lru_list.h>
 
 #include "hash_key.h"
 #include "hash_table.h"
-#include "lru_list.h"
 
 namespace isc {
 namespace nsas {
@@ -66,7 +66,7 @@ public:
 /// This class is inherited from boost::enable_shared_from_this class
 /// So within a member function a shared_ptr to current object can be obtained
 template <typename T>
-class NsasEntry : public boost::enable_shared_from_this <T>  {
+class NsasEntry : public boost::enable_shared_from_this <T> {
 public:
 
     /// \brief Default Constructor
@@ -93,7 +93,7 @@ public:
     /// Sets the iterator of an object and, as a side effect, marks it as valid.
     ///
     /// \param iterator Iterator of this element in the list
-    virtual void setLruIterator(typename LruList<T>::iterator iterator) {
+    virtual void setLruIterator(typename isc::util::LruList<T>::iterator iterator) {
         iterator_ = iterator;
         valid_ = true;
     }
@@ -103,7 +103,7 @@ public:
     /// \return iterator Iterator of this element in the list.
     ///
     /// \exception InvalidLruIterator Thrown if the iterator is not valid.
-    virtual typename LruList<T>::iterator getLruIterator() const {
+    virtual typename isc::util::LruList<T>::iterator getLruIterator() const {
         if (! valid_) {
             isc_throw(InvalidLruIterator,
                 "pointer of element into LRU list was not valid");
@@ -127,7 +127,7 @@ public:
     }
 
 private:
-    typename LruList<T>::iterator  iterator_;  ///< Handle into the LRU List
+    typename isc::util::LruList<T>::iterator  iterator_;  ///< Handle into the LRU List
     bool                           valid_;     ///< true if handle is valid
 };
 
diff --git a/src/lib/nsas/random_number_generator.h b/src/lib/nsas/random_number_generator.h
deleted file mode 100644
index 8884d0e..0000000
--- a/src/lib/nsas/random_number_generator.h
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#ifndef __NSAS_RANDOM_NUMBER_GENERATOR_H
-#define __NSAS_RANDOM_NUMBER_GENERATOR_H
-
-#include <algorithm>
-#include <cmath>
-#include <numeric>
-
-#include <exceptions/exceptions.h>
-
-#include <boost/random/mersenne_twister.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/uniform_real.hpp>
-#include <boost/random/variate_generator.hpp>
-
-namespace isc {
-namespace nsas {
-
-class InvalidLimits : public isc::BadValue {
-public:
-    InvalidLimits(const char* file, size_t line, const char* what) :
-        isc::BadValue(file, line, what) {}
-};
-
-class SumNotOne : public isc::BadValue {
-public:
-    SumNotOne(const char* file, size_t line, const char* what) :
-        isc::BadValue(file, line, what) {}
-};
-
-class InvalidProbValue : public isc::BadValue {
-public:
-    InvalidProbValue(const char* file, size_t line, const char* what) :
-        isc::BadValue(file, line, what) {}
-};
-
-
-
-/// \brief Uniform random integer generator
-///
-/// Generate uniformly distributed integers in range of [min, max]
-class UniformRandomIntegerGenerator{
-public:
-    /// \brief Constructor
-    ///
-    /// \param min The minimum number in the range
-    /// \param max The maximum number in the range
-    UniformRandomIntegerGenerator(int min, int max):
-        min_(std::min(min, max)), max_(std::max(min, max)),
-        dist_(min_, max_), generator_(rng_, dist_)
-    {
-        // To preserve the restriction of the underlying uniform_int class (and
-        // to retain compatibility with earlier versions of the class), we will
-        // abort if the minimum and maximum given are the wrong way round.
-        if (min > max) {
-            isc_throw(InvalidLimits, "minimum limit is greater than maximum "
-                      "when initializing UniformRandomIntegerGenerator");
-        }
-
-        // Init with the current time
-        rng_.seed(time(NULL));
-    }
-
-    /// \brief Generate uniformly distributed integer
-    int operator()() { return generator_(); }
-private:
-    /// Hide default and copy constructor
-    UniformRandomIntegerGenerator();///< Default constructor
-    UniformRandomIntegerGenerator(const UniformRandomIntegerGenerator&); ///< Copy constructor
-
-    int min_;                       ///< The minimum integer that can generate
-    int max_;                       ///< The maximum integer that can generate
-    boost::uniform_int<> dist_;     ///< Distribute uniformly.
-    boost::mt19937 rng_;            ///< Mersenne Twister: A 623-dimensionally equidistributed uniform pseudo-random number generator
-    boost::variate_generator<boost::mt19937&, boost::uniform_int<> > generator_; ///< Uniform generator
-};
-
-/// \brief Weighted random integer generator
-///
-/// Generate random integers according different probabilities
-class WeightedRandomIntegerGenerator {
-public:
-    /// \brief Constructor
-    ///
-    /// \param probabilities The probabies for all the integers, the probability must be 
-    /// between 0 and 1.0, the sum of probabilities must be equal to 1.
-    /// For example, if the probabilities contains the following values:
-    /// 0.5 0.3 0.2, the 1st integer will be generated more frequently than the
-    /// other integers and the probability is proportional to its value.
-    /// \param min The minimum integer that generated, other integers will be 
-    /// min, min + 1, ..., min + probabilities.size() - 1
-    WeightedRandomIntegerGenerator(const std::vector<double>& probabilities,
-        size_t min = 0):
-        dist_(0, 1.0), uniform_real_gen_(rng_, dist_), min_(min)
-    {
-        // The probabilities must be valid.  Checking is quite an expensive
-        // operation, so is only done in a debug build.
-        assert(areProbabilitiesValid(probabilities));
-
-        // Calculate the partial sum of probabilities
-        std::partial_sum(probabilities.begin(), probabilities.end(),
-                                     std::back_inserter(cumulative_));
-        // Init with the current time
-        rng_.seed(time(NULL));
-    }
-
-    /// \brief Default constructor
-    ///
-    WeightedRandomIntegerGenerator():
-        dist_(0, 1.0), uniform_real_gen_(rng_, dist_), min_(0)
-    {
-    }
-
-    /// \brief Reset the probabilities
-    ///
-    /// Change the weights of each integers
-    /// \param probabilities The probabies for all the integers
-    /// \param min The minimum integer that generated
-    void reset(const std::vector<double>& probabilities, size_t min = 0)
-    {
-        // The probabilities must be valid.
-        assert(areProbabilitiesValid(probabilities));
-
-        // Reset the cumulative sum
-        cumulative_.clear();
-
-        // Calculate the partial sum of probabilities
-        std::partial_sum(probabilities.begin(), probabilities.end(),
-                                     std::back_inserter(cumulative_));
-
-        // Reset the minimum integer
-        min_ = min;
-    }
-
-    /// \brief Generate weighted random integer
-    size_t operator()()
-    {
-        return std::lower_bound(cumulative_.begin(), cumulative_.end(), uniform_real_gen_()) 
-            - cumulative_.begin() + min_;
-    }
-
-private:
-    /// \brief Check the validation of probabilities vector
-    ///
-    /// The probability must be in range of [0, 1.0] and the sum must be equal
-    /// to 1.0.  Empty probabilities are also valid.
-    ///
-    /// Checking the probabilities is quite an expensive operation, so it is
-    /// only done during a debug build (via a call through assert()).  However,
-    /// instead of letting assert() call abort(), if this method encounters an
-    /// error, an exception is thrown.  This makes unit testing somewhat easier.
-    ///
-    /// \param probabilities Vector of probabilities.
-    bool areProbabilitiesValid(const std::vector<double>& probabilities) const
-    {
-        typedef std::vector<double>::const_iterator Iterator;
-        double sum = probabilities.empty() ? 1.0 : 0.0;
-        for(Iterator it = probabilities.begin(); it != probabilities.end(); ++it){
-            //The probability must be in [0, 1.0]
-            if(*it < 0.0 || *it > 1.0) {
-                isc_throw(InvalidProbValue,
-                          "probability must be in the range 0..1");
-            }
-
-            sum += *it;
-        }
-
-        double epsilon = 0.0001;
-        // The sum must be equal to 1
-       if (std::fabs(sum - 1.0) >= epsilon) {
-           isc_throw(SumNotOne, "Sum of probabilities is not equal to 1");
-       }
-
-       return true;
-    }
-
-    std::vector<double> cumulative_;    ///< Partial sum of the probabilities
-    boost::mt19937 rng_;                ///< Mersenne Twister: A 623-dimensionally equidistributed uniform pseudo-random number generator 
-    boost::uniform_real<> dist_;        ///< Uniformly distributed real numbers
-
-    // Shortcut typedef
-    // This typedef is placed directly before its use, as the sunstudio
-    // compiler could not handle it being anywhere else (don't know why)
-    typedef boost::variate_generator<boost::mt19937&, boost::uniform_real<> > UniformRealGenerator;
-    UniformRealGenerator uniform_real_gen_;     ///< Uniformly distributed random real numbers generator
-
-    size_t min_;                                ///< The minimum integer that will be generated
-};
-
-}   // namespace dns
-}   // namespace isc
-
-
-#endif//__NSAS_RANDOM_NUMBER_GENERATOR_H
diff --git a/src/lib/nsas/tests/Makefile.am b/src/lib/nsas/tests/Makefile.am
index 9d9e61c..56f36d1 100644
--- a/src/lib/nsas/tests/Makefile.am
+++ b/src/lib/nsas/tests/Makefile.am
@@ -3,6 +3,7 @@ SUBDIRS = .
 AM_CPPFLAGS  = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
 AM_CPPFLAGS += $(BOOST_INCLUDES) $(MULTITHREADING_FLAG)
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/dns -I$(top_builddir)/src/lib/dns
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/util -I$(top_builddir)/src/lib/util
 AM_CPPFLAGS += -I$(top_srcdir)/src/lib/nsas -I$(top_builddir)/src/lib/nsas
 AM_CXXFLAGS = $(B10_CXXFLAGS)
 
@@ -33,7 +34,6 @@ run_unittests_SOURCES += hash_deleter_unittest.cc
 run_unittests_SOURCES += hash_key_unittest.cc
 run_unittests_SOURCES += hash_table_unittest.cc
 run_unittests_SOURCES += hash_unittest.cc
-run_unittests_SOURCES += lru_list_unittest.cc
 run_unittests_SOURCES += nameserver_address_unittest.cc
 run_unittests_SOURCES += nameserver_address_store_unittest.cc
 run_unittests_SOURCES += nameserver_entry_unittest.cc
@@ -41,7 +41,6 @@ run_unittests_SOURCES += nsas_entry_compare_unittest.cc
 run_unittests_SOURCES += nsas_test.h
 run_unittests_SOURCES += zone_entry_unittest.cc
 run_unittests_SOURCES += fetchable_unittest.cc
-run_unittests_SOURCES += random_number_generator_unittest.cc
 
 run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
 run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
@@ -53,6 +52,7 @@ run_unittests_LDADD += -lboost_thread
 endif
 
 run_unittests_LDADD += $(top_builddir)/src/lib/nsas/libnsas.la
+run_unittests_LDADD += $(top_builddir)/src/lib/util/libutil.la
 run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la
 run_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libasiolink.la
 run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
diff --git a/src/lib/nsas/tests/hash_deleter_unittest.cc b/src/lib/nsas/tests/hash_deleter_unittest.cc
index 97fecbe..c370857 100644
--- a/src/lib/nsas/tests/hash_deleter_unittest.cc
+++ b/src/lib/nsas/tests/hash_deleter_unittest.cc
@@ -22,11 +22,11 @@
 #include <boost/lexical_cast.hpp>
 
 #include <dns/rrclass.h>
+#include <util/lru_list.h>
 
 #include "../nsas_entry.h"
 #include "../hash_table.h"
 #include "../hash_key.h"
-#include "../lru_list.h"
 #include "../hash_deleter.h"
 
 #include "nsas_test.h"
@@ -34,6 +34,7 @@
 
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util;
 
 namespace isc {
 namespace nsas {
diff --git a/src/lib/nsas/tests/lru_list_unittest.cc b/src/lib/nsas/tests/lru_list_unittest.cc
deleted file mode 100644
index e286826..0000000
--- a/src/lib/nsas/tests/lru_list_unittest.cc
+++ /dev/null
@@ -1,318 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <config.h>
-
-#include <iostream>
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include <gtest/gtest.h>
-#include <boost/lexical_cast.hpp>
-
-#include "../nsas_entry.h"
-#include "../lru_list.h"
-
-#include "nsas_test.h"
-
-using namespace std;
-
-namespace isc {
-namespace nsas {
-
-/// \brief Dropped Functor Class
-///
-/// Functor object is called when an object is dropped from the LRU list.
-/// To prove that it has run, this function does nothing more than set the
-/// MS bit on the 16-bit class value.
-class Dropped : public LruList<TestEntry>::Dropped {
-public:
-    virtual void operator()(TestEntry* entry) const {
-        entry->setClass(RRClass(entry->getClass().getCode() | 0x8000));
-    }
-};
-
-
-/// \brief Text Fixture Class
-class LruListTest : public ::testing::Test {
-protected:
-    LruListTest() :
-        entry1_(new TestEntry("alpha", RRClass::IN())),
-        entry2_(new TestEntry("beta", RRClass::CH())),
-        entry3_(new TestEntry("gamma", RRClass::HS())),
-        entry4_(new TestEntry("delta", RRClass::IN())),
-        entry5_(new TestEntry("epsilon", RRClass::HS())),
-        entry6_(new TestEntry("zeta", RRClass::CH())),
-        entry7_(new TestEntry("eta", RRClass::IN()))
-    {}
-
-    virtual ~LruListTest() 
-    {}
-
-    boost::shared_ptr<TestEntry>    entry1_;
-    boost::shared_ptr<TestEntry>    entry2_;
-    boost::shared_ptr<TestEntry>    entry3_;
-    boost::shared_ptr<TestEntry>    entry4_;
-    boost::shared_ptr<TestEntry>    entry5_;
-    boost::shared_ptr<TestEntry>    entry6_;
-    boost::shared_ptr<TestEntry>    entry7_;
-};
-
-
-// Test of the constructor
-TEST_F(LruListTest, Constructor) {
-    LruList<TestEntry>  lru(100);
-    EXPECT_EQ(100, lru.getMaxSize());
-    EXPECT_EQ(0, lru.size());
-}
-
-// Test of Get/Set the maximum number of entrys
-TEST_F(LruListTest, GetSet) {
-    LruList<TestEntry>  lru(100);
-    EXPECT_EQ(100, lru.getMaxSize());
-    lru.setMaxSize(42);
-    EXPECT_EQ(42, lru.getMaxSize());
-}
-
-// Test that adding an entry really does add an entry
-TEST_F(LruListTest, Add) {
-    LruList<TestEntry>  lru(100);
-    EXPECT_EQ(0, lru.size());
-
-    lru.add(entry1_);
-    EXPECT_EQ(1, lru.size());
-
-    lru.add(entry2_);
-    EXPECT_EQ(2, lru.size());
-}
-
-// Test that removing an entry really does remove it.
-TEST_F(LruListTest, Remove) {
-    LruList<TestEntry>  lru(100);
-    EXPECT_EQ(0, lru.size());
-
-    EXPECT_FALSE(entry1_->iteratorValid());
-    lru.add(entry1_);
-    EXPECT_TRUE(entry1_->iteratorValid());
-    EXPECT_EQ(1, lru.size());
-
-    EXPECT_FALSE(entry2_->iteratorValid());
-    lru.add(entry2_);
-    EXPECT_TRUE(entry2_->iteratorValid());
-    EXPECT_EQ(2, lru.size());
-
-    lru.remove(entry1_);
-    EXPECT_FALSE(entry1_->iteratorValid());
-    EXPECT_EQ(1, lru.size());
-}
-
-// Check that adding a new entry to a limited size list does delete the
-// oldest entry from the list.
-TEST_F(LruListTest, SizeLimit) {
-    LruList<TestEntry>  lru(3);
-    EXPECT_EQ(0, lru.size());
-
-    // Add first entry and check that the shared pointer's reference count
-    // has increased.  There will be two references: one from the "entry1_"
-    // member in the test fixture class, and one from the list.
-    EXPECT_EQ(1, entry1_.use_count());
-    lru.add(entry1_);
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(1, lru.size());
-
-    // Same for entry 2.
-    EXPECT_EQ(1, entry2_.use_count());
-    lru.add(entry2_);
-    EXPECT_EQ(2, entry2_.use_count());
-    EXPECT_EQ(2, lru.size());
-
-    // Same for entry 3.
-    EXPECT_EQ(1, entry3_.use_count());
-    lru.add(entry3_);
-    EXPECT_EQ(2, entry3_.use_count());
-    EXPECT_EQ(3, lru.size());
-
-    // Adding entry 4 should remove entry 1 from the list.  This will
-    // delete the list's shared pointer to the entry and will therefore
-    // drop the reference count back to one (from the "entry1_" member in
-    // the text fixture class).
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(1, entry4_.use_count());
-    lru.add(entry4_);
-    EXPECT_EQ(1, entry1_.use_count());
-    EXPECT_EQ(2, entry4_.use_count());
-    EXPECT_EQ(3, lru.size());
-
-    // Adding entry 5 should remove entry 2 from the list.
-    EXPECT_EQ(2, entry2_.use_count());
-    EXPECT_EQ(1, entry5_.use_count());
-    lru.add(entry5_);
-    EXPECT_EQ(1, entry2_.use_count());
-    EXPECT_EQ(2, entry5_.use_count());
-    EXPECT_EQ(3, lru.size());
-}
-
-// Check that "touching" an entry adds it to the back of the list.
-TEST_F(LruListTest, Touch) {
-
-    // Create the list
-    LruList<TestEntry>  lru(3);
-    EXPECT_EQ(0, lru.size());
-    lru.add(entry1_);
-    lru.add(entry2_);
-    lru.add(entry3_);
-
-    // Check the reference counts of the entrys and the list size
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(2, entry2_.use_count());
-    EXPECT_EQ(2, entry3_.use_count());
-    EXPECT_EQ(1, entry4_.use_count());
-    EXPECT_EQ(1, entry5_.use_count());
-    EXPECT_EQ(1, entry6_.use_count());
-    EXPECT_EQ(1, entry7_.use_count());
-    EXPECT_EQ(3, lru.size());
-
-    // "Touch" the first entry
-    lru.touch(entry1_);
-
-    // Adding two more entries should not remove the touched entry.
-    lru.add(entry4_);
-    lru.add(entry5_);
-
-    // Check the status of the entrys and the list.
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(1, entry2_.use_count());
-    EXPECT_EQ(1, entry3_.use_count());
-    EXPECT_EQ(2, entry4_.use_count());
-    EXPECT_EQ(2, entry5_.use_count());
-    EXPECT_EQ(1, entry6_.use_count());
-    EXPECT_EQ(1, entry7_.use_count());
-    EXPECT_EQ(3, lru.size());
-
-    // Now touch the entry agin to move it to the back of the list.
-    // This checks that the iterator stored in the entry as a result of the
-    // last touch operation is valid.
-    lru.touch(entry1_);
-
-    // Check this by adding two more entrys and checking reference counts
-    // to see what is stored.
-    lru.add(entry6_);
-    lru.add(entry7_);
-
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(1, entry2_.use_count());
-    EXPECT_EQ(1, entry3_.use_count());
-    EXPECT_EQ(1, entry4_.use_count());
-    EXPECT_EQ(1, entry5_.use_count());
-    EXPECT_EQ(2, entry6_.use_count());
-    EXPECT_EQ(2, entry7_.use_count());
-    EXPECT_EQ(3, lru.size());
-}
-
-// Dropped functor tests: tests that the function object is called when an
-// object expires from the list.
-TEST_F(LruListTest, Dropped) {
-
-    // Create an object with an expiration handler.
-    LruList<TestEntry> lru(3, new Dropped());
-
-    // Fill the list
-    lru.add(entry1_);
-    lru.add(entry2_);
-    lru.add(entry3_);
-
-    EXPECT_EQ(RRClass::IN(), entry1_->getClass());
-    EXPECT_EQ(RRClass::CH(), entry2_->getClass());
-
-    // Add another entry and check that the handler runs.
-    EXPECT_EQ(0, (entry1_->getClass().getCode() & 0x8000));
-    lru.add(entry4_);
-    EXPECT_NE(0, (entry1_->getClass().getCode() & 0x8000));
-
-    EXPECT_EQ(0, (entry2_->getClass().getCode() & 0x8000));
-    lru.add(entry5_);
-    EXPECT_NE(0, (entry2_->getClass().getCode() & 0x8000));
-
-    // Delete an entry and check that the handler does not run. 
-    EXPECT_EQ(0, (entry3_->getClass().getCode() & 0x8000));
-    lru.remove(entry3_);
-    EXPECT_EQ(0, (entry3_->getClass().getCode() & 0x8000));
-}
-
-// Clear functor tests: tests whether all the elements in
-// the list are dropped properly and the size of list is
-// set to 0.
-TEST_F(LruListTest, Clear) {
-    // Create an object with an expiration handler.
-    LruList<TestEntry> lru(3, new Dropped());
-
-    // Fill the list
-    lru.add(entry1_);
-    lru.add(entry2_);
-    lru.add(entry3_);
-
-    EXPECT_EQ(RRClass::IN(), entry1_->getClass());
-    EXPECT_EQ(RRClass::CH(), entry2_->getClass());
-    EXPECT_EQ(RRClass::HS(), entry3_->getClass());
-
-    EXPECT_EQ(0, (entry1_->getClass().getCode() & 0x8000));
-    EXPECT_EQ(0, (entry2_->getClass().getCode() & 0x8000));
-    EXPECT_EQ(0, (entry3_->getClass().getCode() & 0x8000));
-
-    // Clear the lru list, and check the drop handler run
-    lru.clear();
-    EXPECT_NE(0, (entry1_->getClass().getCode() & 0x8000));
-    EXPECT_NE(0, (entry2_->getClass().getCode() & 0x8000));
-    EXPECT_NE(0, (entry3_->getClass().getCode() & 0x8000));
- 
-    EXPECT_EQ(0, lru.size());
-}
-
-// Miscellaneous tests - pathological conditions
-TEST_F(LruListTest, Miscellaneous) {
-
-    // Zero size list should not allow entrys to be added
-    LruList<TestEntry> lru_1(0);
-    lru_1.add(entry1_);
-    EXPECT_EQ(0, lru_1.size());
-    EXPECT_EQ(1, entry1_.use_count());
-
-    // Removing an uninserted entry should not affect the list.
-    LruList<TestEntry> lru_2(100);
-    lru_2.add(entry1_);
-    lru_2.add(entry2_);
-    lru_2.add(entry3_);
-    EXPECT_EQ(3, lru_2.size());
-
-    lru_2.remove(entry4_);
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(2, entry2_.use_count());
-    EXPECT_EQ(2, entry3_.use_count());
-    EXPECT_EQ(1, entry4_.use_count());
-    EXPECT_EQ(1, entry5_.use_count());
-    EXPECT_EQ(3, lru_2.size());
-
-    // Touching an uninserted entry should not affect the list.
-    lru_2.touch(entry5_);
-    EXPECT_EQ(2, entry1_.use_count());
-    EXPECT_EQ(2, entry2_.use_count());
-    EXPECT_EQ(2, entry3_.use_count());
-    EXPECT_EQ(1, entry4_.use_count());
-    EXPECT_EQ(1, entry5_.use_count());
-    EXPECT_EQ(3, lru_2.size());
-}
-
-}   // namespace nsas
-}   // namespace isc
diff --git a/src/lib/nsas/tests/nameserver_address_store_unittest.cc b/src/lib/nsas/tests/nameserver_address_store_unittest.cc
index 9133daf..d389063 100644
--- a/src/lib/nsas/tests/nameserver_address_store_unittest.cc
+++ b/src/lib/nsas/tests/nameserver_address_store_unittest.cc
@@ -40,6 +40,7 @@
 #include "nsas_test.h"
 
 using namespace isc::dns;
+using namespace isc::util;
 using namespace std;
 
 namespace isc {
diff --git a/src/lib/nsas/tests/nsas_test.h b/src/lib/nsas/tests/nsas_test.h
index 7500fc7..0bdcd4b 100644
--- a/src/lib/nsas/tests/nsas_test.h
+++ b/src/lib/nsas/tests/nsas_test.h
@@ -26,8 +26,8 @@
 
 #include <config.h>
 
+#include <util/io/buffer.h>
 #include <dns/message.h>
-#include <dns/buffer.h>
 #include <dns/rdata.h>
 #include <dns/rrtype.h>
 #include <dns/rrttl.h>
@@ -40,6 +40,7 @@
 
 using namespace isc::dns::rdata;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
     MessagePtr
diff --git a/src/lib/nsas/tests/random_number_generator_unittest.cc b/src/lib/nsas/tests/random_number_generator_unittest.cc
deleted file mode 100644
index 85cbcbf..0000000
--- a/src/lib/nsas/tests/random_number_generator_unittest.cc
+++ /dev/null
@@ -1,309 +0,0 @@
-// Copyright (C) 2010  Internet Systems Consortium, Inc. ("ISC")
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-// PERFORMANCE OF THIS SOFTWARE.
-
-#include <config.h>
-
-#include <gtest/gtest.h>
-#include <boost/shared_ptr.hpp>
-
-#include <algorithm>
-#include <iostream>
-#include <vector>
-
-#include "random_number_generator.h"
-
-namespace isc {
-namespace nsas {
-
-using namespace std;
-
-/// \brief Test Fixture Class for uniform random number generator
-///
-/// The hard part for this test is how to test that the number is random?
-/// and how to test that the number is uniformly distributed? 
-/// Or maybe we can trust the boost implementation
-class UniformRandomIntegerGeneratorTest : public ::testing::Test {
-public:
-    UniformRandomIntegerGeneratorTest():
-        gen_(min_, max_)
-    {
-    }
-    virtual ~UniformRandomIntegerGeneratorTest(){}
-
-    int gen() { return gen_(); }
-    int max() const { return max_; }
-    int min() const { return min_; }
-
-private:
-    UniformRandomIntegerGenerator gen_;
-
-    const static int min_ = 1;
-    const static int max_ = 10;
-};
-
-// Some validation tests will incur performance penalty, so the tests are
-// made only in "debug" version with assert(). But if NDEBUG is defined
-// the tests will be failed since assert() is non-op in non-debug version.
-// The "#ifndef NDEBUG" is added to make the tests be performed only in
-// non-debug environment.
-// Note: the death test is not supported by all platforms.  We need to
-// compile tests using it selectively.
-#if !defined(NDEBUG)
-// Test of the constructor
-TEST_F(UniformRandomIntegerGeneratorTest, Constructor) {
-    // The range must be min<=max
-    ASSERT_THROW(UniformRandomIntegerGenerator(3, 2), InvalidLimits);
-}
-#endif
-
-// Test of the generated integers are in the range [min, max]
-TEST_F(UniformRandomIntegerGeneratorTest, IntegerRange) {
-    vector<int> numbers;
-
-    // Generate a lot of random integers
-    for (int i = 0; i < max()*10; ++i) {
-        numbers.push_back(gen());
-    }
-
-    // Remove the duplicated values
-    sort(numbers.begin(), numbers.end());
-    vector<int>::iterator it = unique(numbers.begin(), numbers.end());
-
-    // make sure the numbers are in range [min, max]
-    ASSERT_EQ(it - numbers.begin(), max() - min() + 1); 
-}
-
-/// \brief Test Fixture Class for weighted random number generator
-class WeightedRandomIntegerGeneratorTest : public ::testing::Test {
-public:
-    WeightedRandomIntegerGeneratorTest()
-    { }
-
-    virtual ~WeightedRandomIntegerGeneratorTest()
-    { }
-};
-
-// Test of the weighted random number generator constructor
-TEST_F(WeightedRandomIntegerGeneratorTest, Constructor) {
-    vector<double> probabilities;
-
-    // If no probabilities is provided, the smallest integer will always be generated
-    WeightedRandomIntegerGenerator gen(probabilities, 123);
-    for (int i = 0; i < 100; ++i) {
-        ASSERT_EQ(gen(), 123);
-    }
-
-/// Some validation tests will incur performance penalty, so the tests are
-/// made only in "debug" version with assert(). But if NDEBUG is defined
-/// the tests will be failed since assert() is non-op in non-debug version.
-/// The "#ifndef NDEBUG" is added to make the tests be performed only in
-/// non-debug environment.
-#if !defined(NDEBUG)
-    //The probability must be >= 0
-    probabilities.push_back(-0.1);
-    probabilities.push_back(1.1);
-    ASSERT_THROW(WeightedRandomIntegerGenerator gen2(probabilities),
-                 InvalidProbValue);
-
-    //The probability must be <= 1.0
-    probabilities.clear();
-    probabilities.push_back(0.1);
-    probabilities.push_back(1.1);
-    ASSERT_THROW(WeightedRandomIntegerGenerator gen3(probabilities),
-                 InvalidProbValue);
-
-    //The sum must be equal to 1.0
-    probabilities.clear();
-    probabilities.push_back(0.2);
-    probabilities.push_back(0.9);
-    ASSERT_THROW(WeightedRandomIntegerGenerator gen4(probabilities), SumNotOne);
-
-    //The sum must be equal to 1.0
-    probabilities.clear();
-    probabilities.push_back(0.3);
-    probabilities.push_back(0.2);
-    probabilities.push_back(0.1);
-    ASSERT_THROW(WeightedRandomIntegerGenerator gen5(probabilities), SumNotOne);
-#endif
-}
-
-// Test the randomization of the generator
-TEST_F(WeightedRandomIntegerGeneratorTest, WeightedRandomization) {
-    const int repeats = 100000;
-    // We repeat the simulation for N=repeats times
-    // for each probability p, its average is mu = N*p
-    // variance sigma^2 = N * p * (1-p)
-    // sigma = sqrt(N*2/9)
-    // we should make sure that mu - 4sigma < count < mu + 4sigma
-    // which means for 99.99366% of the time this should be true
-    {
-        double p = 0.5;
-        vector<double> probabilities;
-        probabilities.push_back(p);
-        probabilities.push_back(p);
-
-        // Uniformly generated integers
-        WeightedRandomIntegerGenerator gen(probabilities);
-        int c1 = 0;
-        int c2 = 0;
-        for (int i = 0; i < repeats; ++i){
-            int n = gen();
-            if (n == 0) {
-                ++c1;
-            } else if (n == 1) {
-                ++c2;
-            }
-        }
-        double mu = repeats * p;
-        double sigma = sqrt(repeats * p * (1 - p));
-        ASSERT_TRUE(fabs(c1 - mu) < 4*sigma);
-        ASSERT_TRUE(fabs(c2 - mu) < 4*sigma);
-    }
-
-    {
-        vector<double> probabilities;
-        int c1 = 0;
-        int c2 = 0;
-        double p1 = 0.2;
-        double p2 = 0.8;
-        probabilities.push_back(p1);
-        probabilities.push_back(p2);
-        WeightedRandomIntegerGenerator gen(probabilities);
-        for (int i = 0; i < repeats; ++i) {
-            int n = gen();
-            if (n == 0) {
-                ++c1;
-            } else if (n == 1) {
-                ++c2;
-            }
-        }
-        double mu1 = repeats * p1;
-        double mu2 = repeats * p2;
-        double sigma1 = sqrt(repeats * p1 * (1 - p1));
-        double sigma2 = sqrt(repeats * p2 * (1 - p2));
-        ASSERT_TRUE(fabs(c1 - mu1) < 4*sigma1);
-        ASSERT_TRUE(fabs(c2 - mu2) < 4*sigma2);
-    }
-
-    {
-        vector<double> probabilities;
-        int c1 = 0;
-        int c2 = 0;
-        double p1 = 0.8;
-        double p2 = 0.2;
-        probabilities.push_back(p1);
-        probabilities.push_back(p2);
-        WeightedRandomIntegerGenerator gen(probabilities);
-        for (int i = 0; i < repeats; ++i) {
-            int n = gen();
-            if (n == 0) {
-                ++c1;
-            } else if (n == 1) {
-                ++c2;
-            }
-        }
-        double mu1 = repeats * p1;
-        double mu2 = repeats * p2;
-        double sigma1 = sqrt(repeats * p1 * (1 - p1));
-        double sigma2 = sqrt(repeats * p2 * (1 - p2));
-        ASSERT_TRUE(fabs(c1 - mu1) < 4*sigma1);
-        ASSERT_TRUE(fabs(c2 - mu2) < 4*sigma2);
-    }
-
-    {
-        vector<double> probabilities;
-        int c1 = 0;
-        int c2 = 0;
-        int c3 = 0;
-        double p1 = 0.5;
-        double p2 = 0.25;
-        double p3 = 0.25;
-        probabilities.push_back(p1);
-        probabilities.push_back(p2);
-        probabilities.push_back(p3);
-        WeightedRandomIntegerGenerator gen(probabilities);
-        for (int i = 0; i < repeats; ++i){
-            int n = gen();
-            if (n == 0) {
-                ++c1;
-            } else if (n == 1) {
-                ++c2;
-            } else if (n == 2) {
-                ++c3;
-            }
-        }
-        double mu1 = repeats * p1;
-        double mu2 = repeats * p2;
-        double mu3 = repeats * p3;
-        double sigma1 = sqrt(repeats * p1 * (1 - p1));
-        double sigma2 = sqrt(repeats * p2 * (1 - p2));
-        double sigma3 = sqrt(repeats * p3 * (1 - p3));
-        ASSERT_TRUE(fabs(c1 - mu1) < 4*sigma1);
-        ASSERT_TRUE(fabs(c2 - mu2) < 4*sigma2);
-        ASSERT_TRUE(fabs(c3 - mu3) < 4*sigma3);
-    }
-}
-
-// Test the reset function of generator
-TEST_F(WeightedRandomIntegerGeneratorTest, ResetProbabilities) {
-    const int repeats = 100000;
-    vector<double> probabilities;
-    int c1 = 0;
-    int c2 = 0;
-    double p1 = 0.8;
-    double p2 = 0.2;
-    probabilities.push_back(p1);
-    probabilities.push_back(p2);
-    WeightedRandomIntegerGenerator gen(probabilities);
-    for (int i = 0; i < repeats; ++i) {
-        int n = gen();
-        if (n == 0) {
-            ++c1;
-        } else if (n == 1) {
-            ++c2;
-        }
-    }
-    double mu1 = repeats * p1;
-    double mu2 = repeats * p2;
-    double sigma1 = sqrt(repeats * p1 * (1 - p1));
-    double sigma2 = sqrt(repeats * p2 * (1 - p2));
-    ASSERT_TRUE(fabs(c1 - mu1) < 4*sigma1);
-    ASSERT_TRUE(fabs(c2 - mu2) < 4*sigma2);
-
-    // Reset the probabilities
-    probabilities.clear();
-    c1 = c2 = 0;
-    p1 = 0.2;
-    p2 = 0.8;
-    probabilities.push_back(p1);
-    probabilities.push_back(p2);
-    gen.reset(probabilities);
-    for (int i = 0; i < repeats; ++i) {
-        int n = gen();
-        if (n == 0) {
-            ++c1;
-        } else if (n == 1) {
-            ++c2;
-        }
-    }
-    mu1 = repeats * p1;
-    mu2 = repeats * p2;
-    sigma1 = sqrt(repeats * p1 * (1 - p1));
-    sigma2 = sqrt(repeats * p2 * (1 - p2));
-    ASSERT_TRUE(fabs(c1 - mu1) < 4*sigma1);
-    ASSERT_TRUE(fabs(c2 - mu2) < 4*sigma2);
-}
-
-} // namespace nsas
-} // namespace isc
diff --git a/src/lib/nsas/tests/zone_entry_unittest.cc b/src/lib/nsas/tests/zone_entry_unittest.cc
index 34f995c..c2110d1 100644
--- a/src/lib/nsas/tests/zone_entry_unittest.cc
+++ b/src/lib/nsas/tests/zone_entry_unittest.cc
@@ -36,6 +36,7 @@ using namespace isc::nsas;
 using namespace asiolink;
 using namespace std;
 using namespace isc::dns;
+using namespace isc::util;
 
 namespace {
 
diff --git a/src/lib/nsas/zone_entry.cc b/src/lib/nsas/zone_entry.cc
index 3af70a8..878f193 100644
--- a/src/lib/nsas/zone_entry.cc
+++ b/src/lib/nsas/zone_entry.cc
@@ -31,7 +31,9 @@ using namespace std;
 
 namespace isc {
 
-using namespace dns;
+using namespace isc::dns;
+using namespace isc::util;
+using namespace isc::util::random;
 
 namespace nsas {
 
diff --git a/src/lib/nsas/zone_entry.h b/src/lib/nsas/zone_entry.h
index 92ac75a..acd769b 100644
--- a/src/lib/nsas/zone_entry.h
+++ b/src/lib/nsas/zone_entry.h
@@ -25,13 +25,14 @@
 
 #include <resolve/resolver_interface.h>
 
-#include "locks.h"
+#include <util/locks.h>
+#include <util/random/random_number_generator.h>
+
 #include "hash_key.h"
 #include "nsas_entry.h"
 #include "asiolink.h"
 #include "fetchable.h"
 #include "nsas_types.h"
-#include "random_number_generator.h"
 #include "glue_hints.h"
 
 namespace isc {
@@ -72,7 +73,7 @@ public:
     ZoneEntry(isc::resolve::ResolverInterface* resolver,
         const std::string& name, const isc::dns::RRClass& class_code,
         boost::shared_ptr<HashTable<NameserverEntry> > nameserver_table,
-        boost::shared_ptr<LruList<NameserverEntry> > nameserver_lru);
+        boost::shared_ptr<isc::util::LruList<NameserverEntry> > nameserver_lru);
 
     /// \return Name of the zone
     std::string getName() const {
@@ -161,7 +162,7 @@ private:
     // We store the nameserver table and lru, so we can look up when there's
     // update
     boost::shared_ptr<HashTable<NameserverEntry> > nameserver_table_;
-    boost::shared_ptr<LruList<NameserverEntry> > nameserver_lru_;
+    boost::shared_ptr<isc::util::LruList<NameserverEntry> > nameserver_lru_;
     // Resolver callback class, documentation with the class declaration
     class ResolverCallback;
     // It has direct access to us
@@ -182,7 +183,7 @@ private:
     void insertCallback(NameserverPtr nameserver, AddressFamily family);
     // A random generator for this zone entry
     // TODO: A more global one? Per thread one?
-    WeightedRandomIntegerGenerator address_selector;
+    isc::util::random::WeightedRandomIntegerGenerator address_selector;
 };
 
 } // namespace nsas
diff --git a/src/lib/resolve/recursive_query.cc b/src/lib/resolve/recursive_query.cc
index 0ee5813..af6cc2d 100644
--- a/src/lib/resolve/recursive_query.cc
+++ b/src/lib/resolve/recursive_query.cc
@@ -42,6 +42,7 @@
 
 using isc::log::dlog;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace asiolink {
 
diff --git a/src/lib/resolve/recursive_query.h b/src/lib/resolve/recursive_query.h
index 1180d55..4f049a6 100644
--- a/src/lib/resolve/recursive_query.h
+++ b/src/lib/resolve/recursive_query.h
@@ -17,7 +17,7 @@
 
 #include <asiolink/dns_service.h>
 #include <asiolink/dns_server.h>
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <nsas/nameserver_address_store.h>
 #include <cache/resolver_cache.h>
 
@@ -99,7 +99,7 @@ public:
     /// \param server A pointer to the \c DNSServer object handling the client
     void resolve(const isc::dns::Question& question,
                  isc::dns::MessagePtr answer_message,
-                 isc::dns::OutputBufferPtr buffer,
+                 isc::util::io::OutputBufferPtr buffer,
                  DNSServer* server);
 
     /// \brief Set Test Server
diff --git a/src/lib/resolve/tests/recursive_query_unittest.cc b/src/lib/resolve/tests/recursive_query_unittest.cc
index ab1ffa3..868d86c 100644
--- a/src/lib/resolve/tests/recursive_query_unittest.cc
+++ b/src/lib/resolve/tests/recursive_query_unittest.cc
@@ -30,7 +30,7 @@
 #include <dns/tests/unittest_util.h>
 #include <dns/rcode.h>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/message.h>
 
 #include <nsas/nameserver_address_store.h>
@@ -56,6 +56,7 @@ using isc::UnitTestUtil;
 using namespace std;
 using namespace asiolink;
 using namespace isc::dns;
+using namespace isc::util::io;
 
 namespace {
 const char* const TEST_SERVER_PORT = "53535";
@@ -319,7 +320,7 @@ protected:
         boost::shared_ptr<asiolink::IOMessage> io_message_;
         isc::dns::MessagePtr message_;
         isc::dns::MessagePtr answer_message_;
-        isc::dns::OutputBufferPtr respbuf_;
+        isc::util::io::OutputBufferPtr respbuf_;
 
         // Callback functions provided by the caller
         const SimpleCallback* checkin_;
diff --git a/src/lib/resolve/tests/recursive_query_unittest_2.cc b/src/lib/resolve/tests/recursive_query_unittest_2.cc
index 643c5a3..a0048ae 100644
--- a/src/lib/resolve/tests/recursive_query_unittest_2.cc
+++ b/src/lib/resolve/tests/recursive_query_unittest_2.cc
@@ -23,7 +23,9 @@
 
 #include <asio.hpp>
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
+#include <util/io/io_utilities.h>
+
 #include <dns/question.h>
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
@@ -35,7 +37,6 @@
 #include <dns/rrttl.h>
 #include <dns/rdata.h>
 
-#include <asiolink/asiolink_utilities.h>
 #include <asiolink/dns_service.h>
 #include <asiolink/io_address.h>
 #include <asiolink/io_endpoint.h>
@@ -48,6 +49,7 @@ using namespace asio;
 using namespace asio::ip;
 using namespace isc::dns;
 using namespace isc::dns::rdata;
+using namespace isc::util::io;
 using namespace isc::resolve;
 using namespace std;
 
diff --git a/src/lib/testutils/srv_test.cc b/src/lib/testutils/srv_test.cc
index 4fec4ca..fe5a742 100644
--- a/src/lib/testutils/srv_test.cc
+++ b/src/lib/testutils/srv_test.cc
@@ -26,6 +26,7 @@
 
 using namespace isc::dns;
 using namespace asiolink;
+using namespace isc::util::io;
 
 namespace isc {
 namespace testutils {
@@ -203,7 +204,7 @@ SrvTestBase::ednsBadVers() {
                 opcode.getCode(), QR_FLAG, 1, 0, 0, 1);
     EXPECT_FALSE(parse_message->getEDNS()); // EDNS isn't added at this point
 
-    isc::dns::InputBuffer ib(response_obuffer->getData(),
+    InputBuffer ib(response_obuffer->getData(),
                              response_obuffer->getLength());
     isc::dns::Message parsed(isc::dns::Message::PARSE);
     parsed.fromWire(ib);
diff --git a/src/lib/testutils/srv_test.h b/src/lib/testutils/srv_test.h
index 7361a76..85e4432 100644
--- a/src/lib/testutils/srv_test.h
+++ b/src/lib/testutils/srv_test.h
@@ -12,7 +12,7 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <dns/buffer.h>
+#include <util/io/buffer.h>
 #include <dns/name.h>
 #include <dns/message.h>
 #include <dns/messagerenderer.h>
@@ -99,9 +99,9 @@ protected:
     asiolink::IOSocket* io_sock;
     asiolink::IOMessage* io_message;
     const asiolink::IOEndpoint* endpoint;
-    isc::dns::OutputBuffer request_obuffer;
+    isc::util::io::OutputBuffer request_obuffer;
     isc::dns::MessageRenderer request_renderer;
-    isc::dns::OutputBufferPtr response_obuffer;
+    isc::util::io::OutputBufferPtr response_obuffer;
     std::vector<uint8_t> data;
 };
 } // end of namespace testutils




More information about the bind10-changes mailing list