+
+#include <security_utilities/utilities.h>
+#include <cstdarg>
+#include <typeinfo>
+
+namespace Security {
+namespace Debug {
+
+
+//
+// Debug-dumping functions always exist. They may be stubs depending on build options.
+//
+bool dumping(const char *scope);
+void dump(const char *format, ...) __attribute((format(printf,1,2)));
+void dumpData(const void *data, size_t length);
+void dumpData(const char *title, const void *data, size_t length);
+template <class Data> inline void dumpData(const Data &obj)
+{ dumpData(obj.data(), obj.length()); }
+template <class Data> inline void dumpData(const char *title, const Data &obj)
+{ dumpData(title, obj.data(), obj.length()); }
+
+
+//
+// The following functions perform runtime recovery of type names.
+// This is meant for debugging ONLY. Don't even THINK of depending
+// on this for program correctness. For all you know, we may replace
+// all those names with "XXX" tomorrow.
+//
+string makeTypeName(const type_info &info);
+
+template <class Object>
+string typeName(const Object &obj)