tools: Add security tools; Add waf build options for tools.

Change-Id: I058510acc1a0361fed43d94c7a0b545416a9efb4
diff --git a/tools/ndnsec-get-default.cpp b/tools/ndnsec-get-default.cpp
new file mode 100644
index 0000000..d263d2b
--- /dev/null
+++ b/tools/ndnsec-get-default.cpp
@@ -0,0 +1,126 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
+#include <iostream>
+#include <fstream>
+
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <cryptopp/base64.h>
+
+#include "security/key-chain.hpp"
+
+using namespace ndn;
+namespace po = boost::program_options;
+
+int main(int argc, char** argv)	
+{
+  bool getDefaultId = true;
+  bool getDefaultKey = false;
+  bool getDefaultCert = false;
+  bool quiet = false;
+  std::string idName;
+  std::string keyName;
+
+  po::options_description desc("General Usage\n  ndn-get-default [-h] [-K|C] [-i identity|-k key]\nGeneral options");
+  desc.add_options()
+    ("help,h", "produce help message")
+    ("default_key,K", "get default key")
+    ("default_cert,C", "get default certificate")
+    ("identity,i", po::value<std::string>(&idName), "target identity")
+    ("key,k", po::value<std::string>(&keyName), "target key")
+    ("quiet,q", "don't output trailing newline")
+    ;
+
+  po::variables_map vm;
+  po::store(po::parse_command_line(argc, argv, desc), vm);
+  po::notify(vm);
+
+  if (vm.count("help")) 
+    {
+      std::cerr << desc << std::endl;;
+      return 1;
+    }
+
+  if(vm.count("default_cert"))
+    {
+      getDefaultCert = true;
+      getDefaultId = false;
+    }
+  else if(vm.count("default_key"))
+    {
+      getDefaultKey = true;
+      getDefaultId = false;
+    }
+
+  if(vm.count("quiet"))
+    {
+      quiet = true;
+    }
+  
+  KeyChain keyChain;
+  bool ok = false;
+
+  if(vm.count("key"))
+    {
+      Name keyNdnName(keyName);
+      if(getDefaultCert)
+	{
+	  std::cout << keyChain.getDefaultCertificateNameForKey(keyNdnName);
+          if (!quiet) std::cout << std::endl;
+	  return 0;
+	}
+      return 1;
+    }
+  else if(vm.count("identity"))
+    {
+      Name idNdnName(idName);
+
+      if(getDefaultKey)
+	{
+	  std::cout << keyChain.getDefaultKeyNameForIdentity(idNdnName);
+          if (!quiet) std::cout << std::endl;
+	  return 0;
+	}
+      if(getDefaultCert)
+	{
+	  std::cout << keyChain.getDefaultCertificateNameForIdentity(idNdnName);
+          if (!quiet) std::cout << std::endl;
+	  return 0;
+	}
+      return 1;
+    }
+  else
+    {
+      Name idNdnName = keyChain.getDefaultIdentity();
+      if(getDefaultId)
+	{
+	  std::cout << idNdnName;
+          if (!quiet) std::cout << std::endl;
+	  return 0;
+	}
+      if(getDefaultKey)
+	{
+	  std::cout << keyChain.getDefaultKeyNameForIdentity(idNdnName);
+          if (!quiet) std::cout << std::endl;
+	  return 0;
+	}
+      if(getDefaultCert)
+	{
+	  std::cout << keyChain.getDefaultCertificateNameForIdentity(idNdnName);
+          if (!quiet) std::cout << std::endl;
+	  return 0;
+	}
+    }
+
+
+}